c - 混淆的 HTTP 解析器?

标签 c http mongrel2

我正在学习 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/

相关文章:

c - 将 char * 数组转换为 int 和 float 的最有效方法是什么?

c - Mac OS X 上由 pclose() 引起的 Valgrind 错误

c - 使用一个函数作为另一个函数的参数时的“error: invalid use of void expression”

java - 什么是 Java 等同于使用 https ://fcm. googleapis.com/fcm/send REST Api

css - @fontface在http://www.domain.com上有效,但在http://domain.com上无效

ruby - 在 Mongrel 处理程序的 URI 中使用正则表达式

web-applications - Mongrel2 与 NGINX+ZeroMQ?

客户端和服务器通信