"Accept"头字段可以被用户代理用来指定可接受的响应媒体类型。Accept头字段可以被用于指示请求时特别限制为描述类型的一个小集合,如一个行内图片的请求的情况。
Accept = #( media-range [ accept-params ] ) media-range = ( "*/*" / ( type "/" "*" ) / ( type "/" subtype ) ) *( OWS ";" OWS parameter ) accept-params = weight *( accept-ext ) accept-ext = OWS ";" OWS token [ "=" ( token / quoted-string ) ]
星号“*”被用于聚合媒体类型为一个范围,“*/*”表示所有的媒体类型,"type/*"表示所有那个类型的所有子类型。媒体范围可以包括那个范围可接收的媒体类型参数。
每个媒体范围可能跟随零个或多个可接受的媒体参数(例如,字符集),一个可选的“q”参数用于指明相对权重(5.3.1节),以及零个或多个扩展参数。如果由任何扩展存在,“q”参数时必要的因为它作为两个参数集之间的分隔符。
注意:使用“q”参数名称将媒体类型参数与接受扩展参数分开是由于历史惯例。虽然这可以防止任何名为“q”的媒体类型参数与媒体范围一起使用,但是由于IANA媒体类型注册表中缺少任何“q”参数以及在Accept中使用任何媒体类型参数的罕见,这种事件被认为是不太可能的。未来的媒体类型不鼓励注册任何名为“q”的参数。
例如
Accept: audio/*; q=0.2, audio/basic
被解读为“我优先audio/basic,但是如果有媒体类型在质量降低80%的情况下是最好的,那就给我发送这个类型。”
没有任何Accept头字段的请求暗示用户代理将在响应中接收任何媒体类型。如果头字段在请求中出现并且响应的可用表示都没有被列为可接受的媒体类型。原始服务器可以通过发送406(不可接受)响应来承认头字段,或者通过将响应视为不受内容协商的约束来忽略头字段。
一个更详细的例子是:
Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c
术语上这将被解释为“text/html和text/x-c是同样优先的媒体类型,但是如果他们不存在,那么发送text/x-dvi的表示,如果这也不存在,发送text/plain的表示”
媒体范围可以被更具体的媒体范围或媒体类型复写。如果超过一个媒体范围被用于给定的类型,最具体的参考优先。例如,
Accept: text/*, text/plain, text/plain;format=flowed, */*
有下列优先权:
1. text/plain;format=flowed
2. text/plain
3. text/*
4. */*
与给定类型相关联的媒体类型质量因子通过找到具有与该类型匹配的最高优先级的媒体范围来确定。例如,
Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5
将会导致以下值相关联:
+-------------------+---------------+ | Media Type | Quality Value | +-------------------+---------------+ | text/html;level=1 | 1 | | text/html | 0.7 | | text/plain | 0.3 | | image/jpeg | 0.5 | | text/html;level=2 | 0.4 | | text/html;level=3 | 0.7 | +-------------------+---------------+
注意:对于确定的媒体范围,用户代理可能被提供一个默认的质量值集合。然而,除非用户代理是不能与其他翻译代理交互的一个封闭系统,否则这个默认集合应该是用户可配置的。