RFC2616-HTTP1.1-Header Field Definitions(头字段规定部分—译文) (2)

  如果存在特殊的星号“*”在Accept-Charset字段中,匹配在Accept-Charset字段中没有提及的其他所有的字符集(包括ISO-8859-1)。如果该头字段中不存在星号,没有明确提及的所有字符集都获得权重值0,除了ISO-8859-1,如果没有明确提及,则获得权重值1。

  如果没有Accept-Charset头字段,则说明任何字符都是可以接受的。如果存在该字段,但是服务器并没有在响应中传递该字段允许的字符集,那么服务器需要返回一个406状态码,尽管传送一个不符合的响应也是被允许的。

14.3 Accept-Encoding

  Accept-Encoding请求头字段与Accept头字段类似,但是限制了在响应用允许使用的内容编码(content-codeings,第3.5小节)。

         Accept-Encoding  = "Accept-Encoding" ":"

                            1#( codings [ ";" "q" "=" qvalue ] )

         codings        = ( content-coding | "*" )

  使用该字段的例子:

         Accept-Encoding: compress, gzip

         Accept-Encoding:

         Accept-Encoding: *

         Accept-Encoding: compress;q=0.5, gzip;q=1.0

         Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0

  服务器根据Accept-Encoding字段测试内容编码(content-coding)是否可以接受,规则如下:

  1.内容编码(content-coding)是否是在Accept-Encoding字段中列出的,如果是则可以接受,除非它伴有的权重值是0.(就像3.9小节所描述的,权重值为0则认为无法接受)

  2.如果Accept-Encoding字段中存在特殊的星号“*”,那么意味着在任何在该字段中未明确说明的内容编码都是可以接受的。

  3.如果有多个被允许的内容编码,那么权重值最高的优先。

  4.身份(identity)内容编码总是可以被接受的,除非在Accept-Encoding字段中的identity字段的权重值是0,或者在字段中包含了“*;q=0”并且没有明确的“identity”内容编码。如果不存在Accept-Encoding,那么只有“identity”是被允许的。

  如果一个请求中存在Accept-Encoding字段,但是服务器无法提供该字段范围内的响应,那么服务器需要返回一个406错误响应。

  如果请求中没有Accept-Encoding头字段,那么服务器则假设客户端可以接受任何类型编码的内容。在这种情况下,如果“identity”是被允许的内容编码之一,那么服务器需要使用“identity”内容编码,除非有额外的信息表明其他的内容编码对客户端更有意义。

  注意:如果请求不包含Accept-Encoding字段,如果"identity"内容编码不可用,那么HTTP/1.0客户端会使用通用的content-codings(即,“gzip”和“compress”);一些较老的客户端可能会不正确地显示与其他内容编码一起发送的消息。服务器还可以根据特定用户代理或客户端的信息做出此决定。

  注意:大多数HTTP/1.0应用程序不识别或不遵守与内容编码相关的qvalue。这意味着qvalues将不能工作,x-gzip或x-compress中不允许使用qvalues。

14.4 Accept-Language

  该字段也Tm跟Accept字段类似,但是它限制了请求中需要的自然语言集合的首选范围。语言标识符在3.10小节中已经详细说明。

         Accept-Language = "Accept-Language" ":" 1#( language-range [ ";" "q" "=" qvalue ] )

         language-range  = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )

  每一个语言范围(language-range)可以拥有一个表示预计用户在该语言范围内更倾向的语言的相关联的权重值。默认的权重值是1。比如:

         Accept-Language: da, en-gb;q=0.8, en;q=0.7

  意味着:“我需要丹麦语(Danish),但是英式英语或者其他类型的英语也是可以接受的”。如果语言范围正好等于标记,或者正好等于标记的前缀,则语言范围匹配语言标记,使得前缀后面的第一个标记字符是“-”。如果在Accept-Language字段中存在特殊范围“*”,则与Accept-Language字段中存在的任何其他范围不匹配的每个标记匹配。

  注意:前缀匹配规则的这种使用并不意味着语言标签是以这样的方式分配给语言的,即如果用户理解具有特定标记的语言,那么该用户也将理解具有该标记为前缀的所有标记的语言。如果是这样的话,前缀规则只允许使用前缀标签。

   Accept-Language字段分配给语言标签的权重因子是与语言标签匹配的字段中最长的语言范围的权重值。如果字段中没有语言范围与标签匹配,则分配的语言权重值为0。如果请求中不存在Accept-Language字段头,则服务器应假定所有语言都同样可接受。如果存在Accept-Language字段头,则分配大于0的权重值的所有语言都是可接受的。

  在每次请求中发送带有用户完整语言首选项的Accept-Language报头可能与用户的隐私期望相反。有关这个问题的讨论,请参阅第15.1.4节。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxpxz.html