/[suikacvs]/webroot/www/2004/id/draft-holtman-http-negotiation-01.txt
Suika

Contents of /webroot/www/2004/id/draft-holtman-http-negotiation-01.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Tue Jun 15 08:04:04 2004 UTC (20 years, 10 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/plain
New

1 wakaba 1.1 Internet-Draft Koen Holtman/TUE
2     Expires: 13 December 1996 13 June 1996
3    
4    
5     Transparent Content Negotiation
6    
7     draft-holtman-http-negotiation-01.txt
8    
9    
10     STATUS OF THIS MEMO
11    
12     This document is an Internet-Draft. Internet-Drafts are
13     working documents of the Internet Engineering Task Force
14     (IETF), its areas, and its working groups. Note that other
15     groups may also distribute working documents as
16     Internet-Drafts.
17    
18     Internet-Drafts are draft documents valid for a maximum of
19     six months and may be updated, replaced, or obsoleted by
20     other documents at any time. It is inappropriate to use
21     Internet-Drafts as reference material or to cite them other
22     than as "work in progress".
23    
24     To learn the current status of any Internet-Draft, please
25     check the "1id-abstracts.txt" listing contained in the
26     Internet-Drafts Shadow Directories on ftp.is.co.za
27     (Africa), nic.nordu.net (Europe), munnari.oz.au (Pacific
28     Rim), ds.internic.net (US East Coast), or ftp.isi.edu (US
29     West Coast).
30    
31     Distribution of this document is unlimited. Please send
32     comments to the HTTP working group at
33     <http-wg@cuckoo.hpl.hp.com>. Discussions of the working
34     group are archived at
35     <URL:http://www.ics.uci.edu/pub/ietf/http/>. General
36     discussions about HTTP and the applications which use HTTP
37     should take place on the <www-talk@w3.org> mailing list.
38    
39    
40     ABSTRACT
41    
42     HTTP/1.1 will allow one to put multiple versions of the same
43     information under a single URL. Transparent content negotiation
44     is a mechanism, layered on top of HTTP/1.1, for selecting the
45     best version when a retrieval request is made. This document
46     outlines the planned transparent negotiation mechanism, and
47     identifies some issues and tradeoffs that have yet to be
48     addressed.
49    
50    
51    
52    
53    
54    
55    
56    
57     [Page 1]
58    
59     Internet-Draft Content Negotiation 13 June 1996
60    
61     1 Introduction
62    
63     Transparent content negotiation is a mechanism layered on top of the
64     HTTP/1.1 protocol [1]. HTTP/1.1 will allow one to put multiple
65     versions of the same information under a single URL. Each of these
66     versions is called a `variant'. Transparent content negotiation is a
67     mechanism for selecting the best variant when a retrieval request is
68     made. This document outlines the planned transparent content
69     negotiation mechanism, and identifies some issues and tradeoffs that
70     have yet to be addressed.
71    
72    
73     2 Overview of HTTP transparent content negotiation
74    
75     This section contains an extended version of the HTTP content
76     negotiation presentation given by the author at the Fifth
77     International WWW Conference in Paris. This section tries to avoid
78     the use of terminology local to the IETF http-wg. For example, the
79     term `URL' is used instead of `URI'.
80    
81    
82     2.1 Content negotiation
83    
84     HTTP/1.1 will allow one to put multiple versions of the same
85     information under a single URL. Each of these versions is called a
86     `variant'. For example, a URL http://x.org/paper could bind to three
87     different variants of a paper:
88    
89     1. HTML, English
90     2. HTML, French
91     3. Postscript, English
92    
93     Content negotiation is the process by which the best variant is
94     selected if the URL is accessed.
95    
96     It has always been possible under HTTP to have multiple
97     representations available for one URL, and to return the most
98     appropriate representation for each subsequent request. However,
99     HTTP/1.1 is the first version of HTTP which has provisions for doing
100     this in a cache-friendly way. These provisions include the Vary
101     response header, entity tags, and the If-None-Match request header.
102    
103     In content negotiation, the selection of the best variant for a
104     particular request is based on a matching of the properties of the
105     available variants to the capabilities of the user agent and the
106     preferences of the user.
107    
108    
109     2.2 HTTP/1.0 variant selection scheme
110    
111     Under the HTTP/1.0 scheme, the variant selection happens as follows:
112    
113    
114    
115    
116    
117     [Page 2]
118    
119     Internet-Draft Content Negotiation 13 June 1996
120    
121     Server _____ proxy _____ proxy _____ user
122     x.org cache cache agent
123    
124     < ----------------------------------
125     | GET http://x.org/paper
126     | Accept headers
127     choose
128     |
129     ---------------------------------- >
130     Best variant
131    
132     When the URL is accessed, the user agent sends, along with its
133     request, various Accept headers which express the user agent
134     capabilities and the user preferences. Then, the origin server uses
135     these Accept headers to choose the best variant, which is returned
136     in the response.
137    
138     The biggest problem with this scheme is that it does not scale well.
139     For all but the most minimal user agents, Accept headers expressing
140     all capabilities and preferences would be very large, and sending
141     them in every request would be hugely inefficient, in particular
142     because only a small fraction of the URLs on the web will have
143     multiple variants.
144    
145     In current practice, user agents send short Accept headers which
146     inadequately describe capabilities and preferences, except maybe for
147     inline image requests. Servers providing multiple representations of
148     the same information usually do so under different URLs, and allow
149     users to manually select a representation by clicking a particular
150     link.
151    
152     Also in current practice, servers often use the contents of the
153     User-Agent request header for selection purposes. These contents
154     sometimes allow the server to infer information about capabilities
155     which cannot be expressed with existing Accept headers.
156    
157    
158     2.3 Transparent content negotiation scheme
159    
160     The transparent negotiation scheme eliminates the need to send huge
161     Accept headers, and nevertheless allows for a selection process that
162     always yields either the best variant, or an error message indicating
163     that user agent is not capable of displaying any of the available
164     variants.
165    
166     Under the transparent content negotiation scheme, the server sends a
167     list with the available variants and their properties to the user
168     agent. An example of a list with three variants is
169    
170     {"paper.html.en" 0.9 {type text/html} {language en}},
171     {"paper.html.fr" 0.7 {type text/html} {language fr}},
172     {"paper.ps.en" 1.0 {type application/postscript} {language en}}
173    
174     The syntax and semantics of the variant descriptions in this list are
175     covered in depth in Section 3. When the list is received, the user
176    
177     [Page 3]
178    
179     Internet-Draft Content Negotiation 13 June 1996
180    
181     agent can choose the best variant and retrieve it. Graphically, the
182     communication can be represented as follows:
183    
184     Server _____ proxy _____ proxy _____ user
185     x.org cache cache agent
186    
187     < ----------------------------------
188     | GET http://x.org/paper
189     |
190     ----------------------------------- >
191     return of list |
192     choose
193     |
194     < ----------------------------------
195     | GET http://x.org/paper.html.en
196     |
197     ---------------------------------- >
198     return of html.en
199    
200     With this scheme, the information about capabilities and preferences
201     is only used by the user agent itself. Therefore, the sending of
202     such information in large Accept headers is unnecessary. Accept
203     headers do have a limited use in transparent content negotiation
204     however: the sending of small Accept headers can often speed up the
205     negotiation process, this is covered in Section 2.4.
206    
207     According to current plans, the response that returns the list in the
208     above picture will look as follows, with the list of variants in the
209     Alternates header:
210    
211     HTTP/1.1 300 Multiple Choices
212     Date: Tue, 11 Jun 1996 19:39:48 GMT
213     Alternates: {"paper.html.en" 0.9 {type text/html} {language en}},
214     {"paper.html.fr" 0.7 {type text/html} {language fr}},
215     {"paper.ps.en" 1.0 {type application/postscript}
216     {language en}}
217     Vary: accept, accept-language
218     Content-Type: text/html
219     Content-Length: 227
220    
221     <h2>Multiple Choices:</h2>
222     <ul>
223     <li><a href=paper.html.en>HTML, English version</a>
224     <li><a href=paper.html.fr>HTML, French version</a>
225     <li><a href=paper.ps.en>Postscript, English version</a>
226     </ul>
227    
228     The HTML page included in the response is intended for compatibility
229     with (existing) user agents which do not support transparent content
230     negotiation. Such user agents will ignore the computer-readable list
231     in the Alternates header and just display the HTML page, allowing the
232     user to select the best variant by hand.
233    
234     [##Issue to be resolved: Some existing HTTP/1.0 user agents crash
235     when getting a 300 response without a Location header. This problem
236    
237     [Page 4]
238    
239     Internet-Draft Content Negotiation 13 June 1996
240    
241     may be big enough to warrant use of a response code outside of the
242     3xx class, at least for responses to HTTP/1.0 clients.##]
243    
244    
245     2.4 Cutting corners
246    
247     The basic transparent negotiation scheme involves two HTTP
248     transactions: one to retrieve the list, and a second one to retrieve
249     the chosen variant. There are however several ways to `cut corners'
250     in the data flow path of the basic scheme.
251    
252     First, caching proxies can cache both lists and responses from
253     variant URLs. Such caching can reduce the communication overhead, as
254     shown in the following example:
255    
256     Server _____ proxy _____ proxy __________ user
257     x.org cache cache agent
258    
259     < --------------
260     | GET ../paper
261     |
262     has the list
263     in cache
264     |
265     ------------- >
266     list |
267     |
268     choose
269     |
270     < --------------------------
271     | GET ../paper.html.en
272     |
273     has the variant
274     in cache
275     |
276     -------------------------- >
277     return of html.en
278    
279     Second, the user agent can send small Accept headers which could
280     allow a server to determine the choice the user agent would make on
281     receiving the list. If the Accept headers contain enough
282     information, the origin server can send back the variant directly:
283    
284     Server _____ proxy _____ proxy _____ user
285     x.org cache cache agent
286    
287     < ----------------------------------
288     | GET http://x.org/paper
289     | small Accept headers
290     |
291     able to choose on
292     behalf of user agent
293     |
294     ---------------------------------- >
295     return of html.en and list
296    
297     [Page 5]
298    
299     Internet-Draft Content Negotiation 13 June 1996
300    
301    
302    
303     According to current plans, the response that returns the html.en
304     variant and the list in the above picture will look as follows:
305    
306     HTTP/1.1 200 OK
307     Date: Tue, 11 Jun 1996 19:51:02 GMT
308     Alternates: {"paper.html.en" 0.9 {type text/html} {language en}},
309     {"paper.html.fr" 0.7 {type text/html} {language fr}},
310     {"paper.ps.en" 1.0 {type application/postscript}
311     {language en}}
312     Vary: accept, accept-language
313     Content-Location: paper.html.en
314     Content-Type: text/html
315     Last-Modified: Mon, 10 Jun 1996 10:01:14 GMT
316     Etag: "gonkyyyy"
317     Content-Length: ...
318    
319     ...
320    
321     Finally, the above two kinds of optimization can be combined: a
322     caching proxy which has the list will sometimes be able to choose on
323     behalf of the user agent. This could lead to the following
324     communication pattern:
325    
326     Server _____ proxy _____ proxy __________ user
327     x.org cache cache agent
328    
329     < ---------------
330     | GET ../paper
331     | small Accept
332     |
333     able to choose
334     on behalf
335     |
336     < ----------
337     | GET ../paper.html.en
338     |
339     -----------
340     html.en |
341     ---------------- >
342     html.en and list
343    
344    
345     2.5 The network negotiation algorithm
346    
347     To allow for the second optimization above, choosing on behalf of the
348     user agent, transparent content negotiation will standardize the
349     so-called network negotiation algorithm.
350    
351     The algorithm will take as input
352    
353     - the list of variants of a transparently negotiable URL
354    
355     - the (small) Accept headers of an incoming request on that URL
356    
357     [Page 6]
358    
359     Internet-Draft Content Negotiation 13 June 1996
360    
361    
362     and will yield as output the appropriate action to be performed by
363     the proxy cache or origin server. Proxy caches are required to
364     either perform this appropriate action or to perform any other action
365     allowed by the HTTP/1.1 standard. Origin servers are not required to
366     follow the network negotiation algorithm.
367    
368     If the request was made by a user agent capable of transparent
369     negotiation, the algorithm can yield two possible actions:
370    
371     A) Choice on behalf of the user agent:
372     A particular variant X may be retrieved and returned on behalf
373     of the user agent.
374    
375     B) No choice possible, return the list:
376     The Accept headers do not contain sufficient information to
377     make a choice on behalf of the user agent possible: the list of
378     variants should be returned so that the user agent can make the
379     choice itself.
380    
381     If the request was made by an (old) user agent not capable of
382     transparent negotiation, the algorithm can yield three possible
383     actions:
384    
385     C) Choice on behalf of the origin server:
386     A particular variant X may be retrieved and returned on behalf
387     of the origin server
388    
389     D) No choice possible, return a cached 300 response:
390     The Accept headers do not contain sufficient information to
391     make a choice on behalf of the origin server possible, and a
392     cached or freshly retrieved 300 response should be returned,
393     allowing the user to manually select the best variant
394    
395     E) No choice possible, forward request towards the origin server:
396     The Accept headers do not contain sufficient information to
397     make a choice on behalf of the origin server possible, and the
398     request should be forwarded towards the origin server so that
399     it can choose the best variant with a custom negotiation
400     algorithm.
401    
402     [##Issue to be resolved: though several definitions of subsets of the
403     network negotiation algorithm exist, the algorithm has not been fully
404     defined yet. A mechanism for deciding between D) and E) has not yet
405     been discussed.##]
406    
407     As the network negotiation algorithm is only an optimization device,
408     complete or partial implementation of the algorithm by proxies is
409     optional. To support transparent content negotiation, a HTTP/1.1
410     proxy need only follow the caching rules defined in the HTTP/1.1
411     specification.
412    
413     The core computations performed by the network negotiation algorithm
414     are based on quality factors, which are short real numbers in the
415    
416    
417     [Page 7]
418    
419     Internet-Draft Content Negotiation 13 June 1996
420    
421     range 0.000 -- 1.000. These factors appear in variant lists and in
422     Accept headers.
423    
424     2.5.1 Network negotiation algorithm example 1
425    
426     As an example, if a variant list contains the variant description
427    
428     {"paper.html.en" 0.7 {type text/html} {language fr}}
429    
430     and if the request contains the following Accept headers:
431    
432     Accept: text/html:q=1.0, */*:q=0.8, transparent
433     Accept-Language: en;q=1.0, fr;q=0.5
434    
435     the network negotiation algorithm will compute an `overall quality'
436     for the variant by multiplying quality factors as follows:
437    
438     {"paper.html.en" 0.7 {type text/html} {language fr}}
439     | | |
440     | | |
441     V V V
442     0.7 * 1.0 * 0.5 = 0.35
443    
444     The 1.0 above is the quality factor assigned to "text/html" by the
445     Accept header, the 0.5 is the quality factor assigned to "fr" by the
446     Accept-Language header. The overall quality of this variant is 0.35.
447    
448     With the above Accept headers, the complete variant list
449    
450     {"paper.html.en" 0.9 {type text/html} {language en}},
451     {"paper.html.fr" 0.7 {type text/html} {language fr}},
452     {"paper.ps.en" 1.0 {type application/postscript}
453     {language en}}
454    
455     would yield the following computations:
456    
457     paper.html.en: 0.9 * 1.0 * 1.0 = 0.9
458     paper.html.fr: 0.7 * 1.0 * 0.5 = 0.35
459     paper.ps.en: 1.0 * 0.8 * 1.0 = 0.8
460    
461     The variant with the highest overall quality, "paper.html.en" in this
462     case, is the variant that seems most acceptable to the user agent.
463    
464     [##Aside for mathematicians: note that this calculation scheme has
465     similarities with fuzzy set theory. As far as I know, fuzzy set
466     theory was not involved when the scheme was thought up.##]
467    
468     The inclusion of the word `transparent' in the received Accept header
469    
470     Accept: text/html:q=1.0, */*:q=0.8, transparent
471    
472     indicates that the user agent is capable of transparent negotiation.
473     The second stage of the network negotiation algorithm will therefore
474     have to choose between two possible end results:
475    
476    
477     [Page 8]
478    
479     Internet-Draft Content Negotiation 13 June 1996
480    
481     A) Choice on behalf of the user agent:
482     The variant paper.html.en may be retrieved and returned on
483     behalf of the user agent.
484    
485     B) No choice possible, return the list:
486     The Accept headers do not contain sufficient information to
487     make a choice on behalf of the user agent possible.
488    
489     The choice is made by examining the Accept header components used to
490     derive the best overall quality value of 0.9 for paper.html.en:
491    
492     text/html:q=1.0
493     en;q=1.0
494    
495     If none of these components contain a wildcard character *, as is the
496     case here, the appropriate action is A). If a wildcard character is
497     present, the appropriate action is B).
498    
499     2.5.2 Network negotiation algorithm example 2
500    
501     If the same variant list is matched to the following shorter Accept
502     headers:
503    
504     Accept: */*:q=1.0, transparent
505     Accept-Language: en;q=1.0, fr;q=0.5
506    
507     the calculations would as follows:
508    
509     paper.html.en: 0.9 * 1.0 * 1.0 = 0.9
510     paper.html.fr: 0.7 * 1.0 * 0.5 = 0.35
511     paper.ps.en: 1.0 * 1.0 * 1.0 = 1.0
512    
513     Now, paper.ps.en is the best candidate. However, if the Accept
514     header components used to derive the best overall quality value of
515     1.0 are examined:
516    
517     */*:q=1.0
518     en;q=1.0
519    
520     it is found that a wildcard character * is present. Therefore, the
521     algorithm yields the result
522    
523     B) No choice possible, return the list:
524     The Accept headers do not contain sufficient information to
525     make a choice on behalf of the user agent possible.
526    
527     Note that the interpretation of */*:q=1.0, if sent by a user agent
528     supporting transparent negotiation, is therefore not
529    
530     `I accept all media types with a quality of 1.0'
531    
532     but
533    
534    
535    
536    
537     [Page 9]
538    
539     Internet-Draft Content Negotiation 13 June 1996
540    
541     `I accept several media types, and assign quality factors from 0.0
542     up to 1.0 to them. If this information is insufficient to make a
543     choice on my behalf, do not make a choice but send the list of
544     variants'.
545    
546     This means that a user agent can always send the short
547    
548     Accept: */*, transparent
549    
550     by default, without this affecting the quality of the negotiation
551     process. If it is found that requests to the server often return 300
552     responses, the user agent can try to dynamically extend the Accept
553     header sent in requests to that server, for example to
554    
555     Accept: text/html, application/postscript:q=0.8,
556     */*, transparent
557    
558     to increase the chance that the network negotiation algorithm will be
559     able to optimize the retrieval process. A good strategy for dynamic
560     extension would be to extend the Accept header with those media types
561     mentioned in the variant lists of past (300) responses from the
562     server.
563    
564    
565     2.6 Retrieving a variant by hand
566    
567     If a transparently negotiated resource is accessed, the user agent
568     will always at some point receive the list of available variants.
569     The user agent can use this list to make available a menu (in HTML or
570     not) which lists all variants and their characteristics to the user.
571     Such a menu will allow the user to randomly browse other variants,
572     and will also make it possible to manually correct any sub-optimal
573     choice made by the automatic negotiation process.
574    
575    
576     2.7 Dimensions of negotiation
577    
578     Transparent content negotiation defines four dimensions of
579     negotiation:
580    
581     1. Media type (MIME type)
582     2. Charset
583     3. Language
584     4. Features
585    
586     The first three dimensions have traditionally been present in HTTP,
587     the fourth dimension is added by the transparent content negotiation
588     specification.
589    
590     Additional dimensions, beyond the four mentioned above, could be
591     added by future specifications.
592    
593     Negotiation on the content encoding of a response (gzipped,
594     compressed, etc.) is left outside of the realm of transparent
595     negotiation. Transparent negotiation does not prohibit proxies to
596    
597     [Page 10]
598    
599     Internet-Draft Content Negotiation 13 June 1996
600    
601     encode or decode a relayed or cached response on the fly: the
602     response still contains the same variant as far as transparent
603     negotiation is concerned.
604    
605    
606     2.8 Feature negotiation
607    
608     Feature negotiation intends to provide for all areas of negotiation
609     not covered by the first three dimensions. Examples are negotiation
610     on
611    
612     * HTML extensions
613     * Extensions of non-HTML media types
614     * Color capabilities of the user agent
615     * Output medium (screen, paper, ...)
616     * Preference for speed vs. preference for graphical detail
617    
618     The feature negotiation framework is the main means by which
619     transparent negotiation offers extensibility: a new dimension of
620     negotiation (really a sub-dimension of the feature dimension) can be
621     added without the need for a new standards effort, by the simple
622     registration of a `feature tag'.
623    
624     2.8.1 Feature tags
625    
626     A feature tag identifies a capability of a user agent or a preference
627     of a user. A feature is said to be `present' in a user agent if the
628     corresponding capability is implemented, or if the user has expressed
629     corresponding preference.
630    
631     Examples of feature tags are
632    
633     ns_tables, fonts, monochrome, textonly
634    
635     Note that it sometimes depends on context whether a feature tag
636     expresses a capability or a preference. For a text-only browser, the
637     `textonly' tag is naturally present, but the user of a graphical
638     browser could set the tag to be present if text-only content is
639     preferred to graphical content.
640    
641     The `feature set' of a user agent contains all tags of the features
642     present in the user agent for the current request. In general, the
643     part of the feature set which reflects capabilities will be
644     hard-coded in the user agent binary or in a user agent library file,
645     and the part which reflects preferences will have been configured by
646     the user.
647    
648     As feature registration will be an ongoing process, it is generally
649     not possible for a user agent to know the meaning of all feature tags
650     it can possibly encounter in a variant description. A user agent
651     should assume that all feature tags unknown to it are not in its
652     feature set.
653    
654    
655    
656    
657     [Page 11]
658    
659     Internet-Draft Content Negotiation 13 June 1996
660    
661     2.8.2 Feature tag registration
662    
663     According to current plans, everybody will be allowed to register
664     feature tags: registration only requires that the tag follows the
665     syntax rules, and that a definition of the meaning of the tag is
666     supplied. In particular, registration will not require actual
667     implementation of a feature, and there will be no test on whether the
668     feature definition overlaps with another feature definition.
669    
670     The feature negotiation mechanism is designed not to break if 1000+
671     features, partially overlapping, are registered. It is expected that
672     after the introduction of feature negotiation, an explosion in
673     feature tag registration will occur, and that only some of these tags
674     will end up being actively used to label variants. Web indexing
675     robots could, while traversing the web, gather statistics about
676     actual use of feature tags. These statistics could be used by
677     individuals to compile lists, intended for content authors, of useful
678     feature tags for particular areas of negotiation. Note that this
679     indexing activity is orthogonal to the feature registration process.
680     It is expected that, once an area of negotiation is well-understood,
681     this process will converge on a commonly-used and commonly-recognized
682     set of feature tags for that area.
683    
684     [##Issue to be resolved: it is unclear yet whether it is desirable
685     for feature tags to have some hierarchical structure, which would
686     make it easier, for example, to trace who registered the feature.
687     All that is known now is that it is desirable to have short feature
688     tags. A naming scheme like that for SGML-DTDs or PEP protocol names
689     would probably yield feature tags which are too long. The main
690     advantage of having a registration process at all is that it allows
691     for short tags without running the risk of `tag collision'.##]
692    
693     2.8.3 Use of feature tags
694    
695     Feature tags can be used in variant lists to express the quality
696     degradation associated with the presence or absence of certain
697     features. This is covered in depth in Section 4.4. One example is
698    
699     {"index.html.plain" 0.7 {type text/html} },
700     {"index.html" 1.0 {type text/html}
701     {features ns_tables ns_frames} }
702    
703     Here, the "{features ns_tables ns_frames}" part expresses that
704     index.html uses the features tagged as ns_tables and ns_frames. If
705     these features are absent, the overall quality of index.html degrades
706     to 0. Another example is
707    
708     {"home.graphics" 1.0 {type text/html} {features !textonly} },
709     {"home.textonly" 0.7 {type text/html} }
710    
711     where the "{features !textonly}" part expresses that home.graphics
712     requires the absence of the textonly feature. If the feature is
713     present, the overall quality of home.graphics degrades to 0.
714    
715    
716    
717     [Page 12]
718    
719     Internet-Draft Content Negotiation 13 June 1996
720    
721     The absence of a feature need not always degrade the overall quality
722     to 0. In the example
723    
724     {"x.html.1" 1.0 {type text/html} {features fonts/0.7}}
725    
726     the absence of the fonts feature degrades the quality with a factor
727     of 0.7. "fonts/0.7" can be pronounced as "fonts, or a degradation of
728     0.7". In the example
729    
730     {"x.html.2" 0.5 {type text/html} {features fonts:1.5}}
731    
732     the presence of the fonts feature improves the overall quality with a
733     factor of 1.5. If the fonts feature is absent, the overall quality is
734     not affected. "fonts:1.5" can be pronounced as "fonts improves with
735     1.5". Finally, in the example
736    
737     {"y.html" 1.0 {type text/html} {features [blebber wolx] } }
738    
739     The "[blebber wolx]" expresses that y.html.1 requires the presence of
740     the blebber feature or the wolx feature. This construct can be used
741     in a number of cases:
742    
743     1. blebber and wolx actually tag the same feature, but they
744     were registered by different people, and some browsers say
745     they support blebber while others say they support wolx.
746    
747     2. blebber and wolx are HTML tags of different vendors which
748     implement the same functionality, and which were used
749     together in y.html without interference.
750    
751     3. blebber and wolx are HTML tags of different vendors which
752     implement the same functionality, and y.html uses conditional
753     HTML to provide versions using both tags [##Note: conditional
754     HTML does not yet exist, but it is something people are thinking
755     about.##]
756    
757     4. blebber is a complicated HTML tag with only a sketchy
758     definition, implemented by one browser vendor, and wolx
759     indicates implementation of a well-defined subset of the blebber
760     tag by some other vendor(s). y.html uses only this well-defined
761     subset.
762    
763    
764     2.9 Current status of transparent content negotiation
765    
766     There is no complete specification of transparent content negotiation
767     yet. Documents completely specifying some subset of transparent
768     content negotiation have been written, and have had some review by
769     the http-wg, but none of these define feature negotiation, and none
770     of them take the specific caching mechanisms defined by the latest
771     version of the HTTP/1.1 specification [1] into account.
772    
773     The author of this document plans to finish a complete specification
774     of transparent content negotiation, including feature negotiation,
775     within the time frame of a few months. Many aspects of the design of
776    
777     [Page 13]
778    
779     Internet-Draft Content Negotiation 13 June 1996
780    
781     feature negotiation are still in flux. Some tradeoffs between
782     complexity and expressive power have yet to be discussed.
783    
784     No serious efforts have yet been made to invent and define feature
785     tags for particular complicated areas of negotiation. The final
786     shape of the feature negotiation mechanism will in part depend on the
787     result of such efforts. It is expected that feature negotiation will
788     solve many of the current negotiation problems. However, it is also
789     expected that there will remain negotiation problems not solved by
790     feature negotiation.
791    
792     2.9.1 Feature negotiation in numeric areas
793    
794     Feature tags as covered in Section 2.8 have a boolean nature, because
795     they serve as indicators of the simple presence or absence of some
796     feature. Many areas of negotiation however, like negotiation on
797     screen size, color depth, or bandwidth, have a numeric nature. A
798     numeric area like negotiation on color depth can however be trivially
799     mapped onto the feature negotiation framework. One can define a
800     collection of four feature tags
801    
802     colordepth_1
803     colordepth_4
804     colordepth_8
805     colordepth_24
806    
807     to span the numeric range of color depth negotiation. Each of these
808     tags would indicate the capability to render pictures up to the given
809     color depth. Under this scheme, a user agent rendering on a screen
810     with 8 bit color depth would have all three features
811    
812     colordepth_1, colordepth_4, colordepth_8
813    
814     present in its feature set, so that a variant using 10 distinct
815     colors can be safely described as
816    
817     {"button.gif" 0.5 {type image/gif} {features colordepth_4}}
818    
819     While this technique seems adequate for to many numeric areas of
820     negotiation, it is unknown at this point whether it provides
821     sufficient expressive power to cover all areas feature negotiation
822     intends to cover. Section 4 will introduce additional feature
823     negotiation protocol elements which provide more direct support for
824     negotiation on numbers.
825    
826    
827     2.9.2 Bandwidth negotiation
828    
829     With a bandwidth negotiation mechanism, the time needed to retrieve
830     a particular variant over the network can be taken into account
831     during the negotiation process. Work on mechanisms for bandwidth
832     negotiation has been done since at least 1993, but this work has
833     not yet yielded a successful standard mechanism for bandwidth
834     negotiation. Cascaded proxy caches introduce additional complexity
835     in this area.
836    
837     [Page 14]
838    
839     Internet-Draft Content Negotiation 13 June 1996
840    
841    
842     The planned transparent content negotiation specification will not
843     attempt to solve the problem of bandwidth negotiation. There is some
844     hope that the feature negotiation framework will allow the
845     introduction of an adequate solution for bandwidth negotiation.
846    
847     2.9.3 Content transformation by proxies
848    
849     Recently, there has been some attention to content transformation by
850     proxies. An example is the transformation of an image/gif response
851     to a shorter image/jpeg response, with potential degraded quality, to
852     save bandwidth. Another example is the transformation of an
853     application/postscript response to a text/html response, with
854     definite degraded quality, to allow viewing by a user agent which
855     cannot handle postscript.
856    
857     The impact of such transformations on the quality of content on the
858     web, and the impact on the current model for the allocation of trust
859     to various parties in a HTTP transaction, has not yet been fully
860     explored.
861    
862     Content transformation could be a useful optimization for transparent
863     content negotiation. A response with a variant list
864    
865     {"map.gif" 1.0 {type image/gif} {features !monochrome}},
866     {"map.mono.gif" 0.8 {type image/gif} {features monochrome}}
867    
868     could include an additional response header
869    
870     Allow-Transform: "map.gif" -> "map.mono.gif" with "dither-2"
871    
872     to allow a proxy which has cached "map.gif" to create "map.mono.gif"
873     on demand, by applying a particular standardized transformation to
874     the "map.gif" data. Another interesting possibility would be
875    
876     Allow-Transform: "map.gif" -> "map.mono.gif"
877     with "http://x.org/java/filters/my_dither"
878    
879    
880     3 Variant descriptions
881    
882     Variant descriptions have been informally introduced in Section 2.3.
883     This section defines variant descriptions more formally.
884    
885     The version of BNF used in the rest of this document is taken from
886     [1], and many of the nonterminals used here are also defined in [1].
887     One new notation is added:
888    
889     1%rule
890    
891     stands for one or more instances of "rule", separated by
892     whitespace:
893    
894     1%rule = rule *( 1*LWS rule ) .
895    
896    
897     [Page 15]
898    
899     Internet-Draft Content Negotiation 13 June 1996
900    
901    
902     3.1 Syntax
903    
904     A variant can be described in a machine-readable way with a variant
905     description.
906    
907     variant-descr =
908     "{" <"> URI <">
909     source-quality
910     [ "{" "type" media-type "}" ]
911     [ "{" "language" 1#language-tag "}" ]
912     [ "{" "length" 1*DIGIT "}" ]
913     [ "{" "features" feature-list "}" ]
914     [ "{" "description" quoted-string "}" ]
915     [ extension-attribute ]
916     "}"
917    
918     source-quality = qvalue
919    
920     extension-attribute = "{" extension-name extension-value "}"
921     extension-name = token
922     extension-value = *( token | quoted-string | LWS
923     | <any element of tspecials except "}"> )
924    
925     Examples are
926    
927     {"paper.html.fr" 0.7 {type text/html} {language fr}}
928    
929     {"paper.html.tables" 0.9 {type text/html} {features tables}}
930    
931     The various attributes which can be present in a variant
932     description are covered in the subsections below.
933    
934     [##Issue to be resolved: earlier versions had quotes (<">) around
935     the media-type and 1#language-tag. Are these necessary for some
936     reason unknown to me?##]
937    
938    
939     3.2 URI
940    
941     The URI attribute gives the URI of the un-negotiated resource from
942     which the variant can be retrieved with a GET request. It can be
943     absolute or relative to the Request-URI.
944    
945    
946     3.3 Source-quality
947    
948     The source-quality attribute gives the quality of the variant as a
949     representation of the content of the negotiable URI when the
950     variant is rendered with a perfect rendering engine on the best
951     possible output medium.
952    
953     If it is less than 1, this attribute often expresses degradation
954     caused by lossy conversion to a particular data format. For example,
955     a picture originally in JPEG form would have a lower source quality
956    
957     [Page 16]
958    
959     Internet-Draft Content Negotiation 13 June 1996
960    
961     when translated to the XBM format, and a much lower source quality
962     when translated to an ASCII-art variant. Note, however, that
963     degradation is a function of the source -- an original piece of
964     ASCII-art may degrade in quality if it is captured in JPEG form.
965    
966     Content providers should use the following table as a guide when
967     assigning source quality values:
968    
969     1.000 no degradation
970     0.999-0.900 no noticeable degradation
971     0.899-0.700 noticeable, but acceptable degradation
972     0.699-0.500 barely acceptable degradation
973     0.499-0.000 unacceptable degradation
974    
975     [##Issue to be resolved: can we come up with a word other than
976     `degradation' that covers better the case of variants not converted
977     from one source?##]
978    
979     It is important that content providers do not assign very low source
980     quality values without good reason, as this would limit the ability
981     of users to influence the negotiation process with their own
982     preference settings.
983    
984     When assigning source-quality values, content providers must not
985     account for the size of the variant and its impact on transmission
986     and rendering delays. Source-quality values are assigned assuming
987     instantaneous transmission and rendering. This rule ensures that a
988     future mechanism for bandwidth negotiation (Section 2.9.2) can be
989     cleanly added.
990    
991    
992     3.4 Type and charset, language, length
993    
994     The type, language, and length attributes of a variant description
995     refer to their Content-* header counterparts as defined in [1]. Note
996     that the type attribute also holds the charset of the variant, if
997     appropriate. An example is
998    
999     {type text/html;charset=ISO-8859-4}
1000    
1001     Though all of these attributes are optional, it is often desirable to
1002     include as many attributes as possible as this will increase the
1003     quality of the negotiation process.
1004    
1005     The length attribute, if present, must reflect the length of the
1006     variant only, not the length of the variant plus the length of any
1007     objects inlined or included by the variant.
1008    
1009    
1010     3.5 Features
1011    
1012     The features attribute specifies how the presence or absence of
1013     particular features in the user agent affects the overall quality of
1014     the variant. This attribute is covered in Section 4.4.
1015    
1016    
1017     [Page 17]
1018    
1019     Internet-Draft Content Negotiation 13 June 1996
1020    
1021    
1022     3.6 Description
1023    
1024     The description attribute is meant to provide a textual description
1025     of some properties of the variant, to be displayed by a user agent
1026     when showing a menu of available variants (Section 2.6). This
1027     attribute can be included if the URI and normal attributes of a
1028     variant are considered too opaque to allow interpretation by the
1029     user.
1030    
1031    
1032     3.7 Extension-attribute
1033    
1034     The extension-attribute allows future specifications to incrementally
1035     define new dimensions of negotiation (Section 2.7), and eases content
1036     negotiation experiments under HTTP/1.1. In experimental situations,
1037     servers must only generate extension-attributes whose names start
1038     with "x-". User agents should ignore all extension attributes they
1039     do not recognize. Proxies must not run the network negotiation
1040     algorithm if an unknown attribute is present in the variant list.
1041    
1042    
1043     4 Feature negotiation
1044    
1045     Feature negotiation has been informally introduced in Section 2.8.
1046     This section defines feature negotiation more formally. Note that
1047     much of the material in this section is still in flux. Some
1048     tradeoffs between complexity and expressive power have yet to be
1049     discussed.
1050    
1051    
1052     4.1 Feature tags
1053    
1054     A feature tag (ftag) identifies a capability of a user agent or a
1055     preference of a user.
1056    
1057     ftag = 1*<any CHAR except CTLs or tspecials or "!">
1058    
1059     tspecials = "(" | ")" | "<" | ">" | "@"
1060     | "," | ";" | ":" | "\" | <">
1061     | "/" | "[" | "]" | "?" | "="
1062     | "{" | "}" | SP | HT
1063    
1064     Examples are
1065    
1066     ns_tables, fonts, blebber, wolx, screenwidth, colordepth
1067    
1068     Feature-tags are case-insensitive. (Case-sensitivity would add a
1069     huge factor of potential confusion to a process already designed to
1070     be chaotic).
1071    
1072     The definition of a feature tag may state that a feature tag, if
1073     present, must be have associated with it a numeric value which
1074     reflects a particular capability or preference. For example, a
1075     feature tag `screenwidth' could be present with a value of 640.
1076    
1077     [Page 18]
1078    
1079     Internet-Draft Content Negotiation 13 June 1996
1080    
1081    
1082     4.2 Accept-Features header
1083    
1084     The Accept-Features request header can be used by a client to give
1085     information about the presence or absence of certain features.
1086    
1087     Accept-Features = "Accept-Features" :
1088     1#( ftag
1089     | "!" ftag
1090     | ftag "=" number
1091     | "*"
1092     )
1093    
1094     number = 1*DIGIT
1095    
1096     An example is:
1097    
1098     Accept-Features: blex, !blebber, colordepth=5, *
1099    
1100     A feature tag must never occur twice in an Accept-Features header.
1101     In the Accept-Features header, an ftag without a "!" indicates that
1102     the corresponding feature is present, but that is has no numeric
1103     value associated with it. An ftag with a "!" indicates that the
1104     corresponding feature is absent. An ftag with a number indicates
1105     that the corresponding feature is present with the given numeric
1106     value.
1107    
1108     The special construct "*" is best interpreted in terms of its effect
1109     on the network negotiation algorithm calculations. As an
1110     approximation, the "*" indicates that all features not named
1111     explicitly in the Accept-Features header are present, present with
1112     any numeric value, and absent, all at the same time.
1113    
1114     Absence of the Accept-Features header in a request is equivalent to
1115     the inclusion of
1116    
1117     Accept-Features: *
1118    
1119    
1120     4.3 Feature predicates
1121    
1122     Feature predicates are used in the features attribute of a variant
1123     description.
1124    
1125     fpred = [ "!" ] ftag [ "=" number ]
1126    
1127     Examples feature predicates are
1128    
1129     blebber, !blebber, colordepth=5, !blex=54
1130    
1131     The network negotiation algorithm can compute the truth value of a
1132     feature predicate by using the contents of the Accept-Features
1133     header of the current request.
1134    
1135    
1136    
1137     [Page 19]
1138    
1139     Internet-Draft Content Negotiation 13 June 1996
1140    
1141     If the ftag in a feature predicate appears in the Accept-Features
1142     header, the truth value of the predicate is defined as follows,
1143     depending on its form:
1144    
1145     ftag true if the feature is present according to the
1146     Accept-Features header, false otherwise.
1147    
1148     !ftag true if the feature is absent according to the
1149     Accept-Features header, false otherwise.
1150    
1151     ftag=N true if the feature is present with a value greater than
1152     or equal to N according to the Accept-Features header,
1153     false otherwise.
1154    
1155     !ftag=N true if the feature is present with a value less than N
1156     according to the Accept-Features header, false otherwise.
1157    
1158     If the ftag in a feature predicate does not appear in the
1159     Accept-Features header, the value of the predicate is true if there
1160     is a "*" in the Accept-Features header, false otherwise.
1161    
1162     As an example, the header
1163    
1164     Accept-Features: blex, !blebber, colordepth=5, !screenwidth, *
1165    
1166     makes the following predicates true:
1167    
1168     blex, colordepth=4, !colordepth=6, colordepth, !screenwidth,
1169     frtnbf, !frtnbf, frtnbf=4, !frtnbf=4
1170    
1171     and makes the following predicates false:
1172    
1173     !blex, blex=0, blebber, colordepth=6, !colordepth,
1174     screenwidth, screenwidth=640, !screenwidth=640
1175    
1176    
1177     4.4 Features attribute
1178    
1179     The features attribute
1180    
1181     "{" "features" feature-list "}"
1182    
1183     is used in a variant description to specify how the presence or
1184     absence of particular features in the user agent affects the overall
1185     quality of the variant.
1186    
1187    
1188    
1189    
1190    
1191    
1192    
1193    
1194    
1195    
1196    
1197     [Page 20]
1198    
1199     Internet-Draft Content Negotiation 13 June 1996
1200    
1201     feature-list = 1%feature-list-element
1202    
1203     feature-list-element = ( fpred | fpred-bag )
1204     [ ":" present-improvement ]
1205     [ "/" absent-degradation ]
1206    
1207     fpred-bag = "[" 1%fpred "]"
1208    
1209     absent-degradation = 1*3DIGIT [ "." 0*3DIGIT ]
1210     present-improvement = 1*3DIGIT [ "." 0*3DIGIT ]
1211    
1212     Examples are:
1213    
1214     {features !textonly [blebber !wolx] colordepth=3:0.7 }
1215    
1216     {features !blink/0.5 background:1.5 [blebber !wolx]:1.4/0.8 }
1217    
1218     The default value for the present-improvement is 1. The default
1219     value for the absent-degradation is 0, or 1 if a present-improvement
1220     value is given.
1221    
1222     The network negotiation algorithm can compute the quality degradation
1223     factor associated with the features attribute by multiplying all
1224     quality degradation factors of the elements of the feature-list.
1225     Note that the result can be a factor greater than 1.
1226    
1227     A feature list element yields its present-improvement value if the
1228     corresponding feature predicate is true, or if at least one element
1229     of the corresponding fpred-bag is true. The element yields its
1230     absent-degradation value otherwise.
1231    
1232     [##Issue to be resolved: It is unknown yet whether this features
1233     attribute definition makes the right tradeoff between complexity and
1234     (ease of) expressive power. The attribute grammar above is designed
1235     to be parsable with simple non-recursive parsers. The
1236     present-improvement construct does not add expressive power in a
1237     theoretical sense, but does make the (automatic) construction of
1238     variant lists more straightforward in many cases.##]
1239    
1240     [##Aside for mathematicians: note the similarity between the
1241     feature-list
1242    
1243     [f1 !f2] [!f1 f3]
1244    
1245     and the conjunctive normal form of a boolean expression. This
1246     similarity implies good things about the expressive power of the
1247     features attribute. I have not yet explored how far this power
1248     extends into the non-boolean domain.##]
1249    
1250    
1251     4.5 Example of negotiation in a numeric area
1252    
1253     As an example of negotiation in a numeric area, the following variant
1254     list describes four variants with title graphics designed for
1255     increasing screen widths:
1256    
1257     [Page 21]
1258    
1259     Internet-Draft Content Negotiation 13 June 1996
1260    
1261    
1262     {"home.pda" 1.0 {type text/html} {features !screenwidth=200} },
1263     {"home.narrow" 1.0 {type text/html}
1264     {features screenwidth=200 !screenwidth=600} },
1265     {"home.normal" 1.0 {type text/html}
1266     {features screenwidth=600 !screenwidth=1000} },
1267     {"home.wide" 1.0 {type text/html} {features screenwidth=1000} }
1268    
1269     The above variant list has the disadvantage that a user agent not
1270     supporting screenwidth negotiation is given no guidance on which
1271     variant to select: all would have an overall quality value of 0 if
1272     the screenwidth feature is not present. A feature list which solves
1273     this problem is
1274    
1275     {"home.pda" 1.0 {type text/html} {features !screenwidth=200} },
1276     {"home.narrow" 1.0 {type text/html}
1277     {features screenwidth=200 !screenwidth=600} },
1278     {"home.normal" 0.95 {type text/html} },
1279     {"home.wide" 0.1 {type text/html} {features screenwidth=1000} }
1280    
1281     with this list, a user agent which does not support the screenwidth
1282     feature will always select the third variant. A user agent which
1283     does support the screenwidth feature will only select the third
1284     variant if the overall qualities of all other variants are 0.
1285    
1286    
1287     4.6 Content-Features header
1288    
1289     The Content-Features response header can be used by a server to
1290     indicate how the presence or absence of particular features in the
1291     user agent affects the overall quality of the response.
1292    
1293     Content-Features = "Content-Features" : feature-list
1294    
1295    
1296     5 Security and privacy considerations
1297    
1298     5.1 Accept headers revealing information of a private nature
1299    
1300     Accept headers, in particular Accept-Language headers, may reveal
1301     information that the user rather keeps private unless it will
1302     directly improve the quality of service. For example, a user may not
1303     want to send language preferences to sites which do not offer
1304     multilingual content. The transparent content negotiation mechanism
1305     allows user agents to omit sending of the Accept-Language header by
1306     default, without this affecting the outcome of the negotiation
1307     process if transparently negotiated multilingual content is accessed.
1308    
1309     However, even if the Accept headers never send any information other
1310     than that the user agent is capable of transparent negotiation,
1311     automatic selection and retrieval of a variant by a user agent will
1312     reveal a preference for this variant to the server. A malicious
1313     service author could provide a page with `fake' negotiability on
1314     (ethnicity-correlated) languages, with all variants actually being
1315     the same English document, as a means of extracting privacy-sensitive
1316    
1317     [Page 22]
1318    
1319     Internet-Draft Content Negotiation 13 June 1996
1320    
1321     information. Such a plot would however be visible to an alert victim
1322     if the menu of available variants and their properties made available
1323     by the user agent is reviewed.
1324    
1325     Some additional privacy considerations connected to Accept headers
1326     are discussed in [1].
1327    
1328    
1329     5.2 Spoofing of responses from variant URLs
1330    
1331     In the second optimization of the transparent negotiation process
1332     outlined in Section 2.4, a request on a transparently negotiable URL
1333     http://x.org/paper can lead to a response which must be interpreted
1334     as belonging to a variant URL http://x.org/paper.html.en. According
1335     to current plans, a proxy cache will be allowed to return this
1336     response, after removal of the list of variants and the
1337     Content-Location header, if a direct request on the variant URL
1338     http://x.org/paper.html.en is received. This caching shortcut could,
1339     for some negotiable resources, save up to a factor 2 in bandwidth
1340     usage for requests made by the cache.
1341    
1342     However, this shortcut also allows the author of the URL
1343     http://x.org/paper to control the data cached for the URL
1344     http://x.org/paper.html.en. If the variant URL belongs to another
1345     author, this is a security problem. Therefore, it is planned to
1346     restrict the use of the second optimization by origin servers to
1347     cases where the negotiable URL and the variant URL are equal up to
1348     the last slash. If an origin server generates a response which does
1349     not satisfy this restriction on use, the recipient must reject it and
1350     signal a server error.
1351    
1352    
1353     6 Acknowledgments
1354    
1355     This document builds on an earlier specification of content
1356     negotiation as recorded in [2], and directly incorporates text from
1357     [2] in some places. Many members of the HTTP working group have
1358     contributed to the work reflected in this document. The author
1359     wishes to thank the individuals who have commented on earlier
1360     versions of the transparent content negotiation specification,
1361     including Brian Behlendorf, Daniel DuBois, Larry Masinter, and Roy
1362     T. Fielding.
1363    
1364    
1365     7 References
1366    
1367     [1] Fielding et al, Hypertext Transfer Protocol -- HTTP/1.1.
1368     Internet-Draft draft-ietf-http-v11-spec-05.txt, HTTP Working
1369     Group, June, 1996.
1370    
1371     [2] Roy T. Fielding, Henrik Frystyk Nielsen, and Tim Berners-Lee.
1372     Hypertext Transfer Protocol -- HTTP/1.1. Internet-Draft
1373     draft-ietf-http-v11-spec-01.txt, HTTP Working Group, January,
1374     1996.
1375    
1376    
1377     [Page 23]
1378    
1379     Internet-Draft Content Negotiation 13 June 1996
1380    
1381    
1382     8 Author's address
1383    
1384     Koen Holtman
1385     Technische Universiteit Eindhoven
1386     Postbus 513
1387     Kamer HG 6.57
1388     5600 MB Eindhoven (Holland)
1389    
1390     e-mail: koen@win.tue.nl
1391    
1392    
1393    
1394    
1395    
1396    
1397    
1398    
1399    
1400    
1401    
1402    
1403    
1404    
1405    
1406    
1407    
1408    
1409    
1410    
1411    
1412    
1413    
1414    
1415    
1416    
1417    
1418    
1419    
1420    
1421    
1422    
1423    
1424    
1425    
1426    
1427    
1428    
1429    
1430    
1431    
1432     Expires: 13 December 1996
1433    
1434    
1435    
1436    
1437     [Page 24]
1438    
1439    

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24