- From: Koen Holtman <koen@win.tue.nl>
- Date: Tue, 2 Sep 1997 20:27:58 +0200 (MET DST)
- To: http-wg%cuckoo.hpl.hp.com@hplb.hpl.hp.com
- Cc: Koen Holtman <koen@win.tue.nl>
In the Munich IETF meeting, Jim Gettys suggested that, if the Alternates header definition is taken out of the transparent content negotiation draft (draft-ietf-http-negotiation-03.txt) it would be possible for this WG to quickly reach consensus on making the Alternates header a Proposed Standard. There was some agreement on this from the room. The purpose of this message is to see if there is agreement on the mailing list too. Please speak up now, before I start seriously editing stuff, if you are (currently) opposed to creating a Proposed Standard for Alternates. I have made a preliminary go at putting together the Alternates header specification I think people want to proceed with. The result is below. Note that there are some loose ends with respect to syntax and terminology definitions. Comments are welcome. Koen. --snip-- 1 Alternates header definition When returning a particular piece of content, a server may wish to notify the client that this content is available in multiple versions, called variants. This can be done by including an Alternates header, which lists the available variants, in the response. The Alternates header can also be used in a response which does not include a version itself, but simply informs the client that multiple versions are available. The Alternates header describes all available variants the server has available. The description for each variant includes an URI from which this variant can be retrieved. The Alternates header can also contain directives for any subsequent negotiation process. Alternates = "Alternates" ":" variant-list variant-list = 1#( variant-description ; see section 2 | fallback-variant | list-directive ) fallback-variant = "{" <"> URI <"> "}" list-directive = extension-list-directive extension-list-directive = token [ "=" ( token | quoted-string ) ] An example is Alternates: {"paper.html.en" 0.9 {type text/html} {language en}}, {"paper.html.fr" 0.7 {type text/html} {language fr}}, {"paper.ps.en" 1.0 {type application/postscript} {language en}}, {"paper.html.en"}, x=y 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. 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. 2 Variant descriptions 2.1 Syntax A variant can be described in a machine-readable way with a variant description. variant-description = "{" <"> URI <"> source-quality *variant-attribute"}" source-quality = qvalue variant-attribute = "{" "type" media-type "}" | "{" "charset" charset "}" | "{" "language" 1#language-tag "}" | "{" "length" 1*DIGIT "}" | extension-attribute extension-attribute = "{" extension-name extension-value "}" extension-name = token extension-value = *( token | quoted-string | LWS | extension-specials ) extension-specials = <any element of tspecials except <"> and "}"> Examples are {"paper.2" 0.7 {type text/html} {language fr}} {"paper.5" 0.9 {type text/html} {length 1002}} {"paper.1" 0.001} The various attributes which can be present in a variant description are covered in the subsections below. Each attribute may appear only once in a variant description. 2.2 URI The URI attribute gives the URI of the resource from which the variant can be retrieved with a GET request. It can be absolute or relative to the Request-URI. The variant resource may vary (on the Cookie request header, for example), but MUST NOT engage in transparent content negotiation itself. 2.3 Source-quality The source-quality attribute gives the quality of the variant, as a representation of the negotiable resource, when this variant is rendered with a perfect rendering engine on the best possible output medium. If the source-quality is less than 1, it often expresses a quality degradation caused by a lossy conversion to a particular data format. For example, a picture originally in JPEG form would have a lower source quality when translated to the XBM format, and a much lower source quality when translated to an ASCII-art variant. Note however, that degradation is a function of the source; an original piece of ASCII-art may degrade in quality if it is captured in JPEG form. The source-quality could also represent a level of quality caused by skill of language translation, or ability of the used media type to capture the intended artistic expression. It is important that content providers do not assign very low source quality values without good reason, as this would limit the ability of users to influence the negotiation process with their own preference settings. The following table SHOULD be used as a guide when assigning source quality values: 1.000 perfect representation 0.900 threshold of noticeable loss of quality 0.800 noticeable, but acceptable quality reduction 0.500 barely acceptable quality 0.300 severely degraded quality 0.000 completely degraded quality Note that most meaningful values in this table are close to 1. This is due to the fact that quality factors are generally combined by multiplying them, not by adding them. When assigning source-quality values, content providers MUST NOT account for the size of the variant and its impact on transmission and rendering delays. Any constant rendering delay for a particular media type (for example due to the startup time of a helper application) SHOULD be accounted for by the user agent, when assigning a quality factor to that media type. 2.4 Type, charset, language, and length The type attribute of a variant description carries the same information as its Content-Type response header counterpart defined in [1], except for any charset information, which MUST be carried in the charset attribute. For, example, the header Content-Type: text/html; charset=ISO-8859-4 has the counterpart attributes {type text/html} {charset ISO-8859-4} The language and length attributes carry the same information as their Content-* response header counterparts in [1]. The length attribute, if present, MUST thus reflect the length of the variant alone, and not the total size of the variant and any objects inlined or embedded by the variant. Though all of these attributes are optional, it is often desirable to include as many attributes as possible, as this will increase the quality of the negotiation process. Note: A server is not required to maintain a one-to-one correspondence between the attributes in the variant description and the Content-* headers in the variant response. For example, if the variant description contains a language attribute, the response does not necessarily have to contain a Content-Language header. If a Content-Language header is present, it does not have to contain an exact copy of the information in the language attribute. 2.5 Extension-attribute The extension-attribute allows future specifications to incrementally define dimensions of negotiation which cannot be created by using the feature negotiation framework, and eases content negotiation experiments. In experimental situations, servers MUST ONLY generate extension-attributes whose names start with "x-". User agents SHOULD ignore all extension attributes they do not recognize. Proxies SHOULD NOT do any negotiation processing for a response if an extension attribute unknown to them is present in the variant list. They SHOULD forward the response unchanged towards the user agent instead. The extension names "features" and "description" are reserved by this specification for use in experiments with `transparent content negotiation'. ---snip---
Received on Tuesday, 2 September 1997 11:31:09 UTC