一、HTTP的Request/Response
先看
Request
消息(客户端发送)的结构, Request 消息分为3部分
第一部分叫请求行(Request line), 第二部分叫请求头(Request header),第三部分是报文主体(body). header和body之间有个空行。
请求行 = 请求方法 + 请求URI + HTTP版本号
再看
Response
消息(服务器端发送)的结构,Response消息分为3部分
第一部分叫状态行,第二部分叫响应头,第三部分是响应主体,header和body之间有个空行。
状态行 = HTTP版本号 + 状态码 + 原因短语
当使用的是
GET
方法的时候, body是为空的。
比如如下图
我们打开Fiddler 捕捉一个网页的Request 然后分析下它的结构, 在Inspectors tab下以
Raw
的方式可以看到完整的Request的消息
二、HTTP首部
一般有4种首部,分别是通用首部、请求首部、响应首部和实体首部。
1. 通用首部字段
Cache-Control
作用:
这个是非常重要的规则
,用于控制缓存的行为。 这个用来指定Response-Request遵循的
缓存机制
。各个指令含义如下
Cache-Control:max-age=10
强缓存,单位秒
Cache-Control:public
可以被任何对象所缓存(包括:发送请求的客户端,代理服务器,等等),即使是通常不可缓存的内容(例如,该响应没有max-age指令或Expires消息头)
Cache-Control:private
内容只缓存到私有缓存中
Cache-Control:no-cache
使用协商缓存,同 max-age=0
Cache-Control:no-store
直接禁止浏览器缓存数据,每次用户请求该资源,都会向服务器发送一个请求,每次都会下载完整的资源,可用于关闭缓存。
Connection
例如:
Connection:keep-alive
当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
例如:
Connection: close
代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
Date
作用: 生成消息的具体时间和日期
例如:Date: Sat, 11 Feb 2012 11:35:14 GMT
Pragma
作用:防止页面被缓存,在HTTP/1.1版本中,它和Cache-Control:no-cache作用一模一样
Pargma只有一个用法, 例如: Pragma: no-cache