/[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 - (show 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
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