当从与请求资源的URI分离的位置访问该实体时,可以使用Content-Location实体头字段为消息中包含的实体提供资源位置。服务器应该为响应实体对应的变体提供内容位置;特别是当一个资源有多个与它相关联的实体,并且这些实体实际上有单独的位置,通过这些位置可以单独访问它们,服务器应该为返回的特定变体提供一个内容位置。
Content-Location = "Content-Location" ":"( absoluteURI | relativeURI )
Content-Location的值也定义了基本实体的URI。
Content-Location的值不是原始请求URI的代替;它只是请求时对应于此特定实体的资源位置的声明。如果希望标识特定实体的源,将来的请求可以指定Content-Location URI作为请求URI。
缓存不能假设具有与用于检索它的URI不同的内容位置的实体可以用于响应该内容位置URI上的稍后请求。然而,Content-Location可用于区分从单个请求资源检索的多个实体,如第节所述。
如果Content-Location是一个相对的URI标识,相对URI是相对于请求URI解释的。
在PUT或Post请求中Content-Location头字段是未定意的。服务器在这种情况下会忽略这些内容。
14.15 Content-MD5RFC 1864中定义的Content-MD5实体头字段是实体主体的MD5摘要,用于提供实体主体的端到端消息完整性检查(MIC)。(注意:MIC用于检测传输中的实体主体的意外修改,但不能防止恶意攻击。)
Content-MD5 = "Content-MD5" ":" md5-digest
md5-digest = <base64 of 128 bit MD5 digest as per RFC 1864>
Content-MD5头字段可以由源服务器或客户端生成,以作为实体主体的完整性检查。只有原始服务器或客户端可能生成Content-MD5头字段;代理和网关不能生成,因为这将破坏其作为端到端完整性检查的价值。任何实体主体的接收者,包括网关和代理,都可以检查这个头字段中的摘要值是否与接收到的实体主体的摘要值匹配。
MD5摘要是基于实体主体的内容计算的,包括已经应用的任何内容编码,但不包括应用到消息主体的任何传输编码。如果用传输编码接收到消息,则必须在根据接收到的实体检查Content-MD5值之前删除该编码。
这样做的结果是,在实体主体的八位字节上精确地计算摘要,并且如果没有应用传输编码,则按照这样的顺序发送摘要。
HTTP扩展了RFC 1864,允许为MIME复合媒体类型(例如,multipart/*和message/rfc822)计算摘要,但这并不改变如前段所定义的摘要的计算方式。
这有几个后果。复合类型的实体主体可能包含许多主体部分,每个部分都有自己的MIME和HTTP头(包括Content-MD5、Content-Transfer-Encoding和Content-Encoding头)。如果body-part具有content - transfer - encoding头字段,则假设body-part的内容已经应用了编码,并且body-part包含在content - md5摘要中,如下所示:之后的运行中。在主体部分中不允许使用Transfer-Encoding头字段。
在计算或检查摘要之前,不能将所有换行符转换为CRLF:实际传输的文本中使用的换行约定在计算摘要时必须保持不变。
注意:尽管Content-MD5的定义对于HTTP与RFC 1864对于MIME实体主体的定义完全相同,但是在几种情况下,Content-MD5对于HTTP实体主体的应用不同于其对于MIME实体主体的应用。一种是HTTP不同于MIME,它不使用内容传输编码,但使用传输编码和内容编码。另一个原因是HTTP比MIME更频繁地使用二进制内容类型,因此值得注意的是,在这种情况下,用于计算摘要的字节顺序是为该类型定义的传输字节顺序。最后,HTTP允许使用几种换行规则中的任何一种来传输文本类型,而不仅仅是使用CRLF的规范形式。
14.16 Content-RangeContent-Range实体头字段与部分实体主体一起发送,以指定在完整实体主体中应该在何处应用部分主体。范围单元在中定义。
Content-Range = "Content-Range" ":" content-range-spec
content-range-spec = byte-content-range-spec
byte-content-range-spec = bytes-unit SP
byte-range-resp-spec "http://www.likecs.com/" ( instance-length | "*" )
byte-range-resp-spec = (first-byte-pos "-" last-byte-pos) | "*"
instance-length = 1*DIGIT
报头应该指示完整实体的总长度,除非这个长度是未知的或难以确定的。星号“*”字符表示在生成响应时,实例长度未知。
与byte-ranges-specifier的值(参见节)不同,byte-range-resp-spec必须只指定一个范围,并且必须包含该范围的第一个和最后一个字节的绝对字节位置。