nginx的请求接收流程(一)

今年我们组计划写一本nginx模块开发以及原理解析方面的书,整本书是以open book的形式在网上会定时的更新,网址为http://tengine.taobao.org/book/index.html。本书分析的nginx源码版本为1.2.0,环境为linux,事件处理模型为epoll,大部分分析流程都基于以上假设。我会负责其中一些章节的编写,所以打算在这里写一系列我负责章节内容相关的文章(主要包括nginx各phase模块的开发,nginx请求的处理流程等)。本篇文章主要会介绍nginx中请求的接收流程,包括请求头的解析和请求体的读取流程。


首先介绍一下rfc2616中定义的http请求基本格式:

Request = Request-Line 
	  *(( general-header         
           | request-header          
           | entity-header ) CRLF)  
          CRLF
          [ message-body ]   

 

第一行是请求行(request line),用来说明请求方法,要访问的资源以及所使用的HTTP版本:

Request-Line   = Method SP Request-URI SP HTTP-Version CRLF

请求方法(Method)的定义如下,其中最常用的是GET,POST方法:

Method = "OPTIONS" 
| "GET" 
| "HEAD" 
| "POST" 
| "PUT" 
| "DELETE" 
| "TRACE" 
| "CONNECT" 
| extension-method 
extension-method = token


要访问的资源由统一资源地位符URI(Uniform Resource Identifier)确定,它的一个比较通用的组成格式(rfc2396)如下:

<scheme>://<authority><path>?<query> 

一般来说根据请求方法(Method)的不同,请求URI的格式会有所不同,通常只需写出path和query部分。

http版本(version)定义如下,现在用的一般为1.0和1.1版本:

HTTP/<major>.<minor>


请求行的下一行则是请求头,rfc2616中定义了3种不同
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值