文章目录
前言
前面向大家介绍了
从本章开始,向大家介绍响应头信息。响应头信息,顾名思义,就是在服务器返回给客户端的响应中使用的头信息。本篇文章将会介绍:
Acctpt-Ranges
Age
ETag
Location
Proxy-Authenticate
Retry-After
Server
Vary
WWW-Authenticate
话不多说,开始.
1. Accept-Ranges
该响应头表明:服务器是否可以处理范围请求。
什么是范围请求?
即只请求一部分资源。例如请求头信息中的Range
其有两个取值:none
和bytes
<!--支持范围请求,单位是 bytes (字节)-->
Accept-Ranges: bytes
<!--不支持任何范围请求单位,由于其等同于没有返回此头部,因此很少使用。不过一些浏览器,比如IE9,会依据该头部去禁用或者移除下载管理器的暂停按钮-->
Accept-Ranges: none
我可以指定别的单位吗,比如KB?
如果你的服务器只给自家客户端用,那么随意,如果公开给其他不受你控制的客户端用,那么建议还是采用bytes
单位吧
2. Age
<!--单位:秒-->
Age:60
告知客户端:这个响应被创建了多长时间。该字段一般用于缓存服务器。因为在HTTP 1.1
版本中,客户端无法得知响应是否来自缓存。有了这个字段,客户端就可以判断。比如:Age:84600
,那么客户端就可以判断这个响应来自缓存服务器,因为源服务器创建缓存然后发送给客户端不可能用了一天的时间。
如果响应来自缓存服务器,则缓存服务器返回响应时必须带上这个字段。
3. ETag
语法
<!--弱比较-->
ETag: W/"<etag_value>"
<!--强比较-->
ETag: "<etag_value>"
告知客户端,当前资源的实体标示符(etage_value
)。服务器会给每份资源都分配对用的ETag
值,当资源更新时,其对用的ETag
值也会更新。具体的值由服务器指定,只要能唯一标示一个资源和其对应的版本就行。
什么是弱比较和强比较?。可以参考:If-Match
4. Location
Location: <url>
该首部指定重定向的地址。需要配合3xx
重定向才有意义。
除了重定向响应之外, 状态码为201 (Created)
的消息也会带有Location
首部。它指向的是新创建的资源的地址。
5. Proxy-Authenticate
该字段指定了获取代理服务器上资源的验证方式
语法:
Proxy-Authenticate: <type> realm=<realm>
Proxy-Authenticate: Basic realm="Access to the internal site"
<type>
:身份验证类型。可以查看:Authorization获得关于type
的描述。realm=<realm>
:可省略。对于被保护区域(即安全域)的描述。如果没有指定安全域,客户端通常用一个格式化的主机名来代替。
其要与 407 Proxy Authentication Required
一起使用。很好理解:407
响应告诉客户端需要验证。该头信息告诉客户端采用哪种验证方式。
6. Retry-After
该首部告诉客户端,你的请求我收到了,但是现在不能处理,请你在经过xxx秒或者在xxx时间后重新发送。通常配合状态码503 Service Unavailable
或3xx
重定向一起使用。
绝对时间的格式,可以参考:Date
<!--语法-->
Retry-After: <http-date>
Retry-After: <delay-seconds>
<!--实例-->
Retry-After: Wed, 21 Oct 2015 07:28:00 GMT <!--在这个时间之后再次请求-->
Retry-After: 120 <!--120秒之后再次请求-->
7. Server
该字段告诉客户端当前服务器上安装的HTTP服务器应运用程序的信息。不单单会标出服务器上软件应用的名称,还有可能包括版本号和安装时启用的可选项等。如:
Server: Apache/2.4.1 (Unix)
8. Vary
<!--语法-->
Vary: *
Vary: <header-name>, <header-name>, ...
*
:任意头信息。此时一般表示不缓存,可以这么理解,要求所有的头信息的值都与上一次请求一样(有这些头信息,并且值一样),有点难。header-name
:请求/通用头信息
在决定是否使用缓存,使用哪一个缓存时,Vary
起到了关键作用。
缓存服务器在决定是否使用缓存时,出了比较URL
,ETag
等信息,还会使用响应中的Vary
信息。只有Vary
后面指定的头信息的值和请求/通用头信息中对应头信息的值相同时才会使用这个缓存。比如:
第一次请求头信息:
GET /Index.html HTTP/1.1
...
User-Agent:PC
...
响应头信息
200 OK
...
Vary:User-Agent
...
这里其实有个附件信息,就是User-Agent:PC
,为什么是PC
?因为与这个响应对用的请求的User-Agent
的值是PC
第二次请求:
GET /Index.html HTTP/1.1
...
User-Agent:Android
...
就不会命中第一次请求的缓存,因为第一次请求的缓存响应指定了Vary:User-Agent
。附加信息User-Agent:PC
。这时缓存服务器发现第二次请求的User-Agent
的值跟第一次不一样,所以认为当前这个缓存不是第二次请求想要的,就会去服务器请求数据。
9. WWW-Authenticate
<!--语法-->
WWW-Authenticate: <type> realm=<realm>
其用法与Proxy-Authenticate
相同。区别是:Proxy-Authenticate
用于代理服务器验证。WWW-Authenticate
用于最终的服务器验证。
其通常与 401 Unauthorized
一起使用
本节到此结束,下节介绍剩余的10个响应头信息,欢迎关注,获取最新的更新