当一个byte-range-resp-spec存在一个byte-content-range-spec值,并且该值的最后一位(last-byte-pos)小于它的第一位(first-byte-po),或者它的实际长度(instance-length)小于或等于它最后一位(last-byte-pos),这样是不允许的。接收者应该忽略一个未通过验证的byte-content-range-spec,以及随其传输的任何其他内容。
发送具有状态代码416(请求范围不可满足)的响应的服务器应该包括具有byte-range-resp-spec的值为“*”的Content-Range字段。实例长度指定所选资源的当前长度。使用状态代码206(部分内容)的响应不能包含具有“*”字节的 byte-range- resp-spec字段。
下面是一个字节内容范围规则值(byte-content-range-spec)的例子,假设实体总共包含了1234字节:
. 最开始的500个字节: bytes 0-499/1234
. 第二个五百个字节: bytes 500-999/1234
. 除了前五百个字节: bytes 500-1233/1234
. 最后五百个字节: bytes 734-1233/1234
当一个HTTP消息包含一个单一范围的内容(例如,一个响应请求一个单一的范围,或者请求一组没有任何漏洞的重叠范围),该内容与Content-Range头字段一起传递,并且Content-Length头字段应该显示实际传输的字节数。例如,
HTTP/1.1 206 Partial content
Date: Wed, 15 Nov 1995 06:25:24 GMT
Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
Content-Range: bytes 21010-47021/47022
Content-Length: 26012
Content-Type: image/gif
当HTTP消息包含多个范围(例如,对多个非重叠范围的请求的响应)的内容时,这些内容作为多部分消息进行传输。用于此目的的大部分媒体类型是附录中定义的“多multipart/byteranges”。兼容性问题见附录。
对于单个范围的请求的响应不能使用multipart/byteranges媒体类型来发送。对多个范围的请求的响应,如果其结果是单个范围,可能作为带有一个部分的multipart/byteranges媒体类型发送。不能解码multipart/byteranges消息的客户端不能在单个请求中请求多个byte-ranges。
当客户端在一个请求中请求多个byte-ranges时,服务器应该按照它们在请求中出现的顺序返回它们。
如果服务器由于语法无效而忽略了 byte-range-spec,则服务器应将请求视为不存在无效Range头字段。(通常,这意味着返回包含完整实体的200响应)。
如果服务器收到一个请求(除了一个包括If-Range请求头字段)和一个请求头字段不可满足的范围(即所有的byte-range-spec值first-byte-pos值大于当前选中的资源的长度),它应该返回一个416响应代码(请求的范围不可以满足的)( 小节)。
注意:对于不可满足Range请求头字段情况,客户端不能依赖服务器发送416(Requested range not satisfiable)响应来代替200 (OK)响应,因为不是所有服务器都支持这个请求头。
14.17 Content-TypeContent-Type实体字段表示发送给接收方的实体主体的媒体类型,对于HEAD方法,则表示如果请求是GET,应该发送的媒体类型。
Content-Type = "Content-Type" ":" media-type
媒体类型已经在小节中定义,下面是该字段的一个例子
Content-Type: text/html; charset=ISO-8859-4
第7.2.1节进一步讨论了确定实体的媒体类型的方法。
14.18 DateDate通用头字段表示消息产生的日期和时间,跟RFC822中的orig-date一样。该字段的值是一个HTTP—DATE,它的详细描述在 小节,它在传输的时候必须被格式化。
Date = "Date" ":" HTTP-date
下面是一个例子:
Date: Tue, 15 Nov 1994 08:12:31 GMT
源服务器必须在所有的响应中包含一个Date头字段,除了以下的情况:
1.如果响应的状态码是100或者101,在服务器的配置中,响应中可以包含Date头字段。
2.如果响应状态代码传递了一个服务器错误,例如500(内部服务器错误)或503(服务不可用),并且不方便或不可能生成一个有效的日期。
3.如果服务器没有一个可以提供合理的接近当前时间的值,那么它的响应一定不能包含一个Date头字段,我们必须遵守 小节中的相关规则。
如果消息将通过需要Date的协议被接收方或网关缓存,则接收到的没有日期标头字段的消息必须由接收方分配一个Date头字段。没有时钟的HTTP实现不能缓存响应,并且不必在每次使用时重新验证它们。HTTP缓存,尤其是共享缓存,应该使用NTP等机制来使其时钟与可靠的外部标准同步。