1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
INTERNET-DRAFT Mandatory H. Frystyk Nielsen, W3C |
7 |
draft-ietf-http-ext-mandatory-00 P. Leach, Microsoft |
8 |
Scott Lawrence, Agranat Systems |
9 |
Expires: August 13, 1998 Friday, March 13, 1998 |
10 |
|
11 |
Mandatory Extensions in HTTP |
12 |
|
13 |
|
14 |
Status of this Document |
15 |
|
16 |
This document is an Internet-Draft. Internet-Drafts are working |
17 |
documents of the Internet Engineering Task Force (IETF), its areas, |
18 |
and its working groups. Note that other groups may also distribute |
19 |
working documents as Internet-Drafts. Internet-Drafts are draft |
20 |
documents valid for a maximum of six months and may be updated, |
21 |
replaced, or obsoleted by other documents at any time. It is |
22 |
inappropriate to use Internet-Drafts as reference material or to cite |
23 |
them other than as "work in progress". |
24 |
|
25 |
To learn the current status of any Internet-Draft, please check the |
26 |
"1id-abstracts.txt" listing contained in the Internet-Drafts Shadow |
27 |
Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe), |
28 |
munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or |
29 |
ftp.isi.edu (US West Coast). |
30 |
|
31 |
Distribution of this document is unlimited. Please send comments to |
32 |
the <ietf-http-ext@w3.org> mailing list. This list is archived at |
33 |
"http://lists.w3.org/Archives/Public/ietf-http-ext/". |
34 |
|
35 |
The contribution of World Wide Web Consortium (W3C) staff is part of |
36 |
the W3C HTTP Activity (see "http://www.w3.org/Protocols/Activity"). |
37 |
|
38 |
|
39 |
Abstract |
40 |
|
41 |
HTTP is used increasingly in applications that need more facilities |
42 |
than the standard version of the protocol provides, ranging from |
43 |
distributed authoring, collaboration, and printing, to various remote |
44 |
procedure call mechanisms. This document proposes the use of a |
45 |
mandatory extension mechanism designed to address the tension between |
46 |
private agreement and public specification and to accommodate |
47 |
extension of applications such as HTTP clients, servers, and proxies. |
48 |
The proposal associates each extension with a URI[2], and use a few |
49 |
new RFC 822[1] style header fields to carry the extension identifier |
50 |
and related information between the parties involved in an extended |
51 |
transaction. |
52 |
|
53 |
|
54 |
Table of Contents |
55 |
|
56 |
1. Introduction.....................................................2 |
57 |
2. Notational Conventions...........................................2 |
58 |
3. Extension Declarations...........................................3 |
59 |
3.1 Header Field Prefixes.........................................4 |
60 |
|
61 |
Frystyk et al [Page 1] |
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
INTERNET-DRAFT Mandatory Friday, March 13, 1998 |
69 |
|
70 |
4. Extension Header Fields..........................................4 |
71 |
4.1 End-to-End Extensions.........................................5 |
72 |
4.2 Hop-by-Hop Extensions.........................................6 |
73 |
5. Mandatory HTTP Requests..........................................6 |
74 |
6. Mandatory HTTP Responses.........................................7 |
75 |
7. 510 Not Extended.................................................7 |
76 |
8. Publishing an Extension..........................................8 |
77 |
9. Security Considerations..........................................8 |
78 |
10. References......................................................9 |
79 |
11. Acknowledgements................................................9 |
80 |
12. Authors Addresses..............................................10 |
81 |
13. Summary of Protocol Interactions...............................10 |
82 |
14. Examples.......................................................11 |
83 |
14.1 Client Queries Server for DAV...............................11 |
84 |
14.2 Server Uses ZipFlate Compression Extension..................11 |
85 |
|
86 |
1. Introduction |
87 |
|
88 |
The mandatory proposal is designed to accommodate dynamic extension of |
89 |
HTTP clients and servers by software components; and to address the |
90 |
tension between private agreement and public specification. The kind |
91 |
of extensions capable of being introduced range from: |
92 |
|
93 |
o extending a single HTTP message; |
94 |
o introducing new encodings; |
95 |
o initiating HTTP-derived protocols for new applications; to... |
96 |
o switching to protocols which, once initiated, run independent of |
97 |
the original protocol stack. |
98 |
|
99 |
The proposal is intended to be used as follows: |
100 |
|
101 |
o Some party designs and specifies an extension; the party assigns |
102 |
the extension an identifier, which is a URI, and makes one or |
103 |
more representations of the extension available at that address |
104 |
(see section 8). |
105 |
o An HTTP client, server, or proxy that implements the Mandatory |
106 |
extension mechanism (hereafter called an agent) declares the use |
107 |
of the extension by referencing its URI in an extension |
108 |
declaration in an HTTP message (see section 3). |
109 |
o The ultimate recipient of the extension declaration which can be |
110 |
the origin server, the user agent, or any intermediary in the |
111 |
request/response chain can based on the extension declaration |
112 |
deduce how to properly interpret the extended message. |
113 |
|
114 |
The proposal uses features in HTTP/1.1 but is compatible with both |
115 |
HTTP/1.0 and HTTP/1.1 applications in such a way that extended |
116 |
applications can coexist with existing HTTP applications. |
117 |
|
118 |
|
119 |
2. Notational Conventions |
120 |
|
121 |
This specification uses the same notational conventions and basic |
122 |
parsing constructs as RFC 2068[7]. In particular the BNF constructs |
123 |
|
124 |
Frystyk, et al [Page 2] |
125 |
|
126 |
|
127 |
|
128 |
|
129 |
|
130 |
|
131 |
INTERNET-DRAFT Mandatory Friday, March 13, 1998 |
132 |
|
133 |
"token", "quoted-string", "field-name", and "URI" in this document are |
134 |
to be interpreted as described in RFC 2068[7]. |
135 |
|
136 |
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", |
137 |
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this |
138 |
document are to be interpreted as described in RFC 2119[8]. |
139 |
|
140 |
This proposal does not rely on particular features defined in URLs [3] |
141 |
that cannot potentially be expressed using URNs (see section 8). |
142 |
Therefore, the more generic term URI[2] is used throughout the |
143 |
specification. |
144 |
|
145 |
|
146 |
3. Extension Declarations |
147 |
|
148 |
An extension declaration can be used to indicate that an extension has |
149 |
been applied to a message and possibly to reserve a part of the header |
150 |
namespace identified by a header field prefix (see 3.1). |
151 |
|
152 |
This specification does not define any ramifications of applying an |
153 |
extension to a message nor whether two extensions can or cannot |
154 |
logically coexist within the same message. It is strictly a framework |
155 |
for describing which extensions have been applied and what the |
156 |
ultimate recipient either must or may do in order to properly |
157 |
interpret any extension declarations within that message. |
158 |
|
159 |
The grammar for an extension declaration is as follows: |
160 |
|
161 |
ext-decl = <"> URI <"> [ ext-params ] |
162 |
ext-params = ";" namespace *( ext-extension ) |
163 |
|
164 |
namespace = ";" "ns" "=" prefix |
165 |
prefix = 2*DIGIT "-" |
166 |
ext-extension = ";" token [ "=" ( token | quoted-string ) ] |
167 |
|
168 |
An extension is identified by a URI. Extension identifier URIs can be |
169 |
either relative or absolute. Relative extension identifiers are |
170 |
interpreted relative to the IANA registry (see RFC 1808[4]). Examples |
171 |
of extension declarations are |
172 |
|
173 |
"rfc2068"; SetCookie2 |
174 |
"Content-FooBar" |
175 |
"New-Registered-Header" |
176 |
"http://www.temporary.com/extension"; ns=33- |
177 |
|
178 |
An extension declaration can be extended through the use of one or |
179 |
more ext-extension parameters. Unrecognized ext-extension parameters |
180 |
SHOULD be ignored and MUST NOT be removed by proxies when forwarding |
181 |
the extension declaration. |
182 |
|
183 |
|
184 |
|
185 |
|
186 |
|
187 |
Frystyk, et al [Page 3] |
188 |
|
189 |
|
190 |
|
191 |
|
192 |
|
193 |
|
194 |
INTERNET-DRAFT Mandatory Friday, March 13, 1998 |
195 |
|
196 |
Note: In layered implementations, unknown ext-extension parameters |
197 |
should be passed to the upper layers as they may have other mechanisms |
198 |
of knowing the semantics of the parameters. |
199 |
|
200 |
|
201 |
3.1 Header Field Prefixes |
202 |
|
203 |
The header-prefix can be used to indicate that all header fields in |
204 |
the message matching the header-prefix value using string prefix- |
205 |
matching are introduced by this extension instance. This allows an |
206 |
extension instance to dynamically reserve a subspace of the header |
207 |
space in a protocol message in order to prevent header field name |
208 |
clashes. |
209 |
|
210 |
Prefixes are primarily intended to avoid header field name conflicts |
211 |
and to allow multiple instances of a single extension using its own |
212 |
header fields to be applied to the same message without conflicting |
213 |
with each other. Alternatively, the extension declarations can contain |
214 |
the header field information as ext-params. |
215 |
|
216 |
Agents SHOULD NOT reuse header-prefix values in the same message |
217 |
unless explicitly allowed by the extension (see section 4.1 for a |
218 |
discussion of the ultimate recipient of an extension declaration). |
219 |
|
220 |
Examples of header-prefix values are |
221 |
|
222 |
1234- |
223 |
546- |
224 |
234345653- |
225 |
|
226 |
Linear white space (LWS) MUST NOT be used between the digits and the |
227 |
"-". The format of the prefix using a combination of digits and the |
228 |
dash "-" guarantees that no extension declaration can reserve the |
229 |
whole header field name space. |
230 |
|
231 |
Old applications may introduce header fields independent of this |
232 |
extension mechanism, potentially conflicting with header fields |
233 |
introduced by the prefix mechanism. In order to minimize this risk, |
234 |
prefixes MUST contain at least 2 digits. |
235 |
|
236 |
|
237 |
4. Extension Header Fields |
238 |
|
239 |
This proposal introduces two types of extension declaration strength: |
240 |
mandatory and optional, and two types of extension declaration scope: |
241 |
hop-by-hop and end-to-end (see section 4.1 and 4.2). |
242 |
|
243 |
A mandatory extension declaration indicates that the ultimate |
244 |
recipient MUST consult and adhere to the rules given by the extension |
245 |
when processing the message or report an error (see section 5 and 7). |
246 |
|
247 |
|
248 |
|
249 |
Frystyk, et al [Page 4] |
250 |
|
251 |
|
252 |
|
253 |
|
254 |
|
255 |
|
256 |
INTERNET-DRAFT Mandatory Friday, March 13, 1998 |
257 |
|
258 |
An optional extension declaration indicates that the ultimate |
259 |
recipient of the extension MAY consult and adhere to the rules given |
260 |
by the extension when processing the message, or ignore the extension |
261 |
declaration completely. An agent may not be able to distinguish |
262 |
whether the ultimate recipient does not understand an extension |
263 |
referred to by an optional extension or simply ignores the extension |
264 |
declaration. |
265 |
|
266 |
The combination of the declaration strength and scope defines a 2x2 |
267 |
matrix which is distinguished by four new general HTTP header fields: |
268 |
Man, Opt, C-Man, and C-Opt (see section 4.1 and 4.2, and appendix 13 |
269 |
for a table of interactions with origin servers and proxies). |
270 |
|
271 |
The header fields are general header fields as they describe which |
272 |
extensions actually are applied to an HTTP message. Optional |
273 |
declarations MAY be applied to any HTTP message without any change to |
274 |
existing HTTP semantics. Mandatory declarations MUST be applied to a |
275 |
request message as described in section 5 and to a response message as |
276 |
described in section 6. |
277 |
|
278 |
|
279 |
4.1 End-to-End Extensions |
280 |
|
281 |
End-to-end declarations MUST be transmitted to the ultimate recipient |
282 |
of the declaration. The Man and the Opt general header fields are end- |
283 |
to-end header fields and are defined as follows: |
284 |
|
285 |
mandatory = "Man" ":" 1#ext-decl |
286 |
optional = "Opt" ":" 1#ext-decl |
287 |
|
288 |
For example |
289 |
|
290 |
HTTP/1.1 200 OK |
291 |
Content-Length: 421 |
292 |
Opt: "http://www.digest.org/Digest"; digest="4525dct344v@fsdfsg" |
293 |
... |
294 |
|
295 |
The ultimate recipient of an end-to-end extension declaration would |
296 |
often be but is not limited to either the origin server or the user |
297 |
agent. Proxies MAY act as both the initiator and the ultimate |
298 |
recipient of end-to-end extension declarations. It is outside the |
299 |
scope of this specification to define how an agreement is reached |
300 |
between a party representing the proxy and the party on which behalf |
301 |
it can act, but for example, the parties may be within the same trust |
302 |
domain. |
303 |
|
304 |
If a proxy is the ultimate recipient of a mandatory end-to-end |
305 |
extension declaration then it MUST handle that extension declaration |
306 |
as described in section 5. The proxy SHOULD remove all parts of the |
307 |
extension declaration from the message before forwarding it. |
308 |
|
309 |
|
310 |
|
311 |
|
312 |
Frystyk, et al [Page 5] |
313 |
|
314 |
|
315 |
|
316 |
|
317 |
|
318 |
|
319 |
INTERNET-DRAFT Mandatory Friday, March 13, 1998 |
320 |
|
321 |
4.2 Hop-by-Hop Extensions |
322 |
|
323 |
Hop-by-hop extension declarations are meaningful only for a single |
324 |
transport-level connection. The C-Man and the C-Opt general header |
325 |
field are hop-by-hop header fields and MUST NOT be communicated by |
326 |
proxies over further connections. The two headers have the following |
327 |
grammar: |
328 |
|
329 |
c-mandatory = "C-Man" ":" 1#ext-decl |
330 |
c-optional = "C-Opt" ":" 1#ext-decl |
331 |
|
332 |
For example |
333 |
|
334 |
GET / HTTP/1.1 |
335 |
Host: some.host |
336 |
C-Man: "http://www.digest.org/ProxyAuth"; |
337 |
Credentials="g5gj262jdw@4df" |
338 |
Connection: C-Man |
339 |
|
340 |
In HTTP/1.1, the C-Man and the C-Opt header field MUST be protected by |
341 |
a Connection header. That is, the header fields are to be included as |
342 |
Connection header directives (see section [7], section 14.10). |
343 |
|
344 |
An agent MUST NOT send the C-Man or the C-Opt header field to an |
345 |
HTTP/1.0 proxy as it does not obey the HTTP/1.1 rules for parsing the |
346 |
Connection header field (see [7]). |
347 |
|
348 |
|
349 |
5. Mandatory HTTP Requests |
350 |
|
351 |
An HTTP request is called a mandatory request if it includes at least |
352 |
one mandatory extension declaration (using the Man or the C-Man header |
353 |
fields). The method name of a mandatory request MUST be prefixed by |
354 |
"M-". For example, a client might express the binding rights- |
355 |
management constraints in an HTTP PUT request as follows: |
356 |
|
357 |
M-PUT /a-resource HTTP/1.1 |
358 |
Man: "http://www.copyright.org/rights-management"; ns=43- |
359 |
43-copyright: http://www.copyright.org/COPYRIGHT.html- |
360 |
43-contributions: http://www.copyright.org/PATCHES.html |
361 |
Host: www.w3.org |
362 |
Content-Length: 1203 |
363 |
Content-Type: text/html |
364 |
|
365 |
<!doctype html ... |
366 |
|
367 |
An HTTP server MUST NOT return a 2xx status-code without understanding |
368 |
and obeying all mandatory extension declaration(s) in a mandatory |
369 |
request. A mandatory HTTP request invalidates cached entries as |
370 |
described in [7], section 13.10. |
371 |
|
372 |
The ultimate recipient of a mandatory HTTP request with the "M-" |
373 |
prefix on the method name MUST process the request by performing the |
374 |
following actions in the order they occur: |
375 |
|
376 |
Frystyk, et al [Page 6] |
377 |
|
378 |
|
379 |
|
380 |
|
381 |
|
382 |
|
383 |
INTERNET-DRAFT Mandatory Friday, March 13, 1998 |
384 |
|
385 |
1. Identify all mandatory extension declarations (both hop-by-hop |
386 |
and end-to-end); the server MAY ignore optional declarations |
387 |
without affecting the result of the transaction; |
388 |
2. Evaluate and process the extensions identified in 1) or if the |
389 |
extension declarations do not match the policy for accessing |
390 |
the resource then respond with a 510 (Not Extended) status-code |
391 |
(see section 7); |
392 |
3. Strip the "M-" prefix from the method name and process the |
393 |
reminder of the request according to the semantics of the |
394 |
existing HTTP/1.1 method name as defined in [7]. |
395 |
|
396 |
An "M-" aware proxy that does not act as the ultimate recipient of a |
397 |
mandatory extension declaration MUST NOT remove the declaration or the |
398 |
"M-" method name prefix when forwarding the message. |
399 |
|
400 |
An agent receiving an HTTP/1.0 (or lower-version) message that |
401 |
includes a Connection header MUST, for each connection-token in this |
402 |
field, remove and ignore any header field(s) from the message with the |
403 |
same name as the connection-token. Any "M-" method name prefix |
404 |
introduced as a result of discarded hop-by-hop extensions MUST be |
405 |
ignored and removed by a proxy when forwarding the message. |
406 |
|
407 |
HTTP proxies that do not understand the "M-" method name prefix SHOULD |
408 |
return 501 (Not Implemented) or turn themselves into a tunnel ([7]) in |
409 |
which case they do not take any part in the communication. |
410 |
|
411 |
The "M-" prefix is reserved by this proposal and MUST NOT be used by |
412 |
other HTTP extensions. |
413 |
|
414 |
|
415 |
6. Mandatory HTTP Responses |
416 |
|
417 |
Mandatory extension declarations in HTTP responses are often a result |
418 |
of but not limited to mandatory HTTP requests. A server MAY use |
419 |
mandatory extension declarations in response to a non-mandatory HTTP |
420 |
request. This is primarily intended to facilitate extensions that can |
421 |
not be understood without using the extension or are authorized out- |
422 |
of-band. |
423 |
|
424 |
If a client receives an HTTP response which contains a Mandatory |
425 |
extension declaration which it does not understand or does not want to |
426 |
use, it SHOULD treat it as if the message was of type |
427 |
"application/octet-stream". |
428 |
|
429 |
|
430 |
7. 510 Not Extended |
431 |
|
432 |
The policy for accessing the resource has not been met in the request. |
433 |
The server SHOULD send back all the information necessary for the |
434 |
client to issue an extended request. It is outside the scope of this |
435 |
specification to specify how the extensions inform the client. |
436 |
|
437 |
|
438 |
Frystyk, et al [Page 7] |
439 |
|
440 |
|
441 |
|
442 |
|
443 |
|
444 |
|
445 |
INTERNET-DRAFT Mandatory Friday, March 13, 1998 |
446 |
|
447 |
If the initial request already included the extensions requested in |
448 |
the 510 response, then the response indicates that access has been |
449 |
refused for those extension declarations. |
450 |
|
451 |
If the 510 response contains the same set of extension policies as the |
452 |
prior response, then the client MAY present any entity included in the |
453 |
response to the user, since that entity may include relevant |
454 |
diagnostic information. |
455 |
|
456 |
|
457 |
8. Publishing an Extension |
458 |
|
459 |
While the protocol extension definition should be published at the |
460 |
address of the extension identifier, this is not a requirement of this |
461 |
specification. The only absolute requirement is that distinct names be |
462 |
used for distinct semantics. For example, one way to achieve this is |
463 |
to use a mid, cid, or uuid URI. The association between the extension |
464 |
identifier and the specification might be made by distributing a |
465 |
specification, which references the extension identifier. |
466 |
|
467 |
It is strongly recommended that the integrity and persistence of the |
468 |
extension identifier is maintained and kept unquestioned throughout |
469 |
the lifetime of the extension. Care should be taken not to distribute |
470 |
conflicting specifications that reference the same name. Even when a |
471 |
URI is used to publish extension specifications, care must be taken |
472 |
that the specification made available at that address does not change |
473 |
significantly over time. One agent may associate the identifier with |
474 |
the old semantics, and another might associate it with the new |
475 |
semantics. |
476 |
|
477 |
The extension definition may be made available in different |
478 |
representations ranging from |
479 |
|
480 |
o a human-readable specification defining the extension semantics, |
481 |
o downloadable code which implements the semantics defined by the |
482 |
extension, |
483 |
o a formal interface description provided by the extension, to |
484 |
o a machine-readable specification defining the extension |
485 |
semantics. |
486 |
|
487 |
For example, a software component that implements the specification |
488 |
may reside at the same address as a human-readable specification |
489 |
(distinguished by content negotiation). The human-readable |
490 |
representation serves to document the extension and encourage |
491 |
deployment, while the software component allows clients and servers to |
492 |
be dynamically extended. |
493 |
|
494 |
|
495 |
9. Security Considerations |
496 |
|
497 |
o Dynamic installation of extension facilities as described in the |
498 |
introduction involves software written by one party (the provider |
499 |
of the implementation) to be executed under the authority of |
500 |
|
501 |
Frystyk, et al [Page 8] |
502 |
|
503 |
|
504 |
|
505 |
|
506 |
|
507 |
|
508 |
INTERNET-DRAFT Mandatory Friday, March 13, 1998 |
509 |
|
510 |
another (the party operating the host software). This opens the |
511 |
host party to a variety of "Trojan horse" attacks by the |
512 |
provider, or a malicious third party that forges implementations |
513 |
under a provider's name. See, for example RFC2046[6], section |
514 |
4.5.2 for a discussion of these risks. |
515 |
|
516 |
10. References |
517 |
|
518 |
[1] D. H. Crocker. "Standard for the Format of ARPA Internet Text |
519 |
Messages", STD 11, RFC 822, UDEL, August 1982 |
520 |
[2] T. Berners-Lee, "Universal Resource Identifiers in WWW. A |
521 |
Unifying Syntax for the Expression of Names and Addresses of |
522 |
Objects on the Network as used in the World-Wide Web", RFC 1630, |
523 |
CERN, June 1994. |
524 |
[3] T. Berners-Lee, L. Masinter, M. McCahill. "Uniform Resource |
525 |
Locators (URL)" RFC 1738, CERN, Xerox PARC, University of |
526 |
Minnesota, December 1994. |
527 |
[4] R. Fielding, "Relative Uniform Resource Locators", RFC 1808, UC |
528 |
Irvine, June 1995. |
529 |
[5] T. Berners-Lee, R. Fielding, H. Frystyk, "Hypertext Transfer |
530 |
Protocol -- HTTP/1.0", RFC 1945, W3C/MIT, UC Irvine, W3C/MIT, May |
531 |
1996. |
532 |
[6] N. Freed, N. Borenstein, "Multipurpose Internet Mail Extensions |
533 |
(MIME) Part Two: Media Types", RFC 2046, Innosoft, First Virtual, |
534 |
November 1996. |
535 |
[7] R. Fielding, J. Gettys, J. C. Mogul, H. Frystyk, T. Berners-Lee, |
536 |
"Hypertext Transfer Protocol -- HTTP/1.1", RFC 2068, U.C. Irvine, |
537 |
DEC W3C/MIT, DEC, W3C/MIT, W3C/MIT, January 1997 |
538 |
[8] S. Bradner, "Key words for use in RFCs to Indicate Requirement |
539 |
Levels", RFC 2119, Harvard University, March 1997 |
540 |
[9] Y. Goland et al, "Extensions for Distributed Authoring and |
541 |
Versioning", Internet Draft, draft-jensen-webdav-ext-01, 26 March |
542 |
1997. This is work in progress. |
543 |
[10] H. F. Nielsen, D. Connolly, R. Khare, "PEP - an extension |
544 |
mechanism for HTTP", draft-http-pep-05.txt, November 21, 1997 |
545 |
|
546 |
11. Acknowledgements |
547 |
|
548 |
Rohit Khare deserves special recognition for his efforts in commenting |
549 |
in the design phase of the protocol. Also thanks to Josh Cohen, Ross |
550 |
Patterson, Jim Gettys and all the people who have been involved in |
551 |
PEP. |
552 |
|
553 |
|
554 |
|
555 |
|
556 |
|
557 |
|
558 |
|
559 |
|
560 |
|
561 |
|
562 |
Frystyk, et al [Page 9] |
563 |
|
564 |
|
565 |
|
566 |
|
567 |
|
568 |
|
569 |
INTERNET-DRAFT Mandatory Friday, March 13, 1998 |
570 |
|
571 |
12. Authors Addresses |
572 |
|
573 |
Henrik Frystyk Nielsen |
574 |
Technical Staff, World Wide Web Consortium |
575 |
MIT Laboratory for Computer Science |
576 |
545 Technology Square |
577 |
Cambridge, MA 02139, USA |
578 |
Email: frystyk@w3.org |
579 |
|
580 |
Paul J. Leach |
581 |
Microsoft Corporation |
582 |
1 Microsoft Way |
583 |
Redmond, WA 98052, USA |
584 |
Email: paulle@microsoft.com |
585 |
|
586 |
Scott Lawrence |
587 |
Agranat Systems, Inc. |
588 |
1345 Main Street |
589 |
Waltham, MA 02154, USA |
590 |
Email: lawrence@agranat.com |
591 |
|
592 |
|
593 |
Appendices |
594 |
|
595 |
|
596 |
13. Summary of Protocol Interactions |
597 |
|
598 |
The following tables summarize the outcome of strength and scope rules |
599 |
of the mandatory proposal of compliant and non-compliant HTTP proxies |
600 |
and origin servers. The summary is intended as a guide and index to |
601 |
the text, but is necessarily cryptic and incomplete. This summary |
602 |
should never be used or referenced separately from the complete |
603 |
specification. |
604 |
|
605 |
|
606 |
Table 1: Origin Server |
607 |
|
608 |
Scope Hop-by-hop End-to-end |
609 |
|
610 |
Strength Optional Required Optional Required |
611 |
(may) (must) (may) (must) |
612 |
|
613 |
Mandatory Standard 501 (Not Standard 501 (Not |
614 |
unsupported processing Implemented)processing Implemented) |
615 |
|
616 |
Extension Standard 510 (Not Standard 510 (Not |
617 |
unsupported processing Extended) processing Extended) |
618 |
|
619 |
Extension Extended Extended Extended Extended |
620 |
supported processing processing processing processing |
621 |
|
622 |
|
623 |
|
624 |
|
625 |
|
626 |
Frystyk, et al [Page 10] |
627 |
|
628 |
|
629 |
|
630 |
|
631 |
|
632 |
|
633 |
INTERNET-DRAFT Mandatory Friday, March 13, 1998 |
634 |
|
635 |
Table 2: Proxy Server |
636 |
|
637 |
Scope Hop-by-hop End-to-end |
638 |
|
639 |
Strength Optional Required Optional Required |
640 |
(may) (must) (may) (must) |
641 |
|
642 |
Mandatory Strip 501 (Not Forward 501 (Not |
643 |
unsupported extension Implemented)extension Implemented) |
644 |
or tunnel or tunnel |
645 |
|
646 |
Extension Strip 510 (Not Forward Forward |
647 |
unsupported extension Extended) extension extension |
648 |
|
649 |
Extension Extended Extended Extended Extended |
650 |
supported processing processing processing, processing, |
651 |
and strip and strip may strip may strip |
652 |
|
653 |
|
654 |
14. Examples |
655 |
|
656 |
The following examples show various scenarios using mandatory in |
657 |
HTTP/1.1 requests and responses. Information not essential for |
658 |
illustrating the examples is left out (referred to as "�") |
659 |
|
660 |
|
661 |
14.1 Client Queries Server for DAV |
662 |
|
663 |
In this example, the purpose is to determine whether a server |
664 |
understands and supports the Distributed Authoring and Versioning |
665 |
(DAV) protocol extension [9]. By making the request mandatory (see |
666 |
section 5), the client forces the server to process the extension |
667 |
declaration and obey the extension or report an error. |
668 |
|
669 |
M-GET /some.url HTTP/1.1 |
670 |
Host: some.host |
671 |
Man: "http://www.dav.org" |
672 |
... |
673 |
|
674 |
HTTP/1.1 200 OK |
675 |
... |
676 |
|
677 |
The response shows that the server does understand. It is not possible |
678 |
to distinguish between querying about or using an extension - the |
679 |
extension declaration is identical. Whether it in fact is a query may |
680 |
depend on the request method name and request modifiers. |
681 |
|
682 |
|
683 |
14.2 Server Uses ZipFlate Compression Extension |
684 |
|
685 |
This example shows a server using the zipflate compression extension |
686 |
in a response: |
687 |
|
688 |
|
689 |
|
690 |
|
691 |
|
692 |
Frystyk, et al [Page 11] |
693 |
|
694 |
|
695 |
|
696 |
|
697 |
|
698 |
|
699 |
INTERNET-DRAFT Mandatory Friday, March 13, 1998 |
700 |
|
701 |
GET /Index HTTP/1.1 |
702 |
Host: some.host |
703 |
|
704 |
HTTP/1.1 200 OK |
705 |
Man: "http://www.encoding.com/zipflate" |
706 |
Cache-Control: no-transform |
707 |
Vary: * |
708 |
... |
709 |
|
710 |
The response shows that the server uses the extension the response. |
711 |
The response includes the no-transform cache-control directive in |
712 |
order to avoid that proxies add their own content-coding to the |
713 |
message and a Vary header field indicating that a cache may not use |
714 |
the response to reply to a subsequent request without revalidation. |
715 |
|
716 |
|
717 |
|
718 |
|
719 |
|
720 |
|
721 |
|
722 |
|
723 |
|
724 |
|
725 |
|
726 |
|
727 |
|
728 |
|
729 |
|
730 |
|
731 |
|
732 |
|
733 |
|
734 |
|
735 |
|
736 |
|
737 |
|
738 |
|
739 |
|
740 |
|
741 |
|
742 |
|
743 |
|
744 |
|
745 |
|
746 |
|
747 |
|
748 |
|
749 |
|
750 |
|
751 |
|
752 |
Frystyk, et al [Page 12] |