计算机网络--应用层--3.2*--HTTP--HTTP1.1首部字段

1 首部字段分类

1.1 HTTP/1.1 首部字段根据实际用途被分为以下4种类型
  • 通用首部字段(General Header Fields)
    • 请求报文和响应报文两方都会使用的首部
  • 请求首部字段(Request Header Fields)
    • 从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
  • 响应首部字段(Response Header Fields)
    • 从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加的内容信息。
  • 实体首部字段 (Entity Header Fields)
    • 针对请求报文和响应报文的实体部分(body部分)使用的首部。补充了资源内容更新时间等于实体有关的信息。

对 HTTP 报文的解析和处理其实本质上就是对头字段的处理,HTTP 的连接管理,缓存控制,内容协商等都是通过头字段来处理的,理解了头字段,基本上也就理解了 HTTP,所以理解头字段非常重要。

1.2 非 HTTP/1.1 首部字段

在 HTTP 协议通信交互中使用到的首部字段,不限于RFC2616 中定义的47种首部字段。还有Cookie、Set-Cookie 和 Content-Disposition等在其他 RFC 中定义的首部字段,它们的使用频率也很高。

这些非正式的首部字段同一归纳在RFC4299 HTTP Header Field Registrations中。

1.3 End-to-end 首部和 Hop-by-hop 首部

HTTP 首部字段将定义成缓存代理和非缓存代理的行为,分成2种类型。

  • 端到端首部(End-to-end Header),
    • 分在此类别中的首部会转发给请求/响应对应的最终接收目标,且必须保存在有缓存生成的响应中,另外规定它必须被转发。
  • 逐跳首部(Hop-by-hop Header)
    • 分在此类别种的首部只对单次转发有效,会因通过缓存或代理而不再转发。HTTP/1.1 和之后版本中,如果使用hop-by-hop 首部,需提供Connection 首部字段。

下面列举了 HTTP/1.1 中的逐跳首部字段。除这8个首部字段之外,其他所有字段都属于端到端首部

  • Connection
  • Keep-Alive
  • Proxy-Authenticate
  • Proxy-Authorization
  • Trailer
  • TE
  • Transfer-Encoding
  • Upgrade

2 通用首部字段

通用首部字段名说明
Cache-Control控制缓存的行为
Connection逐跳首部,连接的管理
Date创建报文的日期时间
Pragma报文指令
Transfer-Encoding逐跳首部,指定报文主体的传输编码方式
Upgrade逐跳首部,升级为其他协议
Via代理服务器的相关信息
Warning错误通知

2.1 Cache-Control指令一览

可用的指令按请求和响应分为缓存请求指令和缓存响应指令。

缓存请求指令如下表:

指令参数说明
no-cache强制向源服务器再次验证
no-store不缓存请求或响应任何内容
max-age = [ 秒 ]必需响应的最大Age值
max-stale = [ 秒 ]可省略接收已过期的响应
min-fresh = [ 秒 ]必需期望在指定时间内的响应仍有效
no-transform代理不可更改媒体类型
only-if-cached从缓存获取资源,与源服务器无关
cache-extension-新指令标记(token)

缓存响应指令如下表:

指令参数说明
public可向任意方提供响应的缓存
private可省略仅向特定用户返回响应
no-cache可省略缓存前必须先确定其有效性
no-store不缓存请求或响应的任何内容
no-transform代理不可更改媒体类型
must-revalidate可缓存但必须再向源服务器进行确认
proxy-revalidate要求中间缓存服务器对缓存的响应有效性再进行确认
max-age = [ 秒 ]必需响应的最大Age
s-maxage = [ 秒 ]必需公共缓存服务器响应的最大Age
cache-extension-新指令标记(token)
2.1.1 表示是否能缓存的指令
2.1.1.1 public 指令

缓存响应指令

Cache-Control: public

当使用public指令时,则明确表明其他用户也可利用缓存。

2.1.1.2 private 指令

缓存响应指令
在这里插入图片描述

2.1.1.3 no-cache 指令

缓存请求指令、缓存响应指令
在这里插入图片描述
在这里插入图片描述

2.1.2 控制可执行缓存的对象的指令
2.1.2.1 no-store 指令

缓存请求指令、缓存响应指令
在这里插入图片描述

2.1.2.2 s-maxage 指令

缓存响应指令
在这里插入图片描述

2.1.2.3 max-age 指令

缓存请求指令、缓存响应指令
在这里插入图片描述
在这里插入图片描述

2.1.2.4 min-fresh 指令

缓存请求指令
在这里插入图片描述

2.1.2.5 max-stale 指令

缓存请求指令

Cache-Control: max-stale=3600 (单位:秒)
在这里插入图片描述

2.1.2.6 only-if-cached 指令

缓存请求指令
在这里插入图片描述

2.1.2.7must-revalidate 指令

缓存响应指令
在这里插入图片描述

2.1.2.8 proxy-revalidate 指令

缓存响应指令

Cache-Control: proxy-revalidate

proxy-revalidate 指令要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性。

2.1.2.9 no-transform 指令

缓存请求指令、缓存响应指令

Cache-Control: no-transform

使用no-transform 指令规定无论是在请求还是响应种,缓存都不能改变实体主体的媒体类型。

这样做可防止缓存或代理压缩图片等类似操作。

2.1.3 Cache-Control 扩展
2.1.3.1 cache-extension token

缓存请求指令、缓存响应指令
在这里插入图片描述

2.2 Connection

逐跳首部字段

Connection 首部字段具备如下两个作用:

  • 控制不再转发给代理的首部字段
  • 管理持久连接
2.2.1 控制不再转发给代理的首部字段

在这里插入图片描述

2.2.2 管理持久连接

在这里插入图片描述
在这里插入图片描述

2.3 Date

在这里插入图片描述

2.4 Pragma

在这里插入图片描述
在这里插入图片描述

2.5 Trailer

逐跳首部字段
在这里插入图片描述
在这里插入图片描述

2.6 Transfer-Encoding

逐跳首部字段
在这里插入图片描述
在这里插入图片描述
补充: Transfer-Encoding 与 Content-Encoding 的区别

Transfer-Encoding

Transfer-Encoding 消息首部指明了将 entity 安全传递给用户所采用的编码形式。

Transfer-Encoding 是一个逐跳传输消息首部,即仅应用于两个节点之间的消息传递,而不是所请求的资源本身。一个多节点连接中的每一段都可以应用不同的Transfer-Encoding 值。如果你想要将压缩后的数据应用于整个连接,那么请使用端到端传输消息首部 Content-Encoding 。

Transfer-Encoding为chunked时,表示使用的分块传输编码。在数据的开头会使用16进制的数字表示数据长度,当数字为0的时候表示数据发送完毕。数据长度后面跟随CRLF(\r\n),数据的结尾也跟随着CRLF(\r\n)。

HTTP/1.1 200 OK\r\n
Content-Encoding: gzip\r\n
Content-Type: text/xml\r\n
Transfer-Encoding: chunked\r\n
Connection: keep-alive\r\n
\r\n
7\r\n
abcdefg\r\n
0\r\n
\r\n

Content-Encoding

Content-Encoding 是一个实体消息首部,用于对特定媒体类型的数据进行压缩。当这个首部出现的时候,它的值表示消息主体进行了何种方式的内容编码转换。这个消息首部用来告知客户端应该怎样解码才能获取在 Content-Type 中标示的媒体类型内容。

一般建议对数据尽可能地进行压缩,因此才有了这个消息首部的出现。不过对于特定类型的文件来说,比如jpeg图片文件,已经是进行过压缩的了。有时候再次进行额外的压缩无助于负载体积的减小,反而有可能会使其增大。

2.7 Upgrade

逐跳首部字段
在这里插入图片描述
在这里插入图片描述

2.8 Via

在这里插入图片描述
在这里插入图片描述

2.9 Warning

在这里插入图片描述
在这里插入图片描述

3 请求首部字段

请求首部字段名说明
Accept用户代理可处理的媒体类型
Accept-Charset优先的字符集
Accept-Encoding优先的内容编码
Accept-Language优先的语言(自然语言)
AuthorizationWeb认证信息
Expect期待服务器的特定行为
From用户的电子邮箱地址
Host请求资源所在服务器
If-Match比较实体标记(ETag)
If-Modified-Since比较资源的更新时间
If-None-Match比较实体标记(与If-Match相反)
If-Range资源未更新时发送实体Byte的范围请求
If-Unmodified-Since比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards最大传输逐跳数
Proxy-Authorization逐跳首部,代理服务器要求客户端的认证信息
Range实体的字节范围请求
Referer对请求种URI的原始获取方
TE逐跳首部,传输编码的优先级
User-AgentHTTP客户端程序的信息

3.1 Accept

在这里插入图片描述
在这里插入图片描述

3.2 Accept-Charset

在这里插入图片描述

3.3 Accept-Encoding

在这里插入图片描述
在这里插入图片描述

3.4 Accept-Language

在这里插入图片描述
在这里插入图片描述

3.5 Authorization

在这里插入图片描述
在这里插入图片描述

3.6 Expect

在这里插入图片描述

3.7 From

在这里插入图片描述

3.8 Host

在这里插入图片描述
在这里插入图片描述

3.9 If-Match

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.10 If-Modified-Since

在这里插入图片描述
在这里插入图片描述

3.11 If-None-Match

在这里插入图片描述

3.12 If-Range

在这里插入图片描述

在这里插入图片描述

3.13 If-Unmodified-Since

在这里插入图片描述
在这里插入图片描述

3.14 Max-Forwards

在这里插入图片描述
在这里插入图片描述

3.15 Proxy-Authorization

逐跳首部字段
在这里插入图片描述
在这里插入图片描述

3.16 Range

在这里插入图片描述

3.17 Referer

在这里插入图片描述
在这里插入图片描述

3.18 TE

逐跳首部字段
在这里插入图片描述

3.19 User-Agent

在这里插入图片描述

4 响应首部字段

响应首部字段名说明
Accept-Ranges是否接受字节范围请求
Age推算资源创建经过时间
ETag资源的匹配信息
Location令客户端重定向至指定URI
Proxy-Authenticate逐跳字段,代理服务器对客户端的认证信息
Retry-After对再次发起请求的时机要求
ServerHTTP服务器的安装信息
Vary代理夫区其缓存的管理信息
WWW-Authenticate服务器对客户端的认证信息

4.1 Accept-Ranges

在这里插入图片描述

4.2 Age

在这里插入图片描述

4.3 ETag

在这里插入图片描述
在这里插入图片描述

4.4 Location

在这里插入图片描述
在这里插入图片描述

4.5 Proxy-Authenticate

逐跳首部字段
在这里插入图片描述

4.6 Retry-After

在这里插入图片描述
在这里插入图片描述

4.7 Server

在这里插入图片描述

4.8 Vary

在这里插入图片描述

4.9 WWW-Authenticate

在这里插入图片描述
在这里插入图片描述

5 实体首部字段

实体首部字段名说明
Allow资源可支持的HTTP方法
Content-Encoding实体主体适用的编码方式
Content-Language实体主题的自然语言
Content-Length实体主体的大小(单位:字节)
Content-Location替代对应资源的URI
Content-MD5实体主体的报文摘要
Content-Range实体主体的位置范围
Content-Type实体主体的媒体类型
Expires实体主体过期的日期时间
Last-Modified资源的最后修改日期时间

在这里插入图片描述

5.1 Allow

在这里插入图片描述
在这里插入图片描述

5.2 Content-Encoding

在这里插入图片描述

5.3 Content-Language

在这里插入图片描述

5.4 Content-Length

在这里插入图片描述

5.5 Content-Location

在这里插入图片描述

5.6 Content-MD5

在这里插入图片描述

在这里插入图片描述

5.7 Content-Range

在这里插入图片描述
在这里插入图片描述

5.8 Content-Type

在这里插入图片描述

5.9 Expires

在这里插入图片描述
在这里插入图片描述

5.10 Last-Modified

在这里插入图片描述

6 非 HTTP首部字段

6.1 为Cookie服务的首部字段

首部字段名说明首部类型
Set-Cookie开始状态管理所使用的Cookie信息响应首部字段
Cookie服务器接收到的Cookie信息请求首部字段
6.1.1 Set-Cookie

Set-Cookie: status=enable; expires=Tue, 05 Jul 2011 07:26:31 GMT; path=/; domain=.hackr.jp;

当服务器准备开始管理客户端的状态时,会事先告知各种信息。

Set-Cookie 字段的属性

属性说明
NAME=VALUE赋予Cookie的名称和其值(必需项)
expires=DATECookie的有效期(若不明确指定则默认为浏览器关闭前为止)
path=PATH将服务器省的文件目录作为Cookie的使用对象(若不能指定则默认为文档所在的文件目录)
domain=域名作为Cookie适用对象的域名(若不指定则默认为创建Cookie的服务器的域名)
secure仅在;HTTPS安全通信时才会发送Cookie
HttpOnly加以限制,使Cookie不能被JavaScript脚本访问
6.1.1.1 expires 属性

在这里插入图片描述

6.1.1.2 path 属性

在这里插入图片描述

6.1.1.3 domain 属性

在这里插入图片描述

6.1.1.4 secure 属性

在这里插入图片描述
在这里插入图片描述

6.1.1.5 HttpOnly 属性

在这里插入图片描述

6.1.2 Cookie

Cookie: status=enable

首部字段Cookie会告知服务器,当客户端像获得HTTP状态管理支持时,就会在请求中包含从服务器接收到的Cookie。接收到多个Cookie时,同样可以以多个Cookie形式发送。

6.2 其他首部字段

HTTP首部字段是可以自行扩展的。所以在Web服务器和浏览器的应用上,会出现各种非标准的首部字段。

接下来,我们就一些最为常用的首部字段进行说明。

  • X-Frame-Options
  • X-XSS-Protection
  • DNT
  • P3P
6.2.1 X-Frame-Options

在这里插入图片描述
在这里插入图片描述

6.2.2 X-XSS-Protection

在这里插入图片描述

6.2.3 DNT

在这里插入图片描述
在这里插入图片描述

6.2.4 P3P

在这里插入图片描述
在这里插入图片描述


[图片源于《图解HTTP》]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值