6.1HTTP报文首部
1、http协议的请求和响应报文必包含HTTP首部
HTTP协议的请求和响应报文中必定包含HTTP首部,首部内容为客户端和服务器端分别处理请求和响应所提供的的信息。
HTTP请求报文
:在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分组成
HTTP响应报文
:在响应中,HTTP报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段3部分组成。
6.2 HTTP首部字段
1、请求和响应都会使用首部字段,使用首部字段是为了给浏览器和服务器提供报文主体大小,所使用的语言、认证信息等内容。
2、HTTP首部字段结构:由首部字段名和字段值构成,中间用冒号“:”分隔。如Content-Type:text/html
,Keep-Alive:timeout=15,max=100
3、4种HTTP首部字段类型
通用首部字段(General Header Fields)
:请求报文和响应报文都会使用的首部
请求首部字段(Request Header Fields)
:从客户端向服务器发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先等级信息
响应首部字段(Response Header Fields)
:从服务器端向客户端返回响应报文时使用的首部。补充了响应时的附加内容,也会要求客户端附加额外信息内容
实体首部字段(Entity Header Fields)
:针对请求报文和响应报文的实体部分使用首部。补充了资源内容更新时间等与实体有关的信息
4、End-to-end首部和Hop-by-hop首部
【End-to-end】分在此类中的首部会转发请求/响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。
【Hop-by-hop】分在此类的首部只对单次转发有效,会因通过缓存或代理而不再转发。在HTTP1.1版本和之后版本若要使用hop-by-hop,需要使用Connection首部字段。
下面8个是逐条首部字段
6.3HTTP1.1通用首部字段
通用首部字段是指,请求报文和响应报文双方都会使用的首部。
字段 | 作用 |
---|---|
Cache-Control | 通过指定首部Cache-Control的指令,就可以操作缓存的工作机制。如no-cache,public等 |
Connection | 主要有两个作用,控制不再转发给代理的首部字段、管理持久连接 |
Data | 首部字段data表明创建HTTP报文和日期 |
pragma | 与http1.1之前的版本兼容 |
Trailer | 首部字段Trauker会事先说明在报文主体后记录了哪些首部字段,可以应用在HTTP1.1版本分块传输编码时使用。 |
Tranfer-Encoding | 规定了传输报文主体时采用的编码方式 |
Upgrade | 用于检测HTTP协议及其他协议是否可以使用更高版本进行通信 |
Via | 追踪客户端与服务器之间的请求响应和响应报文的传输途径。还可以避免请求回环的发生。 |
Warning | 告知用户一些与缓存相关问题的警告 |
6.4 请求首部字段
请求首部字段是从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关优先级等内容。
字段 | 作用 |
---|---|
Accept | 告知服务器用户代理能够处理的媒体类型及媒体类型的优先级。可以使用type/subtype这种形式,一次指定多个媒体类型 |
Accept-Charset | 告知服务器用户代理支持的字符集以及字符集的相对优先顺序 |
Accept-Encoding | 告知服务器用户代理支持的内容编码以及内容编码的优先顺序(如gzip、compresss等) |
Accept-Language | 告知服务器用户代理能够处理的自然语言集以及自然语言集的相对优先级 |
Authorization | 告知服务器,用户代理的认证信息(证书值) |
Expect | 告知服务器期望出现某种特定行为(因服务器无法理解客户端的期望作出回应而发生错误会返回状态码417) |
From | 告知服务器用户代理的用户电子邮件地址。 |
Host | 告知服务器,请求的资源所处的互联网主机名和端口号。Host首部字段是在HTTP1.1规范内唯一一个必须被包含在请求内的首部信息。首部字段Host和以单台服务器分配多个域名的虚拟主机的工作机制有密切关系,这是首部字段Host存在的意义 |
if-Match | 属于if-×××的条件请求,只有服务器接收到附带条件请求后判断为真才会执行请求。 |
if-Modified-Since | 告知服务器if-Modified-Since字段值早于资源的更新时间,则希望能处理请求,而在指定if-Modified-Since字段值的日期之后,如果请求的资源都没有更新过,则返回状态码304Not Modified的响应 |
if-None-Match | 与if-Match相反,用于指定if-none-match指定的字段值与请求资源的Etag(实体标记)不一致时,此时才告知服务器请求 |
if-Range | 告知服务器若指定的if-range字段值和请求资源的Etag值或者时间一致时,则作为范围请求处理,反之则返回全体资源。 |
if-Unmodified-Since | 告知服务器请求的资源只有在字段值内指定的日期时间后,未发生更新情况下,才能处理请求,若发生了更新,则以412Precoditrion Failed作为响应处理 |
Max-Forwards | 通过trace或option方法发送包含该首部字段,该字段以十进制整数形式指定可经过的服务器最大数目。服务器在往下一个服务器转发请求之前,该字段减一,当为0时则不再进行转发,而是直接返回响应 |
proxy-Authorization | 接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段proxy-Authorization的请求,以告知服务器认证所需要的信息 |
Range | 对于只需要获取部分资源的范围请求,包含首部字段Range即可告知服务器资源的指定范围。收到该请求,会在处理请求之后返回状态码为206PartialContent的响应,当无法处理请求则会返回状态码200OK的响应和全部资源 |
Referer | 告知服务器请求的原始资源的URI |
TE | 告知服务器客户端能够处理响应的传输编码方式及相对优先级 |
Uesr-Agent | 会将创建请求的浏览器和用户代理名称等信息传递给浏览器 |
6.5 响应首部字段
首部字段是由服务器向客户端返回响应报文中所使用的字段,用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等信息。
字段 | 作用 |
---|---|
Accept-Ranges | 告知客户端服务器能否处理方为请求,以指定获取服务器某个部分的资源,可处理范围请求时指定其为bytes,反之则指定其为none |
Age | 告知客户端,源服务器在多久之前创建了响应。字段值的单位为秒。若创建该响应的服务器是缓存服务器,Age值是指缓存后响应再次发起认证到认证完成时间的值,代理创建响应时必须加上首部字段Age |
Etag | 告知客户端实体标识。它是一种可将资源以字符串形式做唯一标识的方式。服务器会为每份资源分配对应的ETag值。(有强弱之分,强ETag不论实体发生多么细微变化都会改变值,弱ETag只用于提示资源hi是否相相同) |
Location | 可以将响应接收方引导至某个与请求URI位置不同的资源。通常会配合3xx,提供重定向的URI。 |
Proxy-Authenticate | 该字段会将由代理服务器所需要认证信息发送给客户端。 |
Retry-After | 告知客户端应该多久之后再次发送请求。主要配合状态码503 Service Unavailable或者3xxRedirect响应一起使用 |
Server | 告知客户端当前服务器上安装的HTTP服务器应用程序的信息,还有版本号和安装时启用的可选项 |
Vary | 该字段可对缓存进行控制。源服务器会向代理服务器传达关于本地缓存使用方法的命令 |
www-Authenticate | 用于HTTP访问认证 |
6.6实体首部字段
实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间等与实体信息相关的信息。
字段 | 作用 |
---|---|
Allow | 用于通知客户端能够支持Request-URI指定资源所有HTTP方法。当服务器收到不支持的HTTP方法时,会以状态码405 Method Not Allowed作为响应返回 |
Content-Encoding | 告知客户端服务器对实体的主体部分选用的内容编码方式。内容编码是指在不丢失实体信息前提下进行的压缩。主要有4种方式gzip、compress、deflate、identity |
Content-Language | 告知客户端,实体主体使用的自然语言 |
Content-Length | 表明了实体主体部分的小大(字节为单位) |
Content-Loacation | 给出与报文主体部分相对应的URI |
Content-MD5 | 是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达。 |
Content-Range | 告知客户端作为响应返回的实体哪个部分符合范围请求。以字节为单位 |
Content-Type | 说明实体主体内对象的媒体类型 |
Expires | 告知客户端资源失效日期 |
Last-Modified | 指明资源最终修改时间 |
6.7为Cookie服务的首部字段
1、机制
:Cookie的工作机制是用户识别及状态管理。web网站为了管理用户的状态会通过web浏览器把一些数据临时写入用户计算机内。接着当用户访问web网站时,可以通过通信方式取回之前发送的Cookie
2、类型
:
字段 | 作用 | 首部类型 |
---|---|---|
Set-Cookie | 开始状态管理所使用的Cookie信息 | 响应首部字段 |
Cookie | 服务器接收到的Cookie信息 | 请求首部字段 |
3、Set-Cookie
当服务器准备开始管理客户端的状态时,会事先告知各种信息
4、Cookie
首部字段Cookie会告知服务器,当客户端想获得HTTP状态管理支持时,就会在请求包中包含从服务器接收到的Cookie。接收多个Cookie时,同样可以以多个Cookie形式发送
6.8其他首部字段
HTTP首部字段是可以自行扩展的,因此在Web服务器和浏览器的应用上,会出现各种非标准的首部字段
字段 | 作用 |
---|---|
X-Frame-Option | 属于HTTP响应首部,用于控制网站内容在其他Web网站的Frame标签的显示内容,主要目的是防止点击劫持(clickjacking)攻击 |
X-XSS-Protected | 属于HTTP响应首部,它是针对跨站脚本攻击(XSS)的一种策略,用于控制浏览器XSS防护机制开关 |
DNT | 属于HTTP请求头部,是Do Not Track的简称,意为拒绝个人信息被收集,是表示被精准广告追踪的一种方法 |
P3P | 属于HTTP响应头部,利用P3P(The Platform for Priavcy Preferences,在线隐私偏好平台)技术,可以让web网站上的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的 |