| 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 |
|