Http常用头部整理
http协议
HTTP是一个属于应用层的面向对象的协议,其主要特点为: 1. 支持客户端/服务器模式; 2. 简单快速的通信; 3. HTTP允许传输任意类型的数据对象。类型由Content-Type加以标记。 4. 无连接、无状态协议;
http报文
用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。
请求报文和响应报文的首部内容由以下数据组成。
请求行 包含用于请求的方法,请求URI和HTTP版本;
状态行 包含响应结果的状态码,原因短语和Http版本;
首部字段 一般有4种首部,分别是:通用首部、请求首部、响应首部和实体首部。
其他(Cookie等)
HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供 所需要的信息。
下来对HTTP的常用首部字段进行详细介绍
HTTP首部字段根据实际用途被分为以下4种类型。
通用首部字段(General Header Fields)请求报文和响应报文两方都会使用的首部。
请求首部字段(Request Header Fields)从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
响应首部字段( Response Header Fields)从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
实体首部字段(Entity Header Fields)针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。
HTTP/1.1 首部字段一览
通用首部字段
首部字段名 | 说明 |
---|---|
Cache-Control | 控制缓存的行为 |
Connextion | 逐跳首部、连接的管理 |
Date | 创建报文的日期时间 |
Pragma | 报文指令 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Cache-control: max-age=5
表示当访问此网页后的5秒内再次访问不会去服务器
Cache-Control: no-cache:这个很容易让人产生误解,使人误以为是响应不被缓存。
实际上Cache-Control: no-cache是会被缓存的,只不过每次在向客户端(浏览器)提供响应数据时,缓存都要向服务器评估缓存响应的有效性。
Cache-Control: no-store:这个才是响应不被缓存的意思。
Pragma: no-cache:跟Cache-Control: no-cache相同,Pragma: no-cache兼容http 1.0 ,Cache-Control: no-cache是http 1.1提供的。
因此,Pragma: no-cache可以应用到http 1.0 和http 1.1,而Cache-Control: no-cache只能应用于http 1.1.
另外,客户端不带这个头部请求的话,如果使用本地缓存的话,返回状态码为304。
如果请求头中有cache-control:no-cache头部。则不使用本地缓存,返回状态码不为304(一般为200)。
这里,恰好解决了我之前的一个问题:
http://blog.chinaunix.net/uid-1757778-id-5753705.html
请求首部字段
首部字段名 | 说明 |
---|---|
Accept | 用户代理可处理的媒体类型 |
Accept-Charset | 优先的字符集 |
Accept-Encoding | 优先的内容编码 |
Accept-Language | 优先的语言 |
Host | 指定资源所在服务器 |
If-Match | 比较实体标记(ETag) |
If-Modified-Since | 比较资源的更新时间 |
If-None-Match | 比较实体标记(与If-Match相反) |
Referer | 对请求中URI的原始获取方 |
User-Agent | Http客户端程序的信息 |
Accept属于请求头,表示客户端希望接收的数据类型。
这里有对If-Modified-Since和Last-Modified的一些不错的解释,可以点击这里查看
合理使用If-None-Match和If-Modified-Since头,可以减少流量带宽。
响应首部字段
首部字段名 | 说明 |
---|---|
Accept-Range | 是否接受字节范围请求 |
ETag | 资源的匹配信息 |
Location | 另客户端重定向至指定URI |
Server | Http服务器的安装信息 |
Vary | 代理服务器缓存的管理信息 |
实体首部字段
首部字段名 | 说明 |
---|---|
Allow | 资源可支持的Http方法 |
Content-Encoding | 实体主体适用的编码方式 |
Content-Language | 实体主体的自然语言 |
Content-Length | 实体主体的大小(字节) |
Content-Location | 替代对应资源的URI |
Content-Type | 实体主体的媒体类型 |
Expires | 实体主体过期的日期时间 |
Last-Modified | 资源的最后修改日期时间 |
从以上这些之外,还有比如Cookie、Set-Cookie和Content-Disposition等在其他RFC中定义的首部字段也经常被用到。
下边为请求一个网页的头部信息实例:
General:
Request URL:http://blog.csdn.net/muzizongheng/article/details/46795243
Request Method:GET
Status Code:200 OK
Remote Address:59.110.88.38:80
Referrer Policy:unsafe-url
Response Header:
Cache-Control:private, max-age=0, must-revalidate
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Mon, 17 Jul 2017 11:16:17 GMT
ETag:W/"ac50f3b564a78d9d789c1aa58f6ae866"
Keep-Alive:timeout=20
Server:openresty
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Powered-By:PHP 5.4.28
Request Headers:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:uuid_tt_dd=144036427222764724_20151210; bdshare_firstime=1449739242207; UN=qq_32072475; UE=""; BT=1487900862896; uuid=2f6e329e-9f88-4865-8122-f9b62fdbb659; avh=62976388%2c46795243; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1500288834,1500289008,1500290189,1500290200; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1500290200; dc_tos=ot8fbt; dc_session_id=1500290201006
Host:blog.csdn.net
If-None-Match:W/"ac50f3b564a78d9d789c1aa58f6ae866"
Referer:https://www.baidu.com/link?url=Wu7VlsW2GRUpclU_zgZy9v_qJkZl1rHrjCTURquEV9PS0fEb1W5xkKsGoufmZVycG5aA8jlSdONEoM8d8mMbuP7vx91QgDaeU5eN7ty9WK7&wd=&eqid=ec2de144000058ef00000006596c9c69
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36