1 |
wakaba |
1.1 |
|
2 |
|
|
|
3 |
|
|
|
4 |
|
|
|
5 |
|
|
|
6 |
|
|
|
7 |
|
|
|
8 |
|
|
HTTP Working Group PEP H. Frystyk Nielsen, W3C |
9 |
|
|
INTERNET DRAFT D. Connolly, W3C |
10 |
|
|
<draft-ietf-http-pep-05> R. Khare, W3C |
11 |
|
|
E. Prud'hommeaux, W3C |
12 |
|
|
Expires: May 21, 1998 Friday, November 21, 1997 |
13 |
|
|
|
14 |
|
|
PEP - an Extension Mechanism for HTTP |
15 |
|
|
|
16 |
|
|
|
17 |
|
|
Status of this Document |
18 |
|
|
|
19 |
|
|
This document is an Internet-Draft. Internet-Drafts are working |
20 |
|
|
documents of the Internet Engineering Task Force (IETF), its areas, |
21 |
|
|
and its working groups. Note that other groups may also distribute |
22 |
|
|
working documents as Internet-Drafts. Internet-Drafts are draft |
23 |
|
|
documents valid for a maximum of six months and may be updated, |
24 |
|
|
replaced, or obsoleted by other documents at any time. It is |
25 |
|
|
inappropriate to use Internet-Drafts as reference material or to cite |
26 |
|
|
them other than as "work in progress". |
27 |
|
|
|
28 |
|
|
To learn the current status of any Internet-Draft, please check the |
29 |
|
|
"1id-abstracts.txt" list ing contained in the Internet-Drafts Shadow |
30 |
|
|
Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe), |
31 |
|
|
munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or |
32 |
|
|
ftp.isi.edu (US West Coast). This document is also available as a W3C |
33 |
|
|
Working Draft. The most recent release is available at |
34 |
|
|
"http://www.w3.org/TR/WD-http-pep". Distribution of this document is |
35 |
|
|
unlimited. Please send comments to the HTTP working group at http- |
36 |
|
|
wg@cuckoo.hpl.hp.com. Discussions of the working group are archived at |
37 |
|
|
"http://www.ics.uci.edu/pub/ietf/http/". |
38 |
|
|
|
39 |
|
|
The contribution of World Wide Web Consortium (W3C) staff time to the |
40 |
|
|
HTTP working group is part of the W3C HTTP Activity (see " |
41 |
|
|
http://www.w3.org/Protocols/Activity"). The editor maintains |
42 |
|
|
background information about PEP at |
43 |
|
|
"http://www.w3.org/Protocols/PEP/". |
44 |
|
|
|
45 |
|
|
Note: The PEP specification has gone through a thorough design phase |
46 |
|
|
and entered a steady state where the authors do not intend to modify |
47 |
|
|
the document any further. At the same time we have developed practical |
48 |
|
|
experience with the PEP demo code (available from |
49 |
|
|
"http://www.w3.org/Protocols/PEP") which demonstrates both client, |
50 |
|
|
server, and proxy interactions using dynamic loaded PEP extensions. |
51 |
|
|
However, we believe that it is essential for a specification to be |
52 |
|
|
tested in real world applications before being deployed at large, |
53 |
|
|
which is the reason for the status of Experimental. |
54 |
|
|
|
55 |
|
|
|
56 |
|
|
Abstract |
57 |
|
|
|
58 |
|
|
HTTP is used increasingly in applications that need more facilities |
59 |
|
|
than the standard version of the protocol provides, ranging from |
60 |
|
|
distributed authoring, collaboration, and printing, to various remote |
61 |
|
|
|
62 |
|
|
Frystyk, et al [Page 1] |
63 |
|
|
|
64 |
|
|
|
65 |
|
|
|
66 |
|
|
|
67 |
|
|
|
68 |
|
|
|
69 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
70 |
|
|
|
71 |
|
|
procedure call mechanisms. The Protocol Extension Protocol (PEP) is an |
72 |
|
|
extension mechanism designed to address the tension between private |
73 |
|
|
agreement and public specification and to accommodate extension of |
74 |
|
|
applications such as HTTP clients, servers, and proxies. The PEP |
75 |
|
|
mechanism is designed to associate each extension with a URI[2], and |
76 |
|
|
use a few new RFC 822[1] derived header fields to carry the extension |
77 |
|
|
identifier and related information between the parties involved in an |
78 |
|
|
extended transaction. |
79 |
|
|
|
80 |
|
|
This document defines PEP and describes the interactions between PEP |
81 |
|
|
and HTTP/1.1[7]. PEP is intended to be compatible with HTTP/1.0[5] |
82 |
|
|
inasmuch as HTTP/1.1 is compatible with HTTP/1.0 (see [7], section |
83 |
|
|
19.7). It is proposed that the PEP extension mechanism be included in |
84 |
|
|
future versions of HTTP. |
85 |
|
|
|
86 |
|
|
The PEP extension mechanism may be applicable to other information |
87 |
|
|
exchange not mentioned in this document. It is recommended that |
88 |
|
|
readers get acquainted with section 1.4 for a suggested reading of |
89 |
|
|
this specification and a list of sections specific for HTTP based |
90 |
|
|
applications. |
91 |
|
|
|
92 |
|
|
|
93 |
|
|
Table of Contents |
94 |
|
|
|
95 |
|
|
1. Introduction.....................................................3 |
96 |
|
|
1.1 Requirements..................................................3 |
97 |
|
|
1.2 Purpose.......................................................4 |
98 |
|
|
1.3 Operational Overview..........................................4 |
99 |
|
|
1.4 Guide to this Specification...................................5 |
100 |
|
|
2. The PEP Extension Space in HTTP..................................6 |
101 |
|
|
3. Notational Conventions...........................................7 |
102 |
|
|
3.1 Bag Syntax....................................................7 |
103 |
|
|
4. Extension Declarations...........................................8 |
104 |
|
|
4.1 Mapping Header Fields.........................................8 |
105 |
|
|
4.2 The Strength of a Declaration.................................9 |
106 |
|
|
4.3 End-to-End Extension Declarations............................10 |
107 |
|
|
4.4 Hop-by-Hop Extension Declarations............................10 |
108 |
|
|
5. Extension Policy Information....................................11 |
109 |
|
|
5.1 The Realm of a Policy........................................12 |
110 |
|
|
5.2 Policy Expirations...........................................12 |
111 |
|
|
5.3 Extra Parameters.............................................12 |
112 |
|
|
5.4 End-to-End Policies..........................................13 |
113 |
|
|
5.5 Hop-by-Hop Policies..........................................13 |
114 |
|
|
6. Publishing an Extension.........................................14 |
115 |
|
|
7. Binding HTTP Requests...........................................14 |
116 |
|
|
7.1 Extending Existing HTTP Methods..............................15 |
117 |
|
|
7.2 Adding New HTTP Methods......................................16 |
118 |
|
|
8. HTTP Status Codes...............................................16 |
119 |
|
|
8.1 420 Policy Not Fulfilled.....................................17 |
120 |
|
|
8.2 421 Bad Mapping..............................................17 |
121 |
|
|
9. HTTP Proxy Servers..............................................17 |
122 |
|
|
|
123 |
|
|
Frystyk, et al [Page 2] |
124 |
|
|
|
125 |
|
|
|
126 |
|
|
|
127 |
|
|
|
128 |
|
|
|
129 |
|
|
|
130 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
131 |
|
|
|
132 |
|
|
9.1 Proxy Servers as End-to-End Recipients.......................18 |
133 |
|
|
9.1.1 Proxy Servers Acting on Behalf of User Agents.............18 |
134 |
|
|
9.1.2 Proxy Servers Acting on Behalf of Origin Servers..........18 |
135 |
|
|
9.2 Proxy Servers and Repeated Hop-by-Hop Extensions.............19 |
136 |
|
|
10. Practical Considerations for HTTP..............................19 |
137 |
|
|
10.1 Interaction with Existing HTTP/1.1 Methods..................19 |
138 |
|
|
10.2 Interaction with Existing HTTP/1.1 Headers..................20 |
139 |
|
|
10.3 Server Initiated Extension Declarations.....................21 |
140 |
|
|
11. Security Considerations........................................21 |
141 |
|
|
12. Normative References...........................................21 |
142 |
|
|
13. Bibliography: Informative References...........................22 |
143 |
|
|
14. Acknowledgements...............................................23 |
144 |
|
|
15. Authors Addresses..............................................24 |
145 |
|
|
16. Summary of PEP Interactions....................................24 |
146 |
|
|
17. Examples.......................................................26 |
147 |
|
|
17.1 Client Queries Server for DAV...............................26 |
148 |
|
|
17.2 Client Informs Server about ZipFlate Compression Extension..26 |
149 |
|
|
17.3 Server Uses Content-Digest Extension........................27 |
150 |
|
|
17.4 Server Requires Client to use Payment Extension.............27 |
151 |
|
|
|
152 |
|
|
1. Introduction |
153 |
|
|
|
154 |
|
|
|
155 |
|
|
1.1 Requirements |
156 |
|
|
|
157 |
|
|
HTTP is a generic request-response protocol, designed to accommodate a |
158 |
|
|
variety of applications, from network information exchange and |
159 |
|
|
searching to file transfer and repository access to query and forms |
160 |
|
|
processing. |
161 |
|
|
|
162 |
|
|
Most HTTP transactions are initiated by a user agent issuing a request |
163 |
|
|
to be applied to a resource on some origin server, with intermediaries |
164 |
|
|
between them in some cases. The origin server replies with a response |
165 |
|
|
indicating the result of the transaction. |
166 |
|
|
|
167 |
|
|
Semantically, however, an HTTP transaction is between the principal |
168 |
|
|
accessing a resource (end user) and the principal responsible for the |
169 |
|
|
publication of a given resource (publisher). The publisher is |
170 |
|
|
responsible for the service provided at any particular URI, for |
171 |
|
|
example, the mapping between the URI and any representation of the |
172 |
|
|
resource to which it refers. The end user accesses information |
173 |
|
|
provided by a publisher. Exactly who takes the role as end user or |
174 |
|
|
publisher is beyond the scope of this document. |
175 |
|
|
|
176 |
|
|
HTTP, as is the case for most transaction based information exchange |
177 |
|
|
protocols, is used increasingly in applications that need more |
178 |
|
|
facilities than the standard version of the protocol provides, from |
179 |
|
|
distributed authoring, collaboration and printing, to various remote |
180 |
|
|
procedure call mechanisms. |
181 |
|
|
|
182 |
|
|
|
183 |
|
|
|
184 |
|
|
Frystyk, et al [Page 3] |
185 |
|
|
|
186 |
|
|
|
187 |
|
|
|
188 |
|
|
|
189 |
|
|
|
190 |
|
|
|
191 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
192 |
|
|
|
193 |
|
|
Many extended applications do not require agreement across the whole |
194 |
|
|
Internet about the extended facilities; rather, it suffices: |
195 |
|
|
|
196 |
|
|
o That conforming peers supporting a particular protocol extension |
197 |
|
|
or feature can employ it dynamically with no prior agreement; |
198 |
|
|
o That it is possible for one party having a capability for a new |
199 |
|
|
protocol to require that the other party either understand and |
200 |
|
|
abide by the new protocol or abort the operation; |
201 |
|
|
o That negotiation of matching capabilities is possible. |
202 |
|
|
|
203 |
|
|
The need for extensibility creates a tension between dynamically |
204 |
|
|
extensible applications and public, static specifications. |
205 |
|
|
|
206 |
|
|
|
207 |
|
|
1.2 Purpose |
208 |
|
|
|
209 |
|
|
The Protocol Extension Protocol (PEP) is an extension mechanism |
210 |
|
|
designed to accommodate dynamic extension of HTTP applications by |
211 |
|
|
software components; and to address the tension between private |
212 |
|
|
agreement and public specification. The kind of extensions capable of |
213 |
|
|
being introduced by PEP range from: |
214 |
|
|
|
215 |
|
|
o extending a single protocol message; |
216 |
|
|
o introducing new encodings; |
217 |
|
|
o initiating HTTP-derived protocols for new applications; to... |
218 |
|
|
o switching to protocols which, once initiated, run independent of |
219 |
|
|
the original protocol stack. |
220 |
|
|
|
221 |
|
|
This document defines the protocol extension mechanism referred to as |
222 |
|
|
"PEP". The PEP design is the result of analyzing a variety of |
223 |
|
|
extensions and extension mechanisms in HTTP and HTTP-like protocols, |
224 |
|
|
and the motivation behind them. |
225 |
|
|
|
226 |
|
|
The specification also describes the interactions between PEP and |
227 |
|
|
HTTP/1.1[7] including scoping rules and cache semantics. PEP is |
228 |
|
|
intended to be compatible with HTTP/1.0[5] inasmuch as HTTP/1.1 is |
229 |
|
|
compatible with HTTP/1.0 (see section 1.4 and 10) and it is proposed |
230 |
|
|
that the PEP extension mechanism be included in future versions of |
231 |
|
|
HTTP. |
232 |
|
|
|
233 |
|
|
|
234 |
|
|
1.3 Operational Overview |
235 |
|
|
|
236 |
|
|
PEP is intended to be used as follows: |
237 |
|
|
|
238 |
|
|
o Some party designs and specifies an extension; the party assigns |
239 |
|
|
the extension an identifier, which is a URI, and makes one or |
240 |
|
|
more representations of the extension available at that address |
241 |
|
|
(see section 6). |
242 |
|
|
o A party using a PEP compliant agent with an implementation of the |
243 |
|
|
extension wishes to use it; the agent declares the use of the |
244 |
|
|
extension by referencing its URI in a PEP extension declaration |
245 |
|
|
(see section 4). |
246 |
|
|
|
247 |
|
|
|
248 |
|
|
Frystyk, et al [Page 4] |
249 |
|
|
|
250 |
|
|
|
251 |
|
|
|
252 |
|
|
|
253 |
|
|
|
254 |
|
|
|
255 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
256 |
|
|
|
257 |
|
|
o Information about extensions can be passed between agents |
258 |
|
|
including information of where they can be used and under what |
259 |
|
|
conditions (see section 5). |
260 |
|
|
|
261 |
|
|
If an extension becomes ubiquitous, it may be incorporated into a new |
262 |
|
|
version of the base protocol, hence transitioning from dynamic |
263 |
|
|
extension to static specification. In this case, applications can |
264 |
|
|
refer to the new version of the base protocol instead of the PEP |
265 |
|
|
extension (see section 6). |
266 |
|
|
|
267 |
|
|
PEP extension declarations are characterized by the following |
268 |
|
|
properties: |
269 |
|
|
|
270 |
|
|
o They link features introduced by the extension to the URI |
271 |
|
|
identifying the extension, potentially allowing a recipient to |
272 |
|
|
interpret the message correctly with no prior agreement. |
273 |
|
|
o They contain a strength and a scope allowing the sender to define |
274 |
|
|
the appropriate action to be taken by the recipient even if it |
275 |
|
|
does not understand the semantics of the extension. |
276 |
|
|
o Any agent can generate declarations independent of other agents |
277 |
|
|
|
278 |
|
|
The advantage of including the extension identifier is that, at the |
279 |
|
|
cost of some extra bytes to spell out the URI, the use of a central |
280 |
|
|
registry of extension names is avoided. PEP can also be used to extend |
281 |
|
|
applications to support centrally registered extensions, assuming a |
282 |
|
|
URI is published as part of the registration (see section 6). |
283 |
|
|
|
284 |
|
|
The PEP mechanism is designed to accommodate but does not require |
285 |
|
|
dynamic extension of clients, servers, and proxies by software |
286 |
|
|
components as follows: |
287 |
|
|
|
288 |
|
|
o Clients and servers could be implemented with software component |
289 |
|
|
interfaces that allow dynamic installation of extension |
290 |
|
|
facilities. |
291 |
|
|
o An implementation compatible with a software component interface |
292 |
|
|
supported by the agent could be made available at the URI |
293 |
|
|
identifying the extension. |
294 |
|
|
o An agent receiving a message referring to an extension not known |
295 |
|
|
by the agent could dereference the extension's identifier and |
296 |
|
|
dynamically load support for the extended facility. |
297 |
|
|
|
298 |
|
|
The representation and implementation of dynamic extensible software |
299 |
|
|
component interfaces is outside the scope of this specification. |
300 |
|
|
|
301 |
|
|
|
302 |
|
|
1.4 Guide to this Specification |
303 |
|
|
|
304 |
|
|
This specification is organized as follows: Section 2 describes how |
305 |
|
|
PEP fits into HTTP. This is not required reading but may further the |
306 |
|
|
understanding of the specification. Section 3 is an overview of the |
307 |
|
|
notational conventions used throughout the specification. |
308 |
|
|
|
309 |
|
|
|
310 |
|
|
|
311 |
|
|
Frystyk, et al [Page 5] |
312 |
|
|
|
313 |
|
|
|
314 |
|
|
|
315 |
|
|
|
316 |
|
|
|
317 |
|
|
|
318 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
319 |
|
|
|
320 |
|
|
Section 4, 5, and 6 is the core part of the specification describing |
321 |
|
|
the generic PEP extension mechanism. Section 7, 8, 9, and 10 describe |
322 |
|
|
the interactions between PEP and HTTP/1.1[7]. |
323 |
|
|
|
324 |
|
|
The generic PEP extension mechanism may be applicable to other |
325 |
|
|
information exchange protocols. Such mappings, however, are outside |
326 |
|
|
the scope of this specification. |
327 |
|
|
|
328 |
|
|
|
329 |
|
|
2. The PEP Extension Space in HTTP |
330 |
|
|
|
331 |
|
|
PEP is designed to support dynamic extensibility of HTTP methods, |
332 |
|
|
headers, and status codes. Before describing in detail how PEP does |
333 |
|
|
this, it is constructive to have a look at how methods, headers, and |
334 |
|
|
status codes behave in HTTP: |
335 |
|
|
|
336 |
|
|
Methods |
337 |
|
|
The method token in an HTTP request indicates the method to be |
338 |
|
|
performed on the resource identified by the Request-URI. Methods |
339 |
|
|
need a priori agreement of semantics and can not be extended |
340 |
|
|
dynamically. If an HTTP server does not know a method, it must |
341 |
|
|
report an error message (see [7] section 5.1.1). A limitation of |
342 |
|
|
the method space is that a request can only contain a single |
343 |
|
|
method. Hence, it is not possible to support multiple, simultaneous |
344 |
|
|
extensions unless having a multiplicity of methods. |
345 |
|
|
|
346 |
|
|
Status Codes |
347 |
|
|
The status code element is a 3-digit integer result code of the |
348 |
|
|
attempt to understand and satisfy the request. Status codes are |
349 |
|
|
like method tokens in that there can only be a single status code |
350 |
|
|
in a response. However, status codes are somewhat easier to extend, |
351 |
|
|
as unknown status codes must be treated as the x00 cod-e of that |
352 |
|
|
class (see [7] section 6.1.1). For example, a new status code, 223 |
353 |
|
|
(My New Code) would default to 200 (OK). |
354 |
|
|
|
355 |
|
|
Headers |
356 |
|
|
Header fields can be used to pass information about any of the |
357 |
|
|
parties involved in the transaction, the transaction itself, or the |
358 |
|
|
resource identified by the Request-URI. The advantage of headers is |
359 |
|
|
that the header space is relatively open compared to that of |
360 |
|
|
methods and status codes. New headers can be introduced and must be |
361 |
|
|
ignored if the recipient does not recognize the header without |
362 |
|
|
affecting the outcome of the transaction (see [7] section 7.1). |
363 |
|
|
|
364 |
|
|
In order to achieve the desired flexibility, PEP is designed to use |
365 |
|
|
the header space for describing extensions and not directly HTTP |
366 |
|
|
methods or status codes. Instead, PEP introduces a placeholder in the |
367 |
|
|
method space and status code space respectively guaranteeing that all |
368 |
|
|
interactions with existing HTTP applications perform according to the |
369 |
|
|
PEP specification. The two placeholders are: |
370 |
|
|
|
371 |
|
|
|
372 |
|
|
|
373 |
|
|
Frystyk, et al [Page 6] |
374 |
|
|
|
375 |
|
|
|
376 |
|
|
|
377 |
|
|
|
378 |
|
|
|
379 |
|
|
|
380 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
381 |
|
|
|
382 |
|
|
o a special PEP method and a PEP- method prefix which indicates |
383 |
|
|
that a request contains one or more PEP extensions that must be |
384 |
|
|
adhered to or the transaction aborted (see section 7); |
385 |
|
|
o a special status code 420 (Policy Not Fulfilled) that indicates |
386 |
|
|
that the policy for accessing the resource was not met and that |
387 |
|
|
further information can be found in the response for diagnosing |
388 |
|
|
the problem (see section 8.1). |
389 |
|
|
|
390 |
|
|
These two placeholders allow for multiple PEP extensions to be |
391 |
|
|
deployed simultaneously without overloading the method space or the |
392 |
|
|
status code space. |
393 |
|
|
|
394 |
|
|
|
395 |
|
|
3. Notational Conventions |
396 |
|
|
|
397 |
|
|
This specification uses the same notational conventions and basic |
398 |
|
|
parsing constructs as RFC 2068[7]. In particular the BNF constructs |
399 |
|
|
"token", "quoted-string", "field-name", "URI", and "delta-seconds" in |
400 |
|
|
this document are to be interpreted as described in RFC 2068[7]. |
401 |
|
|
|
402 |
|
|
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", |
403 |
|
|
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this |
404 |
|
|
document are to be interpreted as described in RFC 2119[9]. |
405 |
|
|
|
406 |
|
|
PEP does not rely on particular features defined in URLs [3] that |
407 |
|
|
cannot potentially be expressed using URNs (see section 6). Therefore, |
408 |
|
|
the more generic term URI[2] is used throughout the specification. |
409 |
|
|
|
410 |
|
|
|
411 |
|
|
3.1 Bag Syntax |
412 |
|
|
|
413 |
|
|
The bag element is a recursive structure that uses braces ("{" and |
414 |
|
|
"}") to delimit attribute-value pairs that may consist of tokens, |
415 |
|
|
quoted-strings, URIs and recursively defined bags. The BNF for the bag |
416 |
|
|
syntax is as follows: |
417 |
|
|
|
418 |
|
|
bag = "{" bagname *bagitem "}" |
419 |
|
|
bagname = token |
420 |
|
|
bagitem = bag |
421 |
|
|
| token |
422 |
|
|
| quoted-string |
423 |
|
|
|
424 |
|
|
The bag semantics are defined by its context and the bag name. The |
425 |
|
|
value of a quoted string may be a URI in some cases. Unless explicitly |
426 |
|
|
defined otherwise, all tokens within a bag are case-insensitive. |
427 |
|
|
Comments as defined by RFC 822[1] indicated by surrounding the comment |
428 |
|
|
text with parentheses MUST NOT be used within a bag construct. |
429 |
|
|
|
430 |
|
|
|
431 |
|
|
|
432 |
|
|
|
433 |
|
|
|
434 |
|
|
|
435 |
|
|
|
436 |
|
|
Frystyk, et al [Page 7] |
437 |
|
|
|
438 |
|
|
|
439 |
|
|
|
440 |
|
|
|
441 |
|
|
|
442 |
|
|
|
443 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
444 |
|
|
|
445 |
|
|
4. Extension Declarations |
446 |
|
|
|
447 |
|
|
Extension declaration bags are used to indicate the PEP extensions |
448 |
|
|
that have been applied to a message. The grammar for an extension |
449 |
|
|
declaration is as follows: |
450 |
|
|
|
451 |
|
|
ext-decl = "{" req-ext-attr *opt-ext-attr "}" |
452 |
|
|
req-ext-attr = map |
453 |
|
|
opt-ext-attr = strength |
454 |
|
|
| attribute-ext |
455 |
|
|
map = "{" "map" <"> URI <"> #(header-prefix) "}" |
456 |
|
|
strength = "{" "strength" ( "must" | "may" ) "}" |
457 |
|
|
attribute-ext = bag |
458 |
|
|
header-prefix = 1*DIGIT "-" |
459 |
|
|
|
460 |
|
|
The map attribute bag contains the URI identifying the extension and a |
461 |
|
|
list of any header field names introduced by the extension (see |
462 |
|
|
section 4.1 and 6). If the extension identifier is relative, it is |
463 |
|
|
interpreted relative to the base URI of the message as defined by RFC |
464 |
|
|
1808[4]. |
465 |
|
|
|
466 |
|
|
The strength attribute bag indicates whether the recipient MUST or MAY |
467 |
|
|
obey the semantics given by the extension or report an error (see |
468 |
|
|
section 4.2). |
469 |
|
|
|
470 |
|
|
An extension declaration bag (ext-decl) can be extended through the |
471 |
|
|
use of one or more attribute-ext bags. Unrecognized attribute-ext bags |
472 |
|
|
SHOULD be ignored and MUST NOT be removed by proxies when forwarding |
473 |
|
|
the extension declaration (see section 9). |
474 |
|
|
|
475 |
|
|
Extension declarations can either be hop-by-hop or end-to-end (see |
476 |
|
|
[7], section 13.5.1) depending on the scope of the declaration (see |
477 |
|
|
section 4.3 and 4.4). End-to-end declarations MUST be transmitted to |
478 |
|
|
the ultimate recipient of the extension declaration. Hop-by-hop |
479 |
|
|
declarations are meaningful only for a single transport-level |
480 |
|
|
connection. |
481 |
|
|
|
482 |
|
|
|
483 |
|
|
4.1 Mapping Header Fields |
484 |
|
|
|
485 |
|
|
The header-prefix in a map attribute bag can be used to indicate that |
486 |
|
|
all header fields in the message matching the header-prefix value |
487 |
|
|
using string prefix-matching are introduced by this extension |
488 |
|
|
declaration instance. This allows an extension instance to dynamically |
489 |
|
|
reserve a part of the header space in the message for introducing new |
490 |
|
|
header fields without risking header name conflicts with other |
491 |
|
|
extension instances. |
492 |
|
|
|
493 |
|
|
Examples of header-prefix values are |
494 |
|
|
|
495 |
|
|
|
496 |
|
|
|
497 |
|
|
|
498 |
|
|
Frystyk, et al [Page 8] |
499 |
|
|
|
500 |
|
|
|
501 |
|
|
|
502 |
|
|
|
503 |
|
|
|
504 |
|
|
|
505 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
506 |
|
|
|
507 |
|
|
1-, 435- |
508 |
|
|
546- |
509 |
|
|
2343543645653- |
510 |
|
|
|
511 |
|
|
Agents SHOULD NOT overload well-known or widely deployed header fields |
512 |
|
|
with new semantics unless the new semantics are a superset of the |
513 |
|
|
existing semantics so that the header fields still can be interpreted |
514 |
|
|
according to the old semantics. |
515 |
|
|
|
516 |
|
|
Agents SHOULD NOT reuse already mapped header fields in the same |
517 |
|
|
message. If a header field is mapped by multiple extension |
518 |
|
|
declarations in the same message, the recipient SHOULD report an error |
519 |
|
|
(see section 8.2). |
520 |
|
|
|
521 |
|
|
Proxies adding extension declarations to a message MUST make sure that |
522 |
|
|
any header fields introduced do not conflict with already mapped |
523 |
|
|
header fields in that protocol message (see section 8.2). |
524 |
|
|
|
525 |
|
|
|
526 |
|
|
4.2 The Strength of a Declaration |
527 |
|
|
|
528 |
|
|
The strength attribute bag can be used to specify the actions to be |
529 |
|
|
taken by the ultimate recipient of the extension declaration. The |
530 |
|
|
strength value can indicate that |
531 |
|
|
|
532 |
|
|
1. the recipient MUST obey the extension declaration or report an |
533 |
|
|
error; or |
534 |
|
|
2. the recipient MAY obey the extension declaration or ignore it |
535 |
|
|
altogether. |
536 |
|
|
|
537 |
|
|
If the strength is "must", the ultimate recipient MUST consult and |
538 |
|
|
adhere to the rules given by the extension when processing the message |
539 |
|
|
or report an error (see section 7 and 8.1). |
540 |
|
|
|
541 |
|
|
If the strength is "may" the ultimate recipient of the extension MAY |
542 |
|
|
consult and adhere to the rules given by the extension when processing |
543 |
|
|
the message, or ignore the extension declaration completely. An agent |
544 |
|
|
may not be able to distinguish whether the ultimate recipient does not |
545 |
|
|
understand an extension referred to by an extension declaration of |
546 |
|
|
strength "may" or simply ignores the extension declaration. |
547 |
|
|
|
548 |
|
|
If no strength attribute is present, the default strength is "may". |
549 |
|
|
|
550 |
|
|
Not accepting or ignoring an extension declaration is different from |
551 |
|
|
not accepting a mapping of header field-names introduced by the map |
552 |
|
|
attribute bag. If the ultimate recipient cannot accept a mapping, for |
553 |
|
|
example if a field-name is already mapped by another extension |
554 |
|
|
declaration in that protocol message, it SHOULD report an error (see |
555 |
|
|
section 8.2). |
556 |
|
|
|
557 |
|
|
|
558 |
|
|
|
559 |
|
|
|
560 |
|
|
Frystyk, et al [Page 9] |
561 |
|
|
|
562 |
|
|
|
563 |
|
|
|
564 |
|
|
|
565 |
|
|
|
566 |
|
|
|
567 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
568 |
|
|
|
569 |
|
|
4.3 End-to-End Extension Declarations |
570 |
|
|
|
571 |
|
|
End-to-end declarations MUST be transmitted to the ultimate recipient |
572 |
|
|
of the declaration. The PEP header field is an end-to-end header field |
573 |
|
|
and is defined as follows: |
574 |
|
|
|
575 |
|
|
pep = "PEP" ":" 1#ext-decl |
576 |
|
|
|
577 |
|
|
For example |
578 |
|
|
|
579 |
|
|
GET / HTTP/1.1 |
580 |
|
|
Host: some.host |
581 |
|
|
PEP: {{map "http://www.w3.org/PEP/DAV"}} |
582 |
|
|
|
583 |
|
|
If multiple end-to-end extensions are declared in the same message, |
584 |
|
|
the declarations MUST be listed in the order in which they were |
585 |
|
|
applied to the message. |
586 |
|
|
|
587 |
|
|
Proxies MAY under certain conditions act as the ultimate recipient of |
588 |
|
|
declarations on behalf of user agents and origin servers (see section |
589 |
|
|
9.1). |
590 |
|
|
|
591 |
|
|
|
592 |
|
|
4.4 Hop-by-Hop Extension Declarations |
593 |
|
|
|
594 |
|
|
Hop-by-hop extension declarations are meaningful only for a single |
595 |
|
|
transport-level connection. The C-PEP header field is a hop-by-hop |
596 |
|
|
header field and MUST NOT be communicated by proxies over further |
597 |
|
|
connections. The C-PEP header has the following grammar: |
598 |
|
|
|
599 |
|
|
c-pep = "C-PEP" ":" 1#ext-decl |
600 |
|
|
|
601 |
|
|
For example |
602 |
|
|
|
603 |
|
|
GET / HTTP/1.1 |
604 |
|
|
Host: some.host |
605 |
|
|
C-PEP: {{map "http://www.w3.org/PEP/ProxyAuth" 43-}} |
606 |
|
|
43-Credentials: "fsdgfag" |
607 |
|
|
Connection: C-PEP, Credentials |
608 |
|
|
|
609 |
|
|
In HTTP, the C-PEP header field MUST be protected by a Connection |
610 |
|
|
header by including C-PEP as a Connection header directive. The |
611 |
|
|
directive MUST be handled according to the HTTP/1.1 specification of |
612 |
|
|
the Connection header (see section 10.2 and [7], section 14.10). |
613 |
|
|
|
614 |
|
|
An agent MUST NOT send the C-PEP header field to an HTTP/1.0 proxy as |
615 |
|
|
it does not obey the HTTP/1.1 rules for parsing the Connection header |
616 |
|
|
field (see [7], section 19.7.1). |
617 |
|
|
|
618 |
|
|
If multiple hop-by-hop extensions are declared in the same message, |
619 |
|
|
the extension declarations MUST be listed in the order in which they |
620 |
|
|
were applied. Hop-by-hop C-PEP declarations MUST be processed before |
621 |
|
|
any end-to-end PEP declarations. |
622 |
|
|
|
623 |
|
|
|
624 |
|
|
|
625 |
|
|
Frystyk, et al [Page 10] |
626 |
|
|
|
627 |
|
|
|
628 |
|
|
|
629 |
|
|
|
630 |
|
|
|
631 |
|
|
|
632 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
633 |
|
|
|
634 |
|
|
5. Extension Policy Information |
635 |
|
|
|
636 |
|
|
Extension Policy bags are used to indicate the extensions that may be |
637 |
|
|
applied to a message. Extension policies differ from extension |
638 |
|
|
declarations in that the latter is information about which extensions |
639 |
|
|
have been applied to a message. An extension policy is defined as |
640 |
|
|
follows: |
641 |
|
|
|
642 |
|
|
policy-decl = "{" req-pol-attr *opt-pol-attr "}" |
643 |
|
|
req-pol-attr = id |
644 |
|
|
opt-pol-attr = for |
645 |
|
|
| max-age |
646 |
|
|
| parameters |
647 |
|
|
| strength |
648 |
|
|
| attribute-ext |
649 |
|
|
id = "{" "id" <"> URI <"> "}" |
650 |
|
|
for = "{" "for" #URI-wildcard "}" |
651 |
|
|
max-age = "{" "max-age" delta-seconds "}" |
652 |
|
|
parameters = "{" "params" *bagitem "}" |
653 |
|
|
URI-wildcard = <"> URI <"> [ wildcard ] |
654 |
|
|
wildcard = "*" |
655 |
|
|
|
656 |
|
|
The id attribute specifies the URI identifying the extension (see |
657 |
|
|
section 6). If the extension identifier is relative, it is interpreted |
658 |
|
|
relative to the base URI of the message as defined by RFC 1808[4]. |
659 |
|
|
|
660 |
|
|
The for attribute bag specifies which resources, the policy is |
661 |
|
|
intended for (see section 5.1) and the max-age attribute bag when the |
662 |
|
|
information should be considered stale (see section 5.2). The params |
663 |
|
|
attribute bag can be used to pass additional information about the |
664 |
|
|
extension policy (see section 5.3). |
665 |
|
|
|
666 |
|
|
The strength attribute indicates whether the policy is a requirement |
667 |
|
|
or optional for the resource(s) for which it applies (see section |
668 |
|
|
4.2). |
669 |
|
|
|
670 |
|
|
An extension policy bag (policy-decl) can be extended through the use |
671 |
|
|
of one or more attribute-ext bags. Unrecognized attribute-ext bags |
672 |
|
|
SHOULD be ignored and MUST NOT be removed by proxies when forwarding |
673 |
|
|
the extension policy (see section 9). |
674 |
|
|
|
675 |
|
|
Extension policies can either be hop-by-hop or end-to-end policies |
676 |
|
|
(see [7], section 13.5.1) depending on the scope (see section 5.4 and |
677 |
|
|
5.5). End-to-end policies MUST be transmitted to the ultimate |
678 |
|
|
recipient of the extension policy. Hop-by-hop policies are meaningful |
679 |
|
|
only for a single transport-level connection. |
680 |
|
|
|
681 |
|
|
Note: It is expected that extension policies will be integrated with |
682 |
|
|
other metadata initiatives like the RDF initiative [11], for example. |
683 |
|
|
|
684 |
|
|
|
685 |
|
|
|
686 |
|
|
Frystyk, et al [Page 11] |
687 |
|
|
|
688 |
|
|
|
689 |
|
|
|
690 |
|
|
|
691 |
|
|
|
692 |
|
|
|
693 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
694 |
|
|
|
695 |
|
|
5.1 The Realm of a Policy |
696 |
|
|
|
697 |
|
|
The for attribute bag can be used to specify the resource(s) |
698 |
|
|
identified by URI(s) to which the policy applies. This allows |
699 |
|
|
extension policies to be deployed to third party sites and to be |
700 |
|
|
distributed by other means than directly between the involved parties. |
701 |
|
|
A URI followed by a LWS and a wildcard ("*") represents the set of |
702 |
|
|
URIs that contains the given URI using prefix matching. A URI with no |
703 |
|
|
wildcard means that URI only. |
704 |
|
|
|
705 |
|
|
Examples of URI-wildcards are |
706 |
|
|
|
707 |
|
|
{for "/" *} |
708 |
|
|
{for "http://www.w3.org/pub/" *} |
709 |
|
|
{for "secret/Overview.html"} |
710 |
|
|
|
711 |
|
|
An empty for attribute bag (no bagitems included) indicates that the |
712 |
|
|
policy is not applied to any resource. If no for attribute bag is |
713 |
|
|
present, the default value is the Request-URI. |
714 |
|
|
|
715 |
|
|
A realm can include any number of resources but note that a single |
716 |
|
|
wildcard "*" is not a valid URI-wildcard value. |
717 |
|
|
|
718 |
|
|
|
719 |
|
|
5.2 Policy Expirations |
720 |
|
|
|
721 |
|
|
The max-age attribute bag can be used to specify a date/time after |
722 |
|
|
which the recipient SHOULD consider the policy stale. The max-age |
723 |
|
|
attribute bag value indicates that the information should no longer be |
724 |
|
|
used if the age is greater than the specified time in seconds (see [7] |
725 |
|
|
section 13.2.3 for how to calculate the age). A max-age attribute bag |
726 |
|
|
cannot be used to force the recipient to discard the policy |
727 |
|
|
information; its semantics apply only to the caching mechanism of |
728 |
|
|
policy information. |
729 |
|
|
|
730 |
|
|
|
731 |
|
|
5.3 Extra Parameters |
732 |
|
|
|
733 |
|
|
The params attribute bag can be used to include additional information |
734 |
|
|
about the extension or modifiers on the use of the extension. The |
735 |
|
|
params values may or may not be case-sensitive, depending on the |
736 |
|
|
semantics of the parameter name. The params attribute bag is defined |
737 |
|
|
as a generic bag structure, which may be nested. No default parameters |
738 |
|
|
are defined. |
739 |
|
|
|
740 |
|
|
Note: PEP implementations should pass any parameters to the module or |
741 |
|
|
modules handling the particular extension as this may have impact the |
742 |
|
|
use of the extension. |
743 |
|
|
|
744 |
|
|
|
745 |
|
|
|
746 |
|
|
|
747 |
|
|
|
748 |
|
|
|
749 |
|
|
Frystyk, et al [Page 12] |
750 |
|
|
|
751 |
|
|
|
752 |
|
|
|
753 |
|
|
|
754 |
|
|
|
755 |
|
|
|
756 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
757 |
|
|
|
758 |
|
|
5.4 End-to-End Policies |
759 |
|
|
|
760 |
|
|
End-to-end policies MUST be transmitted to the ultimate recipient of a |
761 |
|
|
message. The PEP-Info header field is an end-to-end header and is |
762 |
|
|
defines as follows: |
763 |
|
|
|
764 |
|
|
pep-info = "PEP-Info" ":" 1#policy-decl |
765 |
|
|
|
766 |
|
|
For example |
767 |
|
|
|
768 |
|
|
HTTP/1.1 200 OK |
769 |
|
|
Content-Type: text/html |
770 |
|
|
Content-Length: 412 |
771 |
|
|
PEP-Info: {{id "http://some.org/payment-extension"} |
772 |
|
|
{for "/cgi-bin/buy" *} |
773 |
|
|
{strength must}} |
774 |
|
|
|
775 |
|
|
<!doctype html public "-//W3C//DTD HTML 3.2//EN" > |
776 |
|
|
<html> ... |
777 |
|
|
|
778 |
|
|
Proxies MAY under certain conditions act as the ultimate recipients of |
779 |
|
|
extension policies on behalf of user agents and origin servers (see |
780 |
|
|
section 9.1). |
781 |
|
|
|
782 |
|
|
|
783 |
|
|
5.5 Hop-by-Hop Policies |
784 |
|
|
|
785 |
|
|
Hop-by-hop policies are meaningful only for a single transport-level |
786 |
|
|
connection. The C-PEP-Info header field is a hop-by-hop header field |
787 |
|
|
and MUST NOT be communicated by proxies over further connections. The |
788 |
|
|
C-PEP-Info header has the following grammar: |
789 |
|
|
|
790 |
|
|
c-pep-info = "C-PEP-Info" ":" 1#policy-decl |
791 |
|
|
|
792 |
|
|
For example |
793 |
|
|
|
794 |
|
|
HTTP/1.1 420 Policy Not Fulfilled |
795 |
|
|
C-PEP-Info: {{id "http://some.org/provide-stats"} |
796 |
|
|
{for "/" *}} |
797 |
|
|
Connection: C-PEP-Info |
798 |
|
|
... |
799 |
|
|
|
800 |
|
|
In HTTP, the C-PEP-Info header field MUST be protected by a Connection |
801 |
|
|
header by including C-PEP-Info as a Connection header directive. The |
802 |
|
|
directive MUST be handled according to the HTTP/1.1 specification of |
803 |
|
|
the Connection header (see section 10.2 and [7], section 14.10). |
804 |
|
|
|
805 |
|
|
An agent MUST NOT send the C-PEP-Info header field to an HTTP/1.0 |
806 |
|
|
proxy as it does not obey the HTTP/1.1 rules for parsing the |
807 |
|
|
Connection header field (see [7], section 19.7.1). |
808 |
|
|
|
809 |
|
|
|
810 |
|
|
|
811 |
|
|
|
812 |
|
|
|
813 |
|
|
|
814 |
|
|
Frystyk, et al [Page 13] |
815 |
|
|
|
816 |
|
|
|
817 |
|
|
|
818 |
|
|
|
819 |
|
|
|
820 |
|
|
|
821 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
822 |
|
|
|
823 |
|
|
6. Publishing an Extension |
824 |
|
|
|
825 |
|
|
While the protocol extension definition should be published at the |
826 |
|
|
address of the extension identifier, this is not a requirement of this |
827 |
|
|
specification. The only absolute requirement is that distinct names be |
828 |
|
|
used for distinct semantics. For example, one way to achieve this is |
829 |
|
|
to use a mid, cid, or uuid URI. The association between the extension |
830 |
|
|
identifier and the specification might be made by distributing a |
831 |
|
|
specification, which references the extension identifier. |
832 |
|
|
|
833 |
|
|
It is strongly recommended that the integrity and persistence of the |
834 |
|
|
extension identifier is maintained and kept unquestioned throughout |
835 |
|
|
the lifetime of the extension. Care should be taken not to distribute |
836 |
|
|
conflicting specifications that reference the same name. Even when a |
837 |
|
|
URI is used to publish extension specifications, care must be taken |
838 |
|
|
that the specification made available at that address does not change |
839 |
|
|
significantly over time. One agent may associate the identifier with |
840 |
|
|
the old semantics, and another might associate it with the new |
841 |
|
|
semantics. |
842 |
|
|
|
843 |
|
|
The extension definition may be made available in different |
844 |
|
|
representations ranging from |
845 |
|
|
|
846 |
|
|
o a human-readable specification defining the extension semantics, |
847 |
|
|
o downloadable code which implements the semantics defined by the |
848 |
|
|
extension, |
849 |
|
|
o a formal interface description provided by the extension, to |
850 |
|
|
o a machine-readable specification defining the extension |
851 |
|
|
semantics. |
852 |
|
|
|
853 |
|
|
For example, a software component that implements the specification |
854 |
|
|
may reside at the same address as a human-readable specification |
855 |
|
|
(distinguished by content negotiation). The human-readable |
856 |
|
|
representation serves to document the extension and encourage |
857 |
|
|
deployment, while the software component allows clients and servers to |
858 |
|
|
be dynamically extended. |
859 |
|
|
|
860 |
|
|
|
861 |
|
|
7. Binding HTTP Requests |
862 |
|
|
|
863 |
|
|
An HTTP request is called a "binding" request if it includes at least |
864 |
|
|
one PEP extension declaration of strength "must". An HTTP server MUST |
865 |
|
|
NOT return a 2xx status-code without obeying all extension |
866 |
|
|
declaration(s) of strength "must" in a binding request. This section |
867 |
|
|
describes how the binding request mechanism in PEP interacts with |
868 |
|
|
existing HTTP applications. |
869 |
|
|
|
870 |
|
|
In [7], section 7.1, it is stated that "Unrecognized header fields |
871 |
|
|
SHOULD be ignored by the recipient and MUST be forwarded by proxies." |
872 |
|
|
Hence, using a PEP or a C-PEP extension declaration is not sufficient |
873 |
|
|
to evoke the correct behavior from existing HTTP agents in a binding |
874 |
|
|
request. However, in [7], section 5.1.1, Method, it is said that |
875 |
|
|
|
876 |
|
|
Frystyk, et al [Page 14] |
877 |
|
|
|
878 |
|
|
|
879 |
|
|
|
880 |
|
|
|
881 |
|
|
|
882 |
|
|
|
883 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
884 |
|
|
|
885 |
|
|
"Servers SHOULD return 501 (Not Implemented) if the method is |
886 |
|
|
unrecognized or not implemented by the server." A similar statement is |
887 |
|
|
made in [5], section 9.5. It is therefore safe to assume that using |
888 |
|
|
the method name will produce the correct result from existing HTTP |
889 |
|
|
servers and proxies. |
890 |
|
|
|
891 |
|
|
PEP uses the HTTP request method name to extend existing HTTP/1.1 |
892 |
|
|
methods and to introduce new methods (see section 1.3). In both cases, |
893 |
|
|
a binding HTTP request invalidates cached entries as described in [7], |
894 |
|
|
section 13.10. Responses to binding requests are not cachable. |
895 |
|
|
|
896 |
|
|
|
897 |
|
|
7.1 Extending Existing HTTP Methods |
898 |
|
|
|
899 |
|
|
The method name of all HTTP/1.1 requests containing a PEP extension |
900 |
|
|
declaration of strength "must" that semantically extends that method |
901 |
|
|
MUST be prefixed by "PEP-" (see section 10.1). For example, a client |
902 |
|
|
might express the binding rights-management constraints in an HTTP PUT |
903 |
|
|
request as follows: |
904 |
|
|
|
905 |
|
|
PEP-PUT /a-resource HTTP/1.1 |
906 |
|
|
PEP: {{map "http://www.w3.org/PEP/rights-management" 8-} |
907 |
|
|
{strength must}} |
908 |
|
|
8-copyright: http://www.w3.org/COPYRIGHT.html |
909 |
|
|
8-contributions: http://www.w3.org/PATCHES.html |
910 |
|
|
Host: www.w3.org |
911 |
|
|
Content-Length: 1203 |
912 |
|
|
Content-Type: text/html |
913 |
|
|
|
914 |
|
|
<!doctype html ... |
915 |
|
|
|
916 |
|
|
The ultimate recipient of a binding HTTP request with the "PEP-" |
917 |
|
|
prefix on the method name MUST process the request by performing the |
918 |
|
|
following actions in the order they occur: |
919 |
|
|
|
920 |
|
|
1. Identify all extension declarations (both hop-by-hop and end- |
921 |
|
|
to-end) of strength "must"; the server MAY ignore declarations |
922 |
|
|
of strength "may" without affecting the result of the |
923 |
|
|
transaction; |
924 |
|
|
2. Evaluate and process the extensions identified in 1) in the |
925 |
|
|
order they were declared (see section 4.3 and 4.4) or if the |
926 |
|
|
extension declarations do not match the policy for accessing |
927 |
|
|
the resource then respond with a 420 (Policy Not Fulfilled) |
928 |
|
|
status-code (see section 8.1); |
929 |
|
|
3. Strip the "PEP-" prefix from the method name and process the |
930 |
|
|
reminder of the request according to the semantics of the |
931 |
|
|
existing HTTP/1.1 method name as defined in [7]. |
932 |
|
|
|
933 |
|
|
The "PEP-" prefix is reserved by PEP and MUST NOT be used by other |
934 |
|
|
HTTP extensions. |
935 |
|
|
|
936 |
|
|
|
937 |
|
|
|
938 |
|
|
|
939 |
|
|
Frystyk, et al [Page 15] |
940 |
|
|
|
941 |
|
|
|
942 |
|
|
|
943 |
|
|
|
944 |
|
|
|
945 |
|
|
|
946 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
947 |
|
|
|
948 |
|
|
7.2 Adding New HTTP Methods |
949 |
|
|
|
950 |
|
|
The PEP method can be used for all PEP extension declarations of |
951 |
|
|
strength "must" that do not naturally extend existing HTTP/1.1 |
952 |
|
|
methods. Such methods can be address space manipulation extensions |
953 |
|
|
like MOVE and COPY, for example: |
954 |
|
|
|
955 |
|
|
PEP /source.html HTTP/1.1 |
956 |
|
|
PEP: {{map "http"//www.w3.org/DAV/MOVE" 4-} |
957 |
|
|
{strength must}} |
958 |
|
|
4-Destination: destination.html |
959 |
|
|
Host: some.host |
960 |
|
|
|
961 |
|
|
The PEP method indicates that the semantics of this request are |
962 |
|
|
defined by one or more PEP extension declarations of strength "must" |
963 |
|
|
included in the request. The PEP method does not have any HTTP message |
964 |
|
|
semantics besides being a placeholder for PEP extension declarations |
965 |
|
|
and hence all other semantics MUST be defined by the declaration(s) |
966 |
|
|
included in the request. |
967 |
|
|
|
968 |
|
|
The ultimate recipient of a PEP request MUST process the request by |
969 |
|
|
doing the following: |
970 |
|
|
|
971 |
|
|
1. Identify all extension declarations (both hop-by-hop and end- |
972 |
|
|
to-end) of strength "must"; the server MAY ignore declarations |
973 |
|
|
of strength "may" without affecting the result of the |
974 |
|
|
transaction; |
975 |
|
|
2. Evaluate and process the extensions identified in 1) in the |
976 |
|
|
order they were declared (see section 4.3 and 4.4) or if the |
977 |
|
|
extension declarations do not match the policy for accessing |
978 |
|
|
the resource then respond with a 420 (Policy Not Fulfilled) |
979 |
|
|
status-code (see section 8.1); |
980 |
|
|
|
981 |
|
|
A successful response SHOULD be 200 (OK) if the response includes an |
982 |
|
|
entity, 202 (Accepted) if the action has not yet been enacted, or 204 |
983 |
|
|
(No Content) if the response is OK but does not include an entity. If |
984 |
|
|
no extension declarations have strength "must", the response SHOULD be |
985 |
|
|
400 (Bad Request). |
986 |
|
|
|
987 |
|
|
The PEP method is reserved by PEP and MUST NOT be used by other HTTP |
988 |
|
|
extensions. |
989 |
|
|
|
990 |
|
|
|
991 |
|
|
8. HTTP Status Codes |
992 |
|
|
|
993 |
|
|
PEP introduces two new status codes in addition to the ones already |
994 |
|
|
defined by HTTP/1.1[7]. Each Status-Code is described below, including |
995 |
|
|
a description the metainformation required in the response. |
996 |
|
|
|
997 |
|
|
|
998 |
|
|
|
999 |
|
|
|
1000 |
|
|
|
1001 |
|
|
|
1002 |
|
|
Frystyk, et al [Page 16] |
1003 |
|
|
|
1004 |
|
|
|
1005 |
|
|
|
1006 |
|
|
|
1007 |
|
|
|
1008 |
|
|
|
1009 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
1010 |
|
|
|
1011 |
|
|
8.1 420 Policy Not Fulfilled |
1012 |
|
|
|
1013 |
|
|
The policy for accessing the resource has not been met in the request. |
1014 |
|
|
The response MUST include a PEP-Info or a C-PEP-Info header field |
1015 |
|
|
specifying the extensions required by the publishing party for |
1016 |
|
|
accessing the resource. The server MAY use the for attribute bag to |
1017 |
|
|
indicate whether the policy applies to other resources. |
1018 |
|
|
|
1019 |
|
|
The client MAY repeat the request using the appropriate extension(s). |
1020 |
|
|
If the initial request already included the extensions requested in |
1021 |
|
|
the 420 response, then the response indicates that access has been |
1022 |
|
|
refused for those extension declarations. |
1023 |
|
|
|
1024 |
|
|
If the 420 response contains the same set of extension policies as the |
1025 |
|
|
prior response, then the client MAY present any entity included in the |
1026 |
|
|
response to the user, since that entity may include relevant |
1027 |
|
|
diagnostic information. |
1028 |
|
|
|
1029 |
|
|
Implementers may note the similarity to the way authentication |
1030 |
|
|
challenges are issued with the 401 (Unauthorized) status-code (see |
1031 |
|
|
[7], section 10.4.2) |
1032 |
|
|
|
1033 |
|
|
|
1034 |
|
|
8.2 421 Bad Mapping |
1035 |
|
|
|
1036 |
|
|
The mappings indicated by one or more map attribute bags in the |
1037 |
|
|
request were not unique and mapped the same header field more than |
1038 |
|
|
once. The client MAY repeat the request using a new set of mappings if |
1039 |
|
|
it believes that it can find a unique set of header fields for which |
1040 |
|
|
the transaction will succeed. |
1041 |
|
|
|
1042 |
|
|
|
1043 |
|
|
9. HTTP Proxy Servers |
1044 |
|
|
|
1045 |
|
|
This section describes the role of caching and non-caching proxies and |
1046 |
|
|
how they interact with PEP extensions. Normally, the ultimate |
1047 |
|
|
recipient of an end-to-end extension declaration or an end-to-end |
1048 |
|
|
extension policy is an origin server or a user agent. |
1049 |
|
|
|
1050 |
|
|
In this case, a proxy MUST forward all components of the extension, |
1051 |
|
|
including declarations, policies, headers, and any methods and status |
1052 |
|
|
codes defined by this specification. |
1053 |
|
|
|
1054 |
|
|
In other cases, however, intermediate caching and non-caching proxies |
1055 |
|
|
MAY be authorized to act on behalf of origin servers and/or user |
1056 |
|
|
agents. How such an agreement is reached between a party representing |
1057 |
|
|
the proxy and the party on which behalf it can act, is outside the |
1058 |
|
|
scope of PEP, but for example, the parties may be within the same |
1059 |
|
|
trust domain. |
1060 |
|
|
|
1061 |
|
|
|
1062 |
|
|
|
1063 |
|
|
|
1064 |
|
|
Frystyk, et al [Page 17] |
1065 |
|
|
|
1066 |
|
|
|
1067 |
|
|
|
1068 |
|
|
|
1069 |
|
|
|
1070 |
|
|
|
1071 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
1072 |
|
|
|
1073 |
|
|
9.1 Proxy Servers as End-to-End Recipients |
1074 |
|
|
|
1075 |
|
|
|
1076 |
|
|
9.1.1 Proxy Servers Acting on Behalf of User Agents |
1077 |
|
|
|
1078 |
|
|
In case a proxy is authorized to act as the ultimate recipient on |
1079 |
|
|
behalf of its proxy clients on end-to-end extensions, it MUST obey the |
1080 |
|
|
following rules: |
1081 |
|
|
|
1082 |
|
|
o The proxy SHOULD remove the extension declaration(s) and any |
1083 |
|
|
header fields that are part of these declaration(s) on which it |
1084 |
|
|
can act authoritatively before forwarding the response to the |
1085 |
|
|
proxy client; |
1086 |
|
|
o it SHOULD issue extension policies for the extensions on which it |
1087 |
|
|
can act authoritatively as if it was a user agent; |
1088 |
|
|
o if an extension declaration added by an HTTP proxy is of strength |
1089 |
|
|
"must", the proxy MUST either prepend the "PEP-" method name |
1090 |
|
|
prefix or use the PEP method instead of the method name used in |
1091 |
|
|
the proxy client request, before forwarding the response to the |
1092 |
|
|
origin server (see section 7.1). |
1093 |
|
|
|
1094 |
|
|
An example of a proxy acting on behalf of one or more user agents is |
1095 |
|
|
an elementary school wishing to enforce a certain policy for accessing |
1096 |
|
|
information on the Internet. The local school proxy can act |
1097 |
|
|
authoritatively as a retrieval filter on behalf of the pupils instead |
1098 |
|
|
of having distributed filtering enabled on each of the user agents |
1099 |
|
|
using the client. |
1100 |
|
|
|
1101 |
|
|
|
1102 |
|
|
9.1.2 Proxy Servers Acting on Behalf of Origin Servers |
1103 |
|
|
|
1104 |
|
|
In case a proxy is authorized to act as the ultimate recipient on |
1105 |
|
|
behalf of an origin server on end-to-end extensions, it MUST obey the |
1106 |
|
|
following rules: |
1107 |
|
|
|
1108 |
|
|
o The proxy SHOULD remove the extension declaration(s) and any |
1109 |
|
|
header fields that are part of these declaration(s) on which it |
1110 |
|
|
can act authoritatively before forwarding the request to the |
1111 |
|
|
origin server; |
1112 |
|
|
o it SHOULD issue extension policies for the extensions on which it |
1113 |
|
|
can act authoritatively as if it was an origin server; |
1114 |
|
|
o if an extension declaration added by an HTTP proxy is of strength |
1115 |
|
|
"must" and there are no other extension declarations of strength |
1116 |
|
|
"must" in the request, the proxy MUST remove any "PEP-" method |
1117 |
|
|
name prefix before forwarding the request to the origin server |
1118 |
|
|
(see section 7.1); |
1119 |
|
|
o if a request uses the PEP method, the proxy MUST NOT forward the |
1120 |
|
|
request to the origin server unless the communication between the |
1121 |
|
|
proxy and the origin server can be completed using an existing |
1122 |
|
|
HTTP/1.1 method. |
1123 |
|
|
|
1124 |
|
|
An example of a proxy acting on behalf of an origin server is a |
1125 |
|
|
corporation having a subscription on an on-line journal. All access to |
1126 |
|
|
|
1127 |
|
|
|
1128 |
|
|
Frystyk, et al [Page 18] |
1129 |
|
|
|
1130 |
|
|
|
1131 |
|
|
|
1132 |
|
|
|
1133 |
|
|
|
1134 |
|
|
|
1135 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
1136 |
|
|
|
1137 |
|
|
the origin server goes through the corporate firewall that runs a |
1138 |
|
|
caching proxy server. The organization reports to the publisher of the |
1139 |
|
|
journal on a monthly basis at which point the subscription is re- |
1140 |
|
|
evaluated. In the day-to-day access, the proxy has the authority to |
1141 |
|
|
act authoritatively on behalf of the origin server registering usage |
1142 |
|
|
of the journal. |
1143 |
|
|
|
1144 |
|
|
|
1145 |
|
|
9.2 Proxy Servers and Repeated Hop-by-Hop Extensions |
1146 |
|
|
|
1147 |
|
|
If a PEP extension is to be used on parts of a message path, including |
1148 |
|
|
user agents, origin servers, and proxies, not covered by end-to-end or |
1149 |
|
|
hop-by-hop extension declarations, it can be defined as a repeated |
1150 |
|
|
hop-by-hop extension. This can for example be the case for a proxy |
1151 |
|
|
extension applied to a subset of proxies in a message path. |
1152 |
|
|
|
1153 |
|
|
It is for the designer of the extension to decide whether it can |
1154 |
|
|
repeat itself on a hop-by-hop basis. In other words, any scope more |
1155 |
|
|
complex than a hop-by-hop or an end-to-end scope is a property of the |
1156 |
|
|
extension and is transparent to PEP. |
1157 |
|
|
|
1158 |
|
|
|
1159 |
|
|
10. Practical Considerations for HTTP |
1160 |
|
|
|
1161 |
|
|
This section describes some practical considerations intended for PEP |
1162 |
|
|
extended HTTP applications. The issues described may not apply to |
1163 |
|
|
other information retrieval protocols. |
1164 |
|
|
|
1165 |
|
|
|
1166 |
|
|
10.1 Interaction with Existing HTTP/1.1 Methods |
1167 |
|
|
|
1168 |
|
|
Extension designers should consider whether an extension is to work |
1169 |
|
|
with existing HTTP/1.1 methods using the "PEP-" method token prefix or |
1170 |
|
|
with the PEP method (see section 7.1 and 7.2). This specification does |
1171 |
|
|
not provide an absolute rule for when to use the PEP method compared |
1172 |
|
|
to the "PEP-" method token prefix except that the "PEP-" method token |
1173 |
|
|
prefix is required in situations where intermediate proxies may act |
1174 |
|
|
authoritatively on behalf of origin servers or user agents (see |
1175 |
|
|
section 9.1.1 and 9.1.2). In case the extension can be used with |
1176 |
|
|
existing methods then it should be considered whether the extension |
1177 |
|
|
can be used with any of the existing HTTP/1.1 methods or only a subset |
1178 |
|
|
of them. |
1179 |
|
|
|
1180 |
|
|
Some HTTP/1.1 methods follow the convention of being "safe" to the |
1181 |
|
|
requester meaning that they should never have the significance of |
1182 |
|
|
taking an action other than retrieval (see [7], section 9.1). This is |
1183 |
|
|
for example the case of the GET and the HEAD method. As PEP extension |
1184 |
|
|
declarations of strength "must" explicitly modify or replace the |
1185 |
|
|
method name, existing HTTP applications will never be able to mistake |
1186 |
|
|
a PEP enabled message for any of the existing HTTP messages indicated |
1187 |
|
|
as being safe. |
1188 |
|
|
|
1189 |
|
|
|
1190 |
|
|
Frystyk, et al [Page 19] |
1191 |
|
|
|
1192 |
|
|
|
1193 |
|
|
|
1194 |
|
|
|
1195 |
|
|
|
1196 |
|
|
|
1197 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
1198 |
|
|
|
1199 |
|
|
Some extensions may have the property of "idempotence" in that (aside |
1200 |
|
|
from error or expiration issues) the side effects of N > 0 identical |
1201 |
|
|
extended requests is the same as for a single extended request. If |
1202 |
|
|
this is not the case for a PEP extension then it should consider |
1203 |
|
|
whether it wants to 1) disable itself on repeated requests, and/or 2) |
1204 |
|
|
inform a user about the behavior of repeating identical requests with |
1205 |
|
|
this extension. |
1206 |
|
|
|
1207 |
|
|
|
1208 |
|
|
10.2 Interaction with Existing HTTP/1.1 Headers |
1209 |
|
|
|
1210 |
|
|
Designers of extensions to be used within the HTTP messaging model |
1211 |
|
|
should consider the interaction with existing HTTP/1.1 headers. |
1212 |
|
|
Especially, it should be noted that PEP is designed to be compatible |
1213 |
|
|
with HTTP/1.0[5] inasmuch as HTTP/1.1 is compatible with HTTP/1.0 (see |
1214 |
|
|
[7], section 19.7). |
1215 |
|
|
|
1216 |
|
|
The Connection header as described in [7], section 14.10, allows the |
1217 |
|
|
sender to specify options that are desired for that particular |
1218 |
|
|
transport connection only. All PEP hop-by-hop extension declarations |
1219 |
|
|
and policies along with any header fields introduced by extension |
1220 |
|
|
declarations MUST be included as Connection header directives. PEP |
1221 |
|
|
applications MUST NOT send any hop-by-hop extension declarations or |
1222 |
|
|
policies to HTTP/1.0 proxies as they do not obey the rules of HTTP/1.1 |
1223 |
|
|
for parsing the Connection header field (see also [7], section |
1224 |
|
|
19.7.1). |
1225 |
|
|
|
1226 |
|
|
The Upgrade header, [7], section 14.41, allows the client to specify |
1227 |
|
|
what additional communication protocols it supports and would like to |
1228 |
|
|
use if the server finds it appropriate to switch protocols. PEP |
1229 |
|
|
provides the same functionality but without the need for a central |
1230 |
|
|
registry of protocol names. PEP compliant agents MAY use the 101 |
1231 |
|
|
(Switching Protocols) status code to switch to HTTP-based protocols |
1232 |
|
|
and protocols, which once initiated, run completely independently of |
1233 |
|
|
HTTP. |
1234 |
|
|
|
1235 |
|
|
The content coding values in the Content-Encoding header as described |
1236 |
|
|
in [7], section 14.12, indicate an encoding transformation that has |
1237 |
|
|
been applied to an entity. PEP provides the same functionality but |
1238 |
|
|
without the need for a central registry of content codings. As both |
1239 |
|
|
content codings and PEP extension declarations are ordered, using both |
1240 |
|
|
may lead to ambiguous situations. Simultaneous use of both mechanisms |
1241 |
|
|
is therefore strongly discouraged. |
1242 |
|
|
|
1243 |
|
|
An origin server can explicitly prevent intermediaries from applying a |
1244 |
|
|
Content-Encoding to a resource by using the no-transform Cache-Control |
1245 |
|
|
directive (see [7], section 14.9.4). |
1246 |
|
|
|
1247 |
|
|
|
1248 |
|
|
|
1249 |
|
|
|
1250 |
|
|
|
1251 |
|
|
Frystyk, et al [Page 20] |
1252 |
|
|
|
1253 |
|
|
|
1254 |
|
|
|
1255 |
|
|
|
1256 |
|
|
|
1257 |
|
|
|
1258 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
1259 |
|
|
|
1260 |
|
|
10.3 Server Initiated Extension Declarations |
1261 |
|
|
|
1262 |
|
|
PEP extension declarations can be generated by servers as well as |
1263 |
|
|
clients. If a PEP compliant server sends a response with an extension |
1264 |
|
|
declaration referring to an extension that modifies the message in |
1265 |
|
|
such a way that the message can not be decoded without using the |
1266 |
|
|
extension, and the corresponding request was either |
1267 |
|
|
|
1268 |
|
|
1. received from a client whose version is lower than HTTP/1.1, or |
1269 |
|
|
2. received with a Via header field indicating that it was |
1270 |
|
|
forwarded by a proxy whose version is lower than HTTP/1.1, |
1271 |
|
|
|
1272 |
|
|
and the response does not already include an Expires header, then the |
1273 |
|
|
sender SHOULD include an Expires header field whose field-value is |
1274 |
|
|
identical to the field-value of its Date header field(see [7], section |
1275 |
|
|
14.12). If all agents in the message path are HTTP/1.1, then the |
1276 |
|
|
sender SHOULD use the Cache-Control header field instead of the |
1277 |
|
|
Expires header field to mark the entity uncachable. |
1278 |
|
|
|
1279 |
|
|
|
1280 |
|
|
11. Security Considerations |
1281 |
|
|
|
1282 |
|
|
o The for parameter allows one party to give information about the |
1283 |
|
|
extensions used by another party's resources. The parties may |
1284 |
|
|
provide resources on different servers, or at different addresses |
1285 |
|
|
on the same server. While distinguishing between the parties |
1286 |
|
|
responsible for different resources at the same server may be |
1287 |
|
|
infeasible, clients SHOULD ignore information given by one server |
1288 |
|
|
about another unless they have reason to trust it, or reason to |
1289 |
|
|
believe that trusting it will have no significant negative |
1290 |
|
|
consequences. |
1291 |
|
|
o Dynamic installation of extension facilities as described in the |
1292 |
|
|
introduction involves software written by one party (the provider |
1293 |
|
|
of the implementation) to be executed under the authority of |
1294 |
|
|
another (the party operating the host software). This opens the |
1295 |
|
|
host party to a variety of "Trojan horse" attacks by the |
1296 |
|
|
provider, or a malicious third party that forges implementations |
1297 |
|
|
under a provider's name. See, for example RFC2046[6], section |
1298 |
|
|
4.5.2 for a discussion of these risks. |
1299 |
|
|
|
1300 |
|
|
12. Normative References |
1301 |
|
|
|
1302 |
|
|
[1] D. H. Crocker. "Standard for the Format of ARPA Internet Text |
1303 |
|
|
Messages", STD 11, RFC 822, UDEL, August 1982 |
1304 |
|
|
[2] T. Berners-Lee, "Universal Resource Identifiers in WWW. A |
1305 |
|
|
Unifying Syntax for the Expression of Names and Addresses of |
1306 |
|
|
Objects on the Network as used in the World-Wide Web", RFC 1630, |
1307 |
|
|
CERN, June 1994. |
1308 |
|
|
[3] T. Berners-Lee, L. Masinter, M. McCahill. "Uniform Resource |
1309 |
|
|
Locators (URL)" RFC 1738, CERN, Xerox PARC, University of |
1310 |
|
|
Minnesota, December 1994. |
1311 |
|
|
[4] R. Fielding, "Relative Uniform Resource Locators", RFC 1808, UC |
1312 |
|
|
Irvine, June 1995. |
1313 |
|
|
|
1314 |
|
|
Frystyk, et al [Page 21] |
1315 |
|
|
|
1316 |
|
|
|
1317 |
|
|
|
1318 |
|
|
|
1319 |
|
|
|
1320 |
|
|
|
1321 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
1322 |
|
|
|
1323 |
|
|
[5] T. Berners-Lee, R. Fielding, H. Frystyk, "Hypertext Transfer |
1324 |
|
|
Protocol -- HTTP/1.0", RFC 1945, W3C/MIT, UC Irvine, W3C/MIT, May |
1325 |
|
|
1996. |
1326 |
|
|
[6] N. Freed, N. Borenstein, "Multipurpose Internet Mail Extensions |
1327 |
|
|
(MIME) Part Two: Media Types", RFC 2046, Innosoft, First Virtual, |
1328 |
|
|
November 1996. |
1329 |
|
|
[7] R. Fielding, J. Gettys, J. C. Mogul, H. Frystyk, T. Berners-Lee, |
1330 |
|
|
"Hypertext Transfer Protocol -- HTTP/1.1", RFC 2068, U.C. Irvine, |
1331 |
|
|
DEC W3C/MIT, DEC, W3C/MIT, W3C/MIT, January 1997 |
1332 |
|
|
[8] D. Kristol, L. Montulli, "HTTP State Management Mechanism", RFC |
1333 |
|
|
2109, Bell Laboratories Lucent Technologies, Netscape |
1334 |
|
|
Communications, February 1997 |
1335 |
|
|
[9] S. Bradner, "Key words for use in RFCs to Indicate Requirement |
1336 |
|
|
Levels", RFC 2119, Harvard University, March 1997 |
1337 |
|
|
[10] J. C. Mogul, R. Fielding, J. Gettys, H. Frystyk, "Use and |
1338 |
|
|
interpretation of HTTP version numbers", Internet Draft RFC 2145, |
1339 |
|
|
DEC, U.C. Irvine, DEC W3C/MIT, W3C/MIT, HTTP Working Group, May, |
1340 |
|
|
1997. |
1341 |
|
|
[11] O. Lassila, R. Swick, "Resource Description Framework (RDF) - |
1342 |
|
|
Model and Syntax", W3C/Nokia, W3C, W3C Working draft, October |
1343 |
|
|
1997. This is work in progress |
1344 |
|
|
[12] H. Schulzrinne, A. Rao, R. Lanphier, "Real Time Streaming |
1345 |
|
|
Protocol (RTSP)", Internet Draft draft-ietf-mmusic-rtsp-05, |
1346 |
|
|
Columbia U./Netscape/Progressive Networks, March 1997. This is |
1347 |
|
|
work in progress |
1348 |
|
|
[13] T. Berners-Lee, R. Fielding, L. Masinter, "Uniform Resource |
1349 |
|
|
Locators (URL)", Internet Draft draft-fielding-url-syntax-09, |
1350 |
|
|
W3C/MIT, U.C. Irvine, Xerox Corporation, May 1997. This is work |
1351 |
|
|
in progress |
1352 |
|
|
|
1353 |
|
|
13. Bibliography: Informative References |
1354 |
|
|
|
1355 |
|
|
[14] D. Eastlake, "Universal Payment Preamble", Internet Draft draft- |
1356 |
|
|
eastlake-universal-payment-03, CyberCash, March 1996. This is |
1357 |
|
|
work in progress. |
1358 |
|
|
[15] D. M. Kristol, "A Proposed Extension Mechanism for HTTP", |
1359 |
|
|
Internet Draft draft-kristokl-http-extensions-00, January 1995. |
1360 |
|
|
Document expired. |
1361 |
|
|
[16] JEPI, "Selecting Payment Mechanisms Over HTTP", Internet Draft |
1362 |
|
|
draft-khare-jepi-uppflow-00, W3C, August 1996. Document expired. |
1363 |
|
|
[17] J. Miller et al, "PICS Label Syntax and Communication Protocols |
1364 |
|
|
(Version 1.1)", W3C Recommendation REC-PICS-labels, W3C, 31 |
1365 |
|
|
October 1996 |
1366 |
|
|
[18] Y. Goland et al, "Extensions for Distributed Authoring and |
1367 |
|
|
Versioning", Internet Draft, draft-jensen-webdav-ext-01, 26 March |
1368 |
|
|
1997. This is work in progress. |
1369 |
|
|
[19] N. Borenstein, "A User Agent Configuration Mechanism For |
1370 |
|
|
Multimedia Mail Format Information", RFC 1524 pp. 12, Bellcore, |
1371 |
|
|
September 1993. |
1372 |
|
|
|
1373 |
|
|
|
1374 |
|
|
|
1375 |
|
|
Frystyk, et al [Page 22] |
1376 |
|
|
|
1377 |
|
|
|
1378 |
|
|
|
1379 |
|
|
|
1380 |
|
|
|
1381 |
|
|
|
1382 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
1383 |
|
|
|
1384 |
|
|
[20] J. Klensin, N. Freed, M. Rose, E. Stefferud, and D. Crocker. |
1385 |
|
|
"SMTP Service Extensions", RFC 1869, MCI, Innosoft, Dover Beach |
1386 |
|
|
Consulting, Network Management Associates, Brandenburg |
1387 |
|
|
Consulting, November 1995. |
1388 |
|
|
[21] D. Robinson, "The WWW Common Gateway Interface Version 1.1", |
1389 |
|
|
Internet Draft draft-robinson-www-interface-01, February 1996. |
1390 |
|
|
Document expired. |
1391 |
|
|
[22] A. Baird-Smith, "Jigsaw: An object oriented server", W3C Note, |
1392 |
|
|
June 1996 |
1393 |
|
|
[23] H. Frystyk, "Libwww Architecture", December 1996 |
1394 |
|
|
[24] R. Thau, "Design considerations for the Apache Server API", Fifth |
1395 |
|
|
International World Wide Web Conference, May 6-10, 1996, Paris, |
1396 |
|
|
France |
1397 |
|
|
[25] Netscape Corporation, "The Netscape Server API" |
1398 |
|
|
[26] Microsoft Corporation, "Internet Server API Documentation" |
1399 |
|
|
[27] Open Market, Inc, "FastCGI - Restoring All CGI's Good Properties |
1400 |
|
|
-- and Then Some" |
1401 |
|
|
[28] Spyglass, "Spyglass MicroServer Application Development |
1402 |
|
|
Interface" |
1403 |
|
|
[29] J. Franks, "WN - a Server for the HTTP" |
1404 |
|
|
[30] Roxen, "Introduction to Roxen Challenger" |
1405 |
|
|
|
1406 |
|
|
14. Acknowledgements |
1407 |
|
|
|
1408 |
|
|
The PEP protocol is the product of a substantial amount of |
1409 |
|
|
investigation and collaboration. Dave Kristol did some of the first |
1410 |
|
|
writing on HTTP extension mechanisms[15]. Jim Miller and Dave Raggett |
1411 |
|
|
sketched out an initial design, which Rohit Khare wrote up in a number |
1412 |
|
|
of drafts. Tim Berners-Lee, Anselm Baird-Smith, Paul Leach and Daniel |
1413 |
|
|
Dardailler deserve special recognition for their efforts in commenting |
1414 |
|
|
in the design phase of the protocol. Also thanks to Henning |
1415 |
|
|
Schulzrinne, Anup Rao and Robert Lanphier for pointing out the |
1416 |
|
|
generalities of PEP and providing support for integration with |
1417 |
|
|
RTSP[12]. |
1418 |
|
|
|
1419 |
|
|
This specification is a direct reflection of some implementation work: |
1420 |
|
|
a client implementation in [23] (see the HTPEP module) and a server |
1421 |
|
|
implementation by Eui-Suk Chung and Anit Chakraborty for the JEPI |
1422 |
|
|
project. |
1423 |
|
|
|
1424 |
|
|
This document has benefited greatly from the comments of all those |
1425 |
|
|
participating in the HTTP-WG. In addition to those already mentioned, |
1426 |
|
|
the following individuals have contributed to this specification: |
1427 |
|
|
|
1428 |
|
|
o Eui-Suk Chung, |
1429 |
|
|
o Don Eastlake, |
1430 |
|
|
o Roy Fielding, |
1431 |
|
|
o Jim Gettys, |
1432 |
|
|
o Yaron Goland, |
1433 |
|
|
o Phill Hallam-Baker, |
1434 |
|
|
|
1435 |
|
|
|
1436 |
|
|
Frystyk, et al [Page 23] |
1437 |
|
|
|
1438 |
|
|
|
1439 |
|
|
|
1440 |
|
|
|
1441 |
|
|
|
1442 |
|
|
|
1443 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
1444 |
|
|
|
1445 |
|
|
o Paul Hoffman, |
1446 |
|
|
o Koen Holtman, |
1447 |
|
|
o Ora Lassila, |
1448 |
|
|
o Larry Masinter, and |
1449 |
|
|
o Jim Whitehead |
1450 |
|
|
|
1451 |
|
|
15. Authors Addresses |
1452 |
|
|
|
1453 |
|
|
Dan Connolly |
1454 |
|
|
Architecture Domain Lead, World Wide Web Consortium |
1455 |
|
|
MIT Laboratory for Computer Science |
1456 |
|
|
545 Technology Square |
1457 |
|
|
Cambridge, MA 02139, U.S.A. |
1458 |
|
|
Email: connolly@w3.org |
1459 |
|
|
|
1460 |
|
|
Rohit Khare |
1461 |
|
|
Technical Staff, World Wide Web Consortium |
1462 |
|
|
MIT Laboratory for Computer Science |
1463 |
|
|
545 Technology Square |
1464 |
|
|
Cambridge, MA 02139, U.S.A. |
1465 |
|
|
Email: khare@w3.org |
1466 |
|
|
|
1467 |
|
|
Henrik Frystyk Nielsen |
1468 |
|
|
Technical Staff, World Wide Web Consortium |
1469 |
|
|
MIT Laboratory for Computer Science |
1470 |
|
|
545 Technology Square |
1471 |
|
|
Cambridge, MA 02139, U.S.A. |
1472 |
|
|
Email: frystyk@w3.org |
1473 |
|
|
|
1474 |
|
|
Eric Prud'hommeaux |
1475 |
|
|
Contractor, World Wide Web Consortium |
1476 |
|
|
MIT Laboratory for Computer Science |
1477 |
|
|
545 Technology Square |
1478 |
|
|
Cambridge, MA 02139, U.S.A. |
1479 |
|
|
Email: eric@w3.org |
1480 |
|
|
|
1481 |
|
|
|
1482 |
|
|
Appendices |
1483 |
|
|
|
1484 |
|
|
|
1485 |
|
|
16. Summary of PEP Interactions |
1486 |
|
|
|
1487 |
|
|
The following tables summarize the outcome of strength and scope rules |
1488 |
|
|
in PEP transactions involving PEP compliant and non-PEP compliant HTTP |
1489 |
|
|
proxies and origin servers. The summary is intended as a guide and |
1490 |
|
|
index to the text, but is necessarily cryptic and incomplete. This |
1491 |
|
|
summary should never be used or referenced separately from the |
1492 |
|
|
complete PEP specification. The tables should be read as follows |
1493 |
|
|
|
1494 |
|
|
Standard processing |
1495 |
|
|
|
1496 |
|
|
|
1497 |
|
|
|
1498 |
|
|
Frystyk, et al [Page 24] |
1499 |
|
|
|
1500 |
|
|
|
1501 |
|
|
|
1502 |
|
|
|
1503 |
|
|
|
1504 |
|
|
|
1505 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
1506 |
|
|
|
1507 |
|
|
The action taken by an ultimate recipient not understanding or |
1508 |
|
|
ignoring the extension (see section 4.2) |
1509 |
|
|
|
1510 |
|
|
Extended processing |
1511 |
|
|
The action taken by an ultimate recipient understanding and obeying |
1512 |
|
|
the extension (see section 4.2) |
1513 |
|
|
|
1514 |
|
|
Forward extension |
1515 |
|
|
The action taken by an intermediate party which is not an ultimate |
1516 |
|
|
recipient (see section 9) |
1517 |
|
|
|
1518 |
|
|
Strip extension |
1519 |
|
|
The action taken by an intermediate party which is the ultimate |
1520 |
|
|
recipient (see section 9) |
1521 |
|
|
|
1522 |
|
|
420 (Policy Not Fulfilled) |
1523 |
|
|
The response from an ultimate recipient not understanding or not |
1524 |
|
|
wishing to obey the extension (see section 8.1) |
1525 |
|
|
|
1526 |
|
|
501 (Not Implemented) |
1527 |
|
|
The response from an ultimate recipient not understanding the "PEP" |
1528 |
|
|
method or "PEP-" method token prefix (see section 6) |
1529 |
|
|
|
1530 |
|
|
Table 1: Origin Server |
1531 |
|
|
|
1532 |
|
|
Scope Hop-by-hop End-to-end |
1533 |
|
|
|
1534 |
|
|
Strength Optional Required Optional Required |
1535 |
|
|
(may) (must) (may) (must) |
1536 |
|
|
|
1537 |
|
|
PEP not Standard 501 (Not Standard 501 (Not |
1538 |
|
|
supported processing Implemented)processing Implemented) |
1539 |
|
|
|
1540 |
|
|
Extension notStandard 420 (Policy Standard 420 (Policy |
1541 |
|
|
supported processing Not processing Not |
1542 |
|
|
Fulfilled) Fulfilled) |
1543 |
|
|
|
1544 |
|
|
Extension Extended Extended Extended Extended |
1545 |
|
|
supported processing processing processing processing |
1546 |
|
|
|
1547 |
|
|
|
1548 |
|
|
Table 2: Proxy Server |
1549 |
|
|
|
1550 |
|
|
Scope Hop-by-hop End-to-end |
1551 |
|
|
|
1552 |
|
|
Strength Optional Required Optional Required |
1553 |
|
|
(may) (must) (may) (must) |
1554 |
|
|
|
1555 |
|
|
PEP not Strip 501 (Not Forward 501 (Not |
1556 |
|
|
supported extension Implemented)extension Implemented) |
1557 |
|
|
|
1558 |
|
|
Extension notStrip 420 (Policy Forward Forward |
1559 |
|
|
supported extension Not extension extension |
1560 |
|
|
Fulfilled) |
1561 |
|
|
|
1562 |
|
|
Extension Extended Extended Extended Extended |
1563 |
|
|
supported processing processing processing processing |
1564 |
|
|
|
1565 |
|
|
|
1566 |
|
|
Frystyk, et al [Page 25] |
1567 |
|
|
|
1568 |
|
|
|
1569 |
|
|
|
1570 |
|
|
|
1571 |
|
|
|
1572 |
|
|
|
1573 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
1574 |
|
|
|
1575 |
|
|
and strip and strip and strip and strip |
1576 |
|
|
|
1577 |
|
|
|
1578 |
|
|
|
1579 |
|
|
|
1580 |
|
|
17. Examples |
1581 |
|
|
|
1582 |
|
|
The following examples show various scenarios using PEP in HTTP/1.1 |
1583 |
|
|
requests and responses. Information not essential for illustrating the |
1584 |
|
|
examples is left out (referred to as "…") |
1585 |
|
|
|
1586 |
|
|
|
1587 |
|
|
17.1 Client Queries Server for DAV |
1588 |
|
|
|
1589 |
|
|
In this example, the purpose of using PEP in the request is to |
1590 |
|
|
determine whether a server understands and supports the Distributed |
1591 |
|
|
Authoring and Versioning (DAV) protocol extension [18]. By making the |
1592 |
|
|
request binding (see section 7), the client forces the server to |
1593 |
|
|
process the extension declaration and obey the extension or report an |
1594 |
|
|
error. |
1595 |
|
|
|
1596 |
|
|
PEP-GET /some.url HTTP/1.1 |
1597 |
|
|
Host: some.host |
1598 |
|
|
PEP: {{map "http://www.w3.org/PEP/DAV"}} |
1599 |
|
|
|
1600 |
|
|
HTTP/1.1 200 OK |
1601 |
|
|
PEP-Info: {{id "http://www.w3.org/PEP/DAV"} {for "/Henrik" *}} |
1602 |
|
|
... |
1603 |
|
|
|
1604 |
|
|
The response shows that the server does understand DAV and that the |
1605 |
|
|
client can use it on all resources matching the prefix "/Henrik" on |
1606 |
|
|
that server. The policy is informational and other factors like access |
1607 |
|
|
control may prevent the client from actually using DAV on any of these |
1608 |
|
|
resources. |
1609 |
|
|
|
1610 |
|
|
PEP does not distinguish between querying about or using an extension |
1611 |
|
|
- the PEP declaration is identical. Whether it in fact is a query may |
1612 |
|
|
depend on the request method name and request modifiers. |
1613 |
|
|
|
1614 |
|
|
|
1615 |
|
|
17.2 Client Informs Server about ZipFlate Compression Extension |
1616 |
|
|
|
1617 |
|
|
This example shows a client informing a server that it is capable of |
1618 |
|
|
handling the zipflate compression extension in a response. By issuing |
1619 |
|
|
an extension policy instead of an extension declaration, the client |
1620 |
|
|
indicates that the extension is not used in the request. |
1621 |
|
|
|
1622 |
|
|
|
1623 |
|
|
|
1624 |
|
|
|
1625 |
|
|
|
1626 |
|
|
|
1627 |
|
|
|
1628 |
|
|
|
1629 |
|
|
|
1630 |
|
|
Frystyk, et al [Page 26] |
1631 |
|
|
|
1632 |
|
|
|
1633 |
|
|
|
1634 |
|
|
|
1635 |
|
|
|
1636 |
|
|
|
1637 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
1638 |
|
|
|
1639 |
|
|
GET /Index HTTP/1.1 |
1640 |
|
|
Host: some.host |
1641 |
|
|
PEP-Info: {{id "http://www.w3.org/PEP/Encoding"}} |
1642 |
|
|
|
1643 |
|
|
HTTP/1.1 200 OK |
1644 |
|
|
PEP: {{map "http://www.w3.org/PEP/Encoding"}} |
1645 |
|
|
Cache-Control: no-transform |
1646 |
|
|
Vary: * |
1647 |
|
|
... |
1648 |
|
|
|
1649 |
|
|
The response shows that the server knows the extension and decides to |
1650 |
|
|
use it in the response. It furthermore includes the no-transform |
1651 |
|
|
cache-control directive in order to avoid that proxies add their own |
1652 |
|
|
content-coding to the message (see section 10.2) and a Vary header |
1653 |
|
|
field indicating that a cache may not use the response to reply to a |
1654 |
|
|
subsequent request without revalidation. |
1655 |
|
|
|
1656 |
|
|
In this example, the client could have used an extension declaration |
1657 |
|
|
of strength "may" instead of an extension policy to achieve the same |
1658 |
|
|
effect. The request would not have been affected as the compression |
1659 |
|
|
applies to message bodies and not headers. If the request were to |
1660 |
|
|
include a message body, however, the difference would be whether the |
1661 |
|
|
zipflate extension was applied to that body or not. |
1662 |
|
|
|
1663 |
|
|
|
1664 |
|
|
17.3 Server Uses Content-Digest Extension |
1665 |
|
|
|
1666 |
|
|
This example shows a server applying the Content-Digest extension to a |
1667 |
|
|
response message indicating that the client may ignore it. The client |
1668 |
|
|
has not indicated whether it supports the extension or even if it |
1669 |
|
|
supports PEP. |
1670 |
|
|
|
1671 |
|
|
GET /Index HTTP/1.1 |
1672 |
|
|
Host: some.host |
1673 |
|
|
|
1674 |
|
|
HTTP/1.1 200 OK |
1675 |
|
|
PEP: {{map "http://www.w3.org/PEP/Digest" 4-}} |
1676 |
|
|
4-Content-Digest: "a0b1c2d3e4f5g6h7i8j9" |
1677 |
|
|
Cache-Control: max-age=3600 |
1678 |
|
|
... |
1679 |
|
|
|
1680 |
|
|
The response is fully cachable and does not require revalidation when |
1681 |
|
|
replying to subsequent requests. |
1682 |
|
|
|
1683 |
|
|
|
1684 |
|
|
17.4 Server Requires Client to use Payment Extension |
1685 |
|
|
|
1686 |
|
|
The last example shows how a server requires a client to use a micro- |
1687 |
|
|
payment extension in order to access a resource causing an additional |
1688 |
|
|
roundtrip using the 420 (Policy Not Fulfilled) status code (see |
1689 |
|
|
section 8.1). The first request does not contain any PEP constructs |
1690 |
|
|
leading to the error message. A non-PEP compliant client will treat |
1691 |
|
|
this as a 400 (Bad Request) status code and will not be able to |
1692 |
|
|
|
1693 |
|
|
Frystyk, et al [Page 27] |
1694 |
|
|
|
1695 |
|
|
|
1696 |
|
|
|
1697 |
|
|
|
1698 |
|
|
|
1699 |
|
|
|
1700 |
|
|
INTERNET DRAFT PEP Friday, November 21, 1997 |
1701 |
|
|
|
1702 |
|
|
fulfill the server's requirement in a second request (see [7], section |
1703 |
|
|
10.4.1) |
1704 |
|
|
|
1705 |
|
|
GET /Index HTTP/1.1 |
1706 |
|
|
Host: some.host |
1707 |
|
|
|
1708 |
|
|
420 Policy Not Fulfilled |
1709 |
|
|
PEP-Info: {{id "http://www.w3.org/PEP/MiniPayment"} |
1710 |
|
|
{params {Price 0.02USD}} {strength must}} |
1711 |
|
|
|
1712 |
|
|
PEP-GET /Index HTTP/1.1 |
1713 |
|
|
Host: some.host |
1714 |
|
|
PEP: {{map "http://www.w3.org/PEP/MiniPayment" 12-} |
1715 |
|
|
{strength must}} |
1716 |
|
|
12-Price: 0.02USD |
1717 |
|
|
|
1718 |
|
|
HTTP/1.1 200 OK |
1719 |
|
|
... |
1720 |
|
|
|
1721 |
|
|
The actual price is passed as an extra parameter in the extension |
1722 |
|
|
policy. The client agrees to the price and issues a new request |
1723 |
|
|
containing the proper extension declaration. If it did not agree with |
1724 |
|
|
the price, it could have tried a lower price and depending on the |
1725 |
|
|
policy of that resource, the server may have responded positively. |
1726 |
|
|
|
1727 |
|
|
|
1728 |
|
|
|
1729 |
|
|
|
1730 |
|
|
|
1731 |
|
|
|
1732 |
|
|
|
1733 |
|
|
|
1734 |
|
|
|
1735 |
|
|
|
1736 |
|
|
|
1737 |
|
|
|
1738 |
|
|
|
1739 |
|
|
|
1740 |
|
|
|
1741 |
|
|
|
1742 |
|
|
|
1743 |
|
|
|
1744 |
|
|
|
1745 |
|
|
|
1746 |
|
|
|
1747 |
|
|
|
1748 |
|
|
|
1749 |
|
|
|
1750 |
|
|
|
1751 |
|
|
|
1752 |
|
|
|
1753 |
|
|
|
1754 |
|
|
Frystyk, et al [Page 28] |