/[suikacvs]/webroot/www/2004/id/draft-ietf-http-versions-00.txt
Suika

Contents of /webroot/www/2004/id/draft-ietf-http-versions-00.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download)
Tue Jun 15 08:04:06 2004 UTC (20 years, 10 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/plain
Error occurred while calculating annotation data.
New

1
2 HTTP Working Group J. C. Mogul, DEC
3 Internet-Draft R. Fielding, UC Irvine
4 Expires: 30 July 1997 J. Gettys, DEC
5 H. Frystyk, MIT/LCS
6 22 January 1997
7 Use and interpretation of
8 HTTP version numbers
9
10 draft-ietf-http-versions-00.txt
11
12
13 STATUS OF THIS MEMO
14
15 This document is an Internet-Draft. Internet-Drafts are
16 working documents of the Internet Engineering Task Force
17 (IETF), its areas, and its working groups. Note that other
18 groups may also distribute working documents as
19 Internet-Drafts.
20
21 Internet-Drafts are draft documents valid for a maximum of
22 six months and may be updated, replaced, or obsoleted by
23 other documents at any time. It is inappropriate to use
24 Internet-Drafts as reference material or to cite them other
25 than as "work in progress."
26
27 To learn the current status of any Internet-Draft, please
28 check the "1id-abstracts.txt" listing contained in the
29 Internet-Drafts Shadow Directories on ftp.is.co.za
30 (Africa), nic.nordu.net (Europe), munnari.oz.au (Pacific
31 Rim), ds.internic.net (US East Coast), or ftp.isi.edu (US
32 West Coast).
33
34 Distribution of this document is unlimited. Please send
35 comments to the HTTP working group at
36 <http-wg@cuckoo.hpl.hp.com>. Discussions of the working
37 group are archived at
38 <URL:http://www.ics.uci.edu/pub/ietf/http/>. General
39 discussions about HTTP and the applications which use HTTP
40 should take place on the <www-talk@w3.org> mailing list.
41
42
43 ABSTRACT
44
45 HTTP request and response messages include an HTTP protocol
46 version number. Some confusion exists concerning the
47 proper use and interpretation of HTTP version numbers, and
48 concerning interoperability of HTTP implementations of
49 different protocol versions. This document is an attempt
50 to clarify the situation. It is not a modification of the
51 intended meaning of the existing HTTP/1.0 and HTTP/1.1
52 documents, but it does describe the intention of the
53 authors of those documents, and can be considered
54 definitive when there is any ambiguity in those documents
55 concerning HTTP version numbers, for all versions of HTTP.
56
57 Mogul et al. [Page 1]
58
59 Internet-Draft HTTP version numbers 22 January 1997 12:26
60
61
62 TABLE OF CONTENTS
63
64 1 Introduction 2
65 1.1 Robustness Principle 3
66 2 HTTP version numbers 3
67 2.1 Proxy behavior 4
68 2.2 Compatibility between minor versions of the same major 4
69 version
70 2.3 Which version number to send in a message 4
71 3 Security Considerations 5
72 4 References 5
73 5 Authors' addresses 6
74
75
76 1 Introduction
77
78 HTTP request and response messages include an HTTP protocol version
79 number. According to section 3.1 of the HTTP/1.1 specification [2],
80
81 HTTP uses a "<major>.<minor>" numbering scheme to indicate
82 versions of the protocol. The protocol versioning policy is
83 intended to allow the sender to indicate the format of a
84 message and its capacity for understanding further HTTP
85 communication, rather than the features obtained via that
86 communication. No change is made to the version number for
87 the addition of message components which do not affect
88 communication behavior or which only add to extensible field
89 values. The <minor> number is incremented when the changes
90 made to the protocol add features which do not change the
91 general message parsing algorithm, but which may add to the
92 message semantics and imply additional capabilities of the
93 sender. The <major> number is incremented when the format of
94 a message within the protocol is changed.
95
96 The same language appears in the description of HTTP/1.0 [1].
97
98 Many readers of these documents have expressed some confusion about
99 the intended meaning of this policy. Also, some people who wrote
100 HTTP implementations before RFC1945 [1] was issued were not aware of
101 the intentions behind the introduction of version numbers in
102 HTTP/1.0. This has led to debate and inconsistency regarding the use
103 and interpretation of HTTP version numbers, and has led to
104 interoperability problems in certain cases.
105
106 This document is an attempt to clarify the situation. It is not a
107 modification of the intended meaning of the existing HTTP/1.0 and
108 HTTP/1.1 documents, but it does describe the intention of the authors
109 of those documents. In any case where either of those two documents
110 is ambiguous regarding the use and interpretation of HTTP version
111 numbers, this document should be considered the definitive as to the
112 intentions of the designers of HTTP.
113
114 Mogul et al. [Page 2]
115
116 Internet-Draft HTTP version numbers 22 January 1997 12:26
117
118
119 The specification described in this document is not part of the
120 specification of any individual version of HTTP, such as HTTP/1.0 or
121 HTTP/1.1. Rather, this document describes the use of HTTP version
122 numbers in any version of HTTP (except for HTTP/0.9, which did not
123 include version numbers).
124
125 No vendor or other provider of an HTTP implementation should claim
126 any compliance with any IETF HTTP specification unless the
127 implementation conditionally complies with the rules in this
128 document.
129
130 1.1 Robustness Principle
131 RFC791 [4] defines the ``robustness principle'' in section 3.2:
132
133 an implementation must be conservative in its sending
134 behavior, and liberal in its receiving behavior.
135
136 This principle applies to HTTP, as well. It is the fundamental basis
137 for interpreting any part of the HTTP specification that might still
138 be ambiguous. In particular, implementations of HTTP SHOULD NOT
139 reject messages or generate errors unnecessarily.
140
141
142 2 HTTP version numbers
143
144 We start by restating the language quoted above from section 3.1 of
145 the HTTP/1.1 specification [2]:
146
147 It is, and has always been, the explicit intent of the
148 HTTP specification that the interpretation of an HTTP message
149 header does not change between minor versions of the same
150 major version.
151
152 It is, and has always been, the explicit intent of the
153 HTTP specification that an implementation receiving a message
154 header that it does not understand MUST ignore that header.
155 (The word ``ignore'' has a special meaning for proxies; see
156 section 2.1 below.)
157
158 It is, and has always been, the explicit intent of the
159 HTTP specification that if an implementation receives a
160 message header whose major version number is greater than
161 that of the implementation, it MUST NOT accept that message.
162
163 To make this as clear as possible: The major version sent in a
164 message MAY indicate the interpretation of other header fields. The
165 minor version sent in a message MUST NOT indicate the interpretation
166 of other header fields. This reflects the principle that the minor
167 version labels the capability of the sender, not the interpretation
168 of the message.
169
170
171 Mogul et al. [Page 3]
172
173 Internet-Draft HTTP version numbers 22 January 1997 12:26
174
175
176 Note: In a future version of HTTP, we may introduce a mechanism
177 that explicitly requires a receiving implementation to reject a
178 message if it does not understand certain headers. For
179 example, this might be implemented by means of a header that
180 lists a set of other message headers that must be understood by
181 the recipient. Any implementation claiming at least
182 conditional compliance with this future version of HTTP would
183 have to implement this mechanism. However, no implementation
184 claiming compliance with a lower HTTP version (in particular,
185 HTTP/1.1) will have to implement this mechanism.
186
187 This future change may be required to support the Protocol
188 Extension Protocol (PEP) [3].
189
190 One consequence of these rules is that an HTTP/1.1 message sent to an
191 HTTP/1.0 recipient (or a recipient whose version is unknown) MUST be
192 constructed so that it remains a valid HTTP/1.0 message when all
193 headers not defined in the HTTP/1.0 specification [1] are removed.
194
195 2.1 Proxy behavior
196 A proxy MUST forward an unknown header, unless it is protected by a
197 Connection header. A proxy implementing an HTTP version >= 1.1 MUST
198 NOT forward unknown headers that are protected by a Connection
199 header, as described in section 14.10 of the HTTP/1.1
200 specification [2].
201
202 We remind the reader that that HTTP version numbers are hop-by-hop
203 components of HTTP messages, and are not end-to-end. That is, an
204 HTTP proxy never ``forwards'' an HTTP version number in either a
205 request or response.
206
207 2.2 Compatibility between minor versions of the same major version
208 An implementation of HTTP/x.b sending a message to a recipient whose
209 version is known to be HTTP/x.a, a < b, MAY send a header that is not
210 defined in the specification for HTTP/x.a. For example, an HTTP/1.1
211 server may send a ``Cache-control'' header to an HTTP/1.0 client;
212 this may be useful if the immediate recipient is an HTTP/1.0 proxy,
213 but the ultimate recipient is an HTTP/1.1 client.
214
215 An implementation of HTTP/x.b sending a message to a recipient whose
216 version is known to be HTTP/x.a, a < b, MUST NOT depend on the
217 recipient understanding a header not defined in the specification for
218 HTTP/x.a. For example, HTTP/1.0 clients cannot be expected to
219 understand chunked encodings, and so an HTTP/1.1 server must never
220 send ``Transfer-Encoding: chunked'' in response to an HTTP/1.0
221 request.
222
223 2.3 Which version number to send in a message
224 The most strenuous debate over the use of HTTP version numbers has
225 centered on the problem of implementations that do not follow the
226 robustness principle, and which fail to produce useful results when
227
228 Mogul et al. [Page 4]
229
230 Internet-Draft HTTP version numbers 22 January 1997 12:26
231
232
233 they receive a message with an HTTP minor version higher than the
234 minor version they implement. We consider these implementations
235 buggy, but we recognize that the robustness principle also implies
236 that message senders should make concessions to buggy implementations
237 when this is truly necessary for interoperation.
238
239 An HTTP client SHOULD send a request version equal to the highest
240 version for which the client is at least conditionally compliant, and
241 whose major version is no higher than the highest version supported
242 by the server, if this is known. An HTTP client MUST NOT send a
243 version for which it is not at least conditionally compliant.
244
245 An HTTP client MAY send a lower request version, if it is known that
246 the server incorrectly implements the HTTP specification, but only
247 after the client has determined that the server is actually buggy.
248
249 An HTTP server SHOULD send a response version equal to the highest
250 version for which the server is at least conditionally compliant, and
251 whose major version is equal to the one received in the request. An
252 HTTP server MUST NOT send a version for which it is not at least
253 conditionally compliant.
254
255 An HTTP server MAY send a lower response version, if it is known or
256 suspected that the client incorrectly implements the HTTP
257 specification, but this should not be the default, and this SHOULD
258 NOT be done if the request version is HTTP/1.1 or greater.
259
260
261 3 Security Considerations
262
263 None, except to the extent that security mechanisms introduced in one
264 version of HTTP might depend on the proper interpretation of HTTP
265 version numbers in older implementations.
266
267
268 4 References
269
270 1. T. Berners-Lee, R. Fielding, and H. Frystyk. Hypertext Transfer
271 Protocol -- HTTP/1.0. RFC 1945, HTTP Working Group, May, 1996.
272
273 2. Roy T. Fielding, Jim Gettys, Jeffrey C. Mogul, Henrik Frystyk
274 Nielsen, and Tim Berners-Lee. Hypertext Transfer Protocol --
275 HTTP/1.1. RFC 2068, HTTP Working Group, January, 1997.
276
277 3. Rohit Khare. HTTP/1.2 Extension Protocol (PEP). Internet Draft
278 draft-ietf-http-pep-00, HTTP Working Group, August, 1996. This is a
279 work in progress.
280
281 4. Jon Postel. Internet Protocol. RFC 791, NIC, September, 1981.
282
283
284
285 Mogul et al. [Page 5]
286
287 Internet-Draft HTTP version numbers 22 January 1997 12:26
288
289
290 5 Authors' addresses
291
292 Jeffrey C. Mogul
293 Western Research Laboratory
294 Digital Equipment Corporation
295 250 University Avenue
296 Palo Alto, California, 94305, USA
297 Email: mogul@wrl.dec.com
298
299 Roy T. Fielding
300 Department of Information and Computer Science
301 University of California
302 Irvine, CA 92717-3425, USA
303 Fax: +1 (714) 824-4056
304 Email: fielding@ics.uci.edu
305
306 Jim Gettys
307 MIT Laboratory for Computer Science
308 545 Technology Square
309 Cambridge, MA 02139, USA
310 Fax: +1 (617) 258 8682
311 Email: jg@w3.org
312
313 Henrik Frystyk Nielsen
314 W3 Consortium
315 MIT Laboratory for Computer Science
316 545 Technology Square
317 Cambridge, MA 02139, USA
318 Fax: +1 (617) 258 8682
319 Email: frystyk@w3.org
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342 Mogul et al. [Page 6]

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24  
Google Analytics is used in this page; Cookies are used. 忍者AdMax is used in this page; Cookies are used. Privacy policy.