实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息。
文章目录
一、Allow
首部字段Allow
用于通知客户端能够支持Request-URI
指定资源的所有HTTP
方法。当服务器接收到不支持的HTTP
方法时,会以状态码405Method Not Allowed
作为响应返回。与此同时,还会把所有能支持的HTTP
方法写入首部字段Allow
后返回。
二、Content-Encoding
首部字段Content-Encoding会告知客户端服务器对实体的主体部分选用的内容编码方式。内容编码是指在不丢失实体信息的前提下所进行的压缩。
三、Content-Language
首部字段Content-Language会告知客户端,实体主体使用的自然语言(指中文或英文等语言)。
四、Content-Length
首部字段Content-Length表明了实体主体部分的大小(单位是字节)。对实体主体进行内容编码传输时,不能再使用Content-Length首部字段。由于实体主体大小的计算方法略微复杂,所以在此不再展开。读者若想一探究竟,可参考RFC2616的4.4。
五、Content-Location
首部字段Content-Location
给出与报文主体部分相对应的URI。和首部字段Location
不同,Content-Location
表示的是报文主体返回资源对应的URI。
比如,对于使用首部字段Accept-Language的服务器驱动型请求,当返回的页面内容与实际请求的对象不同时,首部字段Content-Location
内会写明URI。(访问http://www.hackr.jp/返回的对象却是http://www.hackr.jp/index-ja.html等类似情况)
六、Content-MD5
首部字段Content-MD5是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达。
对报文主体执行MD5算法获得的128位二进制数,再通过Base64编码后将结果写入Content-MD5字段值。由于HTTP首部无法记录二进制值,所以要通过Base64编码处理。为确保报文的有效性,作为接收方的客户端会对报文主体再执行一次相同的MD5算法。计算出的值与字段值作比较后,即可判断出报文主体的准确性。
采用这种方法,对内容上的偶发性改变是无从查证的,也无法检测出恶意篡改。其中一个原因在于,内容如果能够被篡改,那么同时意味着Content-MD5
也可重新计算然后被篡改。所以处在接收阶段的客户端是无法意识到报文主体以及首部字段Content-MD5
是已经被篡改过的。
七、Content-Range
针对范围请求,返回响应时使用的首部字段Content-Range,能告知客户端作为响应返回的实体的哪个部分符合范围请求。字段值以字节为单位,表示当前发送部分及整个实体大小。
八、Content-Type
首部字段Content-Type
说明了实体主体内对象的媒体类型。和首部字段Accept
一样,字段值用type/subtype
形式赋值。
参数charset使用iso-8859-1或euc-jp等字符集进行赋值。
九、Expires
首部字段Expires会将资源失效的日期告知客户端。缓存服务器在接收到含有首部字段Expires的响应后,会以缓存来应答请求,在Expires字段值指定的时间之前,响应的副本会一直被保存。当超过指定的时间后,缓存服务器在请求发送过来时,会转向源服务器请求资源。
源服务器不希望缓存服务器对资源缓存时,最好在Expires字段内写入与首部字段Date相同的时间值。
但是,当首部字段Cache-Control
有指定max-age
指令时,比起首部字段Expires
,会优先处理max-age
指令。
十、Last-Modified
首部字段Last-Modified
指明资源最终修改的时间。一般来说,这个值就是Request-URI指定资源被修改的时间。但类似使用CGI脚本进行动态数据处理时,该值有可能会变成数据最终修改时的时间。