draft-ietf-httpbis-p1-messaging-00.txt | draft-ietf-httpbis-p1-messaging-01.txt | |||
---|---|---|---|---|
Network Working Group R. Fielding, Ed. | Network Working Group R. Fielding, Ed. | |||
Internet-Draft Day Software | Internet-Draft Day Software | |||
Obsoletes: 2068, 2616 J. Gettys | Obsoletes: 2616 (if approved) J. Gettys | |||
(if approved) One Laptop per Child | Intended status: Standards Track One Laptop per Child | |||
Intended status: Standards Track J. Mogul | Expires: July 15, 2008 J. Mogul | |||
Expires: June 22, 2008 HP | HP | |||
H. Frystyk | H. Frystyk | |||
Microsoft | Microsoft | |||
L. Masinter | L. Masinter | |||
Adobe Systems | Adobe Systems | |||
P. Leach | P. Leach | |||
Microsoft | Microsoft | |||
T. Berners-Lee | T. Berners-Lee | |||
W3C/MIT | W3C/MIT | |||
December 20, 2007 | Y. Lafon, Ed. | |||
W3C | ||||
J. Reschke, Ed. | ||||
greenbytes | ||||
January 12, 2008 | ||||
HTTP/1.1, part 1: URIs, Connections, and Message Parsing | HTTP/1.1, part 1: URIs, Connections, and Message Parsing | |||
draft-ietf-httpbis-p1-messaging-00 | draft-ietf-httpbis-p1-messaging-01 | |||
Status of this Memo | Status of this Memo | |||
By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
skipping to change at page 1, line 45 | skipping to change at page 1, line 49 | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
This Internet-Draft will expire on June 22, 2008. | This Internet-Draft will expire on July 15, 2008. | |||
Copyright Notice | Copyright Notice | |||
Copyright (C) The IETF Trust (2007). | Copyright (C) The IETF Trust (2008). | |||
Abstract | Abstract | |||
The Hypertext Transfer Protocol (HTTP) is an application-level | The Hypertext Transfer Protocol (HTTP) is an application-level | |||
protocol for distributed, collaborative, hypermedia information | protocol for distributed, collaborative, hypermedia information | |||
systems. HTTP has been in use by the World Wide Web global | systems. HTTP has been in use by the World Wide Web global | |||
information initiative since 1990. This document is Part 1 of the | information initiative since 1990. This document is Part 1 of the | |||
seven-part specification that defines the protocol referred to as | seven-part specification that defines the protocol referred to as | |||
"HTTP/1.1" and, taken together, obsoletes RFC 2616. Part 1 provides | "HTTP/1.1" and, taken together, obsoletes RFC 2616. Part 1 provides | |||
an overview of HTTP and its associated terminology, defines the | an overview of HTTP and its associated terminology, defines the | |||
"http" and "https" Uniform Resource Identifier (URI) schemes, defines | "http" and "https" Uniform Resource Identifier (URI) schemes, defines | |||
the generic message syntax and parsing requirements for HTTP message | the generic message syntax and parsing requirements for HTTP message | |||
frames, and describes general security concerns for implementations. | frames, and describes general security concerns for implementations. | |||
Editorial Note (To be removed by RFC Editor) | Editorial Note (To be removed by RFC Editor) | |||
This version of the HTTP specification contains only minimal | ||||
editorial changes from [RFC2616] (abstract, introductory paragraph, | ||||
and authors' addresses). All other changes are due to partitioning | ||||
the original into seven mostly independent parts. The intent is for | ||||
readers of future drafts to able to use draft 00 as the basis for | ||||
comparison when the WG makes later changes to the specification text. | ||||
This draft will shortly be followed by draft 01 (containing the first | ||||
round of changes that have already been agreed to on the mailing | ||||
list). There is no point in reviewing this draft other than to | ||||
verify that the partitioning has been done correctly. Roy T. | ||||
Fielding, Yves Lafon, and Julian Reschke will be the editors after | ||||
draft 00 is submitted. | ||||
Discussion of this draft should take place on the HTTPBIS working | Discussion of this draft should take place on the HTTPBIS working | |||
group mailing list (ietf-http-wg@w3.org). The current issues list is | group mailing list (ietf-http-wg@w3.org). The current issues list is | |||
at <http://www3.tools.ietf.org/wg/httpbis/trac/report/11> and related | at <http://www.tools.ietf.org/wg/httpbis/trac/report/11> and related | |||
documents (including fancy diffs) can be found at | documents (including fancy diffs) can be found at | |||
<http://www3.tools.ietf.org/wg/httpbis/>. | <http://www.tools.ietf.org/wg/httpbis/>. | |||
This draft incorporates those issue resolutions that were either | ||||
collected in the original RFC2616 errata list | ||||
(<http://purl.org/NET/http-errata>), or which were agreed upon on the | ||||
mailing list between October 2006 and November 2007 (as published in | ||||
"draft-lafon-rfc2616bis-03"). | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.1. Purpose . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.1. Purpose . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.2. Requirements . . . . . . . . . . . . . . . . . . . . . . . 6 | 1.2. Requirements . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6 | 1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
1.4. Overall Operation . . . . . . . . . . . . . . . . . . . . 9 | 1.4. Overall Operation . . . . . . . . . . . . . . . . . . . . 9 | |||
2. Notational Conventions and Generic Grammar . . . . . . . . . . 11 | 2. Notational Conventions and Generic Grammar . . . . . . . . . . 11 | |||
2.1. Augmented BNF . . . . . . . . . . . . . . . . . . . . . . 11 | 2.1. Augmented BNF . . . . . . . . . . . . . . . . . . . . . . 11 | |||
2.2. Basic Rules . . . . . . . . . . . . . . . . . . . . . . . 13 | 2.2. Basic Rules . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
3. Protocol Parameters . . . . . . . . . . . . . . . . . . . . . 15 | 3. Protocol Parameters . . . . . . . . . . . . . . . . . . . . . 15 | |||
3.1. HTTP Version . . . . . . . . . . . . . . . . . . . . . . . 15 | 3.1. HTTP Version . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
3.2. Uniform Resource Identifiers . . . . . . . . . . . . . . . 16 | 3.2. Uniform Resource Identifiers . . . . . . . . . . . . . . . 16 | |||
3.2.1. General Syntax . . . . . . . . . . . . . . . . . . . . 16 | 3.2.1. General Syntax . . . . . . . . . . . . . . . . . . . . 17 | |||
3.2.2. http URL . . . . . . . . . . . . . . . . . . . . . . . 17 | 3.2.2. http URL . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
3.2.3. URI Comparison . . . . . . . . . . . . . . . . . . . . 17 | 3.2.3. URI Comparison . . . . . . . . . . . . . . . . . . . . 18 | |||
3.3. Date/Time Formats . . . . . . . . . . . . . . . . . . . . 18 | 3.3. Date/Time Formats . . . . . . . . . . . . . . . . . . . . 18 | |||
3.3.1. Full Date . . . . . . . . . . . . . . . . . . . . . . 18 | 3.3.1. Full Date . . . . . . . . . . . . . . . . . . . . . . 18 | |||
3.4. Transfer Codings . . . . . . . . . . . . . . . . . . . . . 19 | 3.4. Transfer Codings . . . . . . . . . . . . . . . . . . . . . 19 | |||
3.4.1. Chunked Transfer Coding . . . . . . . . . . . . . . . 20 | 3.4.1. Chunked Transfer Coding . . . . . . . . . . . . . . . 20 | |||
4. HTTP Message . . . . . . . . . . . . . . . . . . . . . . . . . 22 | 4. HTTP Message . . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
4.1. Message Types . . . . . . . . . . . . . . . . . . . . . . 22 | 4.1. Message Types . . . . . . . . . . . . . . . . . . . . . . 22 | |||
4.2. Message Headers . . . . . . . . . . . . . . . . . . . . . 23 | 4.2. Message Headers . . . . . . . . . . . . . . . . . . . . . 23 | |||
4.3. Message Body . . . . . . . . . . . . . . . . . . . . . . . 24 | 4.3. Message Body . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
4.4. Message Length . . . . . . . . . . . . . . . . . . . . . . 25 | 4.4. Message Length . . . . . . . . . . . . . . . . . . . . . . 25 | |||
4.5. General Header Fields . . . . . . . . . . . . . . . . . . 26 | 4.5. General Header Fields . . . . . . . . . . . . . . . . . . 26 | |||
5. Request . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 5. Request . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
5.1. Request-Line . . . . . . . . . . . . . . . . . . . . . . . 27 | 5.1. Request-Line . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
5.1.1. Method . . . . . . . . . . . . . . . . . . . . . . . . 27 | 5.1.1. Method . . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
5.1.2. Request-URI . . . . . . . . . . . . . . . . . . . . . 27 | 5.1.2. Request-URI . . . . . . . . . . . . . . . . . . . . . 27 | |||
5.2. The Resource Identified by a Request . . . . . . . . . . . 28 | 5.2. The Resource Identified by a Request . . . . . . . . . . . 29 | |||
6. Response . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | 6. Response . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
6.1. Status-Line . . . . . . . . . . . . . . . . . . . . . . . 29 | 6.1. Status-Line . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
6.1.1. Status Code and Reason Phrase . . . . . . . . . . . . 30 | 6.1.1. Status Code and Reason Phrase . . . . . . . . . . . . 30 | |||
7. Connections . . . . . . . . . . . . . . . . . . . . . . . . . 30 | 7. Connections . . . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
7.1. Persistent Connections . . . . . . . . . . . . . . . . . . 30 | 7.1. Persistent Connections . . . . . . . . . . . . . . . . . . 31 | |||
7.1.1. Purpose . . . . . . . . . . . . . . . . . . . . . . . 30 | 7.1.1. Purpose . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
7.1.2. Overall Operation . . . . . . . . . . . . . . . . . . 31 | 7.1.2. Overall Operation . . . . . . . . . . . . . . . . . . 31 | |||
7.1.3. Proxy Servers . . . . . . . . . . . . . . . . . . . . 33 | 7.1.3. Proxy Servers . . . . . . . . . . . . . . . . . . . . 33 | |||
7.1.4. Practical Considerations . . . . . . . . . . . . . . . 33 | 7.1.4. Practical Considerations . . . . . . . . . . . . . . . 33 | |||
7.2. Message Transmission Requirements . . . . . . . . . . . . 34 | 7.2. Message Transmission Requirements . . . . . . . . . . . . 34 | |||
7.2.1. Persistent Connections and Flow Control . . . . . . . 34 | 7.2.1. Persistent Connections and Flow Control . . . . . . . 34 | |||
7.2.2. Monitoring Connections for Error Status Messages . . . 34 | 7.2.2. Monitoring Connections for Error Status Messages . . . 34 | |||
7.2.3. Use of the 100 (Continue) Status . . . . . . . . . . . 34 | 7.2.3. Use of the 100 (Continue) Status . . . . . . . . . . . 35 | |||
7.2.4. Client Behavior if Server Prematurely Closes | 7.2.4. Client Behavior if Server Prematurely Closes | |||
Connection . . . . . . . . . . . . . . . . . . . . . . 36 | Connection . . . . . . . . . . . . . . . . . . . . . . 37 | |||
8. Header Field Definitions . . . . . . . . . . . . . . . . . . . 37 | 8. Header Field Definitions . . . . . . . . . . . . . . . . . . . 37 | |||
8.1. Connection . . . . . . . . . . . . . . . . . . . . . . . . 37 | 8.1. Connection . . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
8.2. Content-Length . . . . . . . . . . . . . . . . . . . . . . 38 | 8.2. Content-Length . . . . . . . . . . . . . . . . . . . . . . 39 | |||
8.3. Date . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 | 8.3. Date . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 | |||
8.3.1. Clockless Origin Server Operation . . . . . . . . . . 40 | 8.3.1. Clockless Origin Server Operation . . . . . . . . . . 40 | |||
8.4. Host . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 | 8.4. Host . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
8.5. TE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 | 8.5. TE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 | |||
8.6. Trailer . . . . . . . . . . . . . . . . . . . . . . . . . 42 | 8.6. Trailer . . . . . . . . . . . . . . . . . . . . . . . . . 42 | |||
8.7. Transfer-Encoding . . . . . . . . . . . . . . . . . . . . 43 | 8.7. Transfer-Encoding . . . . . . . . . . . . . . . . . . . . 43 | |||
8.8. Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . 43 | 8.8. Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . 43 | |||
8.9. Via . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 | 8.9. Via . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46 | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 46 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 46 | |||
10.1. Personal Information . . . . . . . . . . . . . . . . . . . 46 | 10.1. Personal Information . . . . . . . . . . . . . . . . . . . 46 | |||
10.2. Abuse of Server Log Information . . . . . . . . . . . . . 46 | 10.2. Abuse of Server Log Information . . . . . . . . . . . . . 46 | |||
10.3. Attacks Based On File and Path Names . . . . . . . . . . . 46 | 10.3. Attacks Based On File and Path Names . . . . . . . . . . . 47 | |||
10.4. DNS Spoofing . . . . . . . . . . . . . . . . . . . . . . . 47 | 10.4. DNS Spoofing . . . . . . . . . . . . . . . . . . . . . . . 47 | |||
10.5. Proxies and Caching . . . . . . . . . . . . . . . . . . . 47 | 10.5. Proxies and Caching . . . . . . . . . . . . . . . . . . . 48 | |||
10.6. Denial of Service Attacks on Proxies . . . . . . . . . . . 48 | 10.6. Denial of Service Attacks on Proxies . . . . . . . . . . . 48 | |||
11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 48 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 49 | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 50 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 50 | |||
Appendix A. Internet Media Type message/http and | 12.1. Normative References . . . . . . . . . . . . . . . . . . . 50 | |||
application/http . . . . . . . . . . . . . . . . . . 53 | 12.2. Informative References . . . . . . . . . . . . . . . . . . 51 | |||
Appendix B. Tolerant Applications . . . . . . . . . . . . . . . . 54 | Appendix A. Internet Media Types . . . . . . . . . . . . . . . . 53 | |||
Appendix C. Conversion of Date Formats . . . . . . . . . . . . . 55 | A.1. Internet Media Type message/http . . . . . . . . . . . . . 53 | |||
Appendix D. Compatibility with Previous Versions . . . . . . . . 55 | A.2. Internet Media Type application/http . . . . . . . . . . . 54 | |||
D.1. Changes from HTTP/1.0 . . . . . . . . . . . . . . . . . . 56 | Appendix B. Tolerant Applications . . . . . . . . . . . . . . . . 55 | |||
Appendix C. Conversion of Date Formats . . . . . . . . . . . . . 56 | ||||
Appendix D. Compatibility with Previous Versions . . . . . . . . 56 | ||||
D.1. Changes from HTTP/1.0 . . . . . . . . . . . . . . . . . . 57 | ||||
D.1.1. Changes to Simplify Multi-homed Web Servers and | D.1.1. Changes to Simplify Multi-homed Web Servers and | |||
Conserve IP Addresses . . . . . . . . . . . . . . . . 56 | Conserve IP Addresses . . . . . . . . . . . . . . . . 57 | |||
D.2. Compatibility with HTTP/1.0 Persistent Connections . . . . 56 | D.2. Compatibility with HTTP/1.0 Persistent Connections . . . . 58 | |||
D.3. Changes from RFC 2068 . . . . . . . . . . . . . . . . . . 57 | D.3. Changes from RFC 2068 . . . . . . . . . . . . . . . . . . 58 | |||
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 | D.4. Changes from RFC 2616 . . . . . . . . . . . . . . . . . . 59 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 61 | Appendix E. Change Log (to be removed by RFC Editor before | |||
Intellectual Property and Copyright Statements . . . . . . . . . . 63 | publication) . . . . . . . . . . . . . . . . . . . . 59 | |||
E.1. Since RFC2616 . . . . . . . . . . . . . . . . . . . . . . 59 | ||||
E.2. Since draft-ietf-httpbis-p1-messaging-00 . . . . . . . . . 59 | ||||
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 64 | ||||
Intellectual Property and Copyright Statements . . . . . . . . . . 68 | ||||
1. Introduction | 1. Introduction | |||
This document will define aspects of HTTP related to overall network | ||||
operation, message framing, interaction with transport protocols, and | ||||
URI schemes. Right now it only includes the extracted relevant | ||||
sections of [RFC2616]. | ||||
1.1. Purpose | ||||
The Hypertext Transfer Protocol (HTTP) is an application-level | The Hypertext Transfer Protocol (HTTP) is an application-level | |||
protocol for distributed, collaborative, hypermedia information | protocol for distributed, collaborative, hypermedia information | |||
systems. HTTP has been in use by the World-Wide Web global | systems. HTTP has been in use by the World-Wide Web global | |||
information initiative since 1990. The first version of HTTP, | information initiative since 1990. The first version of HTTP, | |||
referred to as HTTP/0.9, was a simple protocol for raw data transfer | commonly referred to as HTTP/0.9, was a simple protocol for raw data | |||
across the Internet. HTTP/1.0, as defined by RFC 1945 [RFC1945], | transfer across the Internet with only a single method and no | |||
improved the protocol by allowing messages to be in the format of | metadata. HTTP/1.0, as defined by [RFC1945], improved the protocol | |||
MIME-like messages, containing metainformation about the data | by allowing messages to be in the format of MIME-like messages, | |||
transferred and modifiers on the request/response semantics. | containing metadata about the data transferred and modifiers on the | |||
However, HTTP/1.0 does not sufficiently take into consideration the | request/response semantics. However, HTTP/1.0 did not sufficiently | |||
effects of hierarchical proxies, caching, the need for persistent | take into consideration the effects of hierarchical proxies, caching, | |||
connections, or virtual hosts. In addition, the proliferation of | the need for persistent connections, or name-based virtual hosts. In | |||
incompletely-implemented applications calling themselves "HTTP/1.0" | addition, the proliferation of incompletely-implemented applications | |||
has necessitated a protocol version change in order for two | calling themselves "HTTP/1.0" necessitated a protocol version change | |||
communicating applications to determine each other's true | in order for two communicating applications to determine each other's | |||
capabilities. | true capabilities. | |||
This specification defines the protocol referred to as "HTTP/1.1". | This document is Part 1 of the seven-part specification that defines | |||
This protocol includes more stringent requirements than HTTP/1.0 in | the protocol referred to as "HTTP/1.1", obsoleting [RFC2616]. | |||
order to ensure reliable implementation of its features. | HTTP/1.1 remains compatible with HTTP/1.0 by including more stringent | |||
requirements that enable reliable implementations and adding only | ||||
those new features that will either be safely ignored by an HTTP/1.0 | ||||
recipient or only sent when communicating with a party advertising | ||||
compliance with HTTP/1.1. Part 1 defines those aspects of HTTP/1.1 | ||||
related to overall network operation, message framing, interaction | ||||
with transport protocols, and URI schemes. | ||||
This document is currently disorganized in order to minimize the | ||||
changes between drafts and enable reviewers to see the smaller errata | ||||
changes. The next draft will reorganize the sections to better | ||||
reflect the content. In particular, the sections will be organized | ||||
according to the typical process of deciding when to use HTTP (URI | ||||
schemes), overall network operation, connection management, message | ||||
framing, and generic message parsing. The current mess reflects how | ||||
widely dispersed these topics and associated requirements had become | ||||
in [RFC2616]. | ||||
1.1. Purpose | ||||
Practical information systems require more functionality than simple | Practical information systems require more functionality than simple | |||
retrieval, including search, front-end update, and annotation. HTTP | retrieval, including search, front-end update, and annotation. HTTP | |||
allows an open-ended set of methods and headers that indicate the | allows an open-ended set of methods and headers that indicate the | |||
purpose of a request [RFC2324]. It builds on the discipline of | purpose of a request [RFC2324]. It builds on the discipline of | |||
reference provided by the Uniform Resource Identifier (URI) | reference provided by the Uniform Resource Identifier (URI) | |||
[RFC1630], as a location (URL) [RFC1738] or name (URN) [RFC1737], for | [RFC1630], as a location (URL) [RFC1738] or name (URN) [RFC1737], for | |||
indicating the resource to which a method is to be applied. Messages | indicating the resource to which a method is to be applied. Messages | |||
are passed in a format similar to that used by Internet mail [RFC822] | are passed in a format similar to that used by Internet mail | |||
as defined by the Multipurpose Internet Mail Extensions (MIME) | [RFC2822] as defined by the Multipurpose Internet Mail Extensions | |||
[RFC2045]. | (MIME) [RFC2045]. | |||
HTTP is also used as a generic protocol for communication between | HTTP is also used as a generic protocol for communication between | |||
user agents and proxies/gateways to other Internet systems, including | user agents and proxies/gateways to other Internet systems, including | |||
those supported by the SMTP [RFC821], NNTP [RFC977], FTP [RFC959], | those supported by the SMTP [RFC2821], NNTP [RFC3977], FTP [RFC959], | |||
Gopher [RFC1436], and WAIS [WAIS] protocols. In this way, HTTP | Gopher [RFC1436], and WAIS [WAIS] protocols. In this way, HTTP | |||
allows basic hypermedia access to resources available from diverse | allows basic hypermedia access to resources available from diverse | |||
applications. | applications. | |||
1.2. Requirements | 1.2. Requirements | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
An implementation is not compliant if it fails to satisfy one or more | An implementation is not compliant if it fails to satisfy one or more | |||
of the MUST or REQUIRED level requirements for the protocols it | of the MUST or REQUIRED level requirements for the protocols it | |||
implements. An implementation that satisfies all the MUST or | implements. An implementation that satisfies all the MUST or | |||
REQUIRED level and all the SHOULD level requirements for its | REQUIRED level and all the SHOULD level requirements for its | |||
protocols is said to be "unconditionally compliant"; one that | protocols is said to be "unconditionally compliant"; one that | |||
satisfies all the MUST level requirements but not all the SHOULD | satisfies all the MUST level requirements but not all the SHOULD | |||
level requirements for its protocols is said to be "conditionally | level requirements for its protocols is said to be "conditionally | |||
compliant." | compliant." | |||
skipping to change at page 7, line 27 | skipping to change at page 7, line 38 | |||
The mechanism for selecting the appropriate representation when | The mechanism for selecting the appropriate representation when | |||
servicing a request, as described in Section 4 of [Part3]. The | servicing a request, as described in Section 4 of [Part3]. The | |||
representation of entities in any response can be negotiated | representation of entities in any response can be negotiated | |||
(including error responses). | (including error responses). | |||
variant | variant | |||
A resource may have one, or more than one, representation(s) | A resource may have one, or more than one, representation(s) | |||
associated with it at any given instant. Each of these | associated with it at any given instant. Each of these | |||
representations is termed a `varriant'. Use of the term `variant' | representations is termed a `variant'. Use of the term `variant' | |||
does not necessarily imply that the resource is subject to content | does not necessarily imply that the resource is subject to content | |||
negotiation. | negotiation. | |||
client | client | |||
A program that establishes connections for the purpose of sending | A program that establishes connections for the purpose of sending | |||
requests. | requests. | |||
user agent | user agent | |||
skipping to change at page 8, line 42 | skipping to change at page 9, line 4 | |||
tunnel | tunnel | |||
An intermediary program which is acting as a blind relay between | An intermediary program which is acting as a blind relay between | |||
two connections. Once active, a tunnel is not considered a party | two connections. Once active, a tunnel is not considered a party | |||
to the HTTP communication, though the tunnel may have been | to the HTTP communication, though the tunnel may have been | |||
initiated by an HTTP request. The tunnel ceases to exist when | initiated by an HTTP request. The tunnel ceases to exist when | |||
both ends of the relayed connections are closed. | both ends of the relayed connections are closed. | |||
cache | cache | |||
A program's local store of response messages and the subsystem | A program's local store of response messages and the subsystem | |||
that controls its message storage, retrieval, and deletion. A | that controls its message storage, retrieval, and deletion. A | |||
cache stores cacheable responses in order to reduce the response | cache stores cacheable responses in order to reduce the response | |||
time and network bandwidth consumption on future, equivalent | time and network bandwidth consumption on future, equivalent | |||
requests. Any client or server may include a cache, though a | requests. Any client or server may include a cache, though a | |||
cache cannot be used by a server that is acting as a tunnel. | cache cannot be used by a server that is acting as a tunnel. | |||
cacheable | cacheable | |||
A response is cacheable if a cache is allowed to store a copy of | A response is cacheable if a cache is allowed to store a copy of | |||
the response message for use in answering subsequent requests. | the response message for use in answering subsequent requests. | |||
The rules for determining the cacheability of HTTP responses are | The rules for determining the cacheability of HTTP responses are | |||
defined in Section 2 of [Part6]. Even if a resource is cacheable, | defined in Section 1 of [Part6]. Even if a resource is cacheable, | |||
there may be additional constraints on whether a cache can use the | there may be additional constraints on whether a cache can use the | |||
cached copy for a particular request. | cached copy for a particular request. | |||
upstream/downstream | upstream/downstream | |||
Upstream and downstream describe the flow of a message: all | Upstream and downstream describe the flow of a message: all | |||
messages flow from upstream to downstream. | messages flow from upstream to downstream. | |||
inbound/outbound | inbound/outbound | |||
skipping to change at page 10, line 40 | skipping to change at page 10, line 49 | |||
cached copy of an earlier response from O (via C) for a request which | cached copy of an earlier response from O (via C) for a request which | |||
has not been cached by UA or A. | has not been cached by UA or A. | |||
request chain ----------> | request chain ----------> | |||
UA -----v----- A -----v----- B - - - - - - C - - - - - - O | UA -----v----- A -----v----- B - - - - - - C - - - - - - O | |||
<--------- response chain | <--------- response chain | |||
Not all responses are usefully cacheable, and some requests may | Not all responses are usefully cacheable, and some requests may | |||
contain modifiers which place special requirements on cache behavior. | contain modifiers which place special requirements on cache behavior. | |||
HTTP requirements for cache behavior and cacheable responses are | HTTP requirements for cache behavior and cacheable responses are | |||
defined in Section 2 of [Part6]. | defined in Section 1 of [Part6]. | |||
In fact, there are a wide variety of architectures and configurations | In fact, there are a wide variety of architectures and configurations | |||
of caches and proxies currently being experimented with or deployed | of caches and proxies currently being experimented with or deployed | |||
across the World Wide Web. These systems include national hierarchies | across the World Wide Web. These systems include national hierarchies | |||
of proxy caches to save transoceanic bandwidth, systems that | of proxy caches to save transoceanic bandwidth, systems that | |||
broadcast or multicast cache entries, organizations that distribute | broadcast or multicast cache entries, organizations that distribute | |||
subsets of cached data via CD-ROM, and so on. HTTP systems are used | subsets of cached data via CD-ROM, and so on. HTTP systems are used | |||
in corporate intranets over high-bandwidth links, and for access via | in corporate intranets over high-bandwidth links, and for access via | |||
PDAs with low-power radio links and intermittent connectivity. The | PDAs with low-power radio links and intermittent connectivity. The | |||
goal of HTTP/1.1 is to support the wide diversity of configurations | goal of HTTP/1.1 is to support the wide diversity of configurations | |||
already deployed while introducing protocol constructs that meet the | already deployed while introducing protocol constructs that meet the | |||
needs of those who build web applications that require high | needs of those who build web applications that require high | |||
reliability and, failing that, at least reliable indications of | reliability and, failing that, at least reliable indications of | |||
failure. | failure. | |||
HTTP communication usually takes place over TCP/IP connections. The | HTTP communication usually takes place over TCP/IP connections. The | |||
default port is TCP 80 [RFC1700], but other ports can be used. This | default port is TCP 80 | |||
does not preclude HTTP from being implemented on top of any other | (<http://www.iana.org/assignments/port-numbers>), but other ports can | |||
protocol on the Internet, or on other networks. HTTP only presumes a | be used. This does not preclude HTTP from being implemented on top | |||
reliable transport; any protocol that provides such guarantees can be | of any other protocol on the Internet, or on other networks. HTTP | |||
used; the mapping of the HTTP/1.1 request and response structures | only presumes a reliable transport; any protocol that provides such | |||
onto the transport data units of the protocol in question is outside | guarantees can be used; the mapping of the HTTP/1.1 request and | |||
the scope of this specification. | response structures onto the transport data units of the protocol in | |||
question is outside the scope of this specification. | ||||
In HTTP/1.0, most implementations used a new connection for each | In HTTP/1.0, most implementations used a new connection for each | |||
request/response exchange. In HTTP/1.1, a connection may be used for | request/response exchange. In HTTP/1.1, a connection may be used for | |||
one or more request/response exchanges, although connections may be | one or more request/response exchanges, although connections may be | |||
closed for a variety of reasons (see Section 7.1). | closed for a variety of reasons (see Section 7.1). | |||
2. Notational Conventions and Generic Grammar | 2. Notational Conventions and Generic Grammar | |||
2.1. Augmented BNF | 2.1. Augmented BNF | |||
All of the mechanisms specified in this document are described in | All of the mechanisms specified in this document are described in | |||
both prose and an augmented Backus-Naur Form (BNF) similar to that | both prose and an augmented Backus-Naur Form (BNF) similar to that | |||
used by RFC 822 [RFC822]. Implementors will need to be familiar with | used by [RFC822ABNF]. Implementors will need to be familiar with the | |||
the notation in order to understand this specification. The | notation in order to understand this specification. The augmented | |||
augmented BNF includes the following constructs: | BNF includes the following constructs: | |||
name = definition | name = definition | |||
The name of a rule is simply the name itself (without any | The name of a rule is simply the name itself (without any | |||
enclosing "<" and ">") and is separated from its definition by the | enclosing "<" and ">") and is separated from its definition by the | |||
equal "=" character. White space is only significant in that | equal "=" character. White space is only significant in that | |||
indentation of continuation lines is used to indicate a rule | indentation of continuation lines is used to indicate a rule | |||
definition that spans more than one line. Certain basic rules are | definition that spans more than one line. Certain basic rules are | |||
in uppercase, such as SP, LWS, HT, CRLF, DIGIT, ALPHA, etc. Angle | in uppercase, such as SP, LWS, HTAB, CRLF, DIGIT, ALPHA, etc. | |||
brackets are used within definitions whenever their presence will | Angle brackets are used within definitions whenever their presence | |||
facilitate discerning the use of rule names. | will facilitate discerning the use of rule names. | |||
"literal" | "literal" | |||
Quotation marks surround literal text. Unless stated otherwise, | Quotation marks surround literal text. Unless stated otherwise, | |||
the text is case-insensitive. | the text is case-insensitive. | |||
rule1 | rule2 | rule1 | rule2 | |||
Elements separated by a bar ("|") are alternatives, e.g., "yes | | Elements separated by a bar ("|") are alternatives, e.g., "yes | | |||
no" will accept yes or no. | no" will accept yes or no. | |||
(rule1 rule2) | (rule1 rule2) | |||
Elements enclosed in parentheses are treated as a single element. | Elements enclosed in parentheses are treated as a single element. | |||
Thus, "(elem (foo | bar) elem)" allows the token sequences "elem | Thus, "(elem (foo | bar) elem)" allows the token sequences "elem | |||
foo elem" and "elem bar elem". | foo elem" and "elem bar elem". | |||
*rule | *rule | |||
skipping to change at page 13, line 43 | skipping to change at page 14, line 16 | |||
CHAR = <any US-ASCII character (octets 0 - 127)> | CHAR = <any US-ASCII character (octets 0 - 127)> | |||
UPALPHA = <any US-ASCII uppercase letter "A".."Z"> | UPALPHA = <any US-ASCII uppercase letter "A".."Z"> | |||
LOALPHA = <any US-ASCII lowercase letter "a".."z"> | LOALPHA = <any US-ASCII lowercase letter "a".."z"> | |||
ALPHA = UPALPHA | LOALPHA | ALPHA = UPALPHA | LOALPHA | |||
DIGIT = <any US-ASCII digit "0".."9"> | DIGIT = <any US-ASCII digit "0".."9"> | |||
CTL = <any US-ASCII control character | CTL = <any US-ASCII control character | |||
(octets 0 - 31) and DEL (127)> | (octets 0 - 31) and DEL (127)> | |||
CR = <US-ASCII CR, carriage return (13)> | CR = <US-ASCII CR, carriage return (13)> | |||
LF = <US-ASCII LF, linefeed (10)> | LF = <US-ASCII LF, linefeed (10)> | |||
SP = <US-ASCII SP, space (32)> | SP = <US-ASCII SP, space (32)> | |||
HT = <US-ASCII HT, horizontal-tab (9)> | HTAB = <US-ASCII HT, horizontal-tab (9)> | |||
<"> = <US-ASCII double-quote mark (34)> | DQUOTE = <US-ASCII double-quote mark (34)> | |||
HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all | HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all | |||
protocol elements except the entity-body (see Appendix B for tolerant | protocol elements except the entity-body (see Appendix B for tolerant | |||
applications). The end-of-line marker within an entity-body is | applications). The end-of-line marker within an entity-body is | |||
defined by its associated media type, as described in [Part3]. | defined by its associated media type, as described in Section 2.3 of | |||
[Part3]. | ||||
CRLF = CR LF | CRLF = CR LF | |||
HTTP/1.1 header field values can be folded onto multiple lines if the | HTTP/1.1 header field values can be folded onto multiple lines if the | |||
continuation line begins with a space or horizontal tab. All linear | continuation line begins with a space or horizontal tab. All linear | |||
white space, including folding, has the same semantics as SP. A | white space, including folding, has the same semantics as SP. A | |||
recipient MAY replace any linear white space with a single SP before | recipient MAY replace any linear white space with a single SP before | |||
interpreting the field value or forwarding the message downstream. | interpreting the field value or forwarding the message downstream. | |||
LWS = [CRLF] 1*( SP | HT ) | LWS = [CRLF] 1*( SP | HTAB ) | |||
The TEXT rule is only used for descriptive field contents and values | The TEXT rule is only used for descriptive field contents and values | |||
that are not intended to be interpreted by the message parser. Words | that are not intended to be interpreted by the message parser. Words | |||
of *TEXT MAY contain characters from character sets other than ISO- | of *TEXT MAY contain characters from character sets other than ISO- | |||
8859-1 [ISO-8859] only when encoded according to the rules of RFC | 8859-1 [ISO-8859-1] only when encoded according to the rules of | |||
2047 [RFC2047]. | [RFC2047]. | |||
TEXT = <any OCTET except CTLs, | TEXT = <any OCTET except CTLs, | |||
but including LWS> | but including LWS> | |||
A CRLF is allowed in the definition of TEXT only as part of a header | A CRLF is allowed in the definition of TEXT only as part of a header | |||
field continuation. It is expected that the folding LWS will be | field continuation. It is expected that the folding LWS will be | |||
replaced with a single SP before interpretation of the TEXT value. | replaced with a single SP before interpretation of the TEXT value. | |||
Hexadecimal numeric characters are used in several protocol elements. | Hexadecimal numeric characters are used in several protocol elements. | |||
skipping to change at page 14, line 29 | skipping to change at page 15, line 4 | |||
but including LWS> | but including LWS> | |||
A CRLF is allowed in the definition of TEXT only as part of a header | A CRLF is allowed in the definition of TEXT only as part of a header | |||
field continuation. It is expected that the folding LWS will be | field continuation. It is expected that the folding LWS will be | |||
replaced with a single SP before interpretation of the TEXT value. | replaced with a single SP before interpretation of the TEXT value. | |||
Hexadecimal numeric characters are used in several protocol elements. | Hexadecimal numeric characters are used in several protocol elements. | |||
HEX = "A" | "B" | "C" | "D" | "E" | "F" | HEX = "A" | "B" | "C" | "D" | "E" | "F" | |||
| "a" | "b" | "c" | "d" | "e" | "f" | DIGIT | | "a" | "b" | "c" | "d" | "e" | "f" | DIGIT | |||
Many HTTP/1.1 header field values consist of words separated by LWS | Many HTTP/1.1 header field values consist of words separated by LWS | |||
or special characters. These special characters MUST be in a quoted | or special characters. These special characters MUST be in a quoted | |||
string to be used within a parameter value (as defined in | string to be used within a parameter value (as defined in | |||
Section 3.4). | Section 3.4). | |||
token = 1*<any CHAR except CTLs or separators> | token = 1*<any CHAR except CTLs or separators> | |||
separators = "(" | ")" | "<" | ">" | "@" | separators = "(" | ")" | "<" | ">" | "@" | |||
| "," | ";" | ":" | "\" | <"> | | "," | ";" | ":" | "\" | DQUOTE | |||
| "/" | "[" | "]" | "?" | "=" | | "/" | "[" | "]" | "?" | "=" | |||
| "{" | "}" | SP | HT | | "{" | "}" | SP | HTAB | |||
Comments can be included in some HTTP header fields by surrounding | Comments can be included in some HTTP header fields by surrounding | |||
the comment text with parentheses. Comments are only allowed in | the comment text with parentheses. Comments are only allowed in | |||
fields containing "comment" as part of their field value definition. | fields containing "comment" as part of their field value definition. | |||
In all other fields, parentheses are considered part of the field | In all other fields, parentheses are considered part of the field | |||
value. | value. | |||
comment = "(" *( ctext | quoted-pair | comment ) ")" | comment = "(" *( ctext | quoted-pair | comment ) ")" | |||
ctext = <any TEXT excluding "(" and ")"> | ctext = <any TEXT excluding "(" and ")"> | |||
A string of text is parsed as a single word if it is quoted using | A string of text is parsed as a single word if it is quoted using | |||
double-quote marks. | double-quote marks. | |||
quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) | quoted-string = ( DQUOTE *(qdtext | quoted-pair ) DQUOTE ) | |||
qdtext = <any TEXT except <">> | qdtext = <any TEXT excluding DQUOTE and "\"> | |||
The backslash character ("\") MAY be used as a single-character | The backslash character ("\") MAY be used as a single-character | |||
quoting mechanism only within quoted-string and comment constructs. | quoting mechanism only within quoted-string and comment constructs. | |||
quoted-pair = "\" CHAR | quoted-pair = "\" CHAR | |||
3. Protocol Parameters | 3. Protocol Parameters | |||
3.1. HTTP Version | 3.1. HTTP Version | |||
skipping to change at page 15, line 29 | skipping to change at page 16, line 4 | |||
the sender to indicate the format of a message and its capacity for | the sender to indicate the format of a message and its capacity for | |||
understanding further HTTP communication, rather than the features | understanding further HTTP communication, rather than the features | |||
obtained via that communication. No change is made to the version | obtained via that communication. No change is made to the version | |||
number for the addition of message components which do not affect | number for the addition of message components which do not affect | |||
communication behavior or which only add to extensible field values. | communication behavior or which only add to extensible field values. | |||
The <minor> number is incremented when the changes made to the | The <minor> number is incremented when the changes made to the | |||
protocol add features which do not change the general message parsing | protocol add features which do not change the general message parsing | |||
algorithm, but which may add to the message semantics and imply | algorithm, but which may add to the message semantics and imply | |||
additional capabilities of the sender. The <major> number is | additional capabilities of the sender. The <major> number is | |||
incremented when the format of a message within the protocol is | incremented when the format of a message within the protocol is | |||
changed. See RFC 2145 [RFC2145] for a fuller explanation. | changed. See [RFC2145] for a fuller explanation. | |||
The version of an HTTP message is indicated by an HTTP-Version field | The version of an HTTP message is indicated by an HTTP-Version field | |||
in the first line of the message. | in the first line of the message. HTTP-Version is case-sensitive. | |||
HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT | HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT | |||
Note that the major and minor numbers MUST be treated as separate | Note that the major and minor numbers MUST be treated as separate | |||
integers and that each MAY be incremented higher than a single digit. | integers and that each MAY be incremented higher than a single digit. | |||
Thus, HTTP/2.4 is a lower version than HTTP/2.13, which in turn is | Thus, HTTP/2.4 is a lower version than HTTP/2.13, which in turn is | |||
lower than HTTP/12.3. Leading zeros MUST be ignored by recipients | lower than HTTP/12.3. Leading zeros MUST be ignored by recipients | |||
and MUST NOT be sent. | and MUST NOT be sent. | |||
An application that sends a request or response message that includes | An application that sends a request or response message that includes | |||
HTTP-Version of "HTTP/1.1" MUST be at least conditionally compliant | HTTP-Version of "HTTP/1.1" MUST be at least conditionally compliant | |||
with this specification. Applications that are at least | with this specification. Applications that are at least | |||
conditionally compliant with this specification SHOULD use an HTTP- | conditionally compliant with this specification SHOULD use an HTTP- | |||
Version of "HTTP/1.1" in their messages, and MUST do so for any | Version of "HTTP/1.1" in their messages, and MUST do so for any | |||
message that is not compatible with HTTP/1.0. For more details on | message that is not compatible with HTTP/1.0. For more details on | |||
when to send specific HTTP-Version values, see RFC 2145 [RFC2145]. | when to send specific HTTP-Version values, see [RFC2145]. | |||
The HTTP version of an application is the highest HTTP version for | The HTTP version of an application is the highest HTTP version for | |||
which the application is at least conditionally compliant. | which the application is at least conditionally compliant. | |||
Proxy and gateway applications need to be careful when forwarding | Proxy and gateway applications need to be careful when forwarding | |||
messages in protocol versions different from that of the application. | messages in protocol versions different from that of the application. | |||
Since the protocol version indicates the protocol capability of the | Since the protocol version indicates the protocol capability of the | |||
sender, a proxy/gateway MUST NOT send a message with a version | sender, a proxy/gateway MUST NOT send a message with a version | |||
indicator which is greater than its actual version. If a higher | indicator which is greater than its actual version. If a higher | |||
version request is received, the proxy/gateway MUST either downgrade | version request is received, the proxy/gateway MUST either downgrade | |||
the request version, or respond with an error, or switch to tunnel | the request version, or respond with an error, or switch to tunnel | |||
behavior. | behavior. | |||
Due to interoperability problems with HTTP/1.0 proxies discovered | Due to interoperability problems with HTTP/1.0 proxies discovered | |||
since the publication of RFC 2068 [RFC2068], caching proxies MUST, | since the publication of [RFC2068], caching proxies MUST, gateways | |||
gateways MAY, and tunnels MUST NOT upgrade the request to the highest | MAY, and tunnels MUST NOT upgrade the request to the highest version | |||
version they support. The proxy/gateway's response to that request | they support. The proxy/gateway's response to that request MUST be | |||
MUST be in the same major version as the request. | in the same major version as the request. | |||
Note: Converting between versions of HTTP may involve modification | Note: Converting between versions of HTTP may involve modification | |||
of header fields required or forbidden by the versions involved. | of header fields required or forbidden by the versions involved. | |||
3.2. Uniform Resource Identifiers | 3.2. Uniform Resource Identifiers | |||
URIs have been known by many names: WWW addresses, Universal Document | URIs have been known by many names: WWW addresses, Universal Document | |||
Identifiers, Universal Resource Identifiers [RFC1630], and finally | Identifiers, Universal Resource Identifiers [RFC1630], and finally | |||
the combination of Uniform Resource Locators (URL) [RFC1738] and | the combination of Uniform Resource Locators (URL) [RFC1738] and | |||
Names (URN) [RFC1737]. As far as HTTP is concerned, Uniform Resource | Names (URN) [RFC1737]. As far as HTTP is concerned, Uniform Resource | |||
Identifiers are simply formatted strings which identify--via name, | Identifiers are simply formatted strings which identify--via name, | |||
location, or any other characteristic--a resource. | location, or any other characteristic--a resource. | |||
3.2.1. General Syntax | 3.2.1. General Syntax | |||
URIs in HTTP can be represented in absolute form or relative to some | URIs in HTTP can be represented in absolute form or relative to some | |||
known base URI [RFC1808], depending upon the context of their use. | known base URI [RFC1808], depending upon the context of their use. | |||
The two forms are differentiated by the fact that absolute URIs | The two forms are differentiated by the fact that absolute URIs | |||
always begin with a scheme name followed by a colon. For definitive | always begin with a scheme name followed by a colon. For definitive | |||
information on URL syntax and semantics, see "Uniform Resource | information on URL syntax and semantics, see "Uniform Resource | |||
Identifiers (URI): Generic Syntax and Semantics," RFC 2396 [RFC2396] | Identifiers (URI): Generic Syntax and Semantics," [RFC2396] (which | |||
(which replaces RFCs 1738 [RFC1738] and RFC 1808 [RFC1808]). This | replaces [RFC1738] and [RFC1808]). This specification adopts the | |||
specification adopts the definitions of "URI-reference", | definitions of "URI-reference", "absoluteURI", "relativeURI", "port", | |||
"absoluteURI", "relativeURI", "port", "host","abs_path", "rel_path", | "host", "abs_path", "rel_path", "query", and "authority" from that | |||
and "authority" from that specification. | specification. | |||
The HTTP protocol does not place any a priori limit on the length of | The HTTP protocol does not place any a priori limit on the length of | |||
a URI. Servers MUST be able to handle the URI of any resource they | a URI. Servers MUST be able to handle the URI of any resource they | |||
serve, and SHOULD be able to handle URIs of unbounded length if they | serve, and SHOULD be able to handle URIs of unbounded length if they | |||
provide GET-based forms that could generate such URIs. A server | provide GET-based forms that could generate such URIs. A server | |||
SHOULD return 414 (Request-URI Too Long) status if a URI is longer | SHOULD return 414 (Request-URI Too Long) status if a URI is longer | |||
than the server can handle (see Section 9.4.15 of [Part2]). | than the server can handle (see Section 9.4.15 of [Part2]). | |||
Note: Servers ought to be cautious about depending on URI lengths | Note: Servers ought to be cautious about depending on URI lengths | |||
above 255 bytes, because some older client or proxy | above 255 bytes, because some older client or proxy | |||
skipping to change at page 17, line 21 | skipping to change at page 17, line 43 | |||
The "http" scheme is used to locate network resources via the HTTP | The "http" scheme is used to locate network resources via the HTTP | |||
protocol. This section defines the scheme-specific syntax and | protocol. This section defines the scheme-specific syntax and | |||
semantics for http URLs. | semantics for http URLs. | |||
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]] | http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]] | |||
If the port is empty or not given, port 80 is assumed. The semantics | If the port is empty or not given, port 80 is assumed. The semantics | |||
are that the identified resource is located at the server listening | are that the identified resource is located at the server listening | |||
for TCP connections on that port of that host, and the Request-URI | for TCP connections on that port of that host, and the Request-URI | |||
for the resource is abs_path (Section 5.1.2). The use of IP | for the resource is abs_path (Section 5.1.2). The use of IP | |||
addresses in URLs SHOULD be avoided whenever possible (see RFC 1900 | addresses in URLs SHOULD be avoided whenever possible (see | |||
[RFC1900]). If the abs_path is not present in the URL, it MUST be | [RFC1900]). If the abs_path is not present in the URL, it MUST be | |||
given as "/" when used as a Request-URI for a resource | given as "/" when used as a Request-URI for a resource | |||
(Section 5.1.2). If a proxy receives a host name which is not a | (Section 5.1.2). If a proxy receives a host name which is not a | |||
fully qualified domain name, it MAY add its domain to the host name | fully qualified domain name, it MAY add its domain to the host name | |||
it received. If a proxy receives a fully qualified domain name, the | it received. If a proxy receives a fully qualified domain name, the | |||
proxy MUST NOT change the host name. | proxy MUST NOT change the host name. | |||
3.2.3. URI Comparison | 3.2.3. URI Comparison | |||
When comparing two URIs to decide if they match or not, a client | When comparing two URIs to decide if they match or not, a client | |||
skipping to change at page 17, line 44 | skipping to change at page 18, line 20 | |||
o A port that is empty or not given is equivalent to the default | o A port that is empty or not given is equivalent to the default | |||
port for that URI-reference; | port for that URI-reference; | |||
o Comparisons of host names MUST be case-insensitive; | o Comparisons of host names MUST be case-insensitive; | |||
o Comparisons of scheme names MUST be case-insensitive; | o Comparisons of scheme names MUST be case-insensitive; | |||
o An empty abs_path is equivalent to an abs_path of "/". | o An empty abs_path is equivalent to an abs_path of "/". | |||
Characters other than those in the "reserved" and "unsafe" sets (see | Characters other than those in the "reserved" set (see [RFC2396]) are | |||
RFC 2396 [RFC2396]) are equivalent to their ""%" HEX HEX" encoding. | equivalent to their ""%" HEX HEX" encoding. | |||
For example, the following three URIs are equivalent: | For example, the following three URIs are equivalent: | |||
http://abc.com:80/~smith/home.html | http://example.com:80/~smith/home.html | |||
http://ABC.com/%7Esmith/home.html | http://EXAMPLE.com/%7Esmith/home.html | |||
http://ABC.com:/%7esmith/home.html | http://EXAMPLE.com:/%7esmith/home.html | |||
3.3. Date/Time Formats | 3.3. Date/Time Formats | |||
3.3.1. Full Date | 3.3.1. Full Date | |||
HTTP applications have historically allowed three different formats | HTTP applications have historically allowed three different formats | |||
for the representation of date/time stamps: | for the representation of date/time stamps: | |||
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 | Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 | |||
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 | Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 format | |||
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format | Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format | |||
The first format is preferred as an Internet standard and represents | The first format is preferred as an Internet standard and represents | |||
a fixed-length subset of that defined by RFC 1123 [RFC1123] (an | a fixed-length subset of that defined by [RFC1123] (an update to | |||
update to RFC 822 [RFC822]). The second format is in common use, but | [RFC822]). The other formats are described here only for | |||
is based on the obsolete RFC 850 [RFC1036] date format and lacks a | compatibility with obsolete implementations. HTTP/1.1 clients and | |||
four-digit year. HTTP/1.1 clients and servers that parse the date | servers that parse the date value MUST accept all three formats (for | |||
value MUST accept all three formats (for compatibility with | compatibility with HTTP/1.0), though they MUST only generate the RFC | |||
HTTP/1.0), though they MUST only generate the RFC 1123 format for | 1123 format for representing HTTP-date values in header fields. See | |||
representing HTTP-date values in header fields. See Appendix B for | Appendix B for further information. | |||
further information. | ||||
Note: Recipients of date values are encouraged to be robust in | Note: Recipients of date values are encouraged to be robust in | |||
accepting date values that may have been sent by non-HTTP | accepting date values that may have been sent by non-HTTP | |||
applications, as is sometimes the case when retrieving or posting | applications, as is sometimes the case when retrieving or posting | |||
messages via proxies/gateways to SMTP or NNTP. | messages via proxies/gateways to SMTP or NNTP. | |||
All HTTP date/time stamps MUST be represented in Greenwich Mean Time | All HTTP date/time stamps MUST be represented in Greenwich Mean Time | |||
(GMT), without exception. For the purposes of HTTP, GMT is exactly | (GMT), without exception. For the purposes of HTTP, GMT is exactly | |||
equal to UTC (Coordinated Universal Time). This is indicated in the | equal to UTC (Coordinated Universal Time). This is indicated in the | |||
first two formats by the inclusion of "GMT" as the three-letter | first two formats by the inclusion of "GMT" as the three-letter | |||
skipping to change at page 20, line 20 | skipping to change at page 20, line 31 | |||
Transfer-codings are analogous to the Content-Transfer-Encoding | Transfer-codings are analogous to the Content-Transfer-Encoding | |||
values of MIME [RFC2045], which were designed to enable safe | values of MIME [RFC2045], which were designed to enable safe | |||
transport of binary data over a 7-bit transport service. However, | transport of binary data over a 7-bit transport service. However, | |||
safe transport has a different focus for an 8bit-clean transfer | safe transport has a different focus for an 8bit-clean transfer | |||
protocol. In HTTP, the only unsafe characteristic of message-bodies | protocol. In HTTP, the only unsafe characteristic of message-bodies | |||
is the difficulty in determining the exact body length (Section 4.4), | is the difficulty in determining the exact body length (Section 4.4), | |||
or the desire to encrypt data over a shared transport. | or the desire to encrypt data over a shared transport. | |||
The Internet Assigned Numbers Authority (IANA) acts as a registry for | The Internet Assigned Numbers Authority (IANA) acts as a registry for | |||
transfer-coding value tokens. Initially, the registry contains the | transfer-coding value tokens. Initially, the registry contains the | |||
following tokens: "chunked" (Section 3.4.1), "identity" (section | following tokens: "chunked" (Section 3.4.1), "gzip", "compress", and | |||
3.6.2), "gzip" ([Part3]), "compress" ([Part3]), and "deflate" | "deflate" (Section 2.2 of [Part3]). | |||
([Part3]). | ||||
New transfer-coding value tokens SHOULD be registered in the same way | New transfer-coding value tokens SHOULD be registered in the same way | |||
as new content-coding value tokens ([Part3]). | as new content-coding value tokens (Section 2.2 of [Part3]). | |||
A server which receives an entity-body with a transfer-coding it does | A server which receives an entity-body with a transfer-coding it does | |||
not understand SHOULD return 501 (Unimplemented), and close the | not understand SHOULD return 501 (Not Implemented), and close the | |||
connection. A server MUST NOT send transfer-codings to an HTTP/1.0 | connection. A server MUST NOT send transfer-codings to an HTTP/1.0 | |||
client. | client. | |||
3.4.1. Chunked Transfer Coding | 3.4.1. Chunked Transfer Coding | |||
The chunked encoding modifies the body of a message in order to | The chunked encoding modifies the body of a message in order to | |||
transfer it as a series of chunks, each with its own size indicator, | transfer it as a series of chunks, each with its own size indicator, | |||
followed by an OPTIONAL trailer containing entity-header fields. | followed by an OPTIONAL trailer containing entity-header fields. | |||
This allows dynamically produced content to be transferred along with | This allows dynamically produced content to be transferred along with | |||
the information necessary for the recipient to verify that it has | the information necessary for the recipient to verify that it has | |||
skipping to change at page 21, line 18 | skipping to change at page 21, line 18 | |||
CRLF | CRLF | |||
chunk = chunk-size [ chunk-extension ] CRLF | chunk = chunk-size [ chunk-extension ] CRLF | |||
chunk-data CRLF | chunk-data CRLF | |||
chunk-size = 1*HEX | chunk-size = 1*HEX | |||
last-chunk = 1*("0") [ chunk-extension ] CRLF | last-chunk = 1*("0") [ chunk-extension ] CRLF | |||
chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] ) | chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] ) | |||
chunk-ext-name = token | chunk-ext-name = token | |||
chunk-ext-val = token | quoted-string | chunk-ext-val = token | quoted-string | |||
chunk-data = chunk-size(OCTET) | chunk-data = 1*OCTET ; a sequence of chunk-size octets | |||
trailer = *(entity-header CRLF) | trailer = *(entity-header CRLF) | |||
The chunk-size field is a string of hex digits indicating the size of | The chunk-size field is a string of hex digits indicating the size of | |||
the chunk. The chunked encoding is ended by any chunk whose size is | the chunk-data in octets. The chunked encoding is ended by any chunk | |||
zero, followed by the trailer, which is terminated by an empty line. | whose size is zero, followed by the trailer, which is terminated by | |||
an empty line. | ||||
The trailer allows the sender to include additional HTTP header | The trailer allows the sender to include additional HTTP header | |||
fields at the end of the message. The Trailer header field can be | fields at the end of the message. The Trailer header field can be | |||
used to indicate which header fields are included in a trailer (see | used to indicate which header fields are included in a trailer (see | |||
Section 8.6). | Section 8.6). | |||
A server using chunked transfer-coding in a response MUST NOT use the | A server using chunked transfer-coding in a response MUST NOT use the | |||
trailer for any header fields unless at least one of the following is | trailer for any header fields unless at least one of the following is | |||
true: | true: | |||
skipping to change at page 22, line 36 | skipping to change at page 22, line 38 | |||
4. HTTP Message | 4. HTTP Message | |||
4.1. Message Types | 4.1. Message Types | |||
HTTP messages consist of requests from client to server and responses | HTTP messages consist of requests from client to server and responses | |||
from server to client. | from server to client. | |||
HTTP-message = Request | Response ; HTTP/1.1 messages | HTTP-message = Request | Response ; HTTP/1.1 messages | |||
Request (Section 5) and Response (Section 6) messages use the generic | Request (Section 5) and Response (Section 6) messages use the generic | |||
message format of RFC 822 [RFC822] for transferring entities (the | message format of [RFC2822] for transferring entities (the payload of | |||
payload of the message). Both types of message consist of a start- | the message). Both types of message consist of a start-line, zero or | |||
line, zero or more header fields (also known as "headers"), an empty | more header fields (also known as "headers"), an empty line (i.e., a | |||
line (i.e., a line with nothing preceding the CRLF) indicating the | line with nothing preceding the CRLF) indicating the end of the | |||
end of the header fields, and possibly a message-body. | header fields, and possibly a message-body. | |||
generic-message = start-line | generic-message = start-line | |||
*(message-header CRLF) | *(message-header CRLF) | |||
CRLF | CRLF | |||
[ message-body ] | [ message-body ] | |||
start-line = Request-Line | Status-Line | start-line = Request-Line | Status-Line | |||
In the interest of robustness, servers SHOULD ignore any empty | In the interest of robustness, servers SHOULD ignore any empty | |||
line(s) received where a Request-Line is expected. In other words, | line(s) received where a Request-Line is expected. In other words, | |||
if the server is reading the protocol stream at the beginning of a | if the server is reading the protocol stream at the beginning of a | |||
skipping to change at page 23, line 16 | skipping to change at page 23, line 17 | |||
Certain buggy HTTP/1.0 client implementations generate extra CRLF's | Certain buggy HTTP/1.0 client implementations generate extra CRLF's | |||
after a POST request. To restate what is explicitly forbidden by the | after a POST request. To restate what is explicitly forbidden by the | |||
BNF, an HTTP/1.1 client MUST NOT preface or follow a request with an | BNF, an HTTP/1.1 client MUST NOT preface or follow a request with an | |||
extra CRLF. | extra CRLF. | |||
4.2. Message Headers | 4.2. Message Headers | |||
HTTP header fields, which include general-header (Section 4.5), | HTTP header fields, which include general-header (Section 4.5), | |||
request-header (Section 4 of [Part2]), response-header (Section 6 of | request-header (Section 4 of [Part2]), response-header (Section 6 of | |||
[Part2]), and entity-header (Section 3.1 of [Part3]) fields, follow | [Part2]), and entity-header (Section 3.1 of [Part3]) fields, follow | |||
the same generic format as that given in Section 3.1 of RFC 822 | the same generic format as that given in Section 2.1 of [RFC2822]. | |||
[RFC822]. Each header field consists of a name followed by a colon | Each header field consists of a name followed by a colon (":") and | |||
(":") and the field value. Field names are case-insensitive. The | the field value. Field names are case-insensitive. The field value | |||
field value MAY be preceded by any amount of LWS, though a single SP | MAY be preceded by any amount of LWS, though a single SP is | |||
is preferred. Header fields can be extended over multiple lines by | preferred. Header fields can be extended over multiple lines by | |||
preceding each extra line with at least one SP or HT. Applications | preceding each extra line with at least one SP or HTAB. Applications | |||
ought to follow "common form", where one is known or indicated, when | ought to follow "common form", where one is known or indicated, when | |||
generating HTTP constructs, since there might exist some | generating HTTP constructs, since there might exist some | |||
implementations that fail to accept anything beyond the common forms. | implementations that fail to accept anything beyond the common forms. | |||
message-header = field-name ":" [ field-value ] | message-header = field-name ":" [ field-value ] | |||
field-name = token | field-name = token | |||
field-value = *( field-content | LWS ) | field-value = *( field-content | LWS ) | |||
field-content = <the OCTETs making up the field-value | field-content = <the OCTETs making up the field-value | |||
and consisting of either *TEXT or combinations | and consisting of either *TEXT or combinations | |||
of token, separators, and quoted-string> | of token, separators, and quoted-string> | |||
skipping to change at page 24, line 45 | skipping to change at page 24, line 46 | |||
[Part2]) does not allow sending an entity-body in requests. A server | [Part2]) does not allow sending an entity-body in requests. A server | |||
SHOULD read and forward a message-body on any request; if the request | SHOULD read and forward a message-body on any request; if the request | |||
method does not include defined semantics for an entity-body, then | method does not include defined semantics for an entity-body, then | |||
the message-body SHOULD be ignored when handling the request. | the message-body SHOULD be ignored when handling the request. | |||
For response messages, whether or not a message-body is included with | For response messages, whether or not a message-body is included with | |||
a message is dependent on both the request method and the response | a message is dependent on both the request method and the response | |||
status code (Section 6.1.1). All responses to the HEAD request | status code (Section 6.1.1). All responses to the HEAD request | |||
method MUST NOT include a message-body, even though the presence of | method MUST NOT include a message-body, even though the presence of | |||
entity-header fields might lead one to believe they do. All 1xx | entity-header fields might lead one to believe they do. All 1xx | |||
(informational), 204 (no content), and 304 (not modified) responses | (informational), 204 (No Content), and 304 (Not Modified) responses | |||
MUST NOT include a message-body. All other responses do include a | MUST NOT include a message-body. All other responses do include a | |||
message-body, although it MAY be of zero length. | message-body, although it MAY be of zero length. | |||
4.4. Message Length | 4.4. Message Length | |||
The transfer-length of a message is the length of the message-body as | The transfer-length of a message is the length of the message-body as | |||
it appears in the message; that is, after any transfer-codings have | it appears in the message; that is, after any transfer-codings have | |||
been applied. When a message-body is included with a message, the | been applied. When a message-body is included with a message, the | |||
transfer-length of that body is determined by one of the following | transfer-length of that body is determined by one of the following | |||
(in order of precedence): | (in order of precedence): | |||
1. Any response message which "MUST NOT" include a message-body | 1. Any response message which "MUST NOT" include a message-body | |||
(such as the 1xx, 204, and 304 responses and any response to a | (such as the 1xx, 204, and 304 responses and any response to a | |||
HEAD request) is always terminated by the first empty line after | HEAD request) is always terminated by the first empty line after | |||
the header fields, regardless of the entity-header fields present | the header fields, regardless of the entity-header fields present | |||
in the message. | in the message. | |||
2. If a Transfer-Encoding header field (Section 8.7) is present and | 2. If a Transfer-Encoding header field (Section 8.7) is present, | |||
has any value other than "identity", then the transfer-length is | then the transfer-length is defined by use of the "chunked" | |||
defined by use of the "chunked" transfer-coding (Section 3.4), | transfer-coding (Section 3.4), unless the message is terminated | |||
unless the message is terminated by closing the connection. | by closing the connection. | |||
3. If a Content-Length header field (Section 8.2) is present, its | 3. If a Content-Length header field (Section 8.2) is present, its | |||
decimal value in OCTETs represents both the entity-length and the | decimal value in OCTETs represents both the entity-length and the | |||
transfer-length. The Content-Length header field MUST NOT be | transfer-length. The Content-Length header field MUST NOT be | |||
sent if these two lengths are different (i.e., if a Transfer- | sent if these two lengths are different (i.e., if a Transfer- | |||
Encoding header field is present). If a message is received with | Encoding header field is present). If a message is received with | |||
both a Transfer-Encoding header field and a Content-Length header | both a Transfer-Encoding header field and a Content-Length header | |||
field, the latter MUST be ignored. | field, the latter MUST be ignored. | |||
4. If the message uses the media type "multipart/byteranges", and | 4. If the message uses the media type "multipart/byteranges", and | |||
the ransfer-length is not otherwise specified, then this self- | the transfer-length is not otherwise specified, then this self- | |||
elimiting media type defines the transfer-length. This media | delimiting media type defines the transfer-length. This media | |||
type UST NOT be used unless the sender knows that the recipient | type MUST NOT be used unless the sender knows that the recipient | |||
can arse it; the presence in a request of a Range header with | can parse it; the presence in a request of a Range header with | |||
ultiple byte-range specifiers from a 1.1 client implies that the | multiple byte-range specifiers from a 1.1 client implies that the | |||
lient can parse multipart/byteranges responses. | client can parse multipart/byteranges responses. | |||
A range header might be forwarded by a 1.0 proxy that does not | A range header might be forwarded by a 1.0 proxy that does not | |||
understand multipart/byteranges; in this case the server MUST | understand multipart/byteranges; in this case the server MUST | |||
delimit the message using methods defined in items 1, 3 or 5 | delimit the message using methods defined in items 1, 3 or 5 | |||
of this section. | of this section. | |||
5. By the server closing the connection. (Closing the connection | 5. By the server closing the connection. (Closing the connection | |||
cannot be used to indicate the end of a request body, since that | cannot be used to indicate the end of a request body, since that | |||
would leave no possibility for the server to send back a | would leave no possibility for the server to send back a | |||
response.) | response.) | |||
For compatibility with HTTP/1.0 applications, HTTP/1.1 requests | For compatibility with HTTP/1.0 applications, HTTP/1.1 requests | |||
containing a message-body MUST include a valid Content-Length header | containing a message-body MUST include a valid Content-Length header | |||
field unless the server is known to be HTTP/1.1 compliant. If a | field unless the server is known to be HTTP/1.1 compliant. If a | |||
request contains a message-body and a Content-Length is not given, | request contains a message-body and a Content-Length is not given, | |||
the server SHOULD respond with 400 (bad request) if it cannot | the server SHOULD respond with 400 (Bad Request) if it cannot | |||
determine the length of the message, or with 411 (length required) if | determine the length of the message, or with 411 (Length Required) if | |||
it wishes to insist on receiving a valid Content-Length. | it wishes to insist on receiving a valid Content-Length. | |||
All HTTP/1.1 applications that receive entities MUST accept the | All HTTP/1.1 applications that receive entities MUST accept the | |||
"chunked" transfer-coding (Section 3.4), thus allowing this mechanism | "chunked" transfer-coding (Section 3.4), thus allowing this mechanism | |||
to be used for messages when the message length cannot be determined | to be used for messages when the message length cannot be determined | |||
in advance. | in advance. | |||
Messages MUST NOT include both a Content-Length header field and a | Messages MUST NOT include both a Content-Length header field and a | |||
non-identity transfer-coding. If the message does include a non- | transfer-coding. If the message does include a transfer-coding, the | |||
identity transfer-coding, the Content-Length MUST be ignored. | Content-Length MUST be ignored. | |||
When a Content-Length is given in a message where a message-body is | When a Content-Length is given in a message where a message-body is | |||
allowed, its field value MUST exactly match the number of OCTETs in | allowed, its field value MUST exactly match the number of OCTETs in | |||
the message-body. HTTP/1.1 user agents MUST notify the user when an | the message-body. HTTP/1.1 user agents MUST notify the user when an | |||
invalid length is received and detected. | invalid length is received and detected. | |||
4.5. General Header Fields | 4.5. General Header Fields | |||
There are a few header fields which have general applicability for | There are a few header fields which have general applicability for | |||
both request and response messages, but which do not apply to the | both request and response messages, but which do not apply to the | |||
entity being transferred. These header fields apply only to the | entity being transferred. These header fields apply only to the | |||
message being transmitted. | message being transmitted. | |||
general-header = Cache-Control ; [Part6], Section 3.2 | general-header = Cache-Control ; [Part6], Section 15.2 | |||
| Connection ; Section 8.1 | | Connection ; Section 8.1 | |||
| Date ; Section 8.3 | | Date ; Section 8.3 | |||
| Pragma ; [Part6], Section 3.4 | | Pragma ; [Part6], Section 15.4 | |||
| Trailer ; Section 8.6 | | Trailer ; Section 8.6 | |||
| Transfer-Encoding ; Section 8.7 | | Transfer-Encoding ; Section 8.7 | |||
| Upgrade ; Section 8.8 | | Upgrade ; Section 8.8 | |||
| Via ; Section 8.9 | | Via ; Section 8.9 | |||
| Warning ; [Part6], Section 3.6 | | Warning ; [Part6], Section 15.6 | |||
General-header field names can be extended reliably only in | General-header field names can be extended reliably only in | |||
combination with a change in the protocol version. However, new or | combination with a change in the protocol version. However, new or | |||
experimental header fields may be given the semantics of general | experimental header fields may be given the semantics of general | |||
header fields if all parties in the communication recognize them to | header fields if all parties in the communication recognize them to | |||
be general-header fields. Unrecognized header fields are treated as | be general-header fields. Unrecognized header fields are treated as | |||
entity-header fields. | entity-header fields. | |||
5. Request | 5. Request | |||
skipping to change at page 27, line 34 | skipping to change at page 27, line 34 | |||
The Method token indicates the method to be performed on the resource | The Method token indicates the method to be performed on the resource | |||
identified by the Request-URI. The method is case-sensitive. | identified by the Request-URI. The method is case-sensitive. | |||
Method = token | Method = token | |||
5.1.2. Request-URI | 5.1.2. Request-URI | |||
The Request-URI is a Uniform Resource Identifier (Section 3.2) and | The Request-URI is a Uniform Resource Identifier (Section 3.2) and | |||
identifies the resource upon which to apply the request. | identifies the resource upon which to apply the request. | |||
Request-URI = "*" | absoluteURI | abs_path | authority | Request-URI = "*" | |||
| absoluteURI | ||||
| ( abs_path [ "?" query ] ) | ||||
| authority | ||||
The four options for Request-URI are dependent on the nature of the | The four options for Request-URI are dependent on the nature of the | |||
request. The asterisk "*" means that the request does not apply to a | request. The asterisk "*" means that the request does not apply to a | |||
particular resource, but to the server itself, and is only allowed | particular resource, but to the server itself, and is only allowed | |||
when the method used does not necessarily apply to a resource. One | when the method used does not necessarily apply to a resource. One | |||
example would be | example would be | |||
OPTIONS * HTTP/1.1 | OPTIONS * HTTP/1.1 | |||
The absoluteURI form is REQUIRED when the request is being made to a | The absoluteURI form is REQUIRED when the request is being made to a | |||
proxy. The proxy is requested to forward the request or service it | proxy. The proxy is requested to forward the request or service it | |||
from a valid cache, and return the response. Note that the proxy MAY | from a valid cache, and return the response. Note that the proxy MAY | |||
forward the request on to another proxy or directly to the server | forward the request on to another proxy or directly to the server | |||
specified by the absoluteURI. In order to avoid request loops, a | specified by the absoluteURI. In order to avoid request loops, a | |||
proxy MUST be able to recognize all of its server names, including | proxy MUST be able to recognize all of its server names, including | |||
any aliases, local variations, and the numeric IP address. An | any aliases, local variations, and the numeric IP address. An | |||
example Request-Line would be: | example Request-Line would be: | |||
GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 | GET http://www.example.org/pub/WWW/TheProject.html HTTP/1.1 | |||
To allow for transition to absoluteURIs in all requests in future | To allow for transition to absoluteURIs in all requests in future | |||
versions of HTTP, all HTTP/1.1 servers MUST accept the absoluteURI | versions of HTTP, all HTTP/1.1 servers MUST accept the absoluteURI | |||
form in requests, even though HTTP/1.1 clients will only generate | form in requests, even though HTTP/1.1 clients will only generate | |||
them in requests to proxies. | them in requests to proxies. | |||
The authority form is only used by the CONNECT method (Section 8.9 of | The authority form is only used by the CONNECT method (Section 8.9 of | |||
[Part2]). | [Part2]). | |||
The most common form of Request-URI is that used to identify a | The most common form of Request-URI is that used to identify a | |||
resource on an origin server or gateway. In this case the absolute | resource on an origin server or gateway. In this case the absolute | |||
path of the URI MUST be transmitted (see Section 3.2.1, abs_path) as | path of the URI MUST be transmitted (see Section 3.2.1, abs_path) as | |||
the Request-URI, and the network location of the URI (authority) MUST | the Request-URI, and the network location of the URI (authority) MUST | |||
be transmitted in a Host header field. For example, a client wishing | be transmitted in a Host header field. For example, a client wishing | |||
to retrieve the resource above directly from the origin server would | to retrieve the resource above directly from the origin server would | |||
create a TCP connection to port 80 of the host "www.w3.org" and send | create a TCP connection to port 80 of the host "www.example.org" and | |||
the lines: | send the lines: | |||
GET /pub/WWW/TheProject.html HTTP/1.1 | GET /pub/WWW/TheProject.html HTTP/1.1 | |||
Host: www.w3.org | Host: www.example.org | |||
followed by the remainder of the Request. Note that the absolute | followed by the remainder of the Request. Note that the absolute | |||
path cannot be empty; if none is present in the original URI, it MUST | path cannot be empty; if none is present in the original URI, it MUST | |||
be given as "/" (the server root). | be given as "/" (the server root). | |||
The Request-URI is transmitted in the format specified in | The Request-URI is transmitted in the format specified in | |||
Section 3.2.1. If the Request-URI is encoded using the "% HEX HEX" | Section 3.2.1. If the Request-URI is encoded using the "% HEX HEX" | |||
encoding [RFC2396], the origin server MUST decode the Request-URI in | encoding [RFC2396], the origin server MUST decode the Request-URI in | |||
order to properly interpret the request. Servers SHOULD respond to | order to properly interpret the request. Servers SHOULD respond to | |||
invalid Request-URIs with an appropriate status code. | invalid Request-URIs with an appropriate status code. | |||
skipping to change at page 33, line 17 | skipping to change at page 33, line 27 | |||
It is especially important that proxies correctly implement the | It is especially important that proxies correctly implement the | |||
properties of the Connection header field as specified in | properties of the Connection header field as specified in | |||
Section 8.1. | Section 8.1. | |||
The proxy server MUST signal persistent connections separately with | The proxy server MUST signal persistent connections separately with | |||
its clients and the origin servers (or other proxy servers) that it | its clients and the origin servers (or other proxy servers) that it | |||
connects to. Each persistent connection applies to only one | connects to. Each persistent connection applies to only one | |||
transport link. | transport link. | |||
A proxy server MUST NOT establish a HTTP/1.1 persistent connection | A proxy server MUST NOT establish a HTTP/1.1 persistent connection | |||
with an HTTP/1.0 client (but see RFC 2068 [RFC2068] for information | with an HTTP/1.0 client (but see [RFC2068] for information and | |||
and discussion of the problems with the Keep-Alive header implemented | discussion of the problems with the Keep-Alive header implemented by | |||
by many HTTP/1.0 clients). | many HTTP/1.0 clients). | |||
7.1.4. Practical Considerations | 7.1.4. Practical Considerations | |||
Servers will usually have some time-out value beyond which they will | Servers will usually have some time-out value beyond which they will | |||
no longer maintain an inactive connection. Proxy servers might make | no longer maintain an inactive connection. Proxy servers might make | |||
this a higher value since it is likely that the client will be making | this a higher value since it is likely that the client will be making | |||
more connections through the same server. The use of persistent | more connections through the same server. The use of persistent | |||
connections places no requirements on the length (or existence) of | connections places no requirements on the length (or existence) of | |||
this time-out for either the client or the server. | this time-out for either the client or the server. | |||
skipping to change at page 35, line 38 | skipping to change at page 35, line 50 | |||
the 100 (Continue) response. If it responds with a final status | the 100 (Continue) response. If it responds with a final status | |||
code, it MAY close the transport connection or it MAY continue to | code, it MAY close the transport connection or it MAY continue to | |||
read and discard the rest of the request. It MUST NOT perform the | read and discard the rest of the request. It MUST NOT perform the | |||
requested method if it returns a final status code. | requested method if it returns a final status code. | |||
o An origin server SHOULD NOT send a 100 (Continue) response if the | o An origin server SHOULD NOT send a 100 (Continue) response if the | |||
request message does not include an Expect request-header field | request message does not include an Expect request-header field | |||
with the "100-continue" expectation, and MUST NOT send a 100 | with the "100-continue" expectation, and MUST NOT send a 100 | |||
(Continue) response if such a request comes from an HTTP/1.0 (or | (Continue) response if such a request comes from an HTTP/1.0 (or | |||
earlier) client. There is an exception to this rule: for | earlier) client. There is an exception to this rule: for | |||
compatibility with RFC 2068, a server MAY send a 100 (Continue) | compatibility with [RFC2068], a server MAY send a 100 (Continue) | |||
status in response to an HTTP/1.1 PUT or POST request that does | status in response to an HTTP/1.1 PUT or POST request that does | |||
not include an Expect request-header field with the "100-continue" | not include an Expect request-header field with the "100-continue" | |||
expectation. This exception, the purpose of which is to minimize | expectation. This exception, the purpose of which is to minimize | |||
any client processing delays associated with an undeclared wait | any client processing delays associated with an undeclared wait | |||
for 100 (Continue) status, applies only to HTTP/1.1 requests, and | for 100 (Continue) status, applies only to HTTP/1.1 requests, and | |||
not to requests with any other HTTP-version value. | not to requests with any other HTTP-version value. | |||
o An origin server MAY omit a 100 (Continue) response if it has | o An origin server MAY omit a 100 (Continue) response if it has | |||
already received some or all of the request body for the | already received some or all of the request body for the | |||
corresponding request. | corresponding request. | |||
skipping to change at page 37, line 34 | skipping to change at page 37, line 48 | |||
If at any point an error status is received, the client | If at any point an error status is received, the client | |||
o SHOULD NOT continue and | o SHOULD NOT continue and | |||
o SHOULD close the connection if it has not completed sending the | o SHOULD close the connection if it has not completed sending the | |||
request message. | request message. | |||
8. Header Field Definitions | 8. Header Field Definitions | |||
This section defines the syntax and semantics of all standard | This section defines the syntax and semantics of HTTP/1.1 header | |||
HTTP/1.1 header fields. For entity-header fields, both sender and | fields related to message framing and transport protocols. | |||
recipient refer to either the client or the server, depending on who | ||||
sends and who receives the entity. | For entity-header fields, both sender and recipient refer to either | |||
the client or the server, depending on who sends and who receives the | ||||
entity. | ||||
8.1. Connection | 8.1. Connection | |||
The Connection general-header field allows the sender to specify | The Connection general-header field allows the sender to specify | |||
options that are desired for that particular connection and MUST NOT | options that are desired for that particular connection and MUST NOT | |||
be communicated by proxies over further connections. | be communicated by proxies over further connections. | |||
The Connection header has the following grammar: | The Connection header has the following grammar: | |||
Connection = "Connection" ":" 1#(connection-token) | Connection = "Connection" ":" 1#(connection-token) | |||
skipping to change at page 38, line 25 | skipping to change at page 38, line 40 | |||
HTTP/1.1 defines the "close" connection option for the sender to | HTTP/1.1 defines the "close" connection option for the sender to | |||
signal that the connection will be closed after completion of the | signal that the connection will be closed after completion of the | |||
response. For example, | response. For example, | |||
Connection: close | Connection: close | |||
in either the request or the response header fields indicates that | in either the request or the response header fields indicates that | |||
the connection SHOULD NOT be considered `persistent' (Section 7.1) | the connection SHOULD NOT be considered `persistent' (Section 7.1) | |||
after the current request/response is complete. | after the current request/response is complete. | |||
HTTP/1.1 applications that do not support persistent connections MUST | An HTTP/1.1 client that does not support persistent connections MUST | |||
include the "close" connection option in every message. | include the "close" connection option in every request message. | |||
An HTTP/1.1 server that does not support persistent connections MUST | ||||
include the "close" connection option in every response message that | ||||
does not have a 1xx (informational) status code. | ||||
A system receiving an HTTP/1.0 (or lower-version) message that | A system receiving an HTTP/1.0 (or lower-version) message that | |||
includes a Connection header MUST, for each connection-token in this | includes a Connection header MUST, for each connection-token in this | |||
field, remove and ignore any header field(s) from the message with | field, remove and ignore any header field(s) from the message with | |||
the same name as the connection-token. This protects against | the same name as the connection-token. This protects against | |||
mistaken forwarding of such header fields by pre-HTTP/1.1 proxies. | mistaken forwarding of such header fields by pre-HTTP/1.1 proxies. | |||
See Appendix D.2. | See Appendix D.2. | |||
8.2. Content-Length | 8.2. Content-Length | |||
The Content-Length entity-header field indicates the size of the | The Content-Length entity-header field indicates the size of the | |||
entity-body, in decimal number of OCTETs, sent to the recipient or, | entity-body, in decimal number of OCTETs, sent to the recipient or, | |||
in the case of the HEAD method, the size of the entity-body that | in the case of the HEAD method, the size of the entity-body that | |||
would have been sent had the request been a GET. | would have been sent had the request been a GET. | |||
Content-Length = "Content-Length" ":" 1*DIGIT | Content-Length = "Content-Length" ":" 1*DIGIT | |||
skipping to change at page 39, line 20 | skipping to change at page 39, line 39 | |||
the corresponding definition in MIME, where it is an optional field | the corresponding definition in MIME, where it is an optional field | |||
used within the "message/external-body" content-type. In HTTP, it | used within the "message/external-body" content-type. In HTTP, it | |||
SHOULD be sent whenever the message's length can be determined prior | SHOULD be sent whenever the message's length can be determined prior | |||
to being transferred, unless this is prohibited by the rules in | to being transferred, unless this is prohibited by the rules in | |||
Section 4.4. | Section 4.4. | |||
8.3. Date | 8.3. Date | |||
The Date general-header field represents the date and time at which | The Date general-header field represents the date and time at which | |||
the message was originated, having the same semantics as orig-date in | the message was originated, having the same semantics as orig-date in | |||
RFC 822. The field value is an HTTP-date, as described in | Section 3.6.1 of [RFC2822]. The field value is an HTTP-date, as | |||
Section 3.3.1; it MUST be sent in RFC 1123 [RFC1123]-date format. | described in Section 3.3.1; it MUST be sent in rfc1123-date format. | |||
Date = "Date" ":" HTTP-date | Date = "Date" ":" HTTP-date | |||
An example is | An example is | |||
Date: Tue, 15 Nov 1994 08:12:31 GMT | Date: Tue, 15 Nov 1994 08:12:31 GMT | |||
Origin servers MUST include a Date header field in all responses, | Origin servers MUST include a Date header field in all responses, | |||
except in these cases: | except in these cases: | |||
skipping to change at page 40, line 46 | skipping to change at page 41, line 16 | |||
the naming authority of the origin server or gateway given by the | the naming authority of the origin server or gateway given by the | |||
original URL. This allows the origin server or gateway to | original URL. This allows the origin server or gateway to | |||
differentiate between internally-ambiguous URLs, such as the root "/" | differentiate between internally-ambiguous URLs, such as the root "/" | |||
URL of a server for multiple host names on a single IP address. | URL of a server for multiple host names on a single IP address. | |||
Host = "Host" ":" host [ ":" port ] ; Section 3.2.2 | Host = "Host" ":" host [ ":" port ] ; Section 3.2.2 | |||
A "host" without any trailing port information implies the default | A "host" without any trailing port information implies the default | |||
port for the service requested (e.g., "80" for an HTTP URL). For | port for the service requested (e.g., "80" for an HTTP URL). For | |||
example, a request on the origin server for | example, a request on the origin server for | |||
<http://www.w3.org/pub/WWW/> would properly include: | <http://www.example.org/pub/WWW/> would properly include: | |||
GET /pub/WWW/ HTTP/1.1 | GET /pub/WWW/ HTTP/1.1 | |||
Host: www.w3.org | Host: www.example.org | |||
A client MUST include a Host header field in all HTTP/1.1 request | A client MUST include a Host header field in all HTTP/1.1 request | |||
messages . If the requested URI does not include an Internet host | messages . If the requested URI does not include an Internet host | |||
name for the service being requested, then the Host header field MUST | name for the service being requested, then the Host header field MUST | |||
be given with an empty value. An HTTP/1.1 proxy MUST ensure that any | be given with an empty value. An HTTP/1.1 proxy MUST ensure that any | |||
request message it forwards does contain an appropriate Host header | request message it forwards does contain an appropriate Host header | |||
field that identifies the service being requested by the proxy. All | field that identifies the service being requested by the proxy. All | |||
Internet-based HTTP/1.1 servers MUST respond with a 400 (Bad Request) | Internet-based HTTP/1.1 servers MUST respond with a 400 (Bad Request) | |||
status code to any HTTP/1.1 request message which lacks a Host header | status code to any HTTP/1.1 request message which lacks a Host header | |||
field. | field. | |||
See sections 5.2 and D.1.1 for other requirements relating to Host. | See Sections 5.2 and D.1.1 for other requirements relating to Host. | |||
8.5. TE | 8.5. TE | |||
The TE request-header field indicates what extension transfer-codings | The TE request-header field indicates what extension transfer-codings | |||
it is willing to accept in the response and whether or not it is | it is willing to accept in the response and whether or not it is | |||
willing to accept trailer fields in a chunked transfer-coding. Its | willing to accept trailer fields in a chunked transfer-coding. Its | |||
value may consist of the keyword "trailers" and/or a comma-separated | value may consist of the keyword "trailers" and/or a comma-separated | |||
list of extension transfer-coding names with optional accept | list of extension transfer-coding names with optional accept | |||
parameters (as described in Section 3.4). | parameters (as described in Section 3.4). | |||
skipping to change at page 44, line 36 | skipping to change at page 44, line 49 | |||
specification. Any token can be used as a protocol name; however, it | specification. Any token can be used as a protocol name; however, it | |||
will only be useful if both the client and server associate the name | will only be useful if both the client and server associate the name | |||
with the same protocol. | with the same protocol. | |||
8.9. Via | 8.9. Via | |||
The Via general-header field MUST be used by gateways and proxies to | The Via general-header field MUST be used by gateways and proxies to | |||
indicate the intermediate protocols and recipients between the user | indicate the intermediate protocols and recipients between the user | |||
agent and the server on requests, and between the origin server and | agent and the server on requests, and between the origin server and | |||
the client on responses. It is analogous to the "Received" field of | the client on responses. It is analogous to the "Received" field of | |||
RFC 822 [RFC822] and is intended to be used for tracking message | [RFC2822] and is intended to be used for tracking message forwards, | |||
forwards, avoiding request loops, and identifying the protocol | avoiding request loops, and identifying the protocol capabilities of | |||
capabilities of all senders along the request/response chain. | all senders along the request/response chain. | |||
Via = "Via" ":" 1#( received-protocol received-by [ comment ] ) | Via = "Via" ":" 1#( received-protocol received-by [ comment ] ) | |||
received-protocol = [ protocol-name "/" ] protocol-version | received-protocol = [ protocol-name "/" ] protocol-version | |||
protocol-name = token | protocol-name = token | |||
protocol-version = token | protocol-version = token | |||
received-by = ( host [ ":" port ] ) | pseudonym | received-by = ( host [ ":" port ] ) | pseudonym | |||
pseudonym = token | pseudonym = token | |||
The received-protocol indicates the protocol version of the message | The received-protocol indicates the protocol version of the message | |||
received by the server or client along each segment of the request/ | received by the server or client along each segment of the request/ | |||
skipping to change at page 45, line 25 | skipping to change at page 45, line 39 | |||
forwarding applications. | forwarding applications. | |||
Comments MAY be used in the Via header field to identify the software | Comments MAY be used in the Via header field to identify the software | |||
of the recipient proxy or gateway, analogous to the User-Agent and | of the recipient proxy or gateway, analogous to the User-Agent and | |||
Server header fields. However, all comments in the Via field are | Server header fields. However, all comments in the Via field are | |||
optional and MAY be removed by any recipient prior to forwarding the | optional and MAY be removed by any recipient prior to forwarding the | |||
message. | message. | |||
For example, a request message could be sent from an HTTP/1.0 user | For example, a request message could be sent from an HTTP/1.0 user | |||
agent to an internal proxy code-named "fred", which uses HTTP/1.1 to | agent to an internal proxy code-named "fred", which uses HTTP/1.1 to | |||
forward the request to a public proxy at nowhere.com, which completes | forward the request to a public proxy at p.example.net, which | |||
the request by forwarding it to the origin server at www.ics.uci.edu. | completes the request by forwarding it to the origin server at | |||
The request received by www.ics.uci.edu would then have the following | www.example.com. The request received by www.example.com would then | |||
Via header field: | have the following Via header field: | |||
Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) | Via: 1.0 fred, 1.1 p.example.net (Apache/1.1) | |||
Proxies and gateways used as a portal through a network firewall | Proxies and gateways used as a portal through a network firewall | |||
SHOULD NOT, by default, forward the names and ports of hosts within | SHOULD NOT, by default, forward the names and ports of hosts within | |||
the firewall region. This information SHOULD only be propagated if | the firewall region. This information SHOULD only be propagated if | |||
explicitly enabled. If not enabled, the received-by host of any host | explicitly enabled. If not enabled, the received-by host of any host | |||
behind the firewall SHOULD be replaced by an appropriate pseudonym | behind the firewall SHOULD be replaced by an appropriate pseudonym | |||
for that host. | for that host. | |||
For organizations that have strong privacy requirements for hiding | For organizations that have strong privacy requirements for hiding | |||
internal structures, a proxy MAY combine an ordered subsequence of | internal structures, a proxy MAY combine an ordered subsequence of | |||
skipping to change at page 48, line 38 | skipping to change at page 49, line 8 | |||
cryptography is beyond the scope of the HTTP/1.1 specification. | cryptography is beyond the scope of the HTTP/1.1 specification. | |||
10.6. Denial of Service Attacks on Proxies | 10.6. Denial of Service Attacks on Proxies | |||
They exist. They are hard to defend against. Research continues. | They exist. They are hard to defend against. Research continues. | |||
Beware. | Beware. | |||
11. Acknowledgments | 11. Acknowledgments | |||
This specification makes heavy use of the augmented BNF and generic | This specification makes heavy use of the augmented BNF and generic | |||
constructs defined by David H. Crocker for RFC 822 [RFC822]. | constructs defined by David H. Crocker for [RFC822ABNF]. Similarly, | |||
Similarly, it reuses many of the definitions provided by Nathaniel | it reuses many of the definitions provided by Nathaniel Borenstein | |||
Borenstein and Ned Freed for MIME [RFC2045]. We hope that their | and Ned Freed for MIME [RFC2045]. We hope that their inclusion in | |||
inclusion in this specification will help reduce past confusion over | this specification will help reduce past confusion over the | |||
the relationship between HTTP and Internet mail message formats. | relationship between HTTP and Internet mail message formats. | |||
The HTTP protocol has evolved considerably over the years. It has | The HTTP protocol has evolved considerably over the years. It has | |||
benefited from a large and active developer community--the many | benefited from a large and active developer community--the many | |||
people who have participated on the www-talk mailing list--and it is | people who have participated on the www-talk mailing list--and it is | |||
that community which has been most responsible for the success of | that community which has been most responsible for the success of | |||
HTTP and of the World-Wide Web in general. Marc Andreessen, Robert | HTTP and of the World-Wide Web in general. Marc Andreessen, Robert | |||
Cailliau, Daniel W. Connolly, Bob Denny, John Franks, Jean-Francois | Cailliau, Daniel W. Connolly, Bob Denny, John Franks, Jean-Francois | |||
Groff, Phillip M. Hallam-Baker, Hakon W. Lie, Ari Luotonen, Rob | Groff, Phillip M. Hallam-Baker, Hakon W. Lie, Ari Luotonen, Rob | |||
McCool, Lou Montulli, Dave Raggett, Tony Sanders, and Marc | McCool, Lou Montulli, Dave Raggett, Tony Sanders, and Marc | |||
VanHeyningen deserve special recognition for their efforts in | VanHeyningen deserve special recognition for their efforts in | |||
defining early aspects of the protocol. | defining early aspects of the protocol. | |||
This document has benefited greatly from the comments of all those | This document has benefited greatly from the comments of all those | |||
participating in the HTTP-WG. In addition to those already | participating in the HTTP-WG. In addition to those already | |||
mentioned, the following individuals have contributed to this | mentioned, the following individuals have contributed to this | |||
specification: | specification: | |||
Gary Adams Ross Patterson | Gary Adams, Harald Tveit Alvestrand, Keith Ball, Brian Behlendorf, | |||
Harald Tveit Alvestrand Albert Lunde | Paul Burchard, Maurizio Codogno, Mike Cowlishaw, Roman Czyborra, | |||
Keith Ball John C. Mallery | Michael A. Dolan, Daniel DuBois, David J. Fiander, Alan Freier, Marc | |||
Brian Behlendorf Jean-Philippe Martin-Flatin | Hedlund, Greg Herlihy, Koen Holtman, Alex Hopmann, Bob Jernigan, Shel | |||
Paul Burchard Mitra | Kaphan, Rohit Khare, John Klensin, Martijn Koster, Alexei Kosut, | |||
Maurizio Codogno David Morris | David M. Kristol, Daniel LaLiberte, Ben Laurie, Paul J. Leach, Albert | |||
Mike Cowlishaw Gavin Nicol | Lunde, John C. Mallery, Jean-Philippe Martin-Flatin, Mitra, David | |||
Roman Czyborra Bill Perry | Morris, Gavin Nicol, Ross Patterson, Bill Perry, Jeffrey Perry, Scott | |||
Michael A. Dolan Jeffrey Perry | Powers, Owen Rees, Luigi Rizzo, David Robinson, Marc Salomon, Rich | |||
David J. Fiander Scott Powers | Salz, Allan M. Schiffman, Jim Seidman, Chuck Shotton, Eric W. Sink, | |||
Alan Freier Owen Rees | Simon E. Spero, Richard N. Taylor, Robert S. Thau, Bill (BearHeart) | |||
Marc Hedlund Luigi Rizzo | Weinman, Francois Yergeau, Mary Ellen Zurko, Josh Cohen. | |||
Greg Herlihy David Robinson | ||||
Koen Holtman Marc Salomon | ||||
Alex Hopmann Rich Salz | ||||
Bob Jernigan Allan M. Schiffman | ||||
Shel Kaphan Jim Seidman | ||||
Rohit Khare Chuck Shotton | ||||
John Klensin Eric W. Sink | ||||
Martijn Koster Simon E. Spero | ||||
Alexei Kosut Richard N. Taylor | ||||
David M. Kristol Robert S. Thau | ||||
Daniel LaLiberte Bill (BearHeart) Weinman | ||||
Ben Laurie Francois Yergeau | ||||
Paul J. Leach Mary Ellen Zurko | ||||
Daniel DuBois Josh Cohen | ||||
Thanks to the "cave men" of Palo Alto. You know who you are. | Thanks to the "cave men" of Palo Alto. You know who you are. | |||
Jim Gettys (the current editor of this document) wishes particularly | Jim Gettys (the editor of [RFC2616]) wishes particularly to thank Roy | |||
to thank Roy Fielding, the previous editor of this document, along | Fielding, the editor of [RFC2068], along with John Klensin, Jeff | |||
with John Klensin, Jeff Mogul, Paul Leach, Dave Kristol, Koen | Mogul, Paul Leach, Dave Kristol, Koen Holtman, John Franks, Josh | |||
Holtman, John Franks, Josh Cohen, Alex Hopmann, Scott Lawrence, and | Cohen, Alex Hopmann, Scott Lawrence, and Larry Masinter for their | |||
Larry Masinter for their help. And thanks go particularly to Jeff | help. And thanks go particularly to Jeff Mogul and Scott Lawrence | |||
Mogul and Scott Lawrence for performing the "MUST/MAY/SHOULD" audit. | for performing the "MUST/MAY/SHOULD" audit. | |||
The Apache Group, Anselm Baird-Smith, author of Jigsaw, and Henrik | The Apache Group, Anselm Baird-Smith, author of Jigsaw, and Henrik | |||
Frystyk implemented RFC 2068 early, and we wish to thank them for the | Frystyk implemented RFC 2068 early, and we wish to thank them for the | |||
discovery of many of the problems that this document attempts to | discovery of many of the problems that this document attempts to | |||
rectify. | rectify. | |||
Based on an XML translation of RFC 2616 by Julian Reschke. | ||||
12. References | 12. References | |||
[ISO-8859] | 12.1. Normative References | |||
[ISO-8859-1] | ||||
International Organization for Standardization, | International Organization for Standardization, | |||
"Information technology - 8-bit single byte coded graphic | "Information technology -- 8-bit single-byte coded graphic | |||
- character sets", 1987-1990. | character sets -- Part 1: Latin alphabet No. 1", ISO/ | |||
IEC 8859-1:1998, 1998. | ||||
Part 1: Latin alphabet No. 1, ISO-8859-1:1987. Part 2: | [Part2] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | |||
Latin alphabet No. 2, ISO-8859-2, 1987. Part 3: Latin | Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | |||
alphabet No. 3, ISO-8859-3, 1988. Part 4: Latin alphabet | and J. Reschke, Ed., "HTTP/1.1, part 2: Message | |||
No. 4, ISO-8859-4, 1988. Part 5: Latin/Cyrillic alphabet, | Semantics", draft-ietf-httpbis-p2-semantics-01 (work in | |||
ISO-8859-5, 1988. Part 6: Latin/Arabic alphabet, ISO- | progress), January 2008. | |||
8859-6, 1987. Part 7: Latin/Greek alphabet, ISO-8859-7, | ||||
1987. Part 8: Latin/Hebrew alphabet, ISO-8859-8, 1988. | [Part3] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | |||
Part 9: Latin alphabet No. 5, ISO-8859-9, 1990. | Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | |||
and J. Reschke, Ed., "HTTP/1.1, part 3: Message Payload | ||||
and Content Negotiation", draft-ietf-httpbis-p3-payload-01 | ||||
(work in progress), January 2008. | ||||
[Part5] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | ||||
Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | ||||
and J. Reschke, Ed., "HTTP/1.1, part 5: Range Requests and | ||||
Partial Responses", draft-ietf-httpbis-p5-range-01 (work | ||||
in progress), January 2008. | ||||
[Part6] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | ||||
Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed., | ||||
and J. Reschke, Ed., "HTTP/1.1, part 6: Caching", | ||||
draft-ietf-httpbis-p6-cache-01 (work in progress), | ||||
January 2008. | ||||
[RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | ||||
Extensions (MIME) Part One: Format of Internet Message | ||||
Bodies", RFC 2045, November 1996. | ||||
[RFC2047] Moore, K., "MIME (Multipurpose Internet Mail Extensions) | ||||
Part Three: Message Header Extensions for Non-ASCII Text", | ||||
RFC 2047, November 1996. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | ||||
Requirement Levels", BCP 14, RFC 2119, March 1997. | ||||
[RFC2396] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | ||||
Resource Identifiers (URI): Generic Syntax", RFC 2396, | ||||
August 1998. | ||||
[RFC4288] Freed, N. and J. Klensin, "Media Type Specifications and | ||||
Registration Procedures", BCP 13, RFC 4288, December 2005. | ||||
[RFC822ABNF] | ||||
Crocker, D., "Standard for the format of ARPA Internet | ||||
text messages", STD 11, RFC 822, August 1982. | ||||
[USASCII] American National Standards Institute, "Coded Character | ||||
Set -- 7-bit American Standard Code for Information | ||||
Interchange", ANSI X3.4, 1986. | ||||
12.2. Informative References | ||||
[Nie1997] Nielsen, H., Gettys, J., Prud'hommeaux, E., Lie, H., and | [Nie1997] Nielsen, H., Gettys, J., Prud'hommeaux, E., Lie, H., and | |||
C. Lilley, "Network Performance Effects of HTTP/1.1, CSS1, | C. Lilley, "Network Performance Effects of HTTP/1.1, CSS1, | |||
and PNG", Proceedings of ACM SIGCOMM '97, Cannes France , | and PNG", ACM Proceedings of the ACM SIGCOMM '97 | |||
Sep 1997. | conference on Applications, technologies, architectures, | |||
and protocols for computer communication SIGCOMM '97, | ||||
September 1997, | ||||
<http://doi.acm.org/10.1145/263105.263157>. | ||||
[Pad1995] Padmanabhan, V. and J. Mogul, "Improving HTTP Latency", | [Pad1995] Padmanabhan, V. and J. Mogul, "Improving HTTP Latency", | |||
Computer Networks and ISDN Systems v. 28, pp. 25-35, | Computer Networks and ISDN Systems v. 28, pp. 25-35, | |||
Dec 1995. | December 1995. | |||
Slightly revised version of paper in Proc. 2nd | Slightly revised version of paper in Proc. 2nd | |||
International WWW Conference '94: Mosaic and the Web, Oct. | International WWW Conference '94: Mosaic and the Web, Oct. | |||
1994, which is available at <http://www.ncsa.uiuc.edu/SDG/ | 1994, which is available at <http://www.ncsa.uiuc.edu/SDG/ | |||
IT94/Proceedings/DDay/mogul/HTTPLatency.html>. | IT94/Proceedings/DDay/mogul/HTTPLatency.html>. | |||
[Part2] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | ||||
Masinter, L., Leach, P., and T. Berners-Lee, "HTTP/1.1, | ||||
part 2: Message Semantics", | ||||
draft-ietf-httpbis-p2-semantics-00 (work in progress), | ||||
December 2007. | ||||
[Part3] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | ||||
Masinter, L., Leach, P., and T. Berners-Lee, "HTTP/1.1, | ||||
part 3: Message Payload and Content Negotiation", | ||||
draft-ietf-httpbis-p3-payload-00 (work in progress), | ||||
December 2007. | ||||
[Part6] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H., | ||||
Masinter, L., Leach, P., and T. Berners-Lee, "HTTP/1.1, | ||||
part 6: Caching", draft-ietf-httpbis-p6-cache-00 (work in | ||||
progress), December 2007. | ||||
[RFC1036] Horton, M. and R. Adams, "Standard for interchange of | ||||
USENET messages", RFC 1036, December 1987. | ||||
[RFC1123] Braden, R., "Requirements for Internet Hosts - Application | [RFC1123] Braden, R., "Requirements for Internet Hosts - Application | |||
and Support", STD 3, RFC 1123, October 1989. | and Support", STD 3, RFC 1123, October 1989. | |||
[RFC1305] Mills, D., "Network Time Protocol (Version 3) | [RFC1305] Mills, D., "Network Time Protocol (Version 3) | |||
Specification, Implementation", RFC 1305, March 1992. | Specification, Implementation", RFC 1305, March 1992. | |||
[RFC1436] Anklesaria, F., McCahill, M., Lindner, P., Johnson, D., | [RFC1436] Anklesaria, F., McCahill, M., Lindner, P., Johnson, D., | |||
Torrey, D., and B. Alberti, "The Internet Gopher Protocol | Torrey, D., and B. Alberti, "The Internet Gopher Protocol | |||
(a distributed document search and retrieval protocol)", | (a distributed document search and retrieval protocol)", | |||
RFC 1436, March 1993. | RFC 1436, March 1993. | |||
[RFC1590] Postel, J., "Media Type Registration Procedure", RFC 1590, | ||||
November 1996. | ||||
[RFC1630] Berners-Lee, T., "Universal Resource Identifiers in WWW: A | [RFC1630] Berners-Lee, T., "Universal Resource Identifiers in WWW: A | |||
Unifying Syntax for the Expression of Names and Addresses | Unifying Syntax for the Expression of Names and Addresses | |||
of Objects on the Network as used in the World-Wide Web", | of Objects on the Network as used in the World-Wide Web", | |||
RFC 1630, June 1994. | RFC 1630, June 1994. | |||
[RFC1700] Reynolds, J. and J. Postel, "Assigned Numbers", STD 2, | ||||
RFC 1700, October 1994. | ||||
[RFC1737] Masinter, L. and K. Sollins, "Functional Requirements for | [RFC1737] Masinter, L. and K. Sollins, "Functional Requirements for | |||
Uniform Resource Names", RFC 1737, December 1994. | Uniform Resource Names", RFC 1737, December 1994. | |||
[RFC1738] Berners-Lee, T., Masinter, L., and M. McCahill, "Uniform | [RFC1738] Berners-Lee, T., Masinter, L., and M. McCahill, "Uniform | |||
Resource Locators (URL)", RFC 1738, December 1994. | Resource Locators (URL)", RFC 1738, December 1994. | |||
[RFC1808] Fielding, R., "Relative Uniform Resource Locators", | [RFC1808] Fielding, R., "Relative Uniform Resource Locators", | |||
RFC 1808, June 1995. | RFC 1808, June 1995. | |||
[RFC1900] Carpenter, B. and Y. Rekhter, "Renumbering Needs Work", | [RFC1900] Carpenter, B. and Y. Rekhter, "Renumbering Needs Work", | |||
RFC 1900, February 1996. | RFC 1900, February 1996. | |||
[RFC1945] Berners-Lee, T., Fielding, R., and H. Nielsen, "Hypertext | [RFC1945] Berners-Lee, T., Fielding, R., and H. Nielsen, "Hypertext | |||
Transfer Protocol -- HTTP/1.0", RFC 1945, May 1996. | Transfer Protocol -- HTTP/1.0", RFC 1945, May 1996. | |||
[RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | ||||
Extensions (MIME) Part One: Format of Internet Message | ||||
Bodies", RFC 2045, November 1996. | ||||
[RFC2047] Moore, K., "MIME (Multipurpose Internet Mail Extensions) | ||||
Part Three: Message Header Extensions for Non-ASCII Text", | ||||
RFC 2047, November 1996. | ||||
[RFC2068] Fielding, R., Gettys, J., Mogul, J., Nielsen, H., and T. | [RFC2068] Fielding, R., Gettys, J., Mogul, J., Nielsen, H., and T. | |||
Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", | Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", | |||
RFC 2068, January 1997. | RFC 2068, January 1997. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | ||||
Requirement Levels", BCP 14, RFC 2119, March 1997. | ||||
[RFC2145] Mogul, J., Fielding, R., Gettys, J., and H. Nielsen, "Use | [RFC2145] Mogul, J., Fielding, R., Gettys, J., and H. Nielsen, "Use | |||
and Interpretation of HTTP Version Numbers", RFC 2145, | and Interpretation of HTTP Version Numbers", RFC 2145, | |||
May 1997. | May 1997. | |||
[RFC2324] Masinter, L., "Hyper Text Coffee Pot Control Protocol | [RFC2324] Masinter, L., "Hyper Text Coffee Pot Control Protocol | |||
(HTCPCP/1.0)", RFC 2324, April 1998. | (HTCPCP/1.0)", RFC 2324, April 1998. | |||
[RFC2396] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | ||||
Resource Identifiers (URI): Generic Syntax", RFC 2396, | ||||
August 1998. | ||||
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | |||
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | |||
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | |||
[RFC821] Postel, J., "Simple Mail Transfer Protocol", STD 10, | [RFC2821] Klensin, J., "Simple Mail Transfer Protocol", RFC 2821, | |||
RFC 821, August 1982. | April 2001. | |||
[RFC2822] Resnick, P., "Internet Message Format", RFC 2822, | ||||
April 2001. | ||||
[RFC3977] Feather, C., "Network News Transfer Protocol (NNTP)", | ||||
RFC 3977, October 2006. | ||||
[RFC822] Crocker, D., "Standard for the format of ARPA Internet | [RFC822] Crocker, D., "Standard for the format of ARPA Internet | |||
text messages", STD 11, RFC 822, August 1982. | text messages", STD 11, RFC 822, August 1982. | |||
[RFC959] Postel, J. and J. Reynolds, "File Transfer Protocol", | [RFC959] Postel, J. and J. Reynolds, "File Transfer Protocol", | |||
STD 9, RFC 959, October 1985. | STD 9, RFC 959, October 1985. | |||
[RFC977] Kantor, B. and P. Lapsley, "Network News Transfer | ||||
Protocol", RFC 977, February 1986. | ||||
[Spe] Spero, S., "Analysis of HTTP Performance Problems", | [Spe] Spero, S., "Analysis of HTTP Performance Problems", | |||
<http://sunsite.unc.edu/mdma-release/http-prob.html>. | <http://sunsite.unc.edu/mdma-release/http-prob.html>. | |||
[Tou1998] Touch, J., Heidemann, J., and K. Obraczka, "Analysis of | [Tou1998] Touch, J., Heidemann, J., and K. Obraczka, "Analysis of | |||
HTTP Performance", ISI Research Report ISI/RR-98-463 | HTTP Performance", ISI Research Report ISI/RR-98-463, | |||
(original report dated Aug.1996), Aug 1998, | Aug 1998, <http://www.isi.edu/touch/pubs/http-perf96/>. | |||
<http://www.isi.edu/touch/pubs/http-perf96/>. | ||||
[USASCII] American National Standards Institute, "Coded Character | (original report dated Aug. 1996) | |||
Set -- 7-bit American Standard Code for Information | ||||
Interchange", ANSI X3.4, 1986. | ||||
[WAIS] Davis, F., Kahle, B., Morris, H., Salem, J., Shen, T., | [WAIS] Davis, F., Kahle, B., Morris, H., Salem, J., Shen, T., | |||
Wang, R., Sui, J., and M. Grinbaum, "WAIS Interface | Wang, R., Sui, J., and M. Grinbaum, "WAIS Interface | |||
Protocol Prototype Functional Specification (v1.5)", | Protocol Prototype Functional Specification (v1.5)", | |||
Thinking Machines Corporation , April 1990. | Thinking Machines Corporation , April 1990. | |||
Appendix A. Internet Media Type message/http and application/http | Appendix A. Internet Media Types | |||
In addition to defining the HTTP/1.1 protocol, this document serves | In addition to defining the HTTP/1.1 protocol, this document serves | |||
as the specification for the Internet media type "message/http" and | as the specification for the Internet media type "message/http" and | |||
"application/http". The message/http type can be used to enclose a | "application/http". The following is to be registered with IANA | |||
single HTTP request or response message, provided that it obeys the | [RFC4288]. | |||
MIME restrictions for all "message" types regarding line length and | ||||
encodings. The application/http type can be used to enclose a | ||||
pipeline of one or more HTTP request or response messages (not | ||||
intermixed). The following is to be registered with IANA [RFC1590]. | ||||
Media Type name: message | A.1. Internet Media Type message/http | |||
Media subtype name: http | The message/http type can be used to enclose a single HTTP request or | |||
response message, provided that it obeys the MIME restrictions for | ||||
all "message" types regarding line length and encodings. | ||||
Type name: message | ||||
Subtype name: http | ||||
Required parameters: none | Required parameters: none | |||
Optional parameters: version, msgtype | Optional parameters: version, msgtype | |||
version: The HTTP-Version number of the enclosed message (e.g., | version: The HTTP-Version number of the enclosed message (e.g., | |||
"1.1"). If not present, the version can be determined from the | "1.1"). If not present, the version can be determined from the | |||
first line of the body. | first line of the body. | |||
msgtype: The message type -- "request" or "response". If not | msgtype: The message type -- "request" or "response". If not | |||
present, the type can be determined from the first line of the | present, the type can be determined from the first line of the | |||
body. | body. | |||
Encoding considerations: only "7bit", "8bit", or "binary" are | Encoding considerations: only "7bit", "8bit", or "binary" are | |||
permitted | permitted | |||
Security considerations: none | Security considerations: none | |||
Media Type name: application | Interoperability considerations: none | |||
Media subtype name: http | Published specification: This specification (see Appendix A.1). | |||
Applications that use this media type: | ||||
Additional information: | ||||
Magic number(s): none | ||||
File extension(s): none | ||||
Macintosh file type code(s): none | ||||
Person and email address to contact for further information: See | ||||
Authors Section. | ||||
Intended usage: COMMON | ||||
Restrictions on usage: none | ||||
Author/Change controller: IESG | ||||
A.2. Internet Media Type application/http | ||||
The application/http type can be used to enclose a pipeline of one or | ||||
more HTTP request or response messages (not intermixed). | ||||
Type name: application | ||||
Subtype name: http | ||||
Required parameters: none | Required parameters: none | |||
Optional parameters: version, msgtype | Optional parameters: version, msgtype | |||
version: The HTTP-Version number of the enclosed messages (e.g., | version: The HTTP-Version number of the enclosed messages (e.g., | |||
"1.1"). If not present, the version can be determined from the | "1.1"). If not present, the version can be determined from the | |||
first line of the body. | first line of the body. | |||
msgtype: The message type -- "request" or "response". If not | msgtype: The message type -- "request" or "response". If not | |||
present, the type can be determined from the first line of the | present, the type can be determined from the first line of the | |||
body. | body. | |||
skipping to change at page 54, line 20 | skipping to change at page 55, line 15 | |||
msgtype: The message type -- "request" or "response". If not | msgtype: The message type -- "request" or "response". If not | |||
present, the type can be determined from the first line of the | present, the type can be determined from the first line of the | |||
body. | body. | |||
Encoding considerations: HTTP messages enclosed by this type are in | Encoding considerations: HTTP messages enclosed by this type are in | |||
"binary" format; use of an appropriate Content-Transfer-Encoding | "binary" format; use of an appropriate Content-Transfer-Encoding | |||
is required when transmitted via E-mail. | is required when transmitted via E-mail. | |||
Security considerations: none | Security considerations: none | |||
Interoperability considerations: none | ||||
Published specification: This specification (see Appendix A.2). | ||||
Applications that use this media type: | ||||
Additional information: | ||||
Magic number(s): none | ||||
File extension(s): none | ||||
Macintosh file type code(s): none | ||||
Person and email address to contact for further information: See | ||||
Authors Section. | ||||
Intended usage: COMMON | ||||
Restrictions on usage: none | ||||
Author/Change controller: IESG | ||||
Appendix B. Tolerant Applications | Appendix B. Tolerant Applications | |||
Although this document specifies the requirements for the generation | Although this document specifies the requirements for the generation | |||
of HTTP/1.1 messages, not all applications will be correct in their | of HTTP/1.1 messages, not all applications will be correct in their | |||
implementation. We therefore recommend that operational applications | implementation. We therefore recommend that operational applications | |||
be tolerant of deviations whenever those deviations can be | be tolerant of deviations whenever those deviations can be | |||
interpreted unambiguously. | interpreted unambiguously. | |||
Clients SHOULD be tolerant in parsing the Status-Line and servers | Clients SHOULD be tolerant in parsing the Status-Line and servers | |||
tolerant when parsing the Request-Line. In particular, they SHOULD | tolerant when parsing the Request-Line. In particular, they SHOULD | |||
accept any amount of SP or HT characters between fields, even though | accept any amount of SP or HTAB characters between fields, even | |||
only a single SP is required. | though only a single SP is required. | |||
The line terminator for message-header fields is the sequence CRLF. | The line terminator for message-header fields is the sequence CRLF. | |||
However, we recommend that applications, when parsing such headers, | However, we recommend that applications, when parsing such headers, | |||
recognize a single LF as a line terminator and ignore the leading CR. | recognize a single LF as a line terminator and ignore the leading CR. | |||
The character set of an entity-body SHOULD be labeled as the lowest | The character set of an entity-body SHOULD be labeled as the lowest | |||
common denominator of the character codes used within that body, with | common denominator of the character codes used within that body, with | |||
the exception that not labeling the entity is preferred over labeling | the exception that not labeling the entity is preferred over labeling | |||
the entity with the labels US-ASCII or ISO-8859-1. See [Part3]. | the entity with the labels US-ASCII or ISO-8859-1. See [Part3]. | |||
Additional rules for requirements on parsing and encoding of dates | Additional rules for requirements on parsing and encoding of dates | |||
and other potential problems with date encodings include: | and other potential problems with date encodings include: | |||
skipping to change at page 56, line 5 | skipping to change at page 57, line 21 | |||
o recognize the format of the Status-Line for HTTP/1.0 and 1.1 | o recognize the format of the Status-Line for HTTP/1.0 and 1.1 | |||
responses; | responses; | |||
o understand any valid response in the format of HTTP/0.9, 1.0, or | o understand any valid response in the format of HTTP/0.9, 1.0, or | |||
1.1. | 1.1. | |||
For most implementations of HTTP/1.0, each connection is established | For most implementations of HTTP/1.0, each connection is established | |||
by the client prior to the request and closed by the server after | by the client prior to the request and closed by the server after | |||
sending the response. Some implementations implement the Keep-Alive | sending the response. Some implementations implement the Keep-Alive | |||
version of persistent connections described in Section 19.7.1 of RFC | version of persistent connections described in Section 19.7.1 of | |||
2068 [RFC2068]. | [RFC2068]. | |||
D.1. Changes from HTTP/1.0 | D.1. Changes from HTTP/1.0 | |||
This section summarizes major differences between versions HTTP/1.0 | This section summarizes major differences between versions HTTP/1.0 | |||
and HTTP/1.1. | and HTTP/1.1. | |||
D.1.1. Changes to Simplify Multi-homed Web Servers and Conserve IP | D.1.1. Changes to Simplify Multi-homed Web Servers and Conserve IP | |||
Addresses | Addresses | |||
The requirements that clients and servers support the Host request- | The requirements that clients and servers support the Host request- | |||
skipping to change at page 57, line 24 | skipping to change at page 58, line 40 | |||
However, talking to proxies is the most important use of persistent | However, talking to proxies is the most important use of persistent | |||
connections, so that prohibition is clearly unacceptable. Therefore, | connections, so that prohibition is clearly unacceptable. Therefore, | |||
we need some other mechanism for indicating a persistent connection | we need some other mechanism for indicating a persistent connection | |||
is desired, which is safe to use even when talking to an old proxy | is desired, which is safe to use even when talking to an old proxy | |||
that ignores Connection. Persistent connections are the default for | that ignores Connection. Persistent connections are the default for | |||
HTTP/1.1 messages; we introduce a new keyword (Connection: close) for | HTTP/1.1 messages; we introduce a new keyword (Connection: close) for | |||
declaring non-persistence. See Section 8.1. | declaring non-persistence. See Section 8.1. | |||
The original HTTP/1.0 form of persistent connections (the Connection: | The original HTTP/1.0 form of persistent connections (the Connection: | |||
Keep-Alive and Keep-Alive header) is documented in RFC 2068. | Keep-Alive and Keep-Alive header) is documented in [RFC2068]. | |||
[RFC2068] | ||||
D.3. Changes from RFC 2068 | D.3. Changes from RFC 2068 | |||
This specification has been carefully audited to correct and | This specification has been carefully audited to correct and | |||
disambiguate key word usage; RFC 2068 had many problems in respect to | disambiguate key word usage; RFC 2068 had many problems in respect to | |||
the conventions laid out in RFC 2119 [RFC2119]. | the conventions laid out in [RFC2119]. | |||
Transfer-coding and message lengths all interact in ways that | Transfer-coding and message lengths all interact in ways that | |||
required fixing exactly when chunked encoding is used (to allow for | required fixing exactly when chunked encoding is used (to allow for | |||
transfer encoding that may not be self delimiting); it was important | transfer encoding that may not be self delimiting); it was important | |||
to straighten out exactly how message lengths are computed. | to straighten out exactly how message lengths are computed. | |||
The use and interpretation of HTTP version numbers has been clarified | (Sections 3.4, 4.4, 8.2, see also [Part3], [Part5] and [Part6]) | |||
by RFC 2145. Require proxies to upgrade requests to highest protocol | ||||
version they support to deal with problems discovered in HTTP/1.0 | ||||
implementations (Section 3.1) | ||||
Proxies should be able to add Content-Length when appropriate. | The use and interpretation of HTTP version numbers has been clarified | |||
by [RFC2145]. Require proxies to upgrade requests to highest | ||||
protocol version they support to deal with problems discovered in | ||||
HTTP/1.0 implementations (Section 3.1) | ||||
Transfer-coding had significant problems, particularly with | Transfer-coding had significant problems, particularly with | |||
interactions with chunked encoding. The solution is that transfer- | interactions with chunked encoding. The solution is that transfer- | |||
codings become as full fledged as content-codings. This involves | codings become as full fledged as content-codings. This involves | |||
adding an IANA registry for transfer-codings (separate from content | adding an IANA registry for transfer-codings (separate from content | |||
codings), a new header field (TE) and enabling trailer headers in the | codings), a new header field (TE) and enabling trailer headers in the | |||
future. Transfer encoding is a major performance benefit, so it was | future. Transfer encoding is a major performance benefit, so it was | |||
worth fixing [Nie1997]. TE also solves another, obscure, downward | worth fixing [Nie1997]. TE also solves another, obscure, downward | |||
interoperability problem that could have occurred due to interactions | interoperability problem that could have occurred due to interactions | |||
between authentication trailers, chunked encoding and HTTP/1.0 | between authentication trailers, chunked encoding and HTTP/1.0 | |||
clients.(Section 3.4, 3.4.1, and 8.5) | clients.(Section 3.4, 3.4.1, and 8.5) | |||
D.4. Changes from RFC 2616 | ||||
Clarify that HTTP-Version is case sensitive. (Section 3.1) | ||||
Remove reference to non-existant identity transfer-coding value | ||||
tokens. (Sections 3.4 and 4.4) | ||||
Clarification that the chunk length does not include the count of the | ||||
octets in the chunk header and trailer. (Section 3.4.1) | ||||
Fix BNF to add query, as the abs_path production in Section 3 of | ||||
[RFC2396] doesn't define it. (Section 5.1.2) | ||||
Clarify exactly when close connection options must be sent. | ||||
(Section 8.1) | ||||
Appendix E. Change Log (to be removed by RFC Editor before publication) | ||||
E.1. Since RFC2616 | ||||
Extracted relevant partitions from [RFC2616]. | ||||
E.2. Since draft-ietf-httpbis-p1-messaging-00 | ||||
Closed issues: | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/1>: "HTTP | ||||
Version should be case sensitive" | ||||
(<http://purl.org/NET/http-errata#verscase>) | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/2>: "'unsafe' | ||||
characters" (<http://purl.org/NET/http-errata#unsafe-uri>) | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/3>: "Chunk Size | ||||
Definition" (<http://purl.org/NET/http-errata#chunk-size>) | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/4>: "Message | ||||
Length" (<http://purl.org/NET/http-errata#msg-len-chars>) | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/8>: "Media Type | ||||
Registrations" (<http://purl.org/NET/http-errata#media-reg>) | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/11>: "URI | ||||
includes query" (<http://purl.org/NET/http-errata#uriquery>) | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/15>: "No close | ||||
on 1xx responses" (<http://purl.org/NET/http-errata#noclose1xx>) | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/16>: "Remove | ||||
'identity' token references" | ||||
(<http://purl.org/NET/http-errata#identity>) | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/26>: "Import | ||||
query BNF" | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/31>: "qdtext | ||||
BNF" | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/35>: "Normative | ||||
and Informative references" | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/42>: "RFC2606 | ||||
Compliance" | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/45>: "RFC977 | ||||
reference" | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/46>: "RFC1700 | ||||
references" | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/47>: | ||||
"inconsistency in date format explanation" | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/48>: "Date | ||||
reference typo" | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/65>: | ||||
"Informative references" | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/66>: | ||||
"ISO-8859-1 Reference" | ||||
o <http://www3.tools.ietf.org/wg/httpbis/trac/ticket/86>: "Normative | ||||
up-to-date references" | ||||
Other changes: | ||||
o Update media type registrations to use RFC4288 template. | ||||
o Use names of RFC4234 core rules DQUOTE and HTAB, fix broken ABNF | ||||
for chunk-data (work in progress on | ||||
<http://www3.tools.ietf.org/wg/httpbis/trac/ticket/36>) | ||||
Index | Index | |||
A | A | |||
application/http Media Type 53 | application/http Media Type 54 | |||
C | C | |||
cache 8 | cache 8 | |||
cacheable 8 | cacheable 9 | |||
client 7 | client 7 | |||
connection 6 | connection 6 | |||
Connection header 37 | Connection header 38 | |||
content negotiation 7 | content negotiation 7 | |||
Content-Length header 38 | Content-Length header 39 | |||
D | D | |||
Date header 39 | Date header 39 | |||
downstream 9 | downstream 9 | |||
E | E | |||
entity 6 | entity 7 | |||
G | G | |||
gateway 8 | gateway 8 | |||
Grammar | Grammar | |||
ALPHA 13 | ALPHA 14 | |||
asctime-date 19 | asctime-date 19 | |||
attribute 19 | attribute 20 | |||
CHAR 13 | CHAR 14 | |||
chunk 21 | chunk 21 | |||
chunk-data 21 | chunk-data 21 | |||
chunk-ext-name 21 | chunk-ext-name 21 | |||
chunk-ext-val 21 | chunk-ext-val 21 | |||
chunk-extension 21 | chunk-extension 21 | |||
chunk-size 21 | chunk-size 21 | |||
Chunked-Body 21 | Chunked-Body 21 | |||
comment 14 | comment 15 | |||
Connection 37 | Connection 38 | |||
connection-token 37 | connection-token 38 | |||
Content-Length 38 | Content-Length 39 | |||
CR 13 | CR 14 | |||
CRLF 13 | CRLF 14 | |||
ctext 14 | ctext 15 | |||
CTL 13 | CTL 14 | |||
Date 39 | Date 39 | |||
date1 19 | date1 19 | |||
date2 19 | date2 19 | |||
date3 19 | date3 19 | |||
DIGIT 13 | DIGIT 14 | |||
DQUOTE 14 | ||||
extension-code 30 | extension-code 30 | |||
extension-method 27 | extension-method 27 | |||
field-content 23 | field-content 23 | |||
field-name 23 | field-name 23 | |||
field-value 23 | field-value 23 | |||
general-header 26 | general-header 26 | |||
generic-message 22 | generic-message 22 | |||
HEX 14 | HEX 14 | |||
Host 40 | Host 41 | |||
HT 13 | HTAB 14 | |||
HTTP-date 19 | HTTP-date 19 | |||
HTTP-message 22 | HTTP-message 22 | |||
HTTP-Version 15 | HTTP-Version 16 | |||
http_URL 17 | http_URL 17 | |||
last-chunk 21 | last-chunk 21 | |||
LF 13 | LF 14 | |||
LOALPHA 13 | LOALPHA 14 | |||
LWS 14 | LWS 14 | |||
message-body 24 | message-body 24 | |||
message-header 23 | message-header 23 | |||
Method 27 | Method 27 | |||
month 19 | month 19 | |||
OCTET 13 | OCTET 14 | |||
parameter 19 | parameter 20 | |||
protocol-name 44 | protocol-name 45 | |||
protocol-version 44 | protocol-version 45 | |||
pseudonym 44 | pseudonym 45 | |||
qdtext 15 | qdtext 15 | |||
quoted-pair 15 | quoted-pair 15 | |||
quoted-string 15 | quoted-string 15 | |||
Reason-Phrase 30 | Reason-Phrase 30 | |||
received-by 44 | received-by 45 | |||
received-protocol 44 | received-protocol 45 | |||
Request 27 | Request 27 | |||
Request-Line 27 | Request-Line 27 | |||
Request-URI 27 | Request-URI 27 | |||
Response 29 | Response 29 | |||
rfc850-date 19 | rfc850-date 19 | |||
rfc1123-date 19 | rfc1123-date 19 | |||
separators 14 | separators 15 | |||
SP 13 | SP 14 | |||
start-line 22 | start-line 22 | |||
Status-Code 30 | Status-Code 30 | |||
Status-Line 29 | Status-Line 30 | |||
t-codings 41 | t-codings 41 | |||
TE 41 | TE 41 | |||
TEXT 14 | TEXT 14 | |||
time 19 | time 19 | |||
token 14 | token 15 | |||
Trailer 42 | Trailer 42 | |||
trailer 21 | trailer 21 | |||
transfer-coding 19 | transfer-coding 19 | |||
Transfer-Encoding 43 | Transfer-Encoding 43 | |||
transfer-extension 19 | transfer-extension 19 | |||
UPALPHA 13 | UPALPHA 14 | |||
Upgrade 43 | Upgrade 43 | |||
value 19 | value 20 | |||
Via 44 | Via 45 | |||
weekday 19 | weekday 19 | |||
wkday 19 | wkday 19 | |||
H | H | |||
Headers | Headers | |||
Connection 37 | Connection 38 | |||
Content-Length 38 | Content-Length 39 | |||
Date 39 | Date 39 | |||
Host 40 | Host 40 | |||
TE 41 | TE 41 | |||
Trailer 42 | Trailer 42 | |||
Transfer-Encoding 43 | Transfer-Encoding 43 | |||
Upgrade 43 | Upgrade 43 | |||
Via 44 | Via 44 | |||
Host header 40 | Host header 40 | |||
I | I | |||
inbound 9 | inbound 9 | |||
M | M | |||
Media Type | Media Type | |||
application/http 53 | application/http 54 | |||
message/http 53 | message/http 53 | |||
message 6 | message 6 | |||
message/http Media Type 53 | message/http Media Type 53 | |||
O | O | |||
origin server 8 | origin server 8 | |||
outbound 9 | outbound 9 | |||
P | P | |||
proxy 8 | proxy 8 | |||
skipping to change at page 61, line 4 | skipping to change at page 64, line 14 | |||
message/http 53 | message/http 53 | |||
message 6 | message 6 | |||
message/http Media Type 53 | message/http Media Type 53 | |||
O | O | |||
origin server 8 | origin server 8 | |||
outbound 9 | outbound 9 | |||
P | P | |||
proxy 8 | proxy 8 | |||
R | R | |||
representation 7 | representation 7 | |||
request 6 | request 6 | |||
resource 6 | resource 7 | |||
response 6 | response 6 | |||
S | S | |||
server 7 | server 8 | |||
T | T | |||
TE header 41 | TE header 41 | |||
Trailer header 42 | Trailer header 42 | |||
Transfer-Encoding header 43 | Transfer-Encoding header 43 | |||
tunnel 8 | tunnel 8 | |||
U | U | |||
Upgrade header 43 | Upgrade header 43 | |||
upstream 9 | upstream 9 | |||
skipping to change at page 63, line 5 | skipping to change at page 66, line 31 | |||
World Wide Web Consortium | World Wide Web Consortium | |||
MIT Computer Science and Artificial Intelligence Laboratory | MIT Computer Science and Artificial Intelligence Laboratory | |||
The Stata Center, Building 32 | The Stata Center, Building 32 | |||
32 Vassar Street | 32 Vassar Street | |||
Cambridge, MA 02139 | Cambridge, MA 02139 | |||
USA | USA | |||
Email: timbl@w3.org | Email: timbl@w3.org | |||
URI: http://www.w3.org/People/Berners-Lee/ | URI: http://www.w3.org/People/Berners-Lee/ | |||
Yves Lafon (editor) | ||||
World Wide Web Consortium | ||||
W3C / ERCIM | ||||
2004, rte des Lucioles | ||||
Sophia-Antipolis, AM 06902 | ||||
France | ||||
Email: ylafon@w3.org | ||||
URI: http://www.raubacapeu.net/people/yves/ | ||||
Julian F. Reschke (editor) | ||||
greenbytes GmbH | ||||
Hafenweg 16 | ||||
Muenster, NW 48155 | ||||
Germany | ||||
Phone: +49 251 2807760 | ||||
Fax: +49 251 2807761 | ||||
Email: julian.reschke@greenbytes.de | ||||
URI: http://greenbytes.de/tech/webdav/ | ||||
Full Copyright Statement | Full Copyright Statement | |||
Copyright (C) The IETF Trust (2007). | Copyright (C) The IETF Trust (2008). | |||
This document is subject to the rights, licenses and restrictions | This document is subject to the rights, licenses and restrictions | |||
contained in BCP 78, and except as set forth therein, the authors | contained in BCP 78, and except as set forth therein, the authors | |||
retain all their rights. | retain all their rights. | |||
This document and the information contained herein are provided on an | This document and the information contained herein are provided on an | |||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | |||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND | |||
THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS | THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS | |||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF | OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF | |||
End of changes. 147 change blocks. | ||||
365 lines changed or deleted | 552 lines changed or added | |||
This html diff was produced by rfcdiff 1.34. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |