gpt4 book ai didi

c - 混淆的 HTTP 解析器?

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:10:24 24 4
gpt4 key购买 nike

我正在学习 Go,我认为使用 Ragel 和 Go 实现我自己的 HTTP 1.1 解析器是一个很好的练习。我认为查看 Mongrel2 的代码库以了解它是如何完成的是个好主意。

Mongrel 的 HTTP 解析器的代码是 here我很难理解突出显示的函数 http11_parser.c这似乎在进行实际的 HTTP 处理。

我的问题如下:

  1. 简单来说,实现背后的基本理念是什么?代码的作用是什么?
  2. 假设有惯用的 C 这样的东西,这段代码是它的一个很好的例子吗?如果不是,是否有所有这些嵌套 if 和开关的 goto 的原因?

附言。关于 Q2,我能找到的使用 goto 的唯一解释是 here .请注意,我使用 C 的经验是 0.5(从 1 到 10),这解释了为什么我很难理解这段代码!

最佳答案

突出显示的函数是由程序生成的。请注意文件顶部附近的注释:

/** Machine **/


#line 254 "src/http11/http11_parser.rl"

所以,你应该看看 http11_parser.rl文件以查看生成此代码的输入。它是 HTTP/1.1 请求的词法分析器。

该函数背后的想法是解析 HTTP/1.1 请求行和后面的 header 。不要试图紧紧跟随它,关注r1文件的模式匹配规则,并与HTTP/1.1 RFC中的规范进行比较。 .

关于c - 混淆的 HTTP 解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17182125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com