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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Tue Jun 15 08:04:04 2004 UTC (20 years, 10 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/plain
New

1 wakaba 1.1 HTTP Working Group T. Berners-Lee
2     INTERNET-DRAFT R. T. Fielding
3     <draft-ietf-http-v10-spec-00.txt> H. Frystyk Nielsen
4     Expires September 8, 1995 March 8, 1995
5    
6    
7     Hypertext Transfer Protocol -- HTTP/1.0
8    
9    
10     Status of this Memo
11    
12     This document is an Internet-Draft. Internet-Drafts are working
13     documents of the Internet Engineering Task Force (IETF), its areas,
14     and its working groups. Note that other groups may also distribute
15     working documents as Internet-Drafts.
16    
17     Internet-Drafts are draft documents valid for a maximum of six
18     months and may be updated, replaced, or obsoleted by other
19     documents at any time. It is inappropriate to use Internet-Drafts
20     as reference material or to cite them other than as "work in
21     progress".
22    
23     To learn the current status of any Internet-Draft, please check the
24     "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow
25     Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe),
26     munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or
27     ftp.isi.edu (US West Coast).
28    
29     Distribution of this document is unlimited. Please send comments to
30     the HTTP working group at <http-wg@cuckoo.hpl.hp.com>. Discussions
31     of the working group are archived at
32     <URL:http://www.ics.uci.edu/pub/ietf/http/>. General discussions
33     about HTTP and the applications which use HTTP should take place on
34     the <www-talk@info.cern.ch> mailing list.
35    
36     Abstract
37    
38     The Hypertext Transfer Protocol (HTTP) is an application-level
39     protocol with the lightness and speed necessary for distributed,
40     collaborative, hypermedia information systems. It is a generic,
41     stateless, object-oriented protocol which can be used for many
42     tasks, such as name servers and distributed object management
43     systems, through extension of its request methods (commands). A
44     feature of HTTP is the typing and negotiation of data
45     representation, allowing systems to be built independently of the
46     data being transferred.
47    
48     HTTP has been in use by the World-Wide Web global information
49     initiative since 1990. This specification reflects preferred usage
50     of the protocol referred to as "HTTP/1.0", and is compatible with
51     the most commonly used HTTP server and client programs implemented
52     prior to November 1994.
53    
54     Table of Contents
55    
56     1. Introduction
57     1.1 Purpose
58     1.2 Overall Operation
59     1.3 Terminology
60     2. Notational Conventions and Generic Grammar
61     2.1 Augmented BNF
62     2.2 Basic Rules
63     3. Protocol Parameters
64     3.1 HTTP Version
65     3.2 Universal Resource Identifiers
66     3.3 Date/Time Formats
67     3.3.1 Full Date
68     3.3.2 Delta Seconds
69     4. HTTP Message
70     4.1 Message Types
71     4.2 Message Headers
72     4.3 General Message Header Fields
73     4.3.1 Date
74     4.3.2 Forwarded
75     4.3.3 Message-ID
76     4.3.4 MIME-Version
77     5. Request
78     5.1 Request-Line
79     5.2 Method
80     5.2.1 GET
81     5.2.2 HEAD
82     5.2.3 POST
83     5.2.4 PUT
84     5.2.5 DELETE
85     5.2.6 LINK
86     5.2.7 UNLINK
87     5.3 Request-URI
88     5.4 Request Header Fields
89     5.4.1 Accept
90     5.4.2 Accept-Charset
91     5.4.3 Accept-Encoding
92     5.4.4 Accept-Language
93     5.4.5 Authorization
94     5.4.6 From
95     5.4.7 If-Modified-Since
96     5.4.8 Pragma
97     5.4.9 Referer
98     5.4.10 User-Agent
99     6. Response
100     6.1 Status-Line
101     6.2 Status Codes and Reason Phrases
102     6.2.1 Successful 2xx
103     6.2.2 Redirection 3xx
104     6.2.3 Client Error 4xx
105     6.2.4 Server Errors 5xx
106     6.3 Response Header Fields
107     6.3.1 Public
108     6.3.2 Retry-After
109     6.3.3 Server
110     6.3.4 WWW-Authenticate
111     7. Entity
112     7.1 Entity Header Fields
113     7.1.1 Allow
114     7.1.2 Content-Encoding
115     7.1.3 Content-Language
116     7.1.4 Content-Length
117     7.1.5 Content-Transfer-Encoding
118     7.1.6 Content-Type
119     7.1.7 Derived-From
120     7.1.8 Expires
121     7.1.9 Last-Modified
122     7.1.10 Link
123     7.1.11 Location
124     7.1.12 Title
125     7.1.13 URI
126     7.1.14 Version
127     7.2 Entity Body
128     7.2.1 Type
129     7.2.2 Length
130     8. Content Parameters
131     8.1 Media Types
132     8.1.1 Canonicalization and Text Defaults
133     8.1.2 Multipart Types
134     8.2 Language Tags
135     8.3 Character Sets
136     8.4 Encoding Mechanisms
137     8.5 Transfer Encodings
138     9. Content Negotiation
139     10. Access Authentication
140     10.1 Basic Authentication Scheme
141     11. Security Considerations
142     11.1 Authentication of Clients
143     11.2 Idempotent Methods
144     11.3 Abuse of Server Log Information
145     12. Acknowledgments
146     13. References
147     14. Authors' Addresses
148     Appendix A. Internet Media Type message/http
149     Appendix B. Minimum Compliance
150     B.1 Servers
151     Appendix C. Tolerant Applications
152     C.1 Request-Line, Status-Line, and Header Fields
153     Appendix D. Relationship to MIME
154     D.1 Conversion to Canonical Form
155     D.1.1 Representation of Line Breaks
156     D.1.2 Default Character Set
157     D.2 Default Content-Transfer-Encoding
158     D.3 Introduction of Content-Encoding
159     Appendix E. Example of Version Control
160    
161    
162     1. Introduction
163    
164     1.1 Purpose
165    
166     The Hypertext Transfer Protocol (HTTP) is an application-level
167     protocol with the lightness and speed necessary for distributed,
168     collaborative, hypermedia information systems. HTTP has been in use
169     by the World-Wide Web global information initiative since 1990.
170     This specification reflects preferred usage of the protocol
171     referred to as "HTTP/1.0". This specification does not necessarily
172     reflect the "current practice" of any single HTTP server or client
173     implementation. It does, however, seek to remain compatible with
174     existing implementations wherever possible, and should be
175     considered the reference for future implementations of HTTP/1.0.
176    
177     Practical information systems require more functionality than
178     simple retrieval, including search, front-end update, and
179     annotation. HTTP/1.0 allows an open-ended set of methods to be used
180     to indicate the purpose of a request. It builds on the discipline
181     of reference provided by the Universal Resource Identifier
182     (URI) [3], as a location (URL) [5] or name (URN), for indicating
183     the resource on which a method is to be applied. Messages are
184     passed in a format similar to that used by Internet Mail [8] and
185     the Multipurpose Internet Mail Extensions (MIME) [6].
186    
187     HTTP/1.0 is also used for communication between user agents and
188     various gateways, allowing hypermedia access to existing Internet
189     protocols like SMTP [14], NNTP [12], FTP [16], Gopher [2], and
190     WAIS [9]. HTTP/1.0 is designed to allow such gateways, via proxy
191     servers, without any loss of the data conveyed by those earlier
192     protocols.
193    
194     1.2 Overall Operation
195    
196     The HTTP protocol is based on a request/response paradigm. A
197     requesting program (termed a client) establishes a connection with
198     a receiving program (termed a server) and sends a request to the
199     server in the form of a request method, URI, and protocol version,
200     followed by a MIME-like message containing request modifiers,
201     client information, and possible body content. The server responds
202     with a status line (including its protocol version and a success or
203     error code), followed by a MIME-like message containing server
204     information, entity metainformation, and possible body content. It
205     should be noted that a given program may be capable of being both a
206     client and a server; our use of those terms refers only to the role
207     being performed by the program during a particular connection,
208     rather than to the program's purpose in general.
209    
210     On the Internet, the communication generally takes place over a
211     TCP/IP connection. The default port is TCP 80 [17], but other ports
212     can be used. This does not preclude the HTTP/1.0 protocol from
213     being implemented on top of any other protocol on the Internet, or
214     on other networks. The mapping of the HTTP/1.0 request and response
215     structures onto the transport data units of the protocol in
216     question is outside the scope of this specification.
217    
218     For most implementations, the connection is established by the
219     client prior to each request and closed by the server after sending
220     the response. However, this is not a feature of the protocol and is
221     not required by this specification. Both clients and servers must
222     be capable of handling cases where either party closes the
223     connection prematurely, due to user action, automated time-out, or
224     program failure. In any case, the closing of the connection by
225     either or both parties always terminates the current request,
226     regardless of its status.
227    
228     1.3 Terminology
229    
230     This specification uses a number of terms to refer to the roles
231     played by participants in, and objects of, the HTTP communication.
232    
233     connection
234     A virtual circuit established between two parties for the
235     purpose of communication.
236    
237     message
238     A structured sequence of octets transmitted via the connection
239     as the basic component of communication.
240    
241     request
242     An HTTP request message (as defined in Section 5).
243    
244     response
245     An HTTP response message (as defined in Section 6).
246    
247     resource
248     A network data object or service which can be identified by a
249     URI.
250    
251     entity
252     A particular representation or rendition of a resource that may
253     be enclosed within a request or response message. An entity
254     consists of metainformation (in the form of entity headers) and
255     content (in the form of an entity body).
256    
257     client
258     A program that establishes connections for the purpose of
259     sending requests.
260    
261     user agent
262     The client program which is closest to the user and which
263     initiates requests at their behest.
264    
265     server
266     A program that accepts connections in order to service requests
267     by sending back responses.
268    
269     origin server
270     The server on which a given resource resides or is to be created.
271    
272     proxy
273     An intermediary program which acts as both a server and a client
274     for the purpose of forwarding requests. Proxies are often used
275     to act as a portal through a network firewall. A proxy server
276     accepts requests from other clients and services them either
277     internally or by passing them (with possible translation) on to
278     other servers. A caching proxy is a proxy server with a local
279     cache of server responses -- some requested resources can be
280     serviced from the cache rather than from the origin server. Some
281     proxy servers also act as origin servers.
282    
283     gateway
284     A proxy which services HTTP requests by translation into
285     protocols other than HTTP. The reply sent from the remote server
286     to the gateway is likewise translated into HTTP before being
287     forwarded to the user agent.
288    
289     2. Notational Conventions and Generic Grammar
290    
291     2.1 Augmented BNF
292    
293     All of the mechanisms specified in this document are described in
294     both prose and an augmented Backus-Naur Form (BNF) similar to that
295     used by RFC 822 [8]. Implementors will need to be familiar with the
296     notation in order to understand this specification. The augmented
297     BNF includes the following constructs:
298    
299     name = definition
300    
301     The name of a rule is simply the name itself (without any
302     enclosing "<" and ">") and is separated from its definition by
303     the equal character "=". Whitespace is only significant in that
304     indentation of continuation lines is used to indicate a rule
305     definition that spans more than one line. Certain basic rules
306     are in uppercase, such as SP, LWS, HTAB, CRLF, DIGIT, ALPHA,
307     etc. Angle brackets are used within definitions whenever their
308     presence will facilitate discerning the use of rule names.
309    
310     "literal"
311    
312     Quotation marks surround literal text. Unless stated otherwise,
313     the text is case-insensitive.
314    
315     rule1 | rule2
316    
317     Elements separated by a bar ("I") are alternatives,
318     e.g. "yes | no" will accept yes or no.
319    
320     (rule1 rule2)
321    
322     Elements enclosed in parentheses are treated as a single
323     element. Thus,"(elem (foo | bar) elem)" allows the token
324     sequences "elem foo elem" and "elem bar elem".
325    
326     *rule
327    
328     The character "*" preceding an element indicates repetition. The
329     full form is "<n>*<m>element" indicating at least <n> and at
330     most <m> occurrences of element. Default values are 0 and
331     infinity so that "*(element)" allows any number, including zero;
332     "1*element" requires at least one; and "1*2element" allows one
333     or two.
334    
335     [rule]
336    
337     Square brackets enclose optional elements; "[foo bar]" is
338     equivalent to "*1(foo bar)".
339    
340     N rule
341    
342     Specific repetition: "<n>(element)" is equivalent to
343     "<n>*<n>(element)"; that is, exactly <n> occurrences of
344     (element). Thus 2DIGIT is a 2-digit number, and 3ALPHA is a
345     string of three alphabetic characters.
346    
347     #rule
348    
349     A construct "#" is defined, similar to "*", for defining lists
350     of elements. The full form is "<n>#<m>element" indicating at
351     least <n> and at most <m> elements, each separated by one or
352     more commas (",") and optional linear whitespace (LWS). This
353     makes the usual form of lists very easy; a rule such as
354     "( *LWS element *( *LWS "," *LWS element ))" can be shown as
355     "1#element". Wherever this construct is used, null elements are
356     allowed, but do not contribute to the count of elements present.
357     That is, "(element), , (element)" is permitted, but counts as
358     only two elements. Therefore, where at least one element is
359     required, at least one non-null element must be present. Default
360     values are 0 and infinity so that "#(element)" allows any
361     number, including zero; "1#element" requires at least one; and
362     "1#2element" allows one or two.
363    
364     ; comment
365    
366     A semi-colon, set off some distance to the right of rule text,
367     starts a comment that continues to the end of line. This is a
368     simple way of including useful notes in parallel with the
369     specifications.
370    
371     implied *LWS
372    
373     The grammar described by this specification is word-based.
374     Except where noted otherwise, zero or more linear whitespace
375     (LWS) can be included between any two words (token or
376     quoted-string) without changing the interpretation of a field.
377     However, applications should attempt to follow "common form"
378     when generating HTTP constructs, since there exist some
379     implementations that fail to accept anything beyond the common
380     forms.
381    
382     2.2 Basic Rules
383    
384     The following rules are used throughout this specification to
385     describe basic parsing constructs. The US-ASCII character set is
386     defined by [18].
387    
388     OCTET = <any 8-bit character>
389     CHAR = <any US-ASCII character (octets 0 - 127)>
390     UPALPHA = <any US-ASCII uppercase letter "A".."Z">
391     LOALPHA = <any US-ASCII lowercase letter "a".."z">
392     ALPHA = UPALPHA | LOALPHA
393     DIGIT = <any US-ASCII digit "0".."9">
394     CTL = <any US-ASCII control character
395     (octets 0 - 31) and DEL (127)>
396     CR = <US-ASCII CR, carriage return (13)>
397     LF = <US-ASCII LF, linefeed (10)>
398     SP = <US-ASCII SP, space (32)>
399     HTAB = <US-ASCII HT, horizontal-tab (9)>
400     <"> = <US-ASCII double-quote mark>
401    
402     HTTP/1.0 defines the octet sequence CR LF as the end-of-line marker
403     for all protocol elements except the Entity-Body (see Appendix C
404     for tolerant applications). The end-of-line marker for an
405     Entity-Body is defined by its associated media type, as described
406     in Section 8.1.
407    
408     CRLF = CR LF
409    
410     HTTP/1.0 headers can be folded onto multiple lines if the
411     continuation lines begin with linear whitespace characters. All
412     linear whitespace (including folding) has the same semantics as SP.
413    
414     LWS = [CRLF] 1*( SP | HTAB )
415    
416     Many HTTP/1.0 header field values consist of words separated by LWS
417     or special characters. These special characters must be in a quoted
418     string to be used within a parameter value.
419    
420     word = token | quoted-string
421    
422     token = 1*<any CHAR except CTLs or tspecials>
423    
424     tspecials = "(" | ")" | "<" | ">" | "@"
425     | "," | ";" | ":" | "\" | <">
426     | "/" | "[" | "]" | "?" | "="
427     | SP | HTAB
428    
429     A string of text is parsed as a single word if it is quoted using
430     double-quote marks or angle brackets.
431    
432     quoted-string = ( <"> *(qdtext) <"> )
433     | ( "<" *(qatext) ">" )
434    
435     qdtext = <any CHAR except <"> and CTLs,
436     but including LWS>
437    
438     qatext = <any CHAR except "<", ">", and CTLs,
439     but including LWS>
440    
441     The text rule is only used for descriptive field contents. Words of
442     *text may contain characters from character sets other than
443     US-ASCII only when encoded according to the rules of RFC 1522 [13].
444    
445     text = <any OCTET except CTLs,
446     but including LWS>
447    
448     3. Protocol Parameters
449    
450     3.1 HTTP Version
451    
452     HTTP uses a "<major>.<minor>" numbering scheme to indicate versions
453     of the protocol. The protocol versioning policy is intended to
454     allow the sender to indicate the format of a message and its
455     capacity for understanding further HTTP communication, rather than
456     the features obtained via that communication. No change is made to
457     the version number for the addition of message components which do
458     not affect communication behavior or which only add to extensible
459     field values. The <minor> number is incremented when the changes
460     made to the protocol add features which do not change the general
461     message parsing algorithm, but which may add to the message
462     semantics and imply additional capabilities of the sender. The
463     <major> number is incremented when the format of a message within
464     the protocol is changed.
465    
466     The version of an HTTP message is indicated by an HTTP-Version
467     field in the first line of the message. If the protocol version is
468     not specified, the recipient must assume that the message is in the
469     simple HTTP/0.9 format.
470    
471     HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT
472    
473     Note that the major and minor numbers should be treated as separate
474     integers and that each may be incremented higher than a single
475     digit. Thus, HTTP/2.4 is a lower version than HTTP/2.13, which in
476     turn is lower than HTTP/12.3. Leading zeroes should be ignored by
477     recipients and never generated by senders.
478    
479     This document defines both the 0.9 and 1.0 versions of the HTTP
480     protocol. Applications sending Full-Request or Full-Response
481     messages, as defined by this specification, must include an
482     HTTP-Version of "HTTP/1.0".
483    
484     HTTP servers are required to be able to recognize the format of the
485     Request-Line for all lower-version requests, understand requests
486     with a format within one major number of their native version (i.e.
487     <major1> and <major>), and respond appropriately with a message
488     within the same <major> protocol number (even if the response is
489     simply an error message). HTTP clients are required to be able to
490     recognize the format of the Status-Line for all lower-version
491     responses and understand responses with a format within one major
492     number of their request version. The following hypothetical example
493     illustrates the required behavior.
494    
495     o A valid HTTP/3.5 request is received and the server's native
496     protocol version is
497    
498     o Less than 3.0: it should attempt to understand the request
499     and respond (possibly with an error) in its native format;
500    
501     o Major number of 3: It should understand the request and
502     respond in its native format;
503    
504     o Major number of 4: It should understand the request and
505     respond with a version 3 message;
506    
507     o Major number higher than 4: It should attempt to understand
508     the request and respond (possibly with an error) with a
509     version 3 message;
510    
511     o User agent receives a response to an HTTP/3.5 request, and the
512     response version is
513    
514     o Less than 2.0: It should attempt to understand the response
515     and unobtrusively warn the user of the version mismatch;
516    
517     o 2.0--3.4: It should understand the response and be aware
518     that its request may not have been fully understood by the
519     server;
520    
521     o 3.5 or higher 3: It should understand the response and can
522     assume that the server understood all aspects of the request
523     if the response does not indicate an error;
524    
525     o 4.0 or higher: It should attempt to understand the response
526     and unobtrusively warn the user of the version mismatch.
527    
528     Proxies must be careful in forwarding requests that are received in
529     a format different than that of the proxy's native version. Since
530     the protocol version indicates the protocol capability of the
531     sender, a proxy must never send a message with a version indicator
532     which is greater than its native version; if a higher version
533     request is received, the proxy must either downgrade the request
534     version or respond with an error. Requests with a version lower
535     than that of the proxy's native format may be upgraded by the proxy
536     before being forwarded; the proxy's response to that request must
537     follow the normal server requirements.
538    
539     3.2 Universal Resource Identifiers
540    
541     This section is To-Be-Specified. It will contain a brief
542     description of URIs as defined by RFC 1630, including mention of
543     the allowed characters and the hex encoding, and provide a full
544     definition of the http URL scheme.
545    
546     URI = <As defined in RFC 1630>
547    
548     All URI protocol elements must be encoded using the escaping scheme
549     described in RFC 1630 [3].
550    
551     3.3 Date/Time Formats
552    
553     3.3.1 Full Date
554    
555     HTTP/1.0 applications have historically allowed three different
556     formats for the representation of date/time stamps:
557    
558     Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
559     Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
560     Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
561    
562     The first format is preferred as an Internet standard and
563     represents a fixed-length subset of that defined by RFC 1123 [7]
564     (an update to RFC 822 [8]). The second format is in common use, but
565     is based on the obsolete RFC 850 [11] date format and lacks a four-
566     digit year. HTTP/1.0 clients and servers must accept all three
567     formats, though they should never generate the third (asctime)
568     format. Future clients and servers must only generate the RFC 1123
569     format for representing date/time stamps in HTTP/1.0 requests and
570     responses.
571    
572     All HTTP/1.0 date/time stamps must be represented in Universal Time
573     (UT), also known as Greenwich Mean Time (GMT), without exception.
574     This is indicated in the first two formats by the inclusion of
575     "GMT" as the three-letter abbreviation for time zone, and should be
576     assumed when reading the asctime format.
577    
578     HTTP-date = rfc1123-date | rfc850-date | asctime-date
579    
580     rfc1123-date = wkday "," SP date1 SP time SP "GMT"
581     rfc850-date = weekday "," SP date2 SP time SP "GMT"
582     asctime-date = wkday SP date3 SP time SP 4DIGIT
583    
584     date1 = 2DIGIT SP month SP 4DIGIT
585     ; day month year (e.g. 02 Jun 1982)
586     date2 = 2DIGIT "-" month "-" 2DIGIT
587     ; day-month-year (e.g. 02-Jun-82)
588     date3 = month SP ( 2DIGIT | ( SP 1DIGIT ))
589     ; month day (e.g. Jun 2)
590    
591     time = 2DIGIT ":" 2DIGIT ":" 2DIGIT
592     ; 00:00:00 - 23:59:59
593    
594     wkday = "Mon" | "Tue" | "Wed"
595     | "Thu" | "Fri" | "Sat" | "Sun"
596    
597     weekday = "Monday" | "Tuesday" | "Wednesday"
598     | "Thursday" | "Friday" | "Saturday" | "Sunday"
599    
600     month = "Jan" | "Feb" | "Mar" | "Apr"
601     | "May" | "Jun" | "Jul" | "Aug"
602     | "Sep" | "Oct" | "Nov" | "Dec"
603    
604     Comments and/or extra LWS are not permitted inside an HTTP-date
605     value generated by a conformant application. However, recipients of
606     date values should be robust in accepting date values that may have
607     been generated by non-HTTP applications (as is sometimes the case
608     when retrieving or posting messages via gateways to SMTP or NNTP).
609    
610     Note: HTTP/1.0 requirements for the date/time stamp format
611     apply only to their usage within the protocol stream.
612     Clients and servers are not required to use these formats
613     for user presentation, request logging, etc.
614    
615     3.3.2 Delta Seconds
616    
617     Some HTTP header fields allow a time value to be specified as an
618     integer number of seconds (represented in decimal) after the time
619     that the message was received. This format should only be used to
620     represent short time periods or periods that cannot start until
621     receipt of the message.
622    
623     delta-seconds = 1*DIGIT
624    
625     4. HTTP Message
626    
627     4.1 Message Types
628    
629     HTTP messages consist of requests from client to server and
630     responses from server to client.
631    
632     HTTP-message = Simple-Request ; HTTP/0.9 messages
633     | Simple-Response
634     | Full-Request ; HTTP/1.0 messages
635     | Full-Response
636    
637     Full-Request and Full-Response use the generic message format of
638     RFC 822 [8] for transferring entities. Both messages may include
639     optional header fields (a.k.a. "headers") and an entity body. The
640     entity body is separated from the headers by a null line (i.e., a
641     line with nothing preceding the CRLF).
642    
643     Full-Request = Request-Line ; Section 5.1
644     *( General-Header ; Section 4.3
645     | Request-Header ; Section 5.4
646     | Entity-Header ) ; Section 7.1
647     CRLF
648     [ Entity-Body ] ; Section 7.2
649    
650     Full-Response = Status-Line ; Section 6.1
651     *( General-Header ; Section 4.3
652     | Response-Header ; Section 6.3
653     | Entity-Header ) ; Section 7.1
654     CRLF
655     [ Entity-Body ] ; Section 7.2
656    
657     Simple-Request and Simple-Response do not allow the use of any
658     header information and are limited to a single request method (GET).
659    
660     Simple-Request = "GET" SP Request-URI CRLF
661    
662     Simple-Response = [ Entity-Body ]
663    
664     Use of the Simple-Request format is discouraged because it prevents
665     the client from using content negotiation and the server from
666     identifying the media type of the returned entity.
667    
668     4.2 Message Headers
669    
670     HTTP header fields, which include General-Header (Section 4.3),
671     Request-Header (Section 5.4), Response-Header (Section 6.3), and
672     Entity-Header (Section 7.1) fields, follow the same generic format
673     as that given in Section 3.1 of RFC 822 [8]. Each header field
674     consists of a name followed by a colon (":") and the field value.
675     The field value may be preceded by any amount of LWS, though a
676     single SP is preferred. Header fields can be extended over multiple
677     lines by preceding each extra line with at least one LWS.
678    
679     HTTP-header = field-name ":" [ field-value ] CRLF
680    
681     field-name = 1*<any CHAR, excluding CTLs, SP, and ":">
682     field-value = *( field-content | comment | LWS )
683    
684     field-content = <the OCTETs making up the field-value
685     and consisting of either *text or combinations
686     of token, tspecials, and quoted-string>
687    
688     The order in which header fields are received is not significant.
689     However, it is considered "good practice" to send General-Header
690     fields first, followed by Request-Header or Response-Header fields
691     prior to the Entity-Header fields. Comments can be included in HTTP
692     header fields by surrounding the comment text with parentheses.
693    
694     comment = "(" *( ctext | comment ) ")"
695     ctext = <any text excluding "(" and ")">
696    
697     Note: Use of comments within HTTP headers is generally
698     discouraged, since they are rarely seen by human eyes and
699     hence only increase network traffic. However, they may be
700     useful for messages posted or retrieved via NNTP and SMTP
701     gateways.
702    
703     4.3 General Message Header Fields
704    
705     There are a few header fields which have general applicability for
706     both request and response messages, but which do not apply to the
707     communicating parties or the entity being transferred. Although
708     none of the General-Header fields are required, they are all
709     strongly recommended where their use is appropriate, and should be
710     understood by all future HTTP/1.0 clients and servers. These
711     headers apply only to the message being transmitted.
712    
713     General-Header = Date
714     | Forwarded
715     | Message-ID
716     | MIME-Version
717     | extension-header
718    
719     Although additional general header fields may be implemented via
720     the extension mechanism, applications which do not recognize those
721     fields should treat them as Entity-Header fields.
722    
723     4.3.1 Date
724    
725     The Date header represents the date and time at which the message
726     was originated, having the same semantics as orig-date in RFC
727     822. The field value is an HTTP-date, as described in Section 3.3.
728    
729     Date = "Date" ":" HTTP-date
730    
731     An example is
732    
733     Date: Tue, 15 Nov 1994 08:12:31 GMT
734    
735     If a message is received via direct connection with the user agent
736     (in the case of requests) or the origin server (in the case of
737     responses), then the default date can be assumed to be the current
738     date at the receiving end. However, since the date--as it is
739     believed by the origin--is important for evaluating cached
740     responses, origin servers should always include a Date header.
741     Clients should only send a Date header field in messages that
742     include an entity body, as in the case of the PUT and POST
743     requests, and even then it is optional. A received message which
744     does not have a Date header field should be assigned one by the
745     receiver if and only if the message will be cached by that receiver
746     or gatewayed via a protocol which requires a Date.
747    
748     Only one Date header field is allowed per message. In theory, the
749     date should represent the moment just before the status/request-
750     line is generated (i.e. the time at which the originator made the
751     determination of what the request/response should be). In practice,
752     the date can be generated at any time during the message
753     origination without affecting its semantic value.
754    
755     Note: An earlier version of this document incorrectly
756     specified that this field should contain the creation date
757     of the enclosed Entity-Body. This has been changed to
758     reflect actual (and proper) usage.
759    
760     4.3.2 Forwarded
761    
762     The Forwarded header is to be used by proxies to indicate the
763     intermediate steps between the user agent and the server (on
764     requests) and between the origin server and the client (on
765     responses). It is analogous to the "Received" field of RFC 822 and
766     is intended to be used for tracing transport problems and avoiding
767     request loops.
768    
769     Forwarded = "Forwarded" ":" "by" URI [ "(" product ")" ]
770     [ "for" FQDN ]
771    
772     FQDN = <Fully-Qualified Domain Name>
773    
774     For example, a message could be sent from a client on
775     ptsun00.cern.ch to a server at www.ics.uci.edu port 80, via an
776     intermediate HTTP proxy at info.cern.ch port 8000. The request
777     received by the server at www.ics.uci.edu would then have the
778     following Forwarded header field:
779    
780     Forwarded: by http://info.cern.ch:8000/ for ptsun00.cern.ch
781    
782     Multiple Forwarded header fields are allowed and should represent
783     each proxy that has forwarded the message. It is strongly
784     recommended that proxies used as a portal through a network
785     firewall do not, by default, send out information about the
786     internal hosts within the firewall region. This information should
787     only be propagated if explicitly enabled. If not enabled, the for
788     token and FQDN should not be included in the field value.
789    
790     4.3.3 Message-ID
791    
792     The Message-ID field in HTTP is identical to that used by Internet
793     Mail and USENET messages, as defined in [11]. That is, it gives the
794     message a single, unique identifier which can be used for
795     identifying the message (not its contents) for "much longer" than
796     the expected lifetime of that message.
797    
798     Message-ID = "Message-ID" ":" "<" addr-spec ">"
799     addr-spec = <as defined in RFC 822 [8]>
800    
801     Although it is not required, the addr-spec format typically used
802     within a Message-ID consists of a string that is unique at the
803     originator's machine, followed by the required "@" character and
804     the fully-qualified domain name of that machine. An example is
805    
806     Message-ID: <9411151630.4256@info.cern.ch>
807    
808     which is composed using the time, date and process-ID on the host
809     info.cern.ch. However, this is only one of many possible methods
810     for generating a unique Message-ID and recipients of a message
811     should consider the entire value opaque.
812    
813     The Message-ID field is normally not generated by HTTP applications
814     and is never required. It should only be generated by a gateway
815     application when the message is being posted to some other protocol
816     that desires a Message-ID. HTTP responses should only include a
817     Message-ID header field when the entity being transferred already
818     has one assigned to it (as in the case of resources that were
819     originally posted via Internet Mail or USENET).
820    
821     4.3.4 MIME-Version
822    
823     HTTP is not a MIME-conformant protocol. However, HTTP/1.0 messages
824     may include a single MIME-Version header field to indicate what
825     version of the MIME protocol was used to construct the message. Use
826     of the MIME-Version header field should indicate that the message
827     is in full compliance with the MIME protocol (as defined in [6]).
828     Unfortunately, current versions of HTTP/1.0 clients and servers use
829     this field indiscriminately, and thus receivers must not take it
830     for granted that the message is indeed in full compliance with
831     MIME. Gateways are responsible for ensuring this compliance (where
832     possible) when exporting HTTP messages to strict MIME environments.
833     Future HTTP/1.0 applications must only use MIME-Version when the
834     message is intended to be MIME-conformant.
835    
836     MIME-Version = "MIME-Version" ":" 1*DIGIT "." 1*DIGIT
837    
838     MIME version "1.0" is the default for use in HTTP/1.0. However,
839     HTTP/1.0 message parsing and semantics are defined by this document
840     and not the MIME specification.
841    
842     5. Request
843    
844     A request message from a client to a server includes, within the
845     first line of that message, the method to be applied to the
846     resource requested, the identifier of the resource, and the
847     protocol version in use. For backwards compatibility with the more
848     limited HTTP/0.9 protocol, there are two valid formats for an HTTP
849     request:
850    
851     Request = Simple-Request | Full-Request
852    
853     Simple-Request = "GET" SP Request-URI CRLF
854    
855     Full-Request = Request-Line ; Section 5.1
856     *( General-Header ; Section 4.3
857     | Request-Header ; Section 5.4
858     | Entity-Header ) ; Section 7.1
859     CRLF
860     [ Entity-Body ] ; Section 7.2
861    
862     If an HTTP/1.0 server receives a Simple-Request, it must respond
863     with an HTTP/0.9 Simple-Response. An HTTP/1.0 client capable of
864     receiving a Full-Response should never generate a Simple-Request.
865    
866     5.1 Request-Line
867    
868     The Request-Line begins with a method token, followed by the
869     Request-URI and the protocol version, and ending with CRLF. The
870     elements are separated by SP characters. No CR or LF are allowed
871     except in the final CRLF sequence.
872    
873     Request-Line = Method SP Request-URI SP HTTP-Version CRLF
874    
875     Note that the difference between a Simple-Request and the Request-
876     Line of a Full-Request is the presence of the HTTP-Version field.
877    
878     5.2 Method
879    
880     The Method token indicates the method to be performed on the
881     resource identified by the Request-URI. The method is case-
882     sensitive and extensible.
883    
884     Method = "GET" | "HEAD" | "PUT" | "POST"
885     | "DELETE" | "LINK" | "UNLINK"
886     | extension-method
887    
888     extension-method = token
889    
890     The list of methods acceptable by a specific resource can be
891     specified in an "Allow" Entity-Header (Section 7.1.1). However, the
892     client is always notified through the return code of the response
893     whether a method is currently allowed on a specific resource, as
894     this can change dynamically. Servers should return the status code
895     "405 Method Not Allowed" if the method is known by the server but
896     not allowed for the requested resource, and "501 Not Implemented"
897     if the method is unknown or not implemented by the server.
898    
899     The set of common methods for HTTP/1.0 is described below. Although
900     this set can be easily expanded, additional methods cannot be
901     assumed to share the same semantics for separately extended clients
902     and servers. In order to maintain compatibility, the semantic
903     definition for extension methods should be registered with the
904     IANA [17].
905    
906     5.2.1 GET
907    
908     The GET method means retrieve whatever information (in the form of
909     an entity) is identified by the Request-URI. If the Request-URI
910     refers to a data-producing process, it is the produced data which
911     shall be returned as the entity in the response and not the source
912     text of the process (unless that text happens to be the output of
913     the process).
914    
915     The semantics of the GET method changes to a "conditional GET" if
916     the request message includes an If-Modified-Since header field. A
917     conditional GET method requests that the identified resource be
918     transferred only if it has been modified since the date given by
919     the If-Modified-Since header. The algorithm for determining this
920     includes the following cases:
921    
922     a) If the request would normally result in anything other than
923     a "200 OK" status, or if the passed If-Modified-Since date
924     is invalid, the response is exactly the same as for a
925     normal GET.
926    
927     b) If the resource has been modified since the If-Modified-
928     Since date, the response is exactly the same as for a
929     normal GET.
930    
931     c) If the resource has not been modified since the If-Modified-
932     Since date, the server shall return a "304 Not Modified"
933     response.
934    
935     The conditional GET method is intended to reduce network usage by
936     allowing cached entities to be refreshed without requiring multiple
937     requests or transferring unnecessary data.
938    
939     5.2.2 HEAD
940    
941     The HEAD method is identical to GET except that the server must not
942     return any Entity-Body in the response. The metainformation
943     contained in the HTTP headers in response to a HEAD request should
944     be identical to the information sent in response to a GET request.
945     This method can be used for obtaining metainformation about the
946     resource identified by the Request-URI without transferring the
947     Entity-Body itself. This method is often used for testing hypertext
948     links for validity, accessibility, and recent modification.
949    
950     There is no "conditional HEAD" requests analogous to the
951     conditional GET. If an If-Modified-Since header field is included
952     with a HEAD request, it should be ignored.
953    
954     5.2.3 POST
955    
956     The POST method is used to request that the destination server
957     accept the entity enclosed in the request as a new subordinate of
958     the resource identified by the Request-URI in the Request-Line.
959     POST is designed to allow a uniform method to cover the following
960     functions:
961    
962     o Annotation of existing resources;
963    
964     o Posting a message to a bulletin board, newsgroup, mailing list,
965     or similar group of articles;
966    
967     o Providing a block of data (usually a form) to a data-handling
968     process;
969    
970     o Extending a database through an append operation.
971    
972     The actual function performed by the POST method is determined by
973     the server and is usually dependent on the Request-URI. The posted
974     entity is considered to be subordinate to that URI in the same way
975     that a file is subordinate to a directory containing it, a news
976     article is subordinate to a newsgroup to which it is posted, or a
977     record is subordinate to a database.
978    
979     The client can suggest a URI for identifying the new resource by
980     including a URI-header field in the request. However, the server
981     should treat that URI as advisory only and may store the entity
982     under a different URI or without any URI.
983    
984     The client may apply relationships between the new resource and
985     other existing resources by including Link header fields, as
986     described in Section 7.1.10. The server may use the Link
987     information to perform other operations as a result of the new
988     resource being added. For example, lists and indexes might be
989     updated. However, no mandatory operation is imposed on the origin
990     server. The origin server may also generate its own or additional
991     links to other resources.
992    
993     A successful POST does not require that the entity be created as a
994     resource on the origin server or made accessible for future
995     reference. That is, the action performed by the POST method might
996     not result in a resource that can be identified by a URI. In this
997     case, either "200 OK" or "204 No Content" is the appropriate
998     response status, depending on whether or not the response includes
999     an entity that describes the result.
1000    
1001     If a resource has been created on the origin server, the response
1002     should be "201 Created" and contain the allocated URI, all
1003     applicable Link header fields, and an entity (preferably of type
1004     "text/html") which describes the status of the request and refers
1005     to the new resource.
1006    
1007     5.2.4 PUT
1008    
1009     The PUT method requests that the enclosed entity be stored under
1010     the supplied Request-URI. If the Request-URI refers to an already
1011     existing resource, the enclosed entity should be considered a
1012     modified version of the one residing on the origin server. If the
1013     Request-URI does not point to an existing resource, and that URI is
1014     capable of being defined as a new resource by the requesting user
1015     agent, the origin server can create the resource with that URI. If
1016     a new resource is created, the origin server must inform the user
1017     agent via the "201 Created" response. If an existing resource is
1018     modified, the "200 OK" response should be sent to indicate
1019     successful completion of the request. If the resource could not be
1020     created or modified with the Request-URI, an appropriate error
1021     response should be given that reflects the nature of the problem.
1022    
1023     The fundamental difference between the POST and PUT requests is
1024     reflected in the different meaning of the Request-URI. The URI in a
1025     POST request identifies the resource that will handle the enclosed
1026     entity as an appendage. That resource may be a data-accepting
1027     process, a gateway to some other protocol, or a separate entity
1028     that accepts annotations. In contrast, the URI in a PUT request
1029     identifies the entity enclosed with the request. The requestor of a
1030     PUT knows what URI is intended and the receiver must not attempt to
1031     apply the request to some other resource. If the receiver desires
1032     that the request be applied to a different URI, it must send a
1033     "301 Moved Permanently" response; the requestor may then make its
1034     own decision regarding whether or not to redirect the request.
1035    
1036     The client can create or modify relationships between the enclosed
1037     entity and other existing resources by including Link header
1038     fields, as described in Section 7.1.10. As with POST, the server
1039     may use the Link information to perform other operations as a
1040     result of the request. However, no mandatory operation is imposed
1041     on the origin server. The origin server may generate its own or
1042     additional links to other resources.
1043    
1044     The actual method for determining how the resource is placed, and
1045     what happens to its predecessor, is defined entirely by the origin
1046     server. If version control is implemented by the origin server, the
1047     Version and Derived-From header fields should be used to help
1048     identify and control revisions to a resource.
1049    
1050     5.2.5 DELETE
1051    
1052     The DELETE method requests that the origin server delete the
1053     resource identified by the Request-URI. This method may be
1054     overridden by human intervention (or other means) on the origin
1055     server. The client cannot be guaranteed that the operation has been
1056     carried out, even if the status code returned from the origin
1057     server indicates that the action has been completed successfully.
1058     However, the server should not indicate success unless, at the time
1059     the response is given, it intends to delete the resource or move it
1060     to an inaccessible location.
1061    
1062     A successful response should be "200 OK" (if the response includes
1063     an entity describing the status), "202 Accepted" (if the action has
1064     not yet been enacted), or "204 No Content" (if the response is OK
1065     but does not include an entity).
1066    
1067     5.2.6 LINK
1068    
1069     The LINK method establishes one or more Link relationships between
1070     the existing resource identified by the Request-URI and other
1071     existing resources. The difference between LINK and other methods
1072     allowing links to be established between resources is that the LINK
1073     method does not allow any Entity-Body to be sent in the request and
1074     does not result in the creation of new resources.
1075    
1076     5.2.7 UNLINK
1077    
1078     The UNLINK method removes one or more Link relationships from the
1079     existing resource identified by the Request-URI. These
1080     relationships may have been established using the LINK method or by
1081     any other method supporting the Link header. The removal of a link
1082     to a resource does not imply that the resource ceases to exist or
1083     becomes inaccessible for future references.
1084    
1085     5.3 Request-URI
1086    
1087     The Request-URI is a Universal Resource Identifier (Section 3.2)
1088     and identifies the resource upon which to apply the request.
1089    
1090     Request-URI = URI
1091    
1092     Unless the server is being used as a proxy, a partial URI shall be
1093     given with the assumptions of the scheme (http) and hostname:port
1094     (the server's address) being obvious. That is, if the full URI
1095     looks like
1096    
1097     http://info.cern.ch/hypertext/WWW/TheProject.html
1098    
1099     then the corresponding partial URI in the Simple-Request or
1100     Full-Request is
1101    
1102     /hypertext/WWW/TheProject.html
1103    
1104     If the client is sending the request through a proxy, the absolute
1105     form of the URI (including scheme and server address) must be used.
1106     A proxy must be able to recognize all of its server names,
1107     including any aliases, local variations, and the numeric IP address.
1108    
1109     5.4 Request Header Fields
1110    
1111     The request header fields allow the client to pass additional
1112     information about the request (and about the client itself) to the
1113     server. All header fields are optional and conform to the generic
1114     HTTP-header syntax.
1115    
1116     Request-Header = Accept
1117     | Accept-Charset
1118     | Accept-Encoding
1119     | Accept-Language
1120     | Authorization
1121     | From
1122     | If-Modified-Since
1123     | Pragma
1124     | Referer
1125     | User-Agent
1126     | extension-header
1127    
1128     Although additional request header fields may be implemented via
1129     the extension mechanism, applications which do not recognize those
1130     fields should treat them as Entity-Header fields.
1131    
1132     5.4.1 Accept
1133    
1134     The Accept header field can be used to indicate a list of media
1135     ranges which are acceptable as a response to the request. The
1136     asterisk "*" character is used to group media types into ranges,
1137     with "*/*" indicating all media types and "type/*" indicating all
1138     subtypes of that type. The set of ranges given by the client should
1139     represent what types are acceptable given the context of the
1140     request. The Accept field should only be used when the request is
1141     specifically limited to a set of desired types (as in the case of a
1142     request for an in-line image), to indicate qualitative preferences
1143     for specific media types, or to indicate acceptance of unusual
1144     media types.
1145    
1146     The field may be folded onto several lines and more than one
1147     occurrence of the field is allowed (with the semantics being the
1148     same as if all the entries had been in one field value).
1149    
1150     Accept = "Accept" ":" 1#(
1151     media-range
1152     [ ";" "q" "=" ( "0" | "1" | float ) ]
1153     [ ";" "mxb" "=" 1*DIGIT ] )
1154    
1155     media-range = ( "*/*"
1156     | ( type "/" "*" )
1157     | ( type "/" subtype )
1158     ) *( ";" parameter )
1159    
1160     float = < ANSI-C floating point text representation,
1161     where (0.0 < float < 1.0) >
1162    
1163     The parameter q is used to indicate the quality factor, which
1164     represents the user's preference for that range of media types, and
1165     the parameter mxb gives the maximum acceptable size of the Entity-
1166     Body (in decimal number of octets) for that range of media types.
1167     Section 9 describes the content negotiation algorithm which makes
1168     use of these values. If at least one Accept header is present, a
1169     quality factor of 0 is equivalent to not sending an Accept header
1170     field containing that media-type or set of media-types. The default
1171     values are: q=1 and mxb=undefined (i.e. infinity).
1172    
1173     The example
1174    
1175     Accept: audio/*; q=0.2, audio/basic
1176    
1177     should verbally be interpreted as "if you have audio/basic, send
1178     it; otherwise send me any audio type."
1179    
1180     If no Accept header is present, then it is assumed that the client
1181     accepts all media types with quality factor 1. This is equivalent
1182     to the client sending the following accept header field:
1183    
1184     Accept: */*; q=1
1185    
1186     or
1187    
1188     Accept: */*
1189    
1190     A more elaborate example is
1191    
1192     Accept: text/plain; q=0.5, text/html,
1193     text/x-dvi; q=0.8; mxb=100000, text/x-c
1194    
1195     Verbally, this would be interpreted as "text/html and text/x-c are
1196     the preferred media types, but if they do not exist then send the
1197     Entity-Body in text/x-dvi if the entity is less than 100000 bytes,
1198     otherwise send text/plain".
1199    
1200     Note: In earlier versions of this document, the mxs
1201     parameter defined the maximum acceptable delay in seconds
1202     before the response would arrive. This has been removed as
1203     the server has no means of obtaining a useful reference
1204     value. However, this does not prevent the client from
1205     internally measuring the response time and optimizing the
1206     Accept header field accordingly.
1207    
1208     It must be emphasized that this field should only be used when it
1209     is necessary to restrict the response media types to a subset of
1210     those possible, to indicate the acceptance of unusual media types,
1211     or when the user has been permitted to specify qualitative values
1212     for ranges of media types. If no quality factors have been set by
1213     the user, and the context of the request is such that the user
1214     agent is capable of saving the entity to a file if the received
1215     media type is unknown, then the only appropriate value for Accept
1216     is "*/*" and the list of unusual types. Whether or not a particular
1217     media type is deemed "unusual" should be a configurable aspect of
1218     the user agent.
1219    
1220     5.4.2 Accept-Charset
1221    
1222     The Accept-Charset header field can be used to indicate a list of
1223     preferred character sets other than the default US-ASCII and
1224     ISO-8859-1. This field allows clients capable of understanding more
1225     comprehensive or special-purpose character sets to signal that
1226     capability to a server which is capable of representing documents
1227     in those character sets.
1228    
1229     Accept-Charset = "Accept-Charset" ":" 1#charset
1230    
1231     Character set values are described in Section 8.3. An example is
1232    
1233     Accept-Charset: iso-8859-5, unicode-1-1
1234    
1235     The value of this field should not include "US-ASCII" or
1236     "ISO-8859-1", since those values are always assumed by default. If
1237     a resource is only available in a character set other than the
1238     defaults, and that character set is not listed in the Accept-
1239     Charset field, it is only acceptable for the server to send the
1240     entity if the character set can be identified by an appropriate
1241     charset parameter on the media type or within the format of the
1242     media type itself.
1243    
1244     Note: User agents are not required to be able to render the
1245     characters associated with the ISO-8859-1 character set.
1246     However, they must be able to interpret their meaning to
1247     whatever extent is required to properly handle messages in
1248     that character set..
1249    
1250     5.4.3 Accept-Encoding
1251    
1252     The Accept-Encoding header field is similar to Accept, but lists
1253     the encoding-mechanisms and transfer-encoding values which are
1254     acceptable in the response.
1255    
1256     Accept-Encoding = "Accept-Encoding" ":"
1257     1#( encoding-mechanism | transfer-encoding )
1258    
1259     An example of its use is
1260    
1261     Accept-Encoding: compress, base64, gzip, quoted-printable
1262    
1263     The field value should never include the identity transfer-encoding
1264     values ("7bit", "8bit", and "binary") since they actually represent
1265     "no encoding." If no Accept-Encoding field is present in a request,
1266     it must be assumed that the client does not accept any encoding-
1267     mechanism and only the identity transfer-encodings.
1268    
1269     5.4.4 Accept-Language
1270    
1271     The Accept-Language header field is similar to Accept, but lists
1272     the set of natural languages that are preferred as a response to
1273     the request.
1274    
1275     Accept-Language = "Accept-Language" ":" 1#language-tag
1276    
1277     The language-tag is described in Section 8.2. Languages are listed
1278     in the order of their preference to the user. For example,
1279    
1280     Accept-Language: dk, en-gb
1281    
1282     would mean: "Send me a Danish version if you have it; else a
1283     British English version."
1284    
1285     If the server cannot fulfill the request with one or more of the
1286     languages given, or if the languages only represent a subset of a
1287     multi-linguistic Entity-Body, it is acceptable to serve the request
1288     in an unspecified language.
1289    
1290     Note: As intelligibility is highly dependent on the
1291     individual user, it is recommended that client applications
1292     make the choice of linguistic preference available to the
1293     user.
1294    
1295     5.4.5 Authorization
1296    
1297     A user agent that wishes to authenticate itself with a server
1298     (usually, but not necessarily, after receiving a "401 Unauthorized"
1299     response), may do so by including an Authorization header field
1300     with the request. The Authorization field value consists of
1301     credentials containing the authentication information of the user
1302     agent for the realm of the resource being requested.
1303    
1304     Authorization = "Authorization" ":" credentials
1305    
1306     HTTP access authentication is described in Section 10. If a request
1307     is authenticated and a realm specified, the same credentials should
1308     be valid for all other requests within this realm.
1309    
1310     5.4.6 From
1311    
1312     The From header field, if given, should contain an Internet e-mail
1313     address for the human user who controls the requesting user agent.
1314     The address should be machine-usable, as defined by addr-spec in
1315     RFC 822:
1316    
1317     From = "From" ":" addr-spec
1318    
1319     An example is:
1320    
1321     From: webmaster@w3.org
1322    
1323     This header field may be used for logging purposes and as a means
1324     for identifying the source of invalid or unwanted requests. It
1325     should not be used as an insecure form of access protection. The
1326     interpretation of this field is that the request is being performed
1327     on behalf of the person given, who accepts responsibility for the
1328     method performed. In particular, robot agents should include this
1329     header so that the person responsible for running the robot can be
1330     contacted if problems occur on the receiving end.
1331    
1332     The Internet e-mail address in this field does not have to
1333     correspond to the Internet host which issued the request. (For
1334     example, when a request is passed through a proxy, then the
1335     original issuer's address should be used). The address should, if
1336     possible, be a valid Internet e-mail address, whether or not it is
1337     in fact an Internet e-mail address or the Internet e-mail
1338     representation of an address on some other mail system.
1339    
1340     Note: The client should not send the From header field
1341     without the user's approval, as it may conflict with the
1342     user's privacy interests or their site's security policy. It
1343     is strongly recommended that the user be able to disable,
1344     enable, and modify the value of this field at any time prior
1345     to a request.
1346    
1347     5.4.7 If-Modified-Since
1348    
1349     The If-Modified-Since header field is used with the GET method to
1350     make it conditional: if the requested resource has not been
1351     modified since the time specified in this field, a copy of the
1352     resource will not be returned from the server; instead, a "304 Not
1353     Modified" response will be returned without any Entity-Body.
1354    
1355     If-Modified-Since = "If-Modified-Since" ":" HTTP-date
1356    
1357     An example of the field is:
1358    
1359     If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
1360    
1361     The purpose of this feature is to allow efficient updates of local
1362     cache information with a minimum amount of transaction overhead.
1363     The same functionality can be obtained, though with much greater
1364     overhead, by issuing a HEAD request and following it with a GET
1365     request if the server indicates that the entity has been modified.
1366    
1367     5.4.8 Pragma
1368    
1369     The Pragma header field is used to specify directives that must be
1370     applied to all servers along the request chain (where relevant).
1371     The directives typically specify behavior that prevents
1372     intermediate proxies from changing the nature of the request.
1373     Although multiple pragma directives can be listed as part of the
1374     request, HTTP/1.0 only defines semantics for the
1375     "no-cache" directive.
1376    
1377     Pragma = "Pragma" ":" 1#pragma-directive
1378    
1379     pragma-directive = "no-cache" | extension-pragma
1380     extension-pragma = token
1381    
1382     When the "no-cache" directive is present, a caching proxy must
1383     forward the request toward the origin server even if it has a
1384     cached copy of what is being requested. This allows a client to
1385     insist upon receiving an authoritative response to its request. It
1386     also allows a client to refresh a cached copy which has become
1387     corrupted or is known to be stale.
1388    
1389     Pragmas must be passed through by a proxy even when they have
1390     significance to that proxy. This is necessary in cases when the
1391     request has to go through many proxies, and the pragma may affect
1392     all of them. It is not possible to specify a pragma for a specific
1393     proxy; however, any pragma-directive not relevant to a gateway or
1394     proxy should be ignored.
1395    
1396     5.4.9 Referer
1397    
1398     The Referer field allows the client to specify, for the server's
1399     benefit, the address (URI) of the document (or element within the
1400     document) from which the Request-URI was obtained. This allows a
1401     server to generate lists of back-links to documents, for interest,
1402     logging, optimized caching, etc. It also allows obsolete or
1403     mistyped links to be traced for maintenance. The format of the
1404     field is:
1405    
1406     Referer = "Referer" ":" URI
1407    
1408     Example:
1409    
1410     Referer: http://info.cern.ch/hypertext/DataSources/Overview.html
1411    
1412     If a partial URI is given, it should be interpreted relative to the
1413     Request-URI.
1414    
1415     Note: Because the source of a link may be considered private
1416     information or may reveal an otherwise secure information
1417     source, it is strongly recommended that the user be able to
1418     select whether or not the Referer field is sent. For
1419     example, a browser client could have a toggle switch for
1420     browsing openly/anonymously, which would respectively
1421     enable/disable the sending of Referer and From information.
1422    
1423     5.4.10 User-Agent
1424    
1425     The User-Agent field contains information about the user agent
1426     originating the request. This is for statistical purposes, the
1427     tracing of protocol violations, and automated recognition of user
1428     agents for the sake of tailoring responses to avoid particular user
1429     agent limitations. Although it is not required, user agents should
1430     always include this field with requests. The field can contain
1431     multiple tokens specifying the product name, with an optional slash
1432     and version designator, and other products which form a significant
1433     part of the user agent. By convention, the products are listed in
1434     order of their significance for identifying the application.
1435    
1436     User-Agent = "User-Agent" ":" 1*( product )
1437    
1438     product = token ["/" product-version]
1439     product-version = token
1440    
1441     Example:
1442    
1443     User-Agent: CERN-LineMode/2.15 libwww/2.17b3
1444    
1445     Product tokens should be short and to the point -- use of this field
1446     for advertizing or other non-essential information is explicitly
1447     deprecated and will be considered as non-conformance to the
1448     protocol. Although any token character may appear in a
1449     product-version, this token should only be used for a version
1450     identifier (i.e., successive versions of the same product should
1451     only differ in the product-version portion of the product value).
1452     The User-Agent field may include additional information within
1453     comments that are not part of the value of the field.
1454    
1455     Note: Some current proxy applications append their product
1456     information to the list in the User-Agent field. This is no
1457     longer recommended, since it makes machine interpretation of
1458     these fields ambiguous. Instead, proxies should use the
1459     Forwarded header described in Section 4.3.2.
1460    
1461     6. Response
1462    
1463     After receiving and interpreting a request message, a server
1464     responds in the form of an HTTP response message.
1465    
1466     Response = Simple-Response | Full-Response
1467    
1468     Simple-Response= [ Entity-Body ]
1469    
1470     Full-Response = Status-Line ; Section 6.1
1471     *( General-Header ; Section 4.3
1472     | Response-Header ; Section 6.3
1473     | Entity-Header ) ; Section 7.1
1474     CRLF
1475     [ Entity-Body ] ; Section 7.2
1476    
1477     A Simple-Response should only be sent in response to an HTTP/0.9
1478     Simple-Request or if the server only supports the more limited
1479     HTTP/0.9 protocol. If a client sends an HTTP/1.0 Full-Request and
1480     receives a response that does not begin with a Status-Line, it
1481     should assume that the response is a Simple-Response and parse it
1482     accordingly. Note that the Simple-Response consists only of the
1483     entity body and is terminated by the server closing the connection.
1484    
1485     6.1 Status-Line
1486    
1487     The first line of a Full-Response message is the Status-Line,
1488     consisting of the protocol version followed by a numeric status
1489     code and its associated textual phrase, with each element separated
1490     by SP characters. No CR or LF is allowed except in the final CRLF
1491     sequence.
1492    
1493     Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
1494    
1495     Since a status line always begins with the protocol version's
1496    
1497     "HTTP/" 1*DIGIT "." 1*DIGIT
1498    
1499     (e.g. "HTTP/1.0"), the presence of that expression is considered
1500     sufficient to differentiate a Full-Response from a Simple-Response.
1501     Although the Simple-Response format may allow such an expression to
1502     occur at the beginning of an entity body (and thus cause a
1503     misinterpretation of the message if it was given in response to a
1504     Full-Request), the likelihood of such an occurrence is negligible.
1505    
1506     6.2 Status Codes and Reason Phrases
1507    
1508     The Status-Code element is a 3-digit integer result code of the
1509     attempt to understand and satisfy the request. The Reason-Phrase is
1510     intended to give a short textual description of the Status-Code.
1511     The Status-Code is intended for use by automata and the Reason-
1512     Phrase is intended for the human user. The client is not required
1513     to examine or display the Reason-Phrase.
1514    
1515     The first digit of the Status-Code defines the class of response.
1516     The last two digits do not have any categorization role. There are
1517     5 values for the first digit:
1518    
1519     o 1xx: Informational - Not used, but reserved for future use
1520    
1521     o 2xx: Success - The action was successfully received,
1522     understood, and accepted.
1523    
1524     o 3xx: Redirection - Further action must be taken in order to
1525     complete the request
1526    
1527     o 4xx: Client Error - The request contains bad syntax or cannot
1528     be fulfilled
1529    
1530     o 5xx: Server Error - The server failed to fulfill an apparently
1531     valid request
1532    
1533     The individual values of the numeric status codes defined for
1534     HTTP/1.0, and an example set of corresponding Reason-Phrase's, are
1535     presented below. The reason phrases listed here are only
1536     recommended -- they may be replaced by local equivalents without
1537     affecting the protocol.
1538    
1539     Status-Code = "200" ; OK
1540     | "201" ; Created
1541     | "202" ; Accepted
1542     | "203" ; Provisional Information
1543     | "204" ; No Content
1544     | "300" ; Multiple Choices
1545     | "301" ; Moved Permanently
1546     | "302" ; Moved Temporarily
1547     | "303" ; Method
1548     | "304" ; Not Modified
1549     | "400" ; Bad Request
1550     | "401" ; Unauthorized
1551     | "402" ; Payment Required
1552     | "403" ; Forbidden
1553     | "404" ; Not Found
1554     | "405" ; Method Not Allowed
1555     | "406" ; None Acceptable
1556     | "407" ; Proxy Authentication Required
1557     | "408" ; Request Timeout
1558     | "409" ; Conflict
1559     | "410" ; Gone
1560     | "500" ; Internal Server Error
1561     | "501" ; Not Implemented
1562     | "502" ; Bad Gateway
1563     | "503" ; Service Unavailable
1564     | "504" ; Gateway Timeout
1565     | extension-code
1566    
1567     extension-code = 3DIGIT
1568    
1569     Reason-Phrase = token *( SP token )
1570    
1571     HTTP status codes are extensible and should be registered with the
1572     IANA. HTTP applications are not required to understand the meaning
1573     of all registered status codes, though such understanding is
1574     obviously desirable. However, applications are required to
1575     understand the class of any status code (as indicated by the first
1576     digit) and to treat the response as being equivalent to the x00
1577     status code of that class. For example, if an unknown status code
1578     of 421 is received by the client, it can safely assume that there
1579     was something wrong with its request and treat the response as if
1580     it had received a 400 status code. In such cases, user agents are
1581     encouraged to present the entity returned with the response to the
1582     user, since that entity is likely to include human-readable
1583     information which will explain the unusual status.
1584    
1585     Each Status-Code is described below, including a description of
1586     which method(s) it can follow and any metainformation required in
1587     the response.
1588    
1589     6.2.1 Successful 2xx
1590    
1591     This class of status codes indicates that the client's request was
1592     successfully received, understood, and accepted.
1593    
1594     200 OK
1595    
1596     o Following: any method
1597     o Required headers: none
1598    
1599     The request has been fulfilled and an entity corresponding to the
1600     requested resource is being sent in the response. If the HEAD
1601     method was used, the response should only contain the Entity-Header
1602     information and no Entity-Body.
1603    
1604     201 Created
1605    
1606     o Following: any method that may request a new resource
1607     be created
1608     o Required headers: URI-header
1609    
1610     The request has been fulfilled and resulted in a new resource being
1611     created. The newly created resource can be referenced by the URI(s)
1612     returned in the URI-header field of the response. The origin server
1613     is encouraged, but not obliged, to actually create the resource
1614     before using this Status-Code. If the action cannot be carried out
1615     immediately, or within a clearly defined timeframe, the server
1616     should respond with "202 Accepted" instead.
1617    
1618     Of the methods defined by this specification, only PUT and POST can
1619     create a resource.
1620    
1621     202 Accepted
1622    
1623     o Following: any method
1624     o Required headers: none
1625    
1626     The request has been accepted for processing, but the processing
1627     has not been completed. The request may or may not eventually be
1628     acted upon, as it may be disallowed when processing actually takes
1629     place. There is no facility for re-sending a status code from an
1630     asynchronous operation such as this.
1631    
1632     The "202 Accepted" response is intentionally non-committal. Its
1633     purpose is to allow a server to accept a request for some other
1634     process (perhaps a batch-oriented process that is only run once per
1635     day) without requiring that the user agent's connection to the
1636     server persist until the process is completed. The entity returned
1637     with this response should include an indication of the request's
1638     current status and either a pointer to a status monitor or some
1639     estimate of when the user can expect the request to be enacted.
1640    
1641     203 Provisional Information
1642    
1643     o Following: GET, HEAD
1644     o Required headers: none
1645    
1646     The returned metainformation in the Entity-Header is not the
1647     definitive set as available from the origin server, but is gathered
1648     from a local or a third-party copy. The set presented may be a
1649     subset or superset of the original version. For example, including
1650     local annotation information about the resource may result in a
1651     superset of the metainformation known by the origin server.
1652    
1653     204 No Content
1654    
1655     o Following: any method
1656     o Required headers: none
1657    
1658     The server has fulfilled the request but there is no new
1659     information to send back. If the client is a user agent, it should
1660     not change its document view. This response is primarily intended
1661     to allow input for scripts or other actions to take place without
1662     causing a change to the user agent's current document view.
1663    
1664     6.2.2 Redirection 3xx
1665    
1666     This class of status code indicates that further action needs to be
1667     taken by the client in order to fulfill the request. The action
1668     required can sometimes be carried out by the client without
1669     interaction with the user, but it is strongly recommended that this
1670     only takes place if the method used in the request is idempotent
1671     (GET or HEAD).
1672    
1673     300 Multiple Choices
1674    
1675     o Following: any method
1676     o Required headers: none
1677    
1678     The requested resource is available at one or more locations and a
1679     preferred location could not be determined via content negotiation.
1680     Unless it was a HEAD request, the response must include an entity
1681     containing a formatted list of resource characteristics and
1682     locations from which the user agent can choose the one most
1683     appropriate. The entity format is specified by the media type given
1684     in the Content-Type header field. Depending upon the format and the
1685     capabilities of the user agent, selection of the most appropriate
1686     choice may be performed automatically.
1687    
1688     301 Moved Permanently
1689    
1690     o Following: any method
1691     o Required headers: URI-header, Location
1692    
1693     The requested resource has been assigned a new permanent URI and
1694     any future references to this resource must be done using the
1695     returned URI. Clients with link editing capabilities are encouraged
1696     to automatically relink references to the Request-URI to the new
1697     reference returned by the server, where possible.
1698    
1699     It is possible for the server to send this status code in response
1700     to a request using the PUT, POST, or DELETE methods. However, as
1701     this might change the conditions under which the request was
1702     issued, the user agent must not automatically redirect the request
1703     unless it can be confirmed by the user.
1704    
1705     302 Moved Temporarily
1706    
1707     o Following: any method
1708     o Required headers: URI-header, Location
1709    
1710     The requested resource resides temporarily under a different URI.
1711     Since the redirection may be altered on occasion, the client should
1712     on future requests from the user continue to use the original
1713     Request-URI and not the URI returned in the URI-header field and
1714     Location fields.
1715    
1716     It is possible for the server to send this status code in response
1717     to a request using the PUT, POST, or DELETE methods. However, as
1718     this might change the conditions under which the request was
1719     issued, the user agent must not automatically redirect the request
1720     unless it can be confirmed by the user.
1721    
1722     303 Method
1723    
1724     This code is obsolete.
1725    
1726     304 Not Modified
1727    
1728     o Following: conditional GET
1729     o Required headers: none
1730    
1731     If the client has performed a conditional GET request and access is
1732     allowed, but the document has not been modified since the date and
1733     time specified in the If-Modified-Since field, the server shall
1734     respond with this status code and not send an Entity-Body to the
1735     client. Header fields contained in the response should only include
1736     information which is relevant to cache managers and which may have
1737     changed independently of the entity's Last-Modified date. Examples
1738     of relevant header fields include: Date, Server, and Expires.
1739    
1740     6.2.3 Client Error 4xx
1741    
1742     The 4xx class of status codes is intended for cases in which the
1743     client seems to have erred. If the client has not completed the
1744     request when a 4xx code is received, it should immediately cease
1745     sending data to the server. Except when responding to a HEAD
1746     request, the server is encouraged to include an entity containing
1747     an explanation of the error situation, and whether it is a
1748     temporary or permanent condition. These status codes are applicable
1749     to any request method.
1750    
1751     400 Bad Request
1752    
1753     The request had bad syntax or was inherently impossible to be
1754     satisfied. The client is discouraged from repeating the request
1755     without modifications.
1756    
1757     401 Unauthorized
1758    
1759     o Required headers: WWW-Authenticate
1760    
1761     The request requires user authentication. The response must include
1762     a WWW-Authenticate header field (Section 6.3.4) containing a
1763     challenge applicable to the requested resource. The client may
1764     repeat the request with a suitable Authorization header field.
1765     HTTP access authentication is explained in Section 10.
1766    
1767     402 Payment Required
1768    
1769     This code is not currently supported, but is reserved for future
1770     use.
1771    
1772     403 Forbidden
1773    
1774     The request is forbidden because of some reason that remains
1775     unknown to the client. Authorization will not help and the request
1776     should not be repeated. This status code can be used if the server
1777     does not want to make public why the request cannot be fulfilled.
1778    
1779     404 Not Found
1780    
1781     The server has not found anything matching the Request-URI. No
1782     indication is given of whether the condition is temporary or
1783     permanent. If the server does not wish to make this information
1784     available to the client, the status code "403 Forbidden" can be
1785     used instead. The "410 Gone" status code should be used if the
1786     server knows (through some internally configurable method) that an
1787     old resource is permanently unavailable and has no forwarding
1788     address.
1789    
1790     405 Method Not Allowed
1791    
1792     o Required headers: Allow
1793    
1794     The method specified in the Request-Line is not allowed for the
1795     resource identified by the Request-URI. The response must include
1796     an Allow header containing a list of valid method's for the
1797     requested resource.
1798    
1799     406 None Acceptable
1800    
1801     o Required headers: Content-*, where applicable to the Request-URI
1802    
1803     The server has found a resource matching the Request-URI, but not
1804     one that satisfies the conditions identified by the Accept and
1805     Accept-Encoding request headers. The response must include (when
1806     applicable) the Content-Type, Content-Encoding, and Content-
1807     Language of the resource, and is encouraged to include the
1808     resource's complete metainformation. No Entity-Body can be included
1809     in the response.
1810    
1811     407 Proxy Authentication Required
1812    
1813     This code is reserved for future use. It is similar to
1814     "401 Unauthorized", but indicates that the client must first
1815     authenticate itself with the proxy. HTTP/1.0 does not provide a
1816     means for proxy authentication -- this feature will be available in
1817     future versions.
1818    
1819     408 Request Timeout
1820    
1821     The client did not produce a request within the time that the
1822     server was prepared to wait. The client may repeat the request
1823     without modifications at any later time.
1824    
1825     409 Conflict
1826    
1827     The request could not be completed due to a conflict with the
1828     current state of the resource. This code is only allowed in
1829     situations where it is expected that the user may be able to
1830     resolve the conflict and resubmit the request. The response body
1831     should include enough information for the user to recognize the
1832     source of the conflict. Ideally, the response entity would include
1833     enough information for the user (or user-agent) to fix the problem;
1834     however, that may not be possible and is not required.
1835    
1836     Conflicts are most likely to occur in response to a PUT request. If
1837     versioning is being used and the entity being PUT includes changes
1838     to a resource which conflict with those made by an earlier (third-
1839     party) request, the server may use the "409 Conflict" response to
1840     indicate that it can't complete the PUT. In this case, the response
1841     entity may contain a list of the differences between the two
1842     versions.
1843    
1844     410 Gone
1845    
1846     The requested resource is no longer available at the server and no
1847     forwarding address is known. This condition should be considered
1848     permanent. Clients with link editing capabilities are encouraged to
1849     delete references to the Request-URI (after user approval). If the
1850     server does not know (or has no facility to determine) whether or
1851     not the condition is permanent, the status code "404 Not Found" can
1852     be used instead.
1853    
1854     The "410 Gone" response is primarily intended to assist the task of
1855     web maintenance by notifying the recipient that the resource is
1856     intentionally unavailable and that the server owners desire that
1857     remote links to that resource be removed. Such an event is common
1858     for limited-time, promotional services and for resources belonging
1859     to individuals no longer working at the server's site. It is not
1860     necessary to mark all permanently unavailable resources as "gone"
1861     or to keep the mark for any length of time -- that is left to the
1862     discretion of the server owner.
1863    
1864     6.2.4 Server Errors 5xx
1865    
1866     Response status codes beginning with the digit "5" indicate cases
1867     in which the server is aware that it has erred or is incapable of
1868     performing the request. If the client has not completed the request
1869     when a 5xx code is received, it should immediately cease sending
1870     data to the server. Except when responding to a HEAD request, the
1871     server is encouraged to include an entity containing an explanation
1872     of the error situation, and whether it is a temporary or permanent
1873     condition. These response codes are applicable to any request
1874     method and there are no required header fields.
1875    
1876     500 Internal Server Error
1877    
1878     The server encountered an unexpected condition which prevented it
1879     from fulfilling the request.
1880    
1881     501 Not Implemented
1882    
1883     The server does not support the functionality required to fulfill
1884     the request. This is the appropriate response when the server does
1885     not recognize the request method and is not capable of supporting
1886     it for any resource.
1887    
1888     502 Bad Gateway
1889    
1890     The server received an invalid response from the gateway or
1891     upstream server it accessed in attempting to complete the request.
1892    
1893     503 Service Unavailable
1894    
1895     The server is currently unable to handle the request due to a
1896     temporary overloading or maintenance of the server. The implication
1897     is that this is a temporary condition which will be alleviated
1898     after some delay. If known, the length of the delay may be
1899     indicated in a Retry-After header. If no Retry-After is given, the
1900     client should handle the response as it would a "500 Internal
1901     Server Error".
1902    
1903     Note: The presence of the 503 status code does not imply
1904     that a server must use it when becoming overloaded. Some
1905     servers may wish to simply refuse the connection.
1906    
1907     504 Gateway Timeout
1908    
1909     The server did not receive a timely response from the gateway or
1910     upstream server it accessed in attempting to complete the request.
1911    
1912     6.3 Response Header Fields
1913    
1914     The response header fields allow the server to pass additional
1915     information about the response which cannot be placed in the Status-
1916     Line. These header fields are not intended to give information
1917     about an Entity-Body returned in the response, but about the server
1918     itself.
1919    
1920     Response-Header= Public
1921     | Retry-After
1922     | Server
1923     | WWW-Authenticate
1924     | extension-header
1925    
1926     Although additional response header fields may be implemented via
1927     the extension mechanism, applications which do not recognize those
1928     fields should treat them as Entity-Header fields.
1929    
1930     6.3.1 Public
1931    
1932     The Public header field lists the set of non-standard methods
1933     supported by the server. The purpose of this field is strictly to
1934     inform the recipient of the capabilities of the server regarding
1935     unusual methods. The methods listed may or may not be applicable to
1936     the Request-URI; the Allow header field (Section 7.1.1) should be
1937     used to indicate methods allowed for a particular URI. This does
1938     not prevent a client from trying other methods. The field value
1939     should not include the methods predefined for HTTP/1.0 in Section
1940     5.2.
1941    
1942     Public = "Public" ":" 1#method
1943    
1944     Example of use:
1945    
1946     Public: OPTIONS, MGET, MHEAD
1947    
1948     This header field applies only to the current connection. If the
1949     response passes through a proxy, the proxy must either remove the
1950     Public header field or replace it with one applicable to its own
1951     capabilities.
1952    
1953     6.3.2 Retry-After
1954    
1955     The Retry-After header field can be used with "503 Service
1956     Unavailable" to indicate how long the service is expected to be
1957     unavailable to the requesting client. The value of this field can
1958     be either an full HTTP-date or an integer number of seconds (in
1959     decimal) after the time of the response.
1960    
1961     Retry-After = "Retry-After" ":" ( HTTP-date | delta-seconds )
1962    
1963     Two examples of its use are
1964    
1965     Retry-After: Wed, 14 Dec 1994 18:22:54 GMT
1966    
1967     Retry-After: 120
1968    
1969     In the latter example, the delay is 2 minutes.
1970    
1971     6.3.3 Server
1972    
1973     The Server header field contains information about the software
1974     being used by the origin server program handling the request. The
1975     field is analogous to the User-Agent field and has the following
1976     format:
1977    
1978     Server = "Server" ":" 1*( product )
1979    
1980     Example:
1981    
1982     Server: CERN/3.0 libwww/2.17
1983    
1984     If the response is being forwarded through a proxy, the proxy
1985     application must not add its data to the product list. Instead, it
1986     should include a Forwarded field, as described in Section 4.3.2.
1987    
1988     6.3.4 WWW-Authenticate
1989    
1990     The WWW-Authenticate header field must be included as part of a
1991     "401 Unauthorized" response. The field value consists of a
1992     challenge that indicates the authentication scheme and parameters
1993     applicable to the Request-URI.
1994    
1995     WWW-Authenticate = "WWW-Authenticate" ":" challenge
1996    
1997     The HTTP access authentication process is described in Section 10.
1998    
1999     7. Entity
2000    
2001     Full-Request and Full-Response messages may transfer an entity
2002     within some requests and responses. An entity consists of Entity-
2003     Header fields and (usually) an Entity-Body. In this section, both
2004     sender and recipient refer to either the client or the server,
2005     depending on who sends and who receives the entity.
2006    
2007     7.1 Entity Header Fields
2008    
2009     This section specifies the format and semantics of the Entity-
2010     Header fields. Entity-Header fields define optional metainformation
2011     about the Entity-Body or, if no body is present, about the resource
2012     identified by the request.
2013    
2014     Entity-Header = Allow
2015     | Content-Encoding
2016     | Content-Language
2017     | Content-Length
2018     | Content-Transfer-Encoding
2019     | Content-Type
2020     | Derived-From
2021     | Expires
2022     | Last-Modified
2023     | Link
2024     | Location
2025     | Title
2026     | URI-header
2027     | Version
2028     | extension-header
2029    
2030     extension-header = HTTP-header
2031    
2032     Each entity header field is explained in the subsections below.
2033     Other header fields are allowed but cannot be assumed to be
2034     recognizable by the recipient. Unknown header fields should be
2035     ignored by the recipient and forwarded by proxies.
2036    
2037     Note: It has been proposed that any HTML metainformation
2038     element (allowed within the <HEAD> element of a document) be
2039     a valid candidate for an HTTP entity header. This document
2040     defines two header fields, Link and Title, which are both
2041     examples of this. Base will be used in future versions of
2042     HTTP.
2043    
2044     7.1.1 Allow
2045    
2046     The Allow header field lists the set of methods supported by the
2047     resource identified by the Request-URI. The purpose of this field
2048     is strictly to inform the recipient of valid methods associated
2049     with the resource; it must be present in a response with status
2050     code "405 Method Not Allowed".
2051    
2052     Allow = "Allow" ":" 1#method
2053    
2054     Example of use:
2055    
2056     Allow: GET, HEAD, PUT
2057    
2058     This does not prevent a client from trying other methods. However,
2059     it is recommended that the indications given by this field be
2060     followed. This field has no default value; if left undefined, the
2061     set of allowed methods is defined by the origin server at the time
2062     of each request.
2063    
2064     If a response passes through a proxy which does not understand one
2065     or more of the methods indicated in the Allow header, the proxy
2066     must not modify the Allow header; the user agent may have other
2067     means of communicating with the origin server.
2068    
2069     7.1.2 Content-Encoding
2070    
2071     The Content-Encoding header field is used as a modifier to the
2072     media-type. When present, its value indicates what additional
2073     encoding mechanism has been applied to the resource, and thus what
2074     decoding mechanism must be applied in order to obtain the media-
2075     type referenced by the Content-Type header field. The Content-
2076     Encoding is primarily used to allow a document to be compressed
2077     without losing the identity of its underlying media type.
2078    
2079     Content-Encoding = "Content-Encoding" ":" encoding-mechanism
2080    
2081     Encoding mechanisms are defined in Section 8.4. An example of its
2082     use is
2083    
2084     Content-Encoding: gzip
2085    
2086     The Content-Encoding is a characteristic of the resource identified
2087     by the Request-URI. Typically, the resource is stored with this
2088     encoding and is only decoded before rendering or analogous usage.
2089    
2090     7.1.3 Content-Language
2091    
2092     The Content-Language field describes the natural language(s) of the
2093     intended audience for the enclosed entity. Note that this may not
2094     be equivalent to all the languages used within the entity.
2095    
2096     Content-Language = "Content-Language" ":" 1#language-tag
2097    
2098     Language tags are defined in Section 8.2. The primary purpose of
2099     Content-Language is to allow a selective consumer to identify and
2100     differentiate resources according to the consumer's own preferred
2101     language. Thus, if the body content is intended only for a Danish
2102     audience, the appropriate field is
2103    
2104     Content-Language: dk
2105    
2106     If no Content-Language is specified, the default is that the
2107     content is intended for all language audiences. This may mean that
2108     the sender does not consider it to be specific to any natural
2109     language, or that the sender does not know for which language it is
2110     intended.
2111    
2112     Multiple languages may be listed for content that is intended for
2113     multiple audiences. For example, a rendition of the "Treaty of
2114     Waitangi," presented simultaneously in the original Maori and
2115     English versions, would call for
2116    
2117     Content-Language: mi, en
2118    
2119     However, just because multiple languages are present within an
2120     entity does not mean that it is intended for multiple linguistic
2121     audiences. An example would be a beginner's language primer, such
2122     as "A First Lesson in Latin," which is clearly intended to be used
2123     by an English audience. In this case, the Content-Language should
2124     only include "en".
2125    
2126     Content-Language may be applied to any media type -- it should not
2127     be considered limited to textual documents.
2128    
2129     7.1.4 Content-Length
2130    
2131     The Content-Length header field indicates the size of the Entity-
2132     Body (in decimal number of octets) sent to the recipient or, in the
2133     case of the HEAD method, the size of the Entity-Body that would
2134     have been sent had the request been a GET.
2135    
2136     Content-Length = "Content-Length" ":" 1*DIGIT
2137    
2138     An example is
2139    
2140     Content-Length: 3495
2141    
2142     Although it is not required, applications are strongly encouraged
2143     to use this field to indicate the size of the Entity-Body to be
2144     transferred, regardless of the media type of the entity.
2145    
2146     Any Content-Length greater than or equal to zero is a valid value.
2147     Section 7.2.2 describes how to determine the length of an Entity-
2148     Body if a Content-Length is not given.
2149    
2150     Note: The meaning of this field is significantly different
2151     from the corresponding definition in MIME, where it is an
2152     optional field used within the "message/external-body"
2153     content-type. In HTTP, it should be used whenever the
2154     entity's length can be determined prior to being transferred.
2155    
2156     7.1.5 Content-Transfer-Encoding
2157    
2158     The Content-Transfer-Encoding (CTE) header indicates what (if any)
2159     type of transformation has been applied to the entity in order to
2160     safely transfer it between the sender and the recipient. This
2161     differs from the Content-Encoding in that the CTE is a property of
2162     the message, not of the original resource.
2163    
2164     Content-Transfer-Encoding
2165     = "Content-Transfer-Encoding" ":" transfer-encoding
2166    
2167     Transfer encodings are defined in Section 8.5. Because all HTTP
2168     transactions take place on an 8-bit clean connection, the default
2169     Content-Transfer-Encoding for all messages is binary. However, HTTP
2170     may be used to transfer MIME messages which already have a defined
2171     CTE. An example is:
2172    
2173     Content-Transfer-Encoding: quoted-printable
2174    
2175     Many older HTTP/1.0 applications do not understand the Content-
2176     Transfer-Encoding header. However, since it may appear in any MIME
2177     message (i.e. entities retrieved via a gateway to a MIME-conformant
2178     protocol), future HTTP/1.0 applications are required to understand
2179     it upon receipt. Gateways are the only HTTP applications that would
2180     generate a CTE.
2181    
2182     7.1.6 Content-Type
2183    
2184     The Content-Type header field indicates the media type of the
2185     Entity-Body sent to the recipient or, in the case of the HEAD
2186     method, the media type that would have been sent had the request
2187     been a GET.
2188    
2189     Content-Type = "Content-Type" ":" media-type
2190    
2191     Media types are defined in Section 8.1. An example of the field is
2192    
2193     Content-Type: text/html; charset=ISO-8859-4
2194    
2195     The Content-Type header field has no default value. Further
2196     discussion of methods for identifying the media type of an entity
2197     is provided in Section 7.2.1.
2198    
2199     7.1.7 Derived-From
2200    
2201     The Derived-From header field can be used to indicate the version
2202     tag of the resource from which the enclosed entity was derived
2203     before modifications were made by the sender. This field is used to
2204     help manage the process of merging successive changes to a
2205     resource, particularly when such changes are being made in parallel
2206     and from multiple sources.
2207    
2208     Derived-From = "Derived-From" ":" version-tag
2209    
2210     An example use of the field is:
2211    
2212     Derived-From: 2.1.1
2213    
2214     A longer example of version control is included in Appendix C. The
2215     Derived-From field is required for PUT requests if the entity being
2216     put was previously retrieved from the same URI and a Version header
2217     was included with the entity when it was last retrieved.
2218    
2219     7.1.8 Expires
2220    
2221     The Expires field gives the date/time after which the entity should
2222     be considered stale. This allows information providers to suggest
2223     the volatility of the resource. Caching clients (including proxies)
2224     must not cache this copy of the resource beyond the date given,
2225     unless its status has been updated by a later check of the origin
2226     server. The presence of an Expires field does not imply that the
2227     original resource will change or cease to exist at, before, or
2228     after that time. However, information providers that know (or even
2229     suspect) that a resource will change by a certain date are strongly
2230     encouraged to include an Expires header with that date. The format
2231     is an absolute date and time as defined by HTTP-date in Section 3.3.
2232    
2233     Expires = "Expires" ":" HTTP-date
2234    
2235     An example of its use is
2236    
2237     Expires: Thu, 01 Dec 1994 16:00:00 GMT
2238    
2239     The Expires field has no default value. If the date given is equal
2240     to or earlier than the value of the Date header, the recipient must
2241     not cache the enclosed entity. If a resource is dynamic by nature,
2242     as is the case with many data-producing processes, copies of that
2243     resource should be given an appropriate Expires value which
2244     reflects that dynamism.
2245    
2246     The Expires field cannot be used to force a user agent to refresh
2247     its display or reload a resource; its semantics apply only to
2248     caching mechanisms, and such mechanisms need only check a
2249     resource's expiration status when a new request for that resource
2250     is initiated.
2251    
2252     Note: Applications are encouraged to be tolerant of bad or
2253     misinformed implementations of the Expires header. In
2254     particular, recipients may wish to recognize a delta-seconds
2255     value (any decimal integer) as representing the number of
2256     seconds after receipt of the message that its contents
2257     should be considered expired. Likewise, a value of zero (0)
2258     or an invalid date format may be considered equivalent to an
2259     "expires immediately." Although these values are not
2260     legitimate for HTTP/1.0, a robust implementation is always
2261     desirable.
2262    
2263     7.1.9 Last-Modified
2264    
2265     The Last-Modified header field indicates the date and time at which
2266     the sender believes the resource was last modified. The exact
2267     semantics of this field are defined in terms of how the receiver
2268     should interpret it: if the receiver has a copy of this resource
2269     which is older than the date given by the Last-Modified field, that
2270     copy should be considered stale.
2271    
2272     Last-Modified = "Last-Modified" ":" HTTP-date
2273    
2274     An example of its use is
2275    
2276     Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
2277    
2278     The exact meaning of this header field depends on the
2279     implementation of the sender and the nature of the original
2280     resource. For files, it may be just the file system last-mod date.
2281     For entities with dynamically included parts, it may be the most
2282     recent of the set of last-mod dates of its component parts. For
2283     database gateways, it may be the last-update timestamp of the
2284     record. For virtual objects, it may be the last time the internal
2285     state changed. In any case, the recipient should only know (and
2286     care) about the result -- whatever gets stuck in the Last-Modified
2287     field -- and not worry about how that result was obtained.
2288    
2289     7.1.10 Link
2290    
2291     The Link header provides a means for describing a relationship
2292     between the entity and some other resource. An entity may include
2293     multiple Link values. Links at the metainformation level typically
2294     indicate relationships like hierarchical structure and navigation
2295     paths. The Link field is semantically equivalent to the <LINK>
2296     element in HTML [4].
2297    
2298     Link = "Link" ":" 1#("<" URI ">"
2299     [ ";" "rel" "=" relation ]
2300     [ ";" "rev" "=" relation ]
2301     [ ";" "title" "=" quoted-string ] )
2302    
2303     relation = sgml-name
2304    
2305     sgml-name = ALPHA *( ALPHA | DIGIT | "." | "-" )
2306    
2307     Relation values are not case-sensitive and may be extended within
2308     the constraints of the sgmlname syntax. There are no predefined
2309     link relationship values for HTTP/1.0. The title parameter may be
2310     used to label the destination of a link such that it can be used as
2311     identification within a human-readable menu. Examples of usage
2312     include:
2313    
2314     Link: <http://www.cern.ch/TheBook/chapter2>; rel="Previous"
2315    
2316     Link: <mailto:timbl@w3.org>; rev="Made"; title="Tim Berners-Lee"
2317    
2318     The first example indicates that the entity is previous to chapter2
2319     in a logical navigation path. The second indicates that the
2320     publisher of the resource is identified by the given e-mail address.
2321    
2322     7.1.11 Location
2323    
2324     The Location header field is an earlier form of the URI-header and
2325     is considered obsolete. However, HTTP/1.0 applications should
2326     continue to support the Location header in order to properly
2327     interface with older applications. The purpose of Location is
2328     identical to that of the URI-header, except that no variants can be
2329     specified and only one absolute location URL is allowed.
2330    
2331     Location = "Location" ":" URI
2332    
2333     An example is
2334    
2335     Location: http://info.cern.ch/hypertext/WWW/NewLocation.html
2336    
2337     7.1.12 Title
2338    
2339     The Title header field indicates the title of the entity
2340    
2341     Title = "Title" ":" *text
2342    
2343     An example of the field is
2344    
2345     Title: Hypertext Transfer Protocol -- HTTP/1.0
2346    
2347     This field is to be considered isomorphic with the <TITLE> element
2348     in HTML [4].
2349    
2350     7.1.13 URI
2351    
2352     The URI-header field may contain one or more Universal Resource
2353     Identifiers (URIs) by which the resource origin of the entity can
2354     be identified. There is no guarantee that the resource can be
2355     accessed using the URI(s) specified. This field is required for the
2356     201, 301, and 302 response messages, and may be included in any
2357     message that contains resource metainformation.
2358    
2359     URI-header = "URI" ":" 1#( "<" URI ">" [ ";" vary ] )
2360    
2361     vary = "vary" "=" <"> 1#vary-dimension <">
2362     vary-dimension = "type" | "language" | "version" | "encoding"
2363     | "charset" | "user-agent" | extension-vary
2364    
2365     extension-vary = token
2366    
2367     Any URI specified in this field can be either absolute or relative
2368     to the URI given in the Request-Line. The URI-header improves upon
2369     the Location header field described in Section 7.1.11. For
2370     backwards compatibility with older clients, servers are encouraged
2371     to include both header fields in 301 and 302 responses.
2372    
2373     The URI-header may also be used by a client performing a POST
2374     request to suggest a URI for the new entity. Whether or not the
2375     suggested URI is used is entirely up to the server to decide. In
2376     any case, the server's response must include the actual URI(s) of
2377     the new resource if one is successfully created (status 201).
2378    
2379     If a URI refers to a set of variants, then the dimensions of that
2380     variance must be given with a vary parameter. One example is:
2381    
2382     URI: <http://info.cern.ch/hypertext/WWW/TheProject.multi>;
2383     vary="type,language"
2384    
2385     which indicates that the URI covers a group of entities that vary
2386     in media type and natural language. A request for that URI will
2387     result in a response that depends upon the client's request headers
2388     for Accept and Accept-Language. Similar dimensions exist for the
2389     Accept-Encoding, Accept-Charset, Version, and User-Agent header
2390     fields, as demonstrated in the following example.
2391    
2392     URI: <TheProject.ps>;vary="encoding,version",
2393     <TheProject.html>;vary="user-agent,charset,version"
2394    
2395     The vary parameter has an important effect on cache management,
2396     particularly for caching proxies which service a diverse set of
2397     user agents. Since the response to one user agent may differ from
2398     the response to a second user agent if the two agents have
2399     differing request profiles, a caching proxy must keep track of the
2400     content metainformation for resources with varying dimensions.
2401     Thus, the vary parameter tells the caching proxy what entity
2402     headers must be part of the key for caching that URI. When the
2403     caching proxy gets a request for that URI, it must forward the
2404     request toward the origin server if the request profile includes a
2405     variant dimension that has not already been cached.
2406    
2407     7.1.14 Version
2408    
2409     The Version field defines the version tag associated with a
2410     rendition of an evolving entity. Together with the Derived-From
2411     field described in Section 7.1.7, it allows a group of people to
2412     work simultaneously on the creation of a work as an iterative
2413     process. The field should be used to allow evolution of a
2414     particular work along a single path. It should not be used to
2415     indicate derived works or renditions in different representations.
2416    
2417     Version = "Version" ":" version-tag
2418    
2419     version-tag = token | quoted-string
2420    
2421     Examples of the Version field include:
2422    
2423     Version: 2.1.2
2424     Version: "Fred 19950116-12:26:48"
2425     Version: 2.5a4-omega7
2426    
2427     The version tag should be considered opaque to all parties but the
2428     origin server. A user agent can request a particular version of an
2429     entity by including its tag in a Version header as part of the
2430     request. Similarly, a user agent may suggest a value for the
2431     version of an entity transferred via a PUT or POST request.
2432     However, only the origin server can reliably assign or increment
2433     the version tag of an entity.
2434    
2435     7.2 Entity Body
2436    
2437     The entity-body (if any) sent with an HTTP/1.0 request or response
2438     is in a format and encoding defined by the Entity-Header fields.
2439    
2440     Entity-Body = *OCTET
2441    
2442     An entity-body is included with a request message only when the
2443     request method calls for one. This specification defines two
2444     request methods, "POST" and "PUT", that allow an entity-body. In
2445     general, the presence of an entity-body in a request is signaled by
2446     the inclusion of a Content-Length and/or Content-Transfer-Encoding
2447     header field in the request message headers.
2448    
2449     Note: Most current implementations of the POST and PUT
2450     methods require a valid Content-Length header field. This
2451     can cause problems for some systems that do not know the
2452     size of the entity-body before transmission. Experimental
2453     implementations (and future versions of HTTP) may use a
2454     packetized Content-Transfer-Encoding to obviate the need for
2455     a Content-Length.
2456    
2457     For response messages, whether or not an entity-body is included
2458     with a message is dependent on both the request method and the
2459     response code. All responses to the HEAD request method must not
2460     include a body, even though the presence of Content header fields
2461     may lead one to believe they should. Similarly, the responses "204
2462     No Content", "304 Not Modified", and "406 None Acceptable" must not
2463     include a body.
2464    
2465     7.2.1 Type
2466    
2467     When an Entity-Body is included with a message, the data type of
2468     that body is determined via the header fields Content-Type,
2469     Content-Encoding, and Content-Transfer-Encoding. These define a
2470     three-layer, ordered encoding model:
2471    
2472     entity-body <-
2473     Content-Transfer-Encoding( Content-Encoding( Content-Type ) )
2474    
2475     The default for both encodings is none (i.e., the identity
2476     function). A Content-Type specifies the media type of the
2477     underlying data. A Content-Encoding may be used to indicate an
2478     additional encoding mechanism applied to the type (usually for the
2479     purpose of data compression) that is a property of the resource
2480     requested. A Content-Transfer-Encoding may be applied by a
2481     transport agent to ensure safe and/or proper transfer of the
2482     message. Note that the Content-Transfer-Encoding is a property of
2483     the message, not of the resource.
2484    
2485     The Content-Type header field has no default value. If and only if
2486     the media type is not given by a Content-Type header (as is always
2487     the case for Simple-Response messages), the receiver may attempt to
2488     guess the media type via inspection of its content and/or the name
2489     extension(s) of the URL used to access the resource. If the media
2490     type remains unknown, the receiver should treat it as type
2491     "application/octet-stream".
2492    
2493     7.2.2 Length
2494    
2495     When an Entity-Body is included with a message, the length of that
2496     body may be determined in one of several ways. If a Content-Length
2497     header field is present, its value in bytes (number of octets)
2498     represents the length of the Entity-Body. Otherwise, the body
2499     length is determined by the Content-Type (for types with an
2500     explicit end-of-body delimiter), the Content-Transfer-Encoding (for
2501     packetized encodings), or the closing of the connection by the
2502     server. Note that the latter cannot be used to indicate the end of
2503     a request body, since it leaves no possibility for the server to
2504     send back a response.
2505    
2506     Note: Some older servers supply an invalid Content-Length
2507     when sending a document that contains server-side includes
2508     dynamically inserted into the data stream. It must be
2509     emphasized that this will not be tolerated by future
2510     versions of HTTP. Unless the client knows that it is
2511     receiving a response from a compliant server, it should not
2512     depend on the Content-Length value being correct.
2513    
2514     8. Content Parameters
2515    
2516     8.1 Media Types
2517    
2518     HTTP uses Internet Media Types [15], formerly referred to as MIME
2519     Content-Types [6], in order to provide open and extensible data
2520     typing and type negotiation. For mail applications, where there is
2521     no type negotiation between sender and receiver, it is reasonable
2522     to put strict limits on the set of allowed media types. With HTTP,
2523     however, user agents can identify acceptable media types as part of
2524     the connection, and thus are allowed more freedom in the use of non-
2525     registered types. The following grammar for media types is a
2526     superset of that for MIME because it does not restrict itself to
2527     the official IANA and x-token types.
2528    
2529     media-type = type "/" subtype *( ";" parameter )
2530     type = token
2531     subtype = token
2532    
2533     Parameters may follow the type/subtype in the form of
2534     attribute/value pairs.
2535    
2536     parameter = attribute "=" value
2537     attribute = token
2538     value = token | quoted-string
2539    
2540     The type, subtype, and parameter attribute names are not case-
2541     sensitive. Parameter values may or may not be case-sensitive,
2542     depending on the semantics of the parameter name. No LWS is allowed
2543     between the type and subtype, nor between an attribute and its
2544     value.
2545    
2546     If a given media-type value has been registered by the IANA, any
2547     use of that value must be indicative of the registered data format.
2548     Although HTTP allows the use of non-registered media types, such
2549     usage must not conflict with the IANA registry. Data providers are
2550     strongly encouraged to register their media types with IANA via the
2551     procedures outlined in RFC 1590 [15].
2552    
2553     All media-type's registered by IANA must be preferred over
2554     extension tokens. However, HTTP does not limit conforming
2555     applications to the use of officially registered media types, nor
2556     does it encourage the use of an "x-" prefix for unofficial types
2557     outside of explicitly short experimental use between consenting
2558     applications.
2559    
2560     8.1.1 Canonicalization and Text Defaults
2561    
2562     Media types are registered in a canonical form. In general, entity
2563     bodies transferred via HTTP must be represented in the appropriate
2564     canonical form prior to transmission. If the body has been encoded
2565     via a Content-Encoding and/or Content-Transfer-Encoding, the data
2566     must be in canonical form prior to that encoding. However, HTTP
2567     modifies the canonical form requirements for media of primary type
2568     "text" and for "application" types consisting of text-like records.
2569    
2570     HTTP redefines the canonical form of text media to allow multiple
2571     octet sequences to indicate a text line break. In addition to the
2572     preferred form of CRLF, HTTP applications must accept a bare CR or
2573     LF alone as representing a single line break in text media.
2574     Furthermore, if the text media is represented in a character set
2575     which does not use octets 13 and 10 for CR and LF respectively (as
2576     is the case for some multi-byte character sets), HTTP allows the
2577     use of whatever octet sequence(s) is defined by that character set
2578     to represent the equivalent of CRLF, bare CR, and bare LF. It is
2579     assumed that any recipient capable of using such a character set
2580     will know the appropriate octet sequence for representing line
2581     breaks within that character set.
2582    
2583     Note: This interpretation of line breaks applies only to the
2584     contents of an Entity-Body and only after any Content-
2585     Transfer-Encoding and/or Content-Encoding has been removed.
2586     All other HTTP constructs use CRLF exclusively to indicate a
2587     line break. Encoding mechanisms define their own line break
2588     requirements.
2589    
2590     A recipient of an HTTP text entity should translate the received
2591     entity line breaks to the local line break conventions before
2592     saving the entity external to the application and its cache;
2593     whether this translation takes place immediately upon receipt of
2594     the entity, or only when prompted by the user, is entirely up to
2595     the individual application.
2596    
2597     HTTP also redefines the default character set for text media in an
2598     entity body. If a textual media type defines a charset parameter
2599     with a registered default value of "US-ASCII", HTTP changes the
2600     default to be "ISO-8859-1". Since the character set ISO-8859-1 [19]
2601     is a superset of USASCII [18], this has no effect upon the
2602     interpretation of entity bodies which only contain octets within
2603     the US-ASCII set (0 - 127). The presence of a charset parameter
2604     value in a Content-Type header field overrides the default.
2605    
2606     HTTP does not require that the character set of an entity body be
2607     labelled as the lowest common denominator of the character codes
2608     used within a document.
2609    
2610     8.1.2 Multipart Types
2611    
2612     MIME provides for a number of "multipart" types -- encapsulations of
2613     several entities within a single message's Entity-Body. The
2614     multipart types registered by IANA [17] do not have any special
2615     meaning for HTTP/1.0, though user agents may need to understand
2616     each type in order to correctly interpret the purpose of each body-
2617     part. Ideally, an HTTP user agent should follow the same or similar
2618     behavior as a MIME user agent does upon receipt of a multipart type.
2619    
2620     As in MIME [6], all multipart types share a common syntax and must
2621     include a boundary parameter as part of the media type value. The
2622     message body is itself a protocol element and must therefore use
2623     only CRLF to represent line breaks between body-parts. Unlike in
2624     MIME, multipart body-parts may contain HTTP header fields which are
2625     significant to the meaning of that part.
2626    
2627     A URI-header field (Section 7.1.13) should be included in the body-
2628     part for each enclosed entity that can be identified by a URI.
2629    
2630     8.2 Language Tags
2631    
2632     A language tag identifies a natural language spoken, written, or
2633     otherwise conveyed by human beings for communication of information
2634     to other human beings. Computer languages are explicitly excluded.
2635     The HTTP/1.0 protocol uses language tags within the Accept-Language
2636     and Content-Language header fields.
2637    
2638     The syntax and registry of HTTP language tags is the same as that
2639     defined by RFC 1766 [1]. In summary, a language tag is composed of
2640     1 or more parts: A primary language tag and a (possibly empty)
2641     series of subtags:
2642    
2643     language-tag = primary-tag *( "-" subtag )
2644    
2645     primary-tag = 1*8ALPHA
2646     subtag = 1*8ALPHA
2647    
2648     Whitespace is not allowed within the tag and all tags are to be
2649     treated as case insensitive. The namespace of language tags is
2650     administered by the IANA. Example tags include:
2651    
2652     en, en-US, en-cockney, i-cherokee, x-pig-latin
2653    
2654     where any two-letter primary-tag is an ISO 639 language
2655     abbreviation and any two-letter initial subtag is an ISO 3166
2656     country code.
2657    
2658     Note: Earlier versions of this document specified an
2659     incomplete language tag, where values were limited to ISO
2660     639 language abbreviations with an optional ISO 3166 country
2661     code appended after an underscore ("_") or slash ("/")
2662     character. This format was abandoned in favor of the
2663     recently proposed standard for Internet protocols.
2664    
2665     8.3 Character Sets
2666    
2667     HTTP uses the same definition of the term "character set" as that
2668     described for MIME:
2669    
2670     The term "character set" is used in this document to
2671     refer to a method used with one or more tables to convert
2672     a sequence of octets into a sequence of characters. Note
2673     that unconditional conversion in the other direction is
2674     not required, in that not all characters may be available
2675     in a given character set and a character set may provide
2676     more than one sequence of octets to represent a
2677     particular character. This definition is intended to
2678     allow various kinds of character encodings, from simple
2679     single-table mappings such as US-ASCII to complex table
2680     switching methods such as those that use ISO 2022's
2681     techniques. However, the definition associated with a
2682     MIME character set name must fully specify the mapping to
2683     be performed from octets to characters. In particular,
2684     use of external profiling information to determine the
2685     exact mapping is not permitted.
2686    
2687     Character sets are identified by case-insensitive tokens. The
2688     complete set of allowed charset values are defined by the IANA
2689     Character Set registry [17]. However, because that registry does
2690     not define a single, consistent token for each character set, we
2691     define here the preferred names for those character sets most
2692     likely to be used with HTTP entities. This set of charset values
2693     includes those registered by RFC 1521 [6] -- the US-ASCII [18] and
2694     ISO8859 [19] character sets -- and other character set names
2695     specifically recommended for use within MIME charset parameters.
2696    
2697     charset = "US-ASCII"
2698     | "ISO-8859-1" | "ISO-8859-2" | "ISO-8859-3"
2699     | "ISO-8859-4" | "ISO-8859-5" | "ISO-8859-6"
2700     | "ISO-8859-7" | "ISO-8859-8" | "ISO-8859-9"
2701     | "ISO-2022-JP" | "ISO-2022-JP-2" | "ISO-2022-KR"
2702     | "UNICODE-1-1" | "UNICODE-1-1-UTF-7" | "UNICODE-1-1-UTF-8"
2703     | token
2704    
2705     Although HTTP allows an arbitrary token to be used as a character
2706     set value, any token that has a predefined value within the IANA
2707     Character Set registry [17] must represent the character set
2708     defined by that registry. Applications are encouraged, but not
2709     required, to limit their use of character sets to those defined by
2710     the IANA registry.
2711    
2712     8.4 Encoding Mechanisms
2713    
2714     Encoding mechanism values are used to indicate an encoding
2715     transformation that has been or can be applied to a resource.
2716     Encoding mechanisms are primarily used to allow a document to be
2717     compressed or encrypted without losing the identity of its
2718     underlying media type. Typically, the resource is stored with this
2719     encoding and is only decoded before rendering or analogous usage.
2720    
2721     encoding-mechanism = "gzip" | "compress" | token
2722    
2723     Note: For historical reasons, HTTP/1.0 applications should
2724     consider "x-gzip" and "x-compress" to be equivalent to
2725     "gzip" and "compress", respectively.
2726    
2727     All encoding-mechanism values are case-insensitive. HTTP/1.0 uses
2728     encoding-mechanism values in the Accept-Encoding (Section 5.4.3)
2729     and Content-Encoding (Section 7.1.2) header fields. Although the
2730     value describes the encoding-mechanism, what is more important is
2731     that it indicates what decoding mechanism will be required to
2732     remove the encoding. Note that a single program may be capable of
2733     decoding multiple encoding-mechanism formats. Two values are
2734     defined by this specification:
2735    
2736     gzip An encoding format produced by the file compression program
2737     "gzip" (GNU zip) developed by Jean-loup Gailly. This format
2738     is typically a Lempel-Ziv coding (LZ77) with a 32 bit CRC.
2739     Gzip is available from the GNU project at
2740     <URL:ftp://prep.ai.mit.edu/pub/gnu/>.
2741    
2742     compress The encoding format produced by the file compression
2743     program "compress". This format is an adaptive Lempel-Ziv-
2744     Welch coding (LZW).
2745    
2746     8.5 Transfer Encodings
2747    
2748     Transfer encoding values are used to indicate an encoding
2749     transformation that has been, can be, or may need to be applied to
2750     an Entity-Body in order to ensure safe transport through the
2751     network. Transfer encodings are only used with entities destined
2752     for or retrieved from MIME-conformant systems, and thus will rarely
2753     occur in an HTTP/1.0 message. This differs from an encoding-
2754     mechanism in that the transfer encoding is a property of the
2755     message, not of the original resource.
2756    
2757     transfer-encoding = "binary" | "8bit" | "7bit"
2758     | "quoted-printable" | "base64"
2759     | token
2760    
2761     All transfer-encoding values are case-insensitive. HTTP/1.0 uses
2762     transfer-encoding values in the Accept-Encoding (Section 5.4.3) and
2763     Content-Transfer-Encoding (Section 7.1.5) header fields.
2764    
2765     The values "7bit", "8bit", and "binary" are used to indicate that
2766     no transfer encoding has been performed. Instead, they describe the
2767     sort of encoding that might be needed for transmission through an
2768     unsafe transport system. Binary indicates that the body may contain
2769     any set of octets. 8bit adds the restrictions that CR and LF
2770     characters only occur as part of CRLF line separators, all lines
2771     are short (less than 1000 octets), and no NULs (octet 0) are
2772     present. 7bit adds a further restriction that all octets are 7-bit
2773     US-ASCII characters.
2774    
2775     The "quoted-printable" and "base64" values indicate that the
2776     associated encoding (as defined in MIME [6]) has been applied to
2777     the body. These encodings consist entirely of 7-bit US-ASCII
2778     characters.
2779    
2780     9. Content Negotiation
2781    
2782     Content negotiation is an optional feature of the HTTP protocol. It
2783     is designed to allow for preemptive selection of a preferred
2784     content representation, within a single request-response round-trip,
2785     and without intervention from the user. However, this may not
2786     always be desirable for the user and is sometimes unnecessary for
2787     the content provider. Implementors are encouraged to provide
2788     mechanisms whereby the amount of preemptive content negotiation,
2789     and the parameters of that negotiation, are configurable by the
2790     user and server maintainer.
2791    
2792     The first step in the negotiation algorithm is for the server to
2793     determine whether or not there are any content variants for the
2794     requested resource. Content variants may be in the form of multiple
2795     preexisting entities or a set of dynamic conversion filters. If
2796     there are no variant forms of the resource, the "negotiation" is
2797     limited to whether or not that single media type is acceptable
2798     under the constraints given by the Accept request header field
2799     (if any).
2800    
2801     If variants are available, those variants that are completely
2802     unacceptable should be removed from consideration first.
2803     Unacceptable variants include those with a Content-Encoding not
2804     listed in an Accept-Encoding field, those with a character subset
2805     (other than the default ISO-8859-1) not listed in an Accept-Charset
2806     field, and those with a media type not within any of the media
2807     ranges of an explicitly constrained Accept field (or listed with a
2808     zero quality parameter).
2809    
2810     If no acceptable variants remain at this point, the server should
2811     respond with a "406 None Acceptable" response message. If more than
2812     one variant remains, and at least one has a Content-Language within
2813     those listed by an Accept-Language field, any variants which do not
2814     match the language constraint are removed from further
2815     consideration.
2816    
2817     If multiple choices still remain, the selection is further winnowed
2818     by calculating and comparing the relative quality of the available
2819     media types. The calculated weights are normalized to a real number
2820     in the range 0 through 1, where 0 is the minimum and 1 the maximum
2821     value. The following parameters are included in the calculation:
2822    
2823     q The quality factor chosen by the user agent (and
2824     configurable by the user) that represents the desirability
2825     of that media type. In this case, desirability is usually a
2826     measure of the clients ability to faithfully represent the
2827     contents of that media type to the user. The value is in
2828     the range [0,1], where the default value is 1.
2829    
2830     qs The quality factor, as chosen by the server (via some
2831     unspecified mechanism), to represent the relative quality
2832     of a particular variant representation of the source. For
2833     example, a picture originally in JPEG form would have a
2834     lower qs when translated to the XBM format, and much lower
2835     qs when translated to an ASCII-art representation. Note,
2836     however, that this is a function of the source -- an
2837     original piece of ASCII-art may degrade in quality if it is
2838     captured in JPEG form. The qs value has the same range and
2839     default as q.
2840    
2841     mxb The maximum number of bytes in the Entity-Body accepted by
2842     the client. The default value is mxb=undefined
2843     (i.e. infinity).
2844    
2845     bs The actual number of bytes in the Entity-Body for a
2846     particular source representation. This should equal the
2847     value sent as Content-Length. The default value is 0.
2848    
2849     The discrete mapping function is defined as:
2850    
2851     { if mxb=undefined, then (qs * q) }
2852     Q(q,qs,mxb,bs) = { if mxb >= bs, then (qs * q) }
2853     { if mxb < bs, then 0 }
2854    
2855     The variants with a maximal value for the Q function represent the
2856     preferred representation(s) of the entity. If multiple
2857     representations exist for a single media type (as would be the case
2858     if they only varied by Content-Encoding), then the smallest
2859     representation (lowest bs) is preferred.
2860    
2861     Finally, there may still be multiple choices available to the user.
2862     If so, the server may either choose one (possibly at random) from
2863     those available and respond with "200 OK", or it may respond with
2864     "300 Multiple Choices" and include an entity describing the
2865     choices. In the latter case, the entity should either be of type
2866     "text/html' (such that the user can choose from among the choices
2867     by following an exact link) or of some type that would allow the
2868     user agent to perform the selection automatically (no such type is
2869     available at the time of this writing).
2870    
2871     The "300 Multiple Choices" response can be given even if the server
2872     does not perform any winnowing of the representation choices via
2873     the content negotiation algorithm described above. Furthermore, it
2874     may include choices that were not considered as part of the
2875     negotiation algorithm and resources that may be located at other
2876     servers.
2877    
2878     10. Access Authentication
2879    
2880     HTTP provides a simple challenge-response authorization mechanism
2881     which may be used by a server to challenge a client request and by
2882     a client to provide authentication information. The mechanism uses
2883     an extensible token to identify the authentication scheme, followed
2884     by a comma-separated list of attribute-value pairs which carry the
2885     parameters necessary for achieving authentication via that scheme.
2886    
2887     auth-scheme = "Basic" | token
2888    
2889     auth-param = token "=" quoted-string
2890    
2891     The "401 Unauthorized" response message is used by an origin server
2892     to challenge the authorization of a user agent. This response must
2893     include a WWW-Authenticate header field containing the challenge
2894     applicable to the requested resource.
2895    
2896     challenge = auth-scheme 1*LWS realm [ "," 1#auth-param ]
2897    
2898     realm = "Realm" "=" quoted-string
2899    
2900     The realm attribute is required for all access authentication
2901     schemes which issue a challenge. The realm value, in combination
2902     with the root URL of the server being accessed, defines the
2903     authorization space. These realms allow the protected resources on
2904     a server to be partitioned into a set of authorization spaces, each
2905     with its own authentication scheme and/or database. The realm value
2906     is a string, generally assigned by the origin server, which may
2907     have additional semantics specific to the authentication scheme.
2908    
2909     A user agent that wishes to authenticate itself with a server
2910     (usually, but not necessarily, after receiving a 401 response), may
2911     do so by including an Authorization header field with the request.
2912     The Authorization field value consists of credentials containing
2913     the authentication information of the user agent for the realm of
2914     the resource being requested.
2915    
2916     credentials = auth-scheme [ 1*LWS encoded-cookie ] #auth-param
2917    
2918     encoded-cookie = 1*<any CHAR except CTLs or tspecials,
2919     but including "=" and "/">
2920    
2921     The domain over which credentials can be automatically applied by a
2922     user agent is determined by the authorization space. If a request
2923     is authenticated, the credentials can be reused for all other
2924     requests within that authorization space for a period of time
2925     determined by the authentication scheme, parameters, and/or user
2926     preference.
2927    
2928     The HTTP protocol does not restrict applications to this simple
2929     challenge-response mechanism for access authentication. Additional
2930     mechanisms may be used at the transport level, via message
2931     encapsulation, and/or with additional header fields specifying
2932     authentication information. However, these additional mechanisms
2933     are not defined by this specification.
2934    
2935     Proxies must be completely transparent regarding user agent access
2936     authentication. That is, they must forward the WWW-Authenticate and
2937     Authorization headers untouched. HTTP/1.0 does not provide a means
2938     for a client to be authenticated with a proxy -- this feature will
2939     be available in future versions of HTTP.
2940    
2941     Note: The names Proxy-Authenticate and Proxy-Authorization
2942     have been suggested as headers, analogous to WWW-Authenticate
2943     and Authorization, but applying only to the immediate
2944     connection with a proxy.
2945    
2946     10.1 Basic Authentication Scheme
2947    
2948     The basic authentication scheme is based on the model that the
2949     client must authenticate itself with a user-ID and a password for
2950     each realm. The realm value should be considered an opaque string
2951     which can only be compared for equality with other realms. The
2952     server will service the request only if it can validate the user-ID
2953     and password for the domain of the Request-URI.
2954    
2955     basic-challenge = "Basic" SP realm
2956    
2957     The client sends the user-ID and password (separated by a single
2958     colon ":" character) within a base64 [6] encoded-cookie in the
2959     credentials.
2960    
2961     basic-credentials = "Basic" SP basic-cookie
2962     basic-cookie = <base64 encoding of userid-password>
2963     userid-password = [ token ] ":" *text
2964    
2965     There are no optional authentication parameters for the basic
2966     scheme. For example, if the user agent wishes to send the user-ID
2967     "Aladdin" and password "open sesame", it would use the following
2968     header field:
2969    
2970     Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
2971    
2972     The basic authentication scheme is a non-secure method of filtering
2973     unauthorized access to resources on an HTTP server. It is based on
2974     the assumption that the connection between the client and the
2975     server can be regarded as a trusted carrier. As this is not
2976     generally true on an open network, the basic authentication scheme
2977     should be used accordingly. In spite of this, clients are strongly
2978     encouraged to implement the scheme in order to communicate with
2979     servers that use it.
2980    
2981     11. Security Considerations
2982    
2983     This section is meant to inform application developers, information
2984     providers, and users of the security limitations in HTTP/1.0 as
2985     described by this document. The discussion does not include
2986     definitive solutions to the problems revealed, though it does make
2987     some suggestions for reducing security risks.
2988    
2989     11.1 Authentication of Clients
2990    
2991     As mentioned in Section 10.1, the Basic authentication scheme is
2992     not considered to be a secure method of user authentication, nor
2993     does it prevent the Entity-Body from being transmitted in clear
2994     text across the physical network used as the carrier. HTTP/1.0 does
2995     not prevent additional authentication schemes and encryption
2996     mechanisms to be employed to increase security.
2997    
2998     11.2 Idempotent Methods
2999    
3000     The writers of client software should be aware that the software
3001     represents the user in their interactions over the net, and should
3002     be careful to allow the user to be aware of any actions they may
3003     take which may have an unexpected significance to themselves or
3004     others.
3005    
3006     In particular, the convention has been established that the GET and
3007     HEAD methods should never have the significance of taking an
3008     action. The link "click here to subscribe"--causing the reading of a
3009     special "magic" document--is open to abuse by others making a link
3010     "click here to see a pretty picture." These methods should be
3011     considered "safe" and should not have side effects. This allows the
3012     client software to represent other methods (such as POST, PUT and
3013     DELETE) in a special way, so that the user is aware of the fact
3014     that an action is being requested.
3015    
3016     11.3 Abuse of Server Log Information
3017    
3018     A server is in the position to save personal data about a user's
3019     requests which may identify their reading patterns or subjects of
3020     interest. This information is clearly confidential in nature and
3021     its handling may be constrained by law in certain countries. People
3022     using the HTTP protocol to provide data are responsible for
3023     ensuring that such material is not distributed without the
3024     permission of any individuals that are identifiable by the
3025     published results.
3026    
3027     Two header fields are worth special mention in this context:
3028     Referer and From. The Referer field allows reading patterns to be
3029     studied and reverse links drawn. Although it can be very useful,
3030     its power can be abused if user details are not separated from the
3031     information contained in the Referer. Even when the personal
3032     information has been removed, the Referer field may have indicated
3033     a secure document's URI, whose revelation itself would be a breach
3034     of security.
3035    
3036     The information sent in the From field might conflict with the
3037     user's privacy interests or their site's security policy, and hence
3038     it should not be transmitted without the user being able to
3039     disable, enable, and modify the contents of the field. The user
3040     must be able to set the active contents of this field within a user
3041     preference or application defaults configuration.
3042    
3043     We suggest, though do not require, that a convenient toggle
3044     interface be provided for the user to enable or disable the sending
3045     of From and Referer information.
3046    
3047     12. Acknowledgments
3048    
3049     This specification makes heavy use of the augmented BNF and generic
3050     constructs defined by David H. Crocker for RFC 822 [8]. Similarly,
3051     it reuses many of the definitions provided by Nathaniel Borenstein
3052     and Ned Freed for MIME [6]. We hope that their inclusion in this
3053     specification will help reduce past confusion over the relationship
3054     between HTTP/1.0 and Internet mail.
3055    
3056     The HTTP protocol has evolved considerably over the past three
3057     years. It has benefited from a large and active developer community--
3058     the many people who have participated on the www-talk mailing list--
3059     and it is that community which has been most responsible for the
3060     success of HTTP and of the World-Wide Web in general.
3061     Marc Andreessen, Robert Cailliau, Daniel W. Connolly, Bob Denny,
3062     Phillip M. Hallam-Baker, Haringkon W. Lie, Ari Luotonen, Rob McCool,
3063     Dave Raggett, Tony Sanders, and Marc VanHeyningen deserve special
3064     recognition for their efforts in defining aspects of the protocol
3065     for early versions of this specification.
3066    
3067     This document has benefited greatly from the comments of all those
3068     participating in the HTTPWG. In addition to those already
3069     mentioned, the following individuals have contributed to this
3070     specification:
3071    
3072     Gary Adams Harald Tveit Alvestrand
3073     Keith Ball Brian Behlendorf
3074     Paul Burchard Maurizio Codogno
3075     Mike Cowlishaw Michael A. Dolan
3076     John Franks Alex Hopmann
3077     Bob Jernigan Martijn Koster
3078     Dave Kristol Daniel LaLiberte
3079     Albert Lunde John C. Mallery
3080     Larry Masinter Mitra
3081     Gavin Nicol Marc Salomon
3082     Chuck Shotton Eric W. Sink
3083     Simon E. Spero
3084    
3085     13. References
3086    
3087     [1] H. T. Alvestrand. "Tags for the identification of languages."
3088     RFC 1766, UNINETT, March 1995.
3089    
3090     [2] F. Anklesaria, M. McCahill, P. Lindner, D. Johnson, D. Torrey,
3091     and B. Alberti. "The Internet Gopher Protocol: A distributed
3092     document search and retrieval protocol." RFC 1436, University
3093     of Minnesota, March 1993.
3094    
3095     [3] T. Berners-Lee. "Universal Resource Identifiers in WWW: A
3096     Unifying Syntax for the Expression of Names and Addresses of
3097     Objects on the Network as used in the World-Wide Web."
3098     RFC 1630, CERN, June 1994.
3099    
3100     [4] T. Berners-Lee and D. Connolly. "HyperText Markup Language
3101     Specification - 2.0." Work in Progress (draft-ietf-html-spec-
3102     01.txt), CERN, HaL Computer Systems, February 1995.
3103    
3104     [5] T. Berners-Lee, L. Masinter, and M. McCahill. "Uniform Resource
3105     Locators (URL)." RFC 1738, CERN, Xerox PARC, University of
3106     Minnesota, October 1994.
3107    
3108     [6] N. Borenstein and N. Freed. "MIME (Multipurpose Internet Mail
3109     Extensions) Part One: Mechanisms for Specifying and Describing
3110     the Format of Internet Message Bodies." RFC 1521, Bellcore,
3111     Innosoft, September 1993.
3112    
3113     [7] R. Braden. "Requirements for Internet hosts - application and
3114     support." STD 3, RFC 1123, IETF, October 1989.
3115    
3116     [8] D. H. Crocker. "Standard for the Format of ARPA Internet Text
3117     Messages." STD 11, RFC 822, UDEL, August 1982.
3118    
3119     [9] F. Davis, B. Kahle, H. Morris, J. Salem, T. Shen, R. Wang,
3120     J. Sui, and M. Grinbaum. "WAIS Interface Protocol Prototype
3121     Functional Specification." (v1.5), Thinking Machines
3122     Corporation, April 1990.
3123    
3124     [10] R. T. Fielding. "Relative Uniform Resource Locators." Work in
3125     Progress (draft-ietf-uri-relative-url-05.txt), UC Irvine,
3126     January 1995.
3127    
3128     [11] M. Horton and R. Adams. "Standard for interchange of USENET
3129     messages." RFC 1036 (Obsoletes RFC 850), AT&T Bell
3130     Laboratories, Center for Seismic Studies, December 1987.
3131    
3132     [12] B. Kantor and P. Lapsley. "Network News Transfer Protocol: A
3133     Proposed Standard for the Stream-Based Transmission of News."
3134     RFC 977, UC San Diego, UC Berkeley, February 1986.
3135    
3136     [13] K. Moore. "MIME (Multipurpose Internet Mail Extensions) Part
3137     Two: Message Header Extensions for Non-ASCII Text." RFC 1522,
3138     University of Tennessee, September 1993.
3139    
3140     [14] J. Postel. "Simple Mail Transfer Protocol." STD 10, RFC 821,
3141     USC/ISI, August 1982.
3142    
3143     [15] J. Postel. "Media Type Registration Procedure." RFC 1590,
3144     USC/ISI, March 1994.
3145    
3146     [16] J. Postel and J. K. Reynolds. "File Transfer Protocol (FTP)."
3147     STD 9, RFC 959, USC/ISI, October 1985.
3148    
3149     [17] J. Reynolds and J. Postel. "Assigned Numbers." STD 2, RFC 1700,
3150     USC/ISI, October 1994.
3151    
3152     [18] US-ASCII. Coded Character Set - 7-Bit American Standard Code for
3153     Information Interchange. Standard ANSI X3.4-1986, ANSI, 1986.
3154    
3155     [19] ISO-8859. International Standard -- Information Processing --
3156     8-bit Single-Byte Coded Graphic Character Sets -- Part 1: Latin
3157     Alphabet No. 1, ISO 8859-1:1987. Part 2: Latin alphabet No. 2,
3158     ISO 8859-2, 1987. Part 3: Latin alphabet No. 3, ISO 8859-3,
3159     1988. Part 4: Latin alphabet No. 4, ISO 8859-4, 1988. Part 5:
3160     Latin/Cyrillic alphabet, ISO 8859-5, 1988. Part 6: Latin/Arabic
3161     alphabet, ISO 8859-6, 1987. Part 7: Latin/Greek alphabet, ISO
3162     8859-7, 1987. Part 8: Latin/Hebrew alphabet, ISO 8859-8, 1988.
3163     Part 9: Latin alphabet No. 5, ISO 8859-9, 1990.
3164    
3165     14. Authors' Addresses
3166    
3167     Tim Berners-Lee
3168     Director, W3 Consortium
3169     MIT Laboratory for Computer Science
3170     545 Technology Square
3171     Cambridge, MA 02139, U.S.A.
3172     Tel: +1 (617) 253 9670
3173     Fax: +1 (617) 258 8682
3174     Email: timbl@w3.org
3175    
3176     Roy T. Fielding
3177     Department of Information and Computer Science
3178     University of California
3179     Irvine, CA 92717-3425, U.S.A.
3180     Tel: +1 (714) 824-4049
3181     Fax: +1 (714) 824-4056
3182     Email: fielding@ics.uci.edu
3183    
3184     Henrik Frystyk Nielsen
3185     World-Wide Web Project
3186     CERN,
3187     1211 Geneva 23, Switzerland
3188     Tel: +41 (22) 767 8265
3189     Fax: +41 (22) 767 8730
3190     Email: frystyk@w3.org
3191    
3192     Appendices
3193    
3194     These appendices are provided for informational reasons only -- they
3195     do not form a part of the HTTP/1.0 specification.
3196    
3197     A. Internet Media Type message/http
3198    
3199     In addition to defining the HTTP/1.0 protocol, this document serves
3200     as the specification for the Internet media type "message/http".
3201     The following is to be registered with IANA [15].
3202    
3203     Media Type name: message
3204    
3205     Media subtype name: http
3206    
3207     Required parameters: none
3208    
3209     Optional parameters: version, type
3210    
3211     version: The HTTP-Version number of the enclosed message
3212     (e.g. "1.0"). If not present, the version can be
3213     determined from the first line of the body.
3214    
3215     type: The message type -- "request" or "response". If
3216     not present, the type can be determined from the
3217     first line of the body.
3218    
3219     Encoding considerations: only "7bit", "8bit", or "binary" are
3220     permitted
3221    
3222     Security considerations: none
3223    
3224     B. Minimum Compliance
3225    
3226     Early reviews of this specification have indicated the need for a
3227     statement of the minimum requirements for an implementation to be
3228     considered in compliance with HTTP/1.0. This section will be
3229     written soon.
3230    
3231     Note: The primary difficulty in determining a standard for
3232     minimum compliance rests in the fact that HTTP is a flexible
3233     protocol which can be used for many purposes. The
3234     requirements for special purpose applications often differ
3235     from those of general purpose applications.
3236    
3237     B.1 Servers
3238    
3239     Servers have a special responsibility for being honest when
3240     generating their responses to requesting clients. The Status-Code
3241     sent in the Status-Line must correspond to the actual action taken
3242     by the server. This is especially the case when the method used in
3243     the request is one of PUT, POST, DELETE, LINK, and UNLINK. If a
3244     Status-Code of 200 is returned, the client must be able to assume
3245     that the action has been carried out. If the server is not able to
3246     fulfill the requested action immediately, the correct status code
3247     to use is "202 Accepted".
3248    
3249     The methods GET and HEAD must be supported by all general-purpose
3250     servers. Servers which provide Last-Modified dates for resources
3251     must also support the conditional GET method.
3252    
3253     C. Tolerant Applications
3254    
3255     While it may be appropriate for testing applications to verify full
3256     conformance to this specification, it is recommended that
3257     operational applications be tolerant of deviations. This appendix
3258     mentions the most important topics where tolerance is recommended.
3259    
3260     C.1 Request-Line, Status-Line, and Header Fields
3261    
3262     Clients should be tolerant in parsing the Status-Line and servers
3263     tolerant when parsing the Request-Line. In particular, they should
3264     accept any amount of SP and HTAB characters between fields, even
3265     though only a single SP is specified.
3266    
3267     The line terminator for HTTP-header fields should be the sequence
3268     CRLF. However, we recommend that applications, when parsing such
3269     headers, recognize a single LF as a line terminator and ignore the
3270     leading CR.
3271    
3272     We recommend that servers allocate URIs free of "variant"
3273     characters (characters whose representation differs in some of the
3274     national variant character sets), punctuation characters, and
3275     spaces. This makes URIs easier to handle by humans when the need
3276     arises (such as for debugging or transmission through non hypertext
3277     systems).
3278    
3279     D. Relationship to MIME
3280    
3281     HTTP/1.0 reuses many of the constructs defined for Internet Mail
3282     (RFC 822 [8]) and the Multipurpose Internet Mail Extensions
3283     (MIME [6]) to allow entities to be transmitted in an open variety
3284     of representations and with extensible mechanisms. However, HTTP is
3285     not a MIME-conforming application. HTTP's performance requirements
3286     differ substantially from those of Internet mail. Since it is not
3287     limited by the restrictions of existing mail protocols and
3288     gateways, HTTP does not obey some of the constraints imposed by
3289     RFC 822 and MIME for mail transport.
3290    
3291     This appendix describes specific areas where HTTP differs from
3292     MIME. Gateways to MIME-compliant protocols must be aware of these
3293     differences and provide the appropriate conversions where
3294     necessary. No conversion should be necessary for a MIME-conforming
3295     entity to be transferred using HTTP.
3296    
3297     D.1 Conversion to Canonical Form
3298    
3299     MIME requires that an entity be converted to canonical form prior
3300     to being transferred, as described in Appendix G of RFC 1521 [6].
3301     Although HTTP does require media types to be transferred in
3302     canonical form, it changes the definition of "canonical form" for
3303     text-based media types as described in Section 8.1.1.
3304    
3305     D.1.1 Representation of Line Breaks
3306    
3307     MIME requires that the canonical form of any text type represent
3308     line breaks as CRLF and forbids the use of CR or LF outside of line
3309     break sequences. Since HTTP allows CRLF, bare CR, and bare LF (or
3310     the octet sequence(s) to which they would be translated for the
3311     given character set) to indicate a line break within text content,
3312     recipients of an HTTP message cannot rely upon receiving MIME-
3313     canonical line breaks in text.
3314    
3315     Where it is possible, a gateway from HTTP to a MIME-conformant
3316     protocol should translate all line breaks within text/* media types
3317     to the MIME canonical form of CRLF. However, this may be
3318     complicated by the presence of a Content-Encoding and by the fact
3319     that HTTP allows the use of some character sets which do not use
3320     octets 13 and 10 to represent CR and LF (as is the case for some
3321     multi-byte character sets).
3322    
3323     D.1.2 Default Character Set
3324    
3325     MIME requires that all subtypes of the top-level Content-Type
3326     "text" have a default character set of US-ASCII [18]. In contrast,
3327     HTTP defines the default character set for "text" to be
3328     ISO88591 [19] (a superset of US-ASCII). Therefore, if a text/*
3329     media type given in the Content-Type header field does not already
3330     include an explicit charset parameter, the parameter
3331    
3332     ;charset="iso-8859-1"
3333    
3334     should be added by the gateway if the entity contains any octets
3335     greater than 127.
3336    
3337     D.2 Default Content-Transfer-Encoding
3338    
3339     The default Content-Transfer-Encoding (CTE) for all MIME messages
3340     is "7bit". In contrast, HTTP defines the default CTE to be
3341     "binary". Therefore, if an entity does not include an explicit CTE
3342     header field, the gateway should apply either the "quoted-printable"
3343     or "base64" transfer encodings and add the appropriate
3344     Content-Transfer-Encoding field. At a minimum, the explicit CTE
3345     field of
3346    
3347     Content-Transfer-Encoding: binary
3348    
3349     should be added by the gateway if it is unwilling to apply a mail-
3350     safe encoding.
3351    
3352     D.3 Introduction of Content-Encoding
3353    
3354     MIME does not include any concept equivalent to HTTP's Content-
3355     Encoding header field. Since this acts as a modifier on the media
3356     type, gateways to MIME-conformant protocols should either change
3357     the value of the Content-Type header field or decode the Entity-
3358     Body before forwarding the message.
3359    
3360     Note: Some experimental applications of Content-Type for
3361     Internet mail have used a media-type parameter of
3362     ";conversions=<encoding-mechanisms>" to perform an
3363     equivalent function as Content-Encoding. However, this
3364     parameter is not part of the MIME specification at the time
3365     of this writing.
3366    
3367     E. Example of Version Control
3368    
3369     This appendix gives an example on how the Entity-Header fields
3370     Version and Derived-From can be used to apply version control to
3371     the creation and parallel development of a work. In order to
3372     simplify the example, only two user agents (A and B) are considered
3373     together with an origin server S.
3374    
3375     o A sends a POST request to S, including the header
3376     "Version: 1.0" and an entity
3377    
3378     o S replies "201 Created" to A, including the header
3379     "Version: 1.0" and a URI-header which should be used for
3380     future references
3381    
3382     o A starts editing the entity
3383    
3384     o B sends a GET request to S
3385    
3386     o S replies "200 OK" to B, including the entity with a header
3387     "Version: 1.0"
3388    
3389     o B starts editing the entity
3390    
3391     o B sends a PUT request to S, including the entity and a header
3392     "Derived-From: 1.0"
3393    
3394     o S replies "204 No Content" to B, including a header
3395     "Version: 1.1" but no entity
3396    
3397     o A sends a PUT request to S, including the entity and a header
3398     "Derived-From: 1.0"
3399    
3400     o S replies "409 Conflict" to A, including "Version: 1.1" and the
3401     list of problems with merging A's changes to 1.0 with those
3402     already applied for B and version 1.1
3403    
3404     o A merges B's changes with its own, possibly with help from the
3405     user of A
3406    
3407     o A sends a PUT request to S including the entity and the header
3408     "Derived-From: 1.1"
3409    
3410     o S replies "204 No Content" to A, including the header
3411     "Version: 1.2" but no entity
3412    
3413     The example can be expanded to any number of involved user agents,
3414     though the likelihood of conflicts and the difficulty of resolving
3415     them may increase.
3416    

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24