rfc2295.txt
来自「中、英文RFC文档大全打包下载完全版 .」· 文本 代码 · 共 1,711 行 · 第 1/5 页
TXT
1,711 行
An algorithm with the version number X.Y, with Y>0, MUST be downwards compatible with all algorithms from X.0 up to X.Y. Downwards compatibility means that, if supplied with the same information, the newer algorithm MUST make the same choice, or a better choice, as the old algorithm. There are no compatibility requirements between algorithms with different major version numbers.8 Content negotiation status codes and headers This specification adds one new HTTP status code, and introduces six new HTTP headers. It also extends the semantics of an existing HTTP/1.1 header.8.1 506 Variant Also Negotiates The 506 status code indicates that the server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.Holtman & Mutz Experimental [Page 25]RFC 2295 Transparent Content Negotiation March 19988.2 Accept-Features The Accept-Features request header can be used by a user agent to give information about the presence or absence of certain features in the feature set of the current request. Servers can use this information when running a remote variant selection algorithm. Note: the name `Accept-Features' for this header was chosen because of symmetry considerations with other Accept- headers, even though the Accept-Features header will generally not contain an exhaustive list of features which are somehow `accepted'. A more accurate name of this header would have been `Feature-Set- Info'. Accept-Features = "Accept-Features" ":" #( feature-expr *( ";" feature-extension ) ) feature-expr = [ "!" ] ftag | ftag ( "=" | "!=" ) tag-value | ftag "=" "{" tag-value "}" | "*" feature-extension = token [ "=" ( token | quoted-string ) ] No feature extensions are defined in this specification. An example is: Accept-Features: blex, !blebber, colordepth={5}, !screenwidth, paper = A4, paper!="A2", x-version=104, * The different feature expressions have the following meaning: ftag ftag is present !ftag ftag is absent ftag=V ftag is present with the value V ftag!=V ftag is present, but not with the value V ftag={V} ftag is present with the value V, and not with any other values * the expressions in this header do not fully describe the feature set: feature tags not mentioned in this header may also be present, and, except for the case ftag={V}, tags may be present with more values than mentioned.Holtman & Mutz Experimental [Page 26]RFC 2295 Transparent Content Negotiation March 1998 Absence of the Accept-Features header in a request is equivalent to the inclusion of Accept-Features: * By using the Accept-Features header, a remote variant selection algorithm can sometimes determine the truth value of a feature predicate on behalf of the user agent. For example, with the header Accept-Features: blex, !blebber, colordepth={5}, !screenwidth, paper = A4, paper!="A2", x-version=104, * the algorithm can determine that the following predicates are true: blex, colordepth=[4-], colordepth!=6, colordepth, !screenwidth, paper=A4, colordepth=[4-6] and that the following predicates are false: !blex, blebber, colordepth=6, colordepth=foo, !colordepth, screenwidth, screenwidth=640, screenwidth!=640, but the truth value of the following predicates cannot be determined: UA-media=stationary, UA-media!=screen, paper!=a0, x-version=[100-300], x-version=[200-300], x-version=99, UA-media=screen, paper=A0, paper=a4, x-version=[100-199], wuxta8.3 Alternates The Alternates response header is used to convey the list of variants bound to a negotiable resource. This list can also include directives for any content negotiation process. If a response from a transparently negotiable resource includes an Alternates header, this header MUST contain the complete variant list bound to the negotiable resource. Responses from resources which do not support transparent content negotiation MAY also use Alternates headers. Alternates = "Alternates" ":" variant-list variant-list = 1#( variant-description | fallback-variant | list-directive ) fallback-variant = "{" <"> URI <"> "}" list-directive = ( "proxy-rvsa" "=" <"> 0#rvsa-version <"> )Holtman & Mutz Experimental [Page 27]RFC 2295 Transparent Content Negotiation March 1998 | extension-list-directive extension-list-directive = token [ "=" ( token | quoted-string ) ] An example is Alternates: {"paper.1" 0.9 {type text/html} {language en}}, {"paper.2" 0.7 {type text/html} {language fr}}, {"paper.3" 1.0 {type application/postscript} {language en}}, proxy-rvsa="1.0, 2.5" Any relative URI specified in a variant-description or fallback- variant field is relative to the request-URI. Only one fallback- variant field may be present. If the variant selection algorithm of the user agent finds that all described variants are unacceptable, then it SHOULD choose the fallback variant, if present, as the best variant. If the user agent computes the overall quality values of the described variants, and finds that several variants share the highest value, then the first variant with this value in the list SHOULD be chosen as the best variant. The proxy-rvsa directive restricts the use of remote variant selection algorithms by proxies. If present, a proxy MUST ONLY use algorithms which have one of the version numbers listed, or have the same major version number and a higher minor version number as one of the versions listed. Any restrictions set by proxy-rvsa come on top of the restrictions set by the user agent in the Negotiate request header. The directive proxy-rvsa="" will disable variant selection by proxies entirely. Clients SHOULD ignore all extension-list- directives they do not understand. A variant list may contain multiple differing descriptions of the same variant. This can be convenient if the variant uses conditional rendering constructs, or if the variant resource returns multiple representations using a multipart media type.8.4 Negotiate The Negotiate request header can contain directives for any content negotiation process initiated by the request. Negotiate = "Negotiate" ":" 1#negotiate-directive negotiate-directive = "trans" | "vlist" | "guess-small"Holtman & Mutz Experimental [Page 28]RFC 2295 Transparent Content Negotiation March 1998 | rvsa-version | "*" | negotiate-extension negotiate-extension = token [ "=" token ] Examples are Negotiate: 1.0, 2.5 Negotiate: * The negotiate directives have the following meaning "trans" The user agent supports transparent content negotiation for the current request. "vlist" The user agent requests that any transparently negotiated response for the current request includes an Alternates header with the variant list bound to the negotiable resource. Implies "trans". "guess-small" The user agent allows origin servers to run a custom algorithm which guesses the best variant for the request, and to return this variant in a choice response, if the resulting choice response is smaller than or not much larger than a list response. The definition of `not much larger' is left to origin server heuristics. Implies "vlist" and "trans". rvsa-version The user agent allows origin servers and proxies to run the remote variant selection algorithm with the indicated version number, or with the same major version number and a higher minor version number. If the algorithm has sufficient information to choose a best, neighboring variant, the origin server or proxy MAY return a choice response with this variant. Implies "trans". "*" The user agent allows origin servers and proxies to run any remote variant selection algorithm. The origin server may even run algorithms which have not been standardized. If the algorithm has sufficient information to choose a best, neighboring variant, the origin server or proxy MAY return a choice response with this variant. Implies "trans".Holtman & Mutz Experimental [Page 29]RFC 2295 Transparent Content Negotiation March 1998 Servers SHOULD ignore all negotiate-directives they do not understand. If the Negotiate header allows a choice between multiple remote variant selection algorithms which are all supported by the server, the server SHOULD use some internal precedence heuristics to select the best algorithm.8.5 TCN The TCN response header is used by a server to signal that the resource is transparently negotiated. TCN = "TCN" ":" #( response-type | server-side-override-directive | tcn-extension ) response-type = "list" | "choice" | "adhoc" server-side-override-directive = "re-choose" | "keep" tcn-extension = token [ "=" ( token | quoted-string ) ] If the resource is not transparently negotiated, a TCN header MUST NOT be included in any response. If the resource is transparently negotiated, a TCN header, which includes the response-type value of the response, MUST be included in every response with a 2xx status code or any 3xx status code, except 304, in which it MAY be included. A TCN header MAY also be included, without a response-type value, in other responses from transparently negotiated resources. A server-side override directive MUST be included if the origin server performed a server-side override when choosing the response. If the directive is "re-choose", the server MUST include an Alternates header with the variant bound to the negotiable resource in the response, and user agent SHOULD use its internal variant selection algorithm to choose, retrieve, and display the best variant from this list. If the directive is "keep" the user agent SHOULD NOT renegotiate on the response, but display it directly, or act on it directly if it is a redirection response. Clients SHOULD ignore all tcn-extensions they do not understand.8.6 Variant-Vary The Variant-Vary response header can be used in a choice response to record any vary information which applies to the variant data (the entity body combined with some of the entity headers) contained in the response, rather than to the response as a whole.Holtman & Mutz Experimental [Page 30]RFC 2295 Transparent Content Negotiation March 1998 Variant-Vary = "Variant-Vary" ":" ( "*" | 1#field-name ) Use of the Variant-Vary header is discussed in section 10.2.9 Cache validators To allow for correct and efficient caching and revalidation of negotiated responses, this specification extends the caching model of HTTP/1.1 [1] in various ways. This specification does not introduce a `variant-list-max-age' directive which explicitly bounds the freshness lifetime of a cached variant list, like the `max-age' Cache-Control directive bounds the freshness lifetime of a cached response. However, this specification does ensure that a variant list which is sent at a time T by the origin server will never be re-used without revalidation by semantically transparent caches after the time T+M. This M is the maximum of all freshness lifetimes assigned (using max-age directives or Expires headers) by the origin server to a. the responses from the negotiable resource itself, and b. the responses from its neighboring variant resources If
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?