/[suikacvs]/webroot/www/2004/id/draft-ietf-http-uahint-00.txt
Suika

Contents of /webroot/www/2004/id/draft-ietf-http-uahint-00.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
2     Internet-Draft David Morris, BSL
3     HTTP Working Group
4     Expires: September 21, 1997 March 21, 1997
5    
6    
7     The User Agent Hint Response Header
8    
9     draft-ietf-http-uahint-00.txt
10    
11    
12     STATUS OF THIS MEMO
13    
14     This document is an Internet-Draft. Internet-Drafts are
15     working documents of the Internet Engineering Task Force
16     (IETF), its areas, and its working groups. Note that other
17     groups may also distribute working documents as
18     Internet-Drafts.
19    
20     Internet-Drafts are draft documents valid for a maximum of
21     six months and may be updated, replaced, or obsoleted by
22     other documents at any time. It is inappropriate to use
23     Internet-Drafts as reference material or to cite them other
24     than as "work in progress".
25    
26     To learn the current status of any Internet-Draft, please
27     check the "1id-abstracts.txt" listing contained in the
28     Internet-drafts Shadow Directories on ftp.is.co.za
29     (Africa), nic.nordu.net (Europe), munnari.oz.au (Pacific
30     Rim), ds.internic.net (US East Coast), or ftp.isi.edu (US
31     West Coast).
32    
33     Distribution of this document is unlimited. Please send
34     comments to the HTTP working group at
35     <http-wg@cuckoo.hpl.hp.com>. Discussions of the working
36     group are archived at
37     <URL:http://www.ics.uci.edu/pub/ietf/http/>. General
38     discussions about HTTP and the applications which use HTTP
39     should take place on the <www-talk@w3.org> mailing list.
40    
41     ABSTRACT
42    
43     This document proposes a HTTP response header called UA-Hint, which
44     can be used by applications (servers) to describe handling hints
45     which will allow user agents to more accurately reflect the intent of
46     the web application designer for the handling and presentation of the
47     response entity. The UA-Hint header is intended to be an extensible
48     general mechanism by which the application can suggest user agent
49     behaviors which alter or extend the behaviors specified in HTTP/1.1
50     (RFC 2068) with the express purpose of improving the usability of the
51     resulting application. Intended considerations include enablement of
52     a safe POST and refined handling of the traditional history buffer.
53    
54    
55     1 Introduction
56    
57     This document proposes a HTTP response header called UA-Hint, which
58     can be used by applications (servers) to describe handling hints
59     which will allow user agents to more accurately reflect the intent of
60     the web application designer for the handling and presentation of the
61     response entity. The HTTP/1.1 specification ignores many areas where
62     experience has shown user friendliness would benefit if the
63     application were able to more precisely influence the user agent's
64     interpretation of the HTTP data stream. This document specifies a
65     number of specific parameters and their interpretation while defining
66     an extensible syntax which will allow user agents to reliably parse
67     and ignore values which are not understood.
68    
69     The issues to be addressed are:
70    
71     Safe-Post: For many applications, it is necessary or advantageous to
72     use the POST method rather than GET to submit a user agent request
73     to a server. Web internationalization is one motivating example.
74     Based on guidance from the various HTTP specifications and early
75     drafts, all user agents should recognize the idempotency
76     distinction between POST and GET by providing additional user
77     prompting prior to POST. The UA-Hint header defines a Safe-Post
78     directive which may be used to relax the additional user awareness
79     requirements.
80    
81     History-List: Application designers have long been frustrated over
82     their lack of control over the user agent's handling of the history
83     list. This UA-Hint header proposed by this document specifies
84     a number of directives which can be used to insure expected
85     behavior of the user's view of the application. Optional handling
86     includes setting a maximum time for retention of a response in
87     the History-List and exclusion of responses from the history list.
88    
89    
90     1.1 Revision history
91    
92     This is the first version of this document. Using different syntax,
93     it encompasses the functionality described in
94     draft-holtman-http-safe-01.txt.
95    
96     2 Notational Conventions and Generic Grammar
97    
98     This document follows the conventions described in Section 2 of the
99     HTTP/1.1 specification [1].
100    
101    
102     3 Background
103    
104     The motivation for the specific directives described in this
105     proposal are presented in detail in this section.
106    
107     3.1 Safe Request with Content Body
108    
109     According to Section 9.1.1 (Safe Methods) of the HTTP/1.1
110     specification [1], POST requests are assumed to be `unsafe' by
111     default. `Unsafe' means `causes side effects for which the user will
112     be held accountable'.
113    
114     If the POST request is unsafe, explicit user confirmation is
115     necessary before the request is repeated. User agents will repeat
116     POST requests when the user presses the RELOAD button while a POST
117     result is displayed, or when the history function is used to
118     redisplay a POST result which is no longer in the history buffer.
119    
120     The necessary confirmation dialog often takes the form of a `repost
121     form data?' dialog box. The dialog is confusing to many users, and
122     slows down navigation in any case.
123    
124     In theory, if the repeated POST request is safe, the user-unfriendly
125     confirmation dialog can be omitted. However, up till now, HTTP has
126     no mechanism by which agents can tell if POST requests are safe.
127     This proposal adds such a mechanism.
128    
129     Many content authors have managed to avoid the confirmation dialog
130     problem by using GETs for form submission instead of safe POSTs.
131     However, this escape is not possible for forms:
132    
133     a) which are (sometimes) used to submit large amounts of data
134     b) which are (sometimes) used to submit data in a charset other
135     than ISO-8859-1.
136    
137     Case b) will be the increasingly common; web internationalization [2]
138     makes it necessary to use the POST method for form submission.
139    
140     Note: Actually, according to the authors of [2], web
141     internationalization makes it necessary to use requests with
142     request bodies. This rules out the use of the only methods which
143     are safe under HTTP/1.1: GET and HEAD. A new GET-WITH-BODY method
144     could be defined, but it would be unsafe by default under HTTP/1.1,
145     so GET-WITH-BODY would also need something like the mechanism in
146     this proposal.
147    
148     It is therefore considered important to eliminate the unnecessary
149     confirmation dialogs for safe POSTs as soon as possible. They are a
150     counter-incentive to the upgrading of GET based forms services (like
151     search engines) to internationalized POST based forms services.
152    
153     3.2 Sensitive Application Protection
154    
155     There have been a number of posts to the www-security mailing list
156     over the past several months from web application developers
157     concerned about the security aspects of access to
158     their applications by user's of shared browsers. There are several
159     issues which have been raised:
160    
161     a) Re-invoking prior login screens from the History List (assuming
162     that the application implements its own mechanism beyond
163     WWW-Authenticate)
164     b) Re-display of prior application output from the History List
165    
166     Section 13.13 (History Lists) of the HTTP/1.1 specification [1],
167     describes the History List as different from a cache but does not
168     provide any mechanism by which the server can control the History
169     List. As a result, the protections desired by application authors
170     concerned with the issues described in this section are almost
171     impossible to achieve. We are aware of one home banking application
172     which depended on the observed behavior of user agents to not retain
173     the content of error responses in their History List backing store.
174    
175     3.3 History List Presentation Control
176    
177     In some applications, it is useful to include the user agent's
178     History List in the overall user/application interaction paradigm.
179     This surfaces in instructions like error messages which direct the
180     user to return to the previous page and correct their input.
181     Unfortunately, the evolving defacto standard is unpredictable
182     behavior from an application perspective. Recent observations
183     suggest that each user agent vendor uses a different set of
184     heuristics to determine the content of the History List and when a
185     response is refreshed or replaced by a subsequent response received
186     later in the user's session. These heuristics , often seem different
187     in each version of a product. The paper "Problems With the Expires
188     Header" released by Holtman and Kaphan in July 1995 [3] describes the
189     basic issues and suggests a number of alternative approaches.
190    
191     The History List is a resource which logically belongs to the user
192     and fills a role very similar to the paper rolling off the top of the
193     TTY of the past. It is a mechanism whereby the user can review past
194     actions and results. The majority of web content is static from a
195     navigational perspective. That is, the user navigates by clicking
196     links and is presented with results which reflect the navigation.
197     While the results may differ based on external factors, from the
198     user's perspective the results are equivalent.
199    
200     However, as web protocols are adopted by organizational intranets,
201     there is a growing percentage of web content which is actually
202     a statefull interactive application implemented using HTTP clients and
203     servers. Examples of such applications include a wide diversity of
204     requirements and include such activities as online banking, customer
205     support, shopping, electronic mail and personal information
206     repositories. Designers of such applications generally consider and
207     often integrate the expected History List behavior into their
208     application paradigm. The effectiveness of the integration varies
209     widely. The intent of the UA-Hint History List control directives is
210     to substantially improve the user friendliness of potential web
211     applications by providing the implementers with more control and
212     additional control alternatives.
213    
214    
215     4 The UA-Hint response header
216    
217     This header is proposed as an addition to the HTTP/1.x suite.
218    
219     4.1 UA-Hint
220    
221     The UA-Hint response header field is used to communication specific
222     requests for control of the user agent's interaction with the user.
223     A user agent may ignore the UA-Hint values without compromising the
224     integrity of the interaction between the user agent and the server.
225     However, failure of user agent implementers to respect UA-Hint values
226     may have a negative impact on the interaction between end user and
227     the application.
228    
229     UA-Hint = "UA-Hint" ":" #( hint-directive )
230    
231     hint-directive = hint-name "=" hint-value *( ";" hint-dirparm )
232    
233     hint-name = token ; alpha characters are
234     ; case insensitive
235    
236     hint-value = *1( token | quoted-string )
237    
238     hint-dirparm = *1( token "=" ) hint-value
239    
240     This document proposes several specific hint-directives below, but
241     this syntax is intended to accommodate many possible future extension
242     syntaxes.
243    
244     4.2 Resubmit directive
245    
246     The Resubmit directive is used to modify the conditions under which
247     a request may be resubmitted from the user agent to the origin
248     server.
249    
250     Resubmit = "Resubmit" "=" ( "no" | "safe" | "prompt" )
251    
252     Value interpretation:
253    
254     "no" This request which resulted in this response MAY NOT be
255     resubmitted, either silently as a result of History List
256     navigation or explicitly as a result of a user refresh
257     request. If the user repeats the original action (e.g.,
258     clicking a FORM button), the user agent SHOULD warn the
259     user. The user agent is encouraged to provide a meaningful
260     message to the user when a refresh is requested or would
261     otherwise be requested because the History List response is
262     no longer available.
263    
264     "safe" | "prompt" Indicates whether the corresponding request is
265     safe in the sense of Section 9.1.1 (Safe Methods) of the
266     HTTP/1.1 specification [1].
267    
268     An example:
269    
270     UA-Hint: resubmit=safe
271    
272     indicates that an otherwise unsafe method may be silently
273     repeated. That is, it is not necessary to prompt the user
274     before re-submitting a POST request. Resubmit=safe has no
275     impact on a GET or HEAD request which is safe by definition.
276     If resubmit=prompt is included in the response to a GET
277     request, the user agent should prompt the user before
278     resubmitting the request.
279    
280     Note: User agents can use the received information about
281     safety when repeating an earlier request. If the request
282     is known to be safe, it can be silently repeated without
283     asking for user confirmation.
284    
285     Note 2: See caching implications below. It may be desirable
286     to over-ride proxy cache default behaviors using
287     appropriate headers when the defined safe interpretation
288     of a METHOD is modified.
289    
290     4.3 Histage directive
291    
292     The Histage directive may be used to specify how long a response may
293     be retained in the History List prior to deletion or refresh.
294    
295     Histage = "Histage" "=" 1*digit ; seconds since receipt
296    
297     A Histage value of zero (0) requires refresh each time the response
298     would be shown as a result of History List navigation. Once the
299     Histage interval has elapsed, the response must be refreshed under
300     the terms of the Resubmit directive before it is shown to the user.
301     See the Histmode directive below for preferred methods for omitting
302     responses from the History List.
303    
304     As described in Holtman and Kaphan [3], this directive introduces a
305     separate notion of History List expiration from the notion of cache
306     expiration. Thus, the application designer can allow a document to
307     be immediately expired from a cache perspective, but retained as
308     a stable reference in the History List.
309    
310     4.4 Histinact directive
311    
312     The Histinact directive may be used to specify how long a response
313     may be retained in the History List prior to deletion or refresh
314     expressed in terms of user agent activity.
315    
316     Histinact = "Histinact" "=" 1*digit ; seconds since user
317     ; activity
318    
319     This directive is similar to Histage except that expiration is based
320     on the amount of time since the last user interaction with the
321     user agent. It is suggested that any user activity detected by the
322     user agent reset this watchdog style timer.
323    
324     If the response is still in active view when the Histinact timer
325     expires, a brief warning should replace the response view which
326     should give the user a few seconds warning. If the user doesn't
327     respond, the response should be deleted from the History List and
328     from the active view.
329    
330     This directive is intended to provide a control mechanism which
331     reduces the exposure of sensitive information when a user fails
332     to secure an active user agent before leaving a work station.
333     By watching user activity, the user agent can leave History List
334     content available for review for a longer interval using the
335     activity relative timeout provided by this directive in lieu of
336     the absolute timeout provided by the Histage directive.
337    
338     4.5 Histdist directive
339    
340     The Histdist directive provides an alternate user behavior model for
341     controlling the duration that a response remains active in the
342     History List.
343    
344     Histdist = "Histdist" "=" 1*digit ; responses after this
345    
346     This response will remain active until more than the specified number
347     of responses are in the History List after this response.
348    
349     Examples of usage:
350    
351     UA-Hint: histdist=1
352    
353     In this case, the response will be active while any response
354     activated from this response is the next response in the
355     History List. Thus, the user can flip between this response
356     and the next response, but once they navigate further, this
357     History List entry is deleted.
358    
359    
360     4.6 Histmode directive
361    
362     The Histmode directive may be used to specify special handling of a
363     response in the History list.
364    
365     Histmode = "Histmode" "=" ( "no" | "replace" | "popup" |
366     | "explicit" )
367    
368     Value interpretation:
369    
370     "no" This response SHOULD NOT be represented in the History List.
371     The next response received by the user agent will replace
372     this response. An attempt to navigate back to this response
373     will present an appropriate prior entry.
374    
375     "replace" This response SHOULD replace the currently displayed
376     response on the user display and in the History List. The
377     fundamental difference between Histmode=no and
378     Histmode=replace is one of when the directive is conveyed to
379     the user agent. Since the UA-Hint header will be normally be
380     cached, the application designer will need to choose
381     carefully and perhaps include cache controls to insure proper
382     cache behavior.
383    
384     To avoid possible spoofing, the Histmode=replace directive
385     MUST be ignored if the response is not the result of the
386     user activating a link or submitting an HTML FORM. The
387     directive MUST also be ignored if the referring page does not
388     share the same origin server host name with the original
389     URL resulting in the response with the Histmode=replace
390     directive (that is, the directive SHOULD be honored if the
391     request URL is redirected to another host which then includes
392     the directive on the response).
393    
394     "popup" A temporary window will be created and this response
395     displayed in that window. It is recommended that the user
396     agent employ a simple window with normal user agent controls
397     suppressed. If the user dismisses this window without
398     clicking an action displayed by the response, the focus
399     should return to the window which triggered this response.
400     If an active element in the window is selected, the logical
401     flow should be as if that reference had been activated from
402     the response from which the popup was generated. A
403     Histmode=popup response is not included in the History List.
404    
405     "explicit" Every instance of the response entity marked
406     "histmode=explicit" shall be uniquely represented in the
407     History List storage mechanism. For example, if the response
408     includes an HTML FORM with user entries, the History List
409     instance will show the values entered or selected by the user
410     when that instance was originally processed.
411    
412     Examples of usage:
413    
414     UA-Hint: histmode=replace
415    
416     Consider an application where the response is some form of
417     notification or entity directive list. User activity related
418     to the response would be to accept notifications or change
419     the directives associated with an entity. The application
420     might respond to a user request by creating a replacement
421     response which has an action acknowledgement message at the
422     top of the page and shows the entity with its new directives.
423     Since the result of the users request is to invalidate the
424     previous response, the histmode=replace directive/value will
425     reduce user confusion by insuring that the only response
426     available in the History List represents the current correct
427     set of operations.
428    
429     Another usage would be one style of handling errors in user
430     input. The original response HTML FORM the user responded to
431     would be returned with the user's input filled in but the
432     error input identified and error messages added to the
433     response. Since this form is logically the same as the
434     original it is least confusing to the user if the original
435     erroneous input is deleted.
436    
437     UA-Hint: histmode=popup
438    
439     Many applications advise the user of input errors with some
440     kind of temporary window while leaving the original input
441     available for user correction and resubmission. This
442     directive provides a web facility with similar user
443     interaction characteristics. Other applications provide a
444     temporary confirmation message indication an application
445     completed a request or in the case of safe delete interfaces,
446     requests user confirmation of their intent.
447    
448     4.7 Diskbuff directive
449    
450     The Diskbuff directive may be used to specify specific storage
451     characteristics of a response retained by a user agent in support of
452     its History List or response cache.
453    
454     Diskbuff = "Diskbuff" "=" "no"
455    
456     If this directive is specified, the user agent MAY NOT use any form
457     of storage other than virtual memory to retain the response. Prior
458     to releasing memory resources used to store this response, they
459     shall be set to a meaningless value (e.g., all binary zero).
460    
461     This directive is intended to minimize the possibility that
462     incorrectly configured shared file systems, operating system memory
463     dump files, etc. will allow viewing of the response by an
464     unauthorized individual.
465    
466     The Diskbuff=no directive explicitly overrides the provision in
467     section 14.9.2 of the HTTP/1.1 specification [1] which allows a
468     History buffer to store a response.
469    
470    
471     4.8 Target directive
472    
473     The Target directive is similar in function to the target attribute
474     included with recent additions to HTML anchors.
475    
476     Target = "Target" "=" ( token | quoted-string )
477    
478     The value of this directive logically names a window in which this
479     response should be displayed. If the window already exists, this
480     response becomes the next response in that window and that window
481     is restored and given the focus. If the specified target window
482     does not exist, it should be created as a visual and functional clone
483     of the window from which this request originated. User agents which
484     do not support multiple window should ignore this directive.
485    
486    
487     4.9 Caching Implications
488    
489     This proposal is compatible with caching controls as specified by the
490     HTTP/1.1 specification. Specifically, The UA-Hint response header
491     MUST be included with any response returned from a cache unless a
492     caching directive is present which disables such inclusion. If a
493     re-validate with the origin server included a UA-Hint response
494     header, the new header should replace the currently cached value for
495     the current and subsequent requests.
496    
497     The value of the UA-Hint header is not interpreted by a cache.
498    
499    
500     4.10 Future Extensions
501    
502     As has been noted, this header is intended to be extensible.
503     Implementers are encouraged to experiment with new values but must be
504     aware that success depends on both communicating parties correctly
505     interpreting such experiments. To insure correct interpretation and
506     avoid conflicts between experiments conducted by different
507     organizations, implementers are encouraged to document their
508     experiments using the IETF draft and RFC process at the earliest
509     possible time in the implementation cycle.
510    
511    
512     5 Smooth upgrade path
513    
514     All directives associated with the UA-Hint header are designed to
515     fail smoothly such that failure of a user agent to recognize and
516     honor and directive will not prevent a user from accessing a service
517     (using other mechanisms, the service may determine if a user agent
518     can be expected to honor the UA-Hint header and deny a request if
519     not). Its use is not required except to achieve the improved user
520     interface behavior described herein.
521    
522     In addition, the UA-Hint header does not depend upon the HTTP/1.1
523     specification [1], hence it can be implemented by applications
524     delivered by any HTTP/1.x compliant server. An HTTP/1.0 user agent
525     could choose to implement this proposal prior to being fully
526     compliant with HTTP/1.1.
527    
528    
529     6 About syntax
530    
531     This document mainly intends to recommend a set of mechanisms for
532     improving an application's control over the user's experience. The
533     syntax of the corresponding header is considered less important and
534     alternative headers and/or directives would be considered.
535    
536    
537     7 Alternatives to the UA-Hint header
538    
539     A number of alternative ways to solve the resubmit confirmation
540     dialog problem have been proposed. These alternative solutions
541     would make the introduction of the Resubmit=Safe directive
542     unnecessary. There have been no alternatives discussed for the
543     other directives described in this proposal. The following sections
544     summarize alternatives to the Resubmit=Safe directive.
545    
546     7.1 Safe header
547    
548     Internet draft-holtman-http-safe-01.txt describes an alternative
549     which uses a unique header, "Safe", to modify the unsafe method
550     semantics of POST. This proposal is intended to replace that proposal
551     by incorporating that proposal along with a cluster of related user
552     experience control functions.
553    
554     7.1 GET-WITH-BODY
555    
556     If a new HTTP/1.x GET-WITH-BODY is defined, one would not need the
557     resubmit=safe directive anymore, one could simply define
558     GET-WITH-BODY as always safe. However, it has been shown that some
559     ugly extensions to the HTML FORM syntax would be needed to provide
560     the same level of downwards compatibility with existing browsers
561     that Safe can provide, for example:
562    
563     <form action="..." method=post preferred_method=get-with-body>
564     ...
565     </form>.
566    
567     One could say that a GET-WITH-BODY manages to keep HTTP clean at the
568     cost of adding extensions to HTML. The authors of this draft prefer
569     to keep HTML clean by adding the resubmit=Safe extension to HTTP.
570    
571     Note that the UA-Hint header and resubmit=safe directive does not
572     block the introduction of a GET-WITH-BODY in the long run.
573    
574     7.2 Link
575    
576     The need for a confirmation dialog can also be eliminated by offering
577     the user agent an alternative to resubmitting the POST request
578     altogether. A POST result could, for example, have a Link header
579     which would contain an URL from which the result can be retrieved
580     again with a GET request. However, this Link URL cannot be very
581     long: if it were too long, the request would fail due to user agent,
582     proxy, or origin server limitations. This length restriction would
583     make the Link solution hard to use in the general case.
584    
585     7.3 Conclusion
586    
587     An HTTP extension header such as the UA-Hint header and resubmit=Safe
588     directive seems to be the best solution in the current framework
589     because it combines the override of the unsafe condition of a POST
590     with other user agent hints which also impact the quality of the
591     user's experience.
592    
593     This combination retains much of the implementation simplicity of the
594     earlier Safe: header proposal while providing additional directives
595     with a single new extensible header.
596    
597     The proposed resubmit=safe directive would eliminate a
598     counter-incentive to web internationalization, and the author feels
599     that these counter-incentives need to be eliminated as soon as
600     possible. It is therefore proposed to introduce the UA-Hint and
601     resubmit=safe directive into HTTP/1.x without undue delay.
602    
603    
604     8 Security considerations
605    
606     This proposal makes no changes to HTTP which would degrade its
607     security characteristics. Several changes are proposed which if
608     applied carefully, will provide additional information security for
609     applications. In summary, these are:
610    
611     o All storage of a response on persistent storage can be blocked
612    
613     o Representation of a response in the History List can be blocked
614    
615     o New controls are proposed which limit the duration of time a
616     a response can be retained in the history list.
617    
618     o The UA-Hint header is extensible and could be used to provide
619     additional security controls, block printing, etc.
620    
621    
622     9 Acknowledgements
623    
624     This specification was influenced by the early discussion of
625     History List difficulties described by Holtman and Kaphan in
626     "Problems with the Expires Header [3] and by the earlier IETF
627     draft draft-holtman-http-safe-01.txt from which the bulk of the
628     text describing the resubmit=safe directive was extracted.
629    
630    
631     10 References
632    
633     [1] Fielding et al, "Hypertext Transfer Protocol -- HTTP/1.1",
634     RFC2068, HTTP Working Group, January 1997.
635    
636     [2] Yergeau et al, "Internationalization of the Hypertext Markup
637     Language", Internet-Draft draft-ietf-html-i18n-05.txt, HTML
638     Working Group, August 7, 1996.
639    
640     [3] Holtman et al, "Problems with the Expires Header",
641     http://www.amazon.com/expires-report.html, July 19, 1995.
642    
643    
644     11 Author's address
645    
646     David Morris
647     barili systems limited
648     10873 W. Estates Drive
649     Cupertino, CA 95014
650     Email: dwm@xpasc.com
651    
652    
653     Expires: September 21, 1997
654    
655     

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24