第六章 HTTP首部
HTTP协议的请求和响应报文中必定包含HTTP首部,只是我们平时在使用Web的过程中感受不到它。
HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。对于客户端用户来说,这些信息中的大部分内容都无须亲自察看。
在请求中,HTTP报文由方法,URI,HTTP版本,HTTP首部字段等部分构成。
下面的示例是访问 http://hackr.jp 时,请求报文的首部信息。
GET / HTTP/1.1
Host: hackr.jp
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/2010010
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/; q=0
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
If-Modified-Since: Fri, 31 Aug 2007 02:02:20 GMT
If-None-Match: “45bae1-16a-46d776ac”
Cache-Control: max-age=0
在响应中,HTTP报文由HTTP版本,状态码(数字和原因短语),HTTP首部字段三部分构成。
以下示例是之前请求访问 http://hackr.jp/ 时,返回的响应报文的首部信息。
HTTP/1.1 304 Not Modified
Date: Thu, 07 Jun 2012 07:21:36 GMT
Server: Apache
Connection: close
Etag: “45bae1-16a-46d776ac”
在报文众多的字段当中,HTTP首部字段包含的信息最为丰富。首部字段同时存在于请求和响应报文内,并涵盖HTTP报文相关的内容信息。
HTTP首部字段是构成HTTP报文的要素之一。在客户端和服务器之间以HTTP协议进行通信的过程中,无论是请求还是响应都会使用首部字段,它能起到传递额外重要信息的作用。
使用首部字段是为了给浏览器和服务器提供报文主体大小,所使用的语言,认证信息等内容。
HTTP首部字段是由首部字段名和字段值构成的,中间用冒号“:”分隔。
首部字段名:字段值
例如:在HTTP首部中以Content-Type这个字段来表示报文主体的对象类型。
Content-Type:text/html
就以上上述示例来看,首部字段名为Content-Type,字符串text/html是字段值。
另外,字段值对应单个HTTP首部字段可以有多个值,如下所示。
Keep-Alive: timeout=15,max=100
4种HTTP首段字符类型
通用首部字段:请求报文和响应报文两方都会使用的首部。
请求首部字段:从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容,客户端信息,响应内容相关优先级等信息。
响应首部字段:从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
实体首部字段:针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。
除此之外,还有非HTTP首部字段
HTTP首部字段将定义成缓存代理和非缓存代理的行为,分成2种类型。
端到端首部:
分在此类别中的首部会转发给请求/响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。
逐跳首部:
分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。HTTP/1.1和之后版本中,如果要使用逐跳首部,需提供Connection首部字段。
通用首部字段:
Cache-Control:通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制。
指令的参数是可选的,多个指令之间通过“,”分隔。首部字段 CacheControl 的指令可用于请求及响应时。
Cache-Control: private, max-age=0, no-cache
Connection:其具有如下两个作用:
1.控制不再转发给代理的首部字段
2.管理持久连接
**HTTP/1.1 版本的默认连接都是持久连接。为此,客户端会在持 久连接上连续发送请求。当服务器端想明确断开连接时,则指定 Connection 首部字段的值为 Close。