- 论坛徽章:
- 0
|
如何处理http协议并不难,详细看一下对应的两个主要文档rfc1945和rfc2616,然后再根据需要可看一下其它相关rfc文档即可。
nginx对http协议的解析处理没有用到什么先进的东东,主要是根据标准文档做状态推进(具体通过enum数据结构来标记),比如请求头的解析:
enum {
sw_start = 0,
sw_method,
sw_spaces_before_uri,
sw_schema,
sw_schema_slash,
sw_schema_slash_slash,
sw_host_start,
sw_host,
sw_host_end,
sw_host_ip_literal,
sw_port,
sw_host_http_09,
sw_after_slash_in_uri,
sw_check_uri,
sw_check_uri_http_09,
sw_uri,
sw_http_09,
sw_http_H,
sw_http_HT,
sw_http_HTT,
sw_http_HTTP,
sw_first_major_digit,
sw_major_digit,
sw_first_minor_digit,
sw_minor_digit,
sw_spaces_after_digit,
sw_almost_done
} state;
上面对应这样的情况:GET / HTTP/1.1
enum {
sw_start = 0,
sw_name,
sw_space_before_value,
sw_value,
sw_space_after_value,
sw_ignore_line,
sw_almost_done,
sw_header_almost_done
} state;
上面对应这样的情况:Accept:text/css,*/*;q=0.1
|
|