请求头:
GET /?cachebust=20141231 HTTP/1.1
Host: i.firefoxchina.cn
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: Hm_lvt_dd4738b5fb302cb062ef19107df5d2e4=1439204216,1439204339,1439204352,1439204527; Hm_lpvt_dd4738b5fb302cb062ef19107df5d2e4=1439213544
Connection: keep-alive
//如果是post方法,附加请求体
响应头:
HTTP/1.1 200 OK
Expires: Mon, 10 Aug 2015 14:00:22 GMT
Date: Mon, 10 Aug 2015 13:45:22 GMT
Server: nginx
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Cache-Control: max-age=900
content-security-policy: default-src 'self
Content-Encoding: gzip
Age: 791
X-Via: 1.1 lf156:88 (Cdn Cache Server V2.0), 1.1 jchwt16:7 (Cdn Cache Server V2.0)
Connection: keep-alive
http请求是典型的请求-响应类型的的网络协议。我们在分析请求行与请求头,以及响应行与响应头时,往往是一行一行的进行处理。如果我们自己来写一个http服务器,通常在一个连接建立好后(客户端与服务器经过三次握手 ),客户端会发送http请求过来。然后服务器读取第一行数据,分析出
请求行中包含的method、uri、http_version信息。
然后再一行一行处理请求头,并根据请求method与请求头的信息来决定是否有请求体以及请求体的长度,然后再去读取请求体。得到请求后,我们处理请求产生需要输出的数据,然后再生成响应行,响应头以及响应体。在将响应发送给客户端之后,一个完整的请求就处理完了。当然这是最简单的webserver的处理方式。
摘自
http://tengine.taobao.org/book/index.html?highlight=nginxhttp://