《图解HTTP》学习记录五(报文首部字段①)

报文分为请求报文与响应报文,除开报文实体的差异之外,两者的报文首部内容上也不尽相同。下图是访问www.baidu.com的报文首部截图:

《图解HTTP》学习记录五(报文首部字段①)_第1张图片

可见,请求报文首部第一行是由“请求方法+协议及其版本”组成的请求行,响应报文首部的第一行则是“状态码+协议及其版本组成的”状态行。此外,包含各种首部字段的HTTP首部字段行也是有差别的,一般将HTTP首部字段语句分为:通用首部字段、请求首部字段、响应首部字段、实体首部字段。所有的字段格式都是“key:value”这种形式,如果value值有多个,中间用逗号隔开。接下来,来具体介绍首部字段的各种属性值:

通用首部字段

即,响应报文和请求报文中均可以存在的首部字段,具体包括:
1.Cache-Control
用以操纵缓存的工作机制,虽为通用首部字段,但其参数指令在请求报文首部与响应报文首部略有不同:

  • pubulic/private:这是两个只存在于响应报文之中的功能相反的指令,pubulic代表可向任意方提供缓存,而private只能向特定用户提供缓存。
  • no-cache:防止从缓存中获取过期资源。
    若请求中包含该指令:则表示客户端不会接收缓存过的响应,缓存服务器会将请求直接转发给源服务器;
    若响应中包含该指令:缓存服务器则不能对资源进行缓存,且源服务器将不再对缓存服务器中提出的请求进行有效性确认,禁止其进行缓存操作。
  • no-store:暗示请求或响应中包含机密内容,禁止缓存。实际上该指令比no-cache更加强硬,是真正的禁止缓存。
  • no-transform:规定缓存不能改变实体主体的媒体类型。
  • max-age:形如Cache-Control:max-age:60000,其中的数字单位为秒。
    若请求中包含该指令:表示缓存的时间若比该时间小,则加载缓存。故当max-age的值为0时,缓存服务器会直接将请求转发给源服务器。
    若响应中包含该指令:缓存服务器将不再对资源的有效性进行确认,以max-age的数值来代表资源保存的最长缓存时间,其优先级是高于Expires的;
  • min-fresh:形如Cache-Control:min-fresh:60000,其中的数字单位为秒。表示过了XX秒后的资源都无法作为缓存返回。
  • max-stale:形如Cache -Control:max-stale:60000,其中的数字单位为秒。表示只要处于max-stale的时间范围内,无论缓存是否过期都会照常接收。若无值,则表示无限期接收缓存。
    PS:min-freshmax-stale构成了非常规处理缓存的上下限。
  • must-revalidate:代理会向源服务器再次验证即将返回的响应缓存是否有效,这是最高优先级的指令,会自动忽略max-stale

2.Conection
两个作用,其一是控制不再转发的首部字段名;其二是管理持久连接。

  • 控制不再转发的首部字段名

    《图解HTTP》学习记录五(报文首部字段①)_第2张图片
    转自《图解HTTP》

    如图所示,Connection:upgrade控制了名为Upgrade的首部字段,只让代理服务其接收该字段,代理转发过程中删除了有关Upgrade的语句。

  • 管理持久连接
    共有两个参数:close/keep-alive,前者表示断开连接,后者表示保持持久连接。

3.Data
表示该HTTP报文所创立的日期与时间。

4.Trailer
事先说明在报文主体后记录了哪些首部字段。

5.Transfer-Encodding
规定了传输报文主体时采用何种编码形式。

6.Upgrade
用以检测HTTP协议及其它协议是否可使用更高版本进行通信,其参数可以指定一个完全不同的通信协议,如:Upgrade: TSL/1.0,HTTP/1.1

7.Via
用于记录经过代理服务器的转发情况,常与Trace方法一块使用。

8.Warning
警告!

请求报文首部字段

请求报文首部字段意为只有请求报文特有的,只会出现在请求报文中的首部字段。用于补充请求的附加信息,客户端信息 以及对响应内容的优先级等等。
1.Accept
Accept字段可以告知服务器,用户代理能够处理的媒体类型及其优先级,可用type/subtype的这种形式来一次指定多个媒体类型,如:

  • 文本文件
    text/html,text/js,text/css
    application/xhtml+xml,application/xml
  • 图片文件
    image/gif,image/jpeg,image/png
  • 视频文件
    video/mpegvideo/quicktime
  • 二进制文件
    application/octec-stream,application/zip

若想要给显示的媒体类型添加优先级,则使用 q=(0~1)来表示权重值,当服务器提供多种内容时,将会首先返回权重值最高的媒体类型。

2.Accept-Charset/Accept-Encoding/Accept-Language
这三个分别表示通知服务器用户代理所能支持的字符集/编码类型/以及支持的语言。同样的他们也能用q=(0~1)来表示优先级。

3.Authorization
告知服务器,用户代理的认证登录信息,是服务器返回401状态码用户登录后,给请求添加的登录信息,现在基本上不会使用这种方法。

4.From
来告知服务器用户的邮箱,仅仅是留下一个联系方式。

5.Host
它将告知服务器,请求的资源所处的互联网主机名和端口号,Host首部字段是HTTP/1.1规范中唯一一个必须包含在请求首部内的首部字段。由于一个IP地址下可能存在多个域名,所以需要Host来告诉服务器具体请求的是哪个资源。

6.Range
范围请求,告知服务器索取资源的范围。如:Range: bytes = 5000-10000意为请求获取从第5000个字节到10000个字节的资源。若获取成功,会抛出206,返回范围资源;失败,则抛出200,返回所有资源。

7.If-Match/If-Modified-Since/If-None-Match/If-Range/If-Unmodified-Since
形如If-xxx的这种请求首部字段称为条件请求,意为服务器只有满足条件请求的内容,才会执行请求。

  • If-Match:只有它的值与想要获取资源的实体标记(Etag)值相等时,服务器才会返回资源。
  • If-Modified-Since:如果在该字段指定的时间早于资源更新时间,则处理该请求。反之,则抛出304,使用缓存即可。
  • If-Range:范围请求,与Range字段一同使用。如果其值与实体标记(Etag)值相等,则返回指定的范围资源。若不等,则抛出200,返回所有资源。
  • If-None-Match/If-Unmodified-SinceIf-Match/If-Modified-Since否定方法。

8.Max-Forwards:通过TRACE方法或OPTIONS方法时,发送包含字段请求时,将以十进制形式指定经过服务器的最大数目。例如:Max-Forwards:3,规定经过服务器数目为3,没经过一个服务器其值将会-1,当其值为0时,所在服务器强制返回响应。

9.Refer
告知服务器请求原始资源的URL,出于安全性考虑也可以考虑不发送该字段。

10.TE
告知服务器客户端能够处理的传输编码方式及其优先级,他与Accept-Encoding很像,但仅用于传输编码。

11.User-Agent:该字段会将创建请求的浏览器及用户代理等信息传达个服务器。

你可能感兴趣的:(《图解HTTP》学习记录五(报文首部字段①))