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