我正在学习Go,我认为使用Ragel和Go实现我自己的HTTP 1.1解析器是一个很好的练习。我认为看看Mongrel2的代码库以了解它是如何完成的,这是一个好主意。
Mongrel的HTTP解析器的代码是here,我很难理解突出显示的函数http11_parser.c,它似乎在进行实际的HTTP处理。
我的问题如下:
PS。关于Q2,我可以找到使用goto的唯一解释是here。请注意,我对C的经验是0.5(从1到10的比例),这解释了为什么我难以理解这段代码!
答案 0 :(得分:1)
突出显示的功能由程序生成。请注意文件顶部附近的注释:
/** Machine **/
#line 254 "src/http11/http11_parser.rl"
因此,您应该查看http11_parser.rl
文件以查看生成此代码的输入。它是HTTP / 1.1请求的词法分析器。
该功能背后的想法是解析HTTP / 1.1请求行和后面的标题。不要试图密切关注它,关注r1
文件的模式匹配规则,并将其与HTTP/1.1 RFC中的规范进行比较。