4

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

丶木叶
112 声望5 粉丝

我始终相信比你优秀的人过着比你更努力的生活。