| draft-ietf-httpbis-semantics-02.txt | draft-ietf-httpbis-semantics-03.txt | |||
|---|---|---|---|---|
| HTTP Working Group R. Fielding, Ed. | HTTP Working Group R. Fielding, Ed. | |||
| Internet-Draft Adobe | Internet-Draft Adobe | |||
| Obsoletes: 7230,7231,7232,7233,7235 (if M. Nottingham, Ed. | Obsoletes: 7230,7231,7232,7233,7235,7615 M. Nottingham, Ed. | |||
| approved) Fastly | (if approved) Fastly | |||
| Intended status: Standards Track J. Reschke, Ed. | Intended status: Standards Track J. Reschke, Ed. | |||
| Expires: January 3, 2019 greenbytes | Expires: April 21, 2019 greenbytes | |||
| July 2, 2018 | October 18, 2018 | |||
| HTTP Semantics | HTTP Semantics | |||
| draft-ietf-httpbis-semantics-02 | draft-ietf-httpbis-semantics-03 | |||
| Abstract | Abstract | |||
| The Hypertext Transfer Protocol (HTTP) is a stateless application- | The Hypertext Transfer Protocol (HTTP) is a stateless application- | |||
| level protocol for distributed, collaborative, hypertext information | level protocol for distributed, collaborative, hypertext information | |||
| systems. This document defines the semantics of HTTP: its | systems. This document defines the semantics of HTTP: its | |||
| architecture, terminology, the "http" and "https" Uniform Resource | architecture, terminology, the "http" and "https" Uniform Resource | |||
| Identifier (URI) schemes, core request methods, request header | Identifier (URI) schemes, core request methods, request header | |||
| fields, response status codes, response header fields, and content | fields, response status codes, response header fields, and content | |||
| negotiation. | negotiation. | |||
| This document obsoletes RFC 7231, RFC 7232, RFC 7233, RFC 7235, and | This document obsoletes RFC 7231, RFC 7232, RFC 7233, RFC 7235, RFC | |||
| portions of RFC 7230. | 7615, and portions of RFC 7230. | |||
| Editorial Note | Editorial Note | |||
| This note is to be removed before publishing as an RFC. | This note is to be removed before publishing as an RFC. | |||
| Discussion of this draft takes place on the HTTP working group | Discussion of this draft takes place on the HTTP working group | |||
| mailing list (ietf-http-wg@w3.org), which is archived at | mailing list (ietf-http-wg@w3.org), which is archived at | |||
| <https://lists.w3.org/Archives/Public/ietf-http-wg/>. | <https://lists.w3.org/Archives/Public/ietf-http-wg/>. | |||
| Working Group information can be found at <https://httpwg.org/>; | Working Group information can be found at <https://httpwg.org/>; | |||
| source code and issues list for this draft can be found at | source code and issues list for this draft can be found at | |||
| <https://github.com/httpwg/http-core>. | <https://github.com/httpwg/http-core>. | |||
| The changes in this draft are summarized in Appendix G.3. | The changes in this draft are summarized in Appendix H.4. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| 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." | |||
| This Internet-Draft will expire on January 3, 2019. | This Internet-Draft will expire on April 21, 2019. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 44 ¶ | skipping to change at page 2, line 44 ¶ | |||
| outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
| not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
| it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
| than English. | than English. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 7 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 1.1. Requirements Notation . . . . . . . . . . . . . . . . . . 9 | 1.1. Requirements Notation . . . . . . . . . . . . . . . . . . 9 | |||
| 1.2. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 9 | 1.2. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 2. Architecture . . . . . . . . . . . . . . . . . . . . . . . . 9 | 2. Architecture . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 2.1. Client/Server Messaging . . . . . . . . . . . . . . . . . 10 | 2.1. Client/Server Messaging . . . . . . . . . . . . . . . . . 10 | |||
| 2.2. Intermediaries . . . . . . . . . . . . . . . . . . . . . 11 | 2.2. Intermediaries . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 2.3. Caches . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 2.3. Caches . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 2.4. Uniform Resource Identifiers . . . . . . . . . . . . . . 14 | 2.4. Uniform Resource Identifiers . . . . . . . . . . . . . . 15 | |||
| 2.5. Resources . . . . . . . . . . . . . . . . . . . . . . . . 15 | 2.5. Resources . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 2.5.1. http URI Scheme . . . . . . . . . . . . . . . . . . . 16 | 2.5.1. http URI Scheme . . . . . . . . . . . . . . . . . . . 16 | |||
| 2.5.2. https URI Scheme . . . . . . . . . . . . . . . . . . 17 | 2.5.2. https URI Scheme . . . . . . . . . . . . . . . . . . 18 | |||
| 2.5.3. http and https URI Normalization and Comparison . . . 18 | 2.5.3. Fragment Identifiers on http(s) URI References . . . 18 | |||
| 2.5.4. http and https URI Normalization and Comparison . . . 19 | ||||
| 3. Conformance . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 3. Conformance . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 3.1. Implementation Diversity . . . . . . . . . . . . . . . . 18 | 3.1. Implementation Diversity . . . . . . . . . . . . . . . . 19 | |||
| 3.2. Role-based Requirements . . . . . . . . . . . . . . . . . 19 | 3.2. Role-based Requirements . . . . . . . . . . . . . . . . . 20 | |||
| 3.3. Parsing Elements . . . . . . . . . . . . . . . . . . . . 20 | 3.3. Parsing Elements . . . . . . . . . . . . . . . . . . . . 20 | |||
| 3.4. Error Handling . . . . . . . . . . . . . . . . . . . . . 20 | 3.4. Error Handling . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 3.5. Protocol Versioning . . . . . . . . . . . . . . . . . . . 21 | 3.5. Protocol Versioning . . . . . . . . . . . . . . . . . . . 21 | |||
| 4. Message Abstraction . . . . . . . . . . . . . . . . . . . . . 22 | 4. Message Abstraction . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 4.1. Field Names . . . . . . . . . . . . . . . . . . . . . . . 22 | 4.1. Header Field Names . . . . . . . . . . . . . . . . . . . 23 | |||
| 4.1.1. Field Name Registry . . . . . . . . . . . . . . . . . 24 | 4.1.1. Header Field Name Registry . . . . . . . . . . . . . 25 | |||
| 4.1.2. Field Extensibility . . . . . . . . . . . . . . . . . 24 | 4.1.2. Header Field Extensibility . . . . . . . . . . . . . 25 | |||
| 4.1.3. Considerations for New Fields . . . . . . . . . . . . 24 | 4.1.3. Considerations for New Header Fields . . . . . . . . 25 | |||
| 4.2. Field Values . . . . . . . . . . . . . . . . . . . . . . 26 | 4.2. Header Field Values . . . . . . . . . . . . . . . . . . . 27 | |||
| 4.2.1. Field Order . . . . . . . . . . . . . . . . . . . . . 26 | 4.2.1. Header Field Order . . . . . . . . . . . . . . . . . 27 | |||
| 4.2.2. Field Limits . . . . . . . . . . . . . . . . . . . . 27 | 4.2.2. Header Field Limits . . . . . . . . . . . . . . . . . 28 | |||
| 4.2.3. Field Value Components . . . . . . . . . . . . . . . 27 | 4.2.3. Header Field Value Components . . . . . . . . . . . . 28 | |||
| 4.2.4. Designing New Field Values . . . . . . . . . . . . . 28 | 4.2.4. Designing New Header Field Values . . . . . . . . . . 29 | |||
| 4.3. Whitespace . . . . . . . . . . . . . . . . . . . . . . . 29 | 4.3. Whitespace . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 4.4. Trailer . . . . . . . . . . . . . . . . . . . . . . . . . 30 | 4.4. Trailer . . . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 5. Message Routing . . . . . . . . . . . . . . . . . . . . . . . 30 | 5. Message Routing . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 5.1. Identifying a Target Resource . . . . . . . . . . . . . . 30 | 5.1. Identifying a Target Resource . . . . . . . . . . . . . . 31 | |||
| 5.2. Routing Inbound . . . . . . . . . . . . . . . . . . . . . 30 | 5.2. Routing Inbound . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 5.3. Effective Request URI . . . . . . . . . . . . . . . . . . 31 | 5.3. Effective Request URI . . . . . . . . . . . . . . . . . . 32 | |||
| 5.4. Host . . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 5.4. Host . . . . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 5.5. Associating a Response to a Request . . . . . . . . . . . 33 | 5.5. Message Forwarding . . . . . . . . . . . . . . . . . . . 34 | |||
| 5.6. Message Forwarding . . . . . . . . . . . . . . . . . . . 33 | 5.5.1. Via . . . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
| 5.6.1. Via . . . . . . . . . . . . . . . . . . . . . . . . . 34 | 5.5.2. Transformations . . . . . . . . . . . . . . . . . . . 36 | |||
| 5.6.2. Transformations . . . . . . . . . . . . . . . . . . . 35 | ||||
| 6. Representations . . . . . . . . . . . . . . . . . . . . . . . 37 | 6. Representations . . . . . . . . . . . . . . . . . . . . . . . 37 | |||
| 6.1. Representation Data . . . . . . . . . . . . . . . . . . . 37 | 6.1. Representation Data . . . . . . . . . . . . . . . . . . . 38 | |||
| 6.1.1. Media Type . . . . . . . . . . . . . . . . . . . . . 37 | 6.1.1. Media Type . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 6.1.2. Content Codings . . . . . . . . . . . . . . . . . . . 40 | 6.1.2. Content Codings . . . . . . . . . . . . . . . . . . . 40 | |||
| 6.1.3. Language Tags . . . . . . . . . . . . . . . . . . . . 41 | 6.1.3. Language Tags . . . . . . . . . . . . . . . . . . . . 42 | |||
| 6.1.4. Range Units . . . . . . . . . . . . . . . . . . . . . 42 | 6.1.4. Range Units . . . . . . . . . . . . . . . . . . . . . 43 | |||
| 6.2. Representation Metadata . . . . . . . . . . . . . . . . . 45 | 6.2. Representation Metadata . . . . . . . . . . . . . . . . . 46 | |||
| 6.2.1. Content-Type . . . . . . . . . . . . . . . . . . . . 45 | 6.2.1. Content-Type . . . . . . . . . . . . . . . . . . . . 46 | |||
| 6.2.2. Content-Encoding . . . . . . . . . . . . . . . . . . 46 | 6.2.2. Content-Encoding . . . . . . . . . . . . . . . . . . 47 | |||
| 6.2.3. Content-Language . . . . . . . . . . . . . . . . . . 47 | 6.2.3. Content-Language . . . . . . . . . . . . . . . . . . 48 | |||
| 6.2.4. Content-Length . . . . . . . . . . . . . . . . . . . 48 | 6.2.4. Content-Length . . . . . . . . . . . . . . . . . . . 49 | |||
| 6.2.5. Content-Location . . . . . . . . . . . . . . . . . . 49 | 6.2.5. Content-Location . . . . . . . . . . . . . . . . . . 50 | |||
| 6.3. Payload . . . . . . . . . . . . . . . . . . . . . . . . . 51 | 6.3. Payload . . . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
| 6.3.1. Purpose . . . . . . . . . . . . . . . . . . . . . . . 51 | 6.3.1. Purpose . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
| 6.3.2. Identification . . . . . . . . . . . . . . . . . . . 52 | 6.3.2. Identification . . . . . . . . . . . . . . . . . . . 53 | |||
| 6.3.3. Content-Range . . . . . . . . . . . . . . . . . . . . 53 | 6.3.3. Content-Range . . . . . . . . . . . . . . . . . . . . 54 | |||
| 6.3.4. Media Type multipart/byteranges . . . . . . . . . . . 55 | 6.3.4. Media Type multipart/byteranges . . . . . . . . . . . 55 | |||
| 6.4. Content Negotiation . . . . . . . . . . . . . . . . . . . 57 | 6.4. Content Negotiation . . . . . . . . . . . . . . . . . . . 57 | |||
| 6.4.1. Proactive Negotiation . . . . . . . . . . . . . . . . 57 | 6.4.1. Proactive Negotiation . . . . . . . . . . . . . . . . 58 | |||
| 6.4.2. Reactive Negotiation . . . . . . . . . . . . . . . . 58 | 6.4.2. Reactive Negotiation . . . . . . . . . . . . . . . . 59 | |||
| 7. Request Methods . . . . . . . . . . . . . . . . . . . . . . . 59 | 7. Request Methods . . . . . . . . . . . . . . . . . . . . . . . 60 | |||
| 7.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 59 | 7.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 60 | |||
| 7.2. Common Method Properties . . . . . . . . . . . . . . . . 61 | 7.2. Common Method Properties . . . . . . . . . . . . . . . . 62 | |||
| 7.2.1. Safe Methods . . . . . . . . . . . . . . . . . . . . 61 | 7.2.1. Safe Methods . . . . . . . . . . . . . . . . . . . . 62 | |||
| 7.2.2. Idempotent Methods . . . . . . . . . . . . . . . . . 62 | 7.2.2. Idempotent Methods . . . . . . . . . . . . . . . . . 63 | |||
| 7.2.3. Cacheable Methods . . . . . . . . . . . . . . . . . . 62 | 7.2.3. Cacheable Methods . . . . . . . . . . . . . . . . . . 63 | |||
| 7.3. Method Definitions . . . . . . . . . . . . . . . . . . . 63 | 7.3. Method Definitions . . . . . . . . . . . . . . . . . . . 64 | |||
| 7.3.1. GET . . . . . . . . . . . . . . . . . . . . . . . . . 63 | 7.3.1. GET . . . . . . . . . . . . . . . . . . . . . . . . . 64 | |||
| 7.3.2. HEAD . . . . . . . . . . . . . . . . . . . . . . . . 63 | 7.3.2. HEAD . . . . . . . . . . . . . . . . . . . . . . . . 64 | |||
| 7.3.3. POST . . . . . . . . . . . . . . . . . . . . . . . . 64 | 7.3.3. POST . . . . . . . . . . . . . . . . . . . . . . . . 65 | |||
| 7.3.4. PUT . . . . . . . . . . . . . . . . . . . . . . . . . 65 | 7.3.4. PUT . . . . . . . . . . . . . . . . . . . . . . . . . 66 | |||
| 7.3.5. DELETE . . . . . . . . . . . . . . . . . . . . . . . 68 | 7.3.5. DELETE . . . . . . . . . . . . . . . . . . . . . . . 68 | |||
| 7.3.6. CONNECT . . . . . . . . . . . . . . . . . . . . . . . 69 | 7.3.6. CONNECT . . . . . . . . . . . . . . . . . . . . . . . 70 | |||
| 7.3.7. OPTIONS . . . . . . . . . . . . . . . . . . . . . . . 70 | 7.3.7. OPTIONS . . . . . . . . . . . . . . . . . . . . . . . 71 | |||
| 7.3.8. TRACE . . . . . . . . . . . . . . . . . . . . . . . . 71 | 7.3.8. TRACE . . . . . . . . . . . . . . . . . . . . . . . . 72 | |||
| 7.4. Method Extensibility . . . . . . . . . . . . . . . . . . 72 | 7.4. Method Extensibility . . . . . . . . . . . . . . . . . . 73 | |||
| 7.4.1. Method Registry . . . . . . . . . . . . . . . . . . . 72 | 7.4.1. Method Registry . . . . . . . . . . . . . . . . . . . 73 | |||
| 7.4.2. Considerations for New Methods . . . . . . . . . . . 72 | 7.4.2. Considerations for New Methods . . . . . . . . . . . 73 | |||
| 8. Request Header Fields . . . . . . . . . . . . . . . . . . . . 73 | 8. Request Header Fields . . . . . . . . . . . . . . . . . . . . 74 | |||
| 8.1. Controls . . . . . . . . . . . . . . . . . . . . . . . . 73 | 8.1. Controls . . . . . . . . . . . . . . . . . . . . . . . . 74 | |||
| 8.1.1. Expect . . . . . . . . . . . . . . . . . . . . . . . 74 | 8.1.1. Expect . . . . . . . . . . . . . . . . . . . . . . . 74 | |||
| 8.1.2. Max-Forwards . . . . . . . . . . . . . . . . . . . . 76 | 8.1.2. Max-Forwards . . . . . . . . . . . . . . . . . . . . 77 | |||
| 8.2. Preconditions . . . . . . . . . . . . . . . . . . . . . . 76 | 8.2. Preconditions . . . . . . . . . . . . . . . . . . . . . . 77 | |||
| 8.2.1. Evaluation . . . . . . . . . . . . . . . . . . . . . 77 | 8.2.1. Evaluation . . . . . . . . . . . . . . . . . . . . . 78 | |||
| 8.2.2. Precedence . . . . . . . . . . . . . . . . . . . . . 78 | 8.2.2. Precedence . . . . . . . . . . . . . . . . . . . . . 79 | |||
| 8.2.3. If-Match . . . . . . . . . . . . . . . . . . . . . . 80 | 8.2.3. If-Match . . . . . . . . . . . . . . . . . . . . . . 81 | |||
| 8.2.4. If-None-Match . . . . . . . . . . . . . . . . . . . . 81 | 8.2.4. If-None-Match . . . . . . . . . . . . . . . . . . . . 82 | |||
| 8.2.5. If-Modified-Since . . . . . . . . . . . . . . . . . . 82 | 8.2.5. If-Modified-Since . . . . . . . . . . . . . . . . . . 83 | |||
| 8.2.6. If-Unmodified-Since . . . . . . . . . . . . . . . . . 83 | 8.2.6. If-Unmodified-Since . . . . . . . . . . . . . . . . . 84 | |||
| 8.2.7. If-Range . . . . . . . . . . . . . . . . . . . . . . 85 | 8.2.7. If-Range . . . . . . . . . . . . . . . . . . . . . . 85 | |||
| 8.3. Range . . . . . . . . . . . . . . . . . . . . . . . . . . 86 | 8.3. Range . . . . . . . . . . . . . . . . . . . . . . . . . . 87 | |||
| 8.4. Content Negotiation . . . . . . . . . . . . . . . . . . . 87 | 8.4. Content Negotiation . . . . . . . . . . . . . . . . . . . 88 | |||
| 8.4.1. Quality Values . . . . . . . . . . . . . . . . . . . 88 | 8.4.1. Quality Values . . . . . . . . . . . . . . . . . . . 89 | |||
| 8.4.2. Accept . . . . . . . . . . . . . . . . . . . . . . . 88 | 8.4.2. Accept . . . . . . . . . . . . . . . . . . . . . . . 89 | |||
| 8.4.3. Accept-Charset . . . . . . . . . . . . . . . . . . . 90 | 8.4.3. Accept-Charset . . . . . . . . . . . . . . . . . . . 91 | |||
| 8.4.4. Accept-Encoding . . . . . . . . . . . . . . . . . . . 91 | 8.4.4. Accept-Encoding . . . . . . . . . . . . . . . . . . . 92 | |||
| 8.4.5. Accept-Language . . . . . . . . . . . . . . . . . . . 93 | 8.4.5. Accept-Language . . . . . . . . . . . . . . . . . . . 94 | |||
| 8.5. Authentication Credentials . . . . . . . . . . . . . . . 94 | 8.5. Authentication Credentials . . . . . . . . . . . . . . . 95 | |||
| 8.5.1. Challenge and Response . . . . . . . . . . . . . . . 94 | 8.5.1. Challenge and Response . . . . . . . . . . . . . . . 95 | |||
| 8.5.2. Protection Space (Realm) . . . . . . . . . . . . . . 96 | 8.5.2. Protection Space (Realm) . . . . . . . . . . . . . . 97 | |||
| 8.5.3. Authorization . . . . . . . . . . . . . . . . . . . . 97 | 8.5.3. Authorization . . . . . . . . . . . . . . . . . . . . 98 | |||
| 8.5.4. Proxy-Authorization . . . . . . . . . . . . . . . . . 97 | 8.5.4. Proxy-Authorization . . . . . . . . . . . . . . . . . 98 | |||
| 8.5.5. Authentication Scheme Extensibility . . . . . . . . . 98 | 8.5.5. Authentication Scheme Extensibility . . . . . . . . . 99 | |||
| 8.6. Request Context . . . . . . . . . . . . . . . . . . . . . 100 | 8.6. Request Context . . . . . . . . . . . . . . . . . . . . . 101 | |||
| 8.6.1. From . . . . . . . . . . . . . . . . . . . . . . . . 100 | 8.6.1. From . . . . . . . . . . . . . . . . . . . . . . . . 101 | |||
| 8.6.2. Referer . . . . . . . . . . . . . . . . . . . . . . . 101 | 8.6.2. Referer . . . . . . . . . . . . . . . . . . . . . . . 102 | |||
| 8.6.3. User-Agent . . . . . . . . . . . . . . . . . . . . . 102 | 8.6.3. User-Agent . . . . . . . . . . . . . . . . . . . . . 103 | |||
| 9. Response Status Codes . . . . . . . . . . . . . . . . . . . . 103 | 9. Response Status Codes . . . . . . . . . . . . . . . . . . . . 104 | |||
| 9.1. Overview of Status Codes . . . . . . . . . . . . . . . . 104 | 9.1. Overview of Status Codes . . . . . . . . . . . . . . . . 105 | |||
| 9.2. Informational 1xx . . . . . . . . . . . . . . . . . . . . 106 | 9.2. Informational 1xx . . . . . . . . . . . . . . . . . . . . 107 | |||
| 9.2.1. 100 Continue . . . . . . . . . . . . . . . . . . . . 106 | 9.2.1. 100 Continue . . . . . . . . . . . . . . . . . . . . 107 | |||
| 9.2.2. 101 Switching Protocols . . . . . . . . . . . . . . . 106 | 9.2.2. 101 Switching Protocols . . . . . . . . . . . . . . . 107 | |||
| 9.3. Successful 2xx . . . . . . . . . . . . . . . . . . . . . 107 | 9.3. Successful 2xx . . . . . . . . . . . . . . . . . . . . . 108 | |||
| 9.3.1. 200 OK . . . . . . . . . . . . . . . . . . . . . . . 107 | 9.3.1. 200 OK . . . . . . . . . . . . . . . . . . . . . . . 108 | |||
| 9.3.2. 201 Created . . . . . . . . . . . . . . . . . . . . . 108 | 9.3.2. 201 Created . . . . . . . . . . . . . . . . . . . . . 109 | |||
| 9.3.3. 202 Accepted . . . . . . . . . . . . . . . . . . . . 108 | 9.3.3. 202 Accepted . . . . . . . . . . . . . . . . . . . . 109 | |||
| 9.3.4. 203 Non-Authoritative Information . . . . . . . . . . 108 | 9.3.4. 203 Non-Authoritative Information . . . . . . . . . . 109 | |||
| 9.3.5. 204 No Content . . . . . . . . . . . . . . . . . . . 109 | 9.3.5. 204 No Content . . . . . . . . . . . . . . . . . . . 110 | |||
| 9.3.6. 205 Reset Content . . . . . . . . . . . . . . . . . . 109 | 9.3.6. 205 Reset Content . . . . . . . . . . . . . . . . . . 110 | |||
| 9.3.7. 206 Partial Content . . . . . . . . . . . . . . . . . 110 | 9.3.7. 206 Partial Content . . . . . . . . . . . . . . . . . 111 | |||
| 9.4. Redirection 3xx . . . . . . . . . . . . . . . . . . . . . 113 | 9.4. Redirection 3xx . . . . . . . . . . . . . . . . . . . . . 114 | |||
| 9.4.1. 300 Multiple Choices . . . . . . . . . . . . . . . . 114 | 9.4.1. 300 Multiple Choices . . . . . . . . . . . . . . . . 115 | |||
| 9.4.2. 301 Moved Permanently . . . . . . . . . . . . . . . . 115 | 9.4.2. 301 Moved Permanently . . . . . . . . . . . . . . . . 116 | |||
| 9.4.3. 302 Found . . . . . . . . . . . . . . . . . . . . . . 116 | 9.4.3. 302 Found . . . . . . . . . . . . . . . . . . . . . . 117 | |||
| 9.4.4. 303 See Other . . . . . . . . . . . . . . . . . . . . 116 | 9.4.4. 303 See Other . . . . . . . . . . . . . . . . . . . . 117 | |||
| 9.4.5. 304 Not Modified . . . . . . . . . . . . . . . . . . 117 | 9.4.5. 304 Not Modified . . . . . . . . . . . . . . . . . . 118 | |||
| 9.4.6. 305 Use Proxy . . . . . . . . . . . . . . . . . . . . 117 | 9.4.6. 305 Use Proxy . . . . . . . . . . . . . . . . . . . . 118 | |||
| 9.4.7. 306 (Unused) . . . . . . . . . . . . . . . . . . . . 118 | 9.4.7. 306 (Unused) . . . . . . . . . . . . . . . . . . . . 119 | |||
| 9.4.8. 307 Temporary Redirect . . . . . . . . . . . . . . . 118 | 9.4.8. 307 Temporary Redirect . . . . . . . . . . . . . . . 119 | |||
| 9.5. Client Error 4xx . . . . . . . . . . . . . . . . . . . . 118 | 9.5. Client Error 4xx . . . . . . . . . . . . . . . . . . . . 119 | |||
| 9.5.1. 400 Bad Request . . . . . . . . . . . . . . . . . . . 118 | 9.5.1. 400 Bad Request . . . . . . . . . . . . . . . . . . . 119 | |||
| 9.5.2. 401 Unauthorized . . . . . . . . . . . . . . . . . . 118 | 9.5.2. 401 Unauthorized . . . . . . . . . . . . . . . . . . 119 | |||
| 9.5.3. 402 Payment Required . . . . . . . . . . . . . . . . 119 | 9.5.3. 402 Payment Required . . . . . . . . . . . . . . . . 120 | |||
| 9.5.4. 403 Forbidden . . . . . . . . . . . . . . . . . . . . 119 | 9.5.4. 403 Forbidden . . . . . . . . . . . . . . . . . . . . 120 | |||
| 9.5.5. 404 Not Found . . . . . . . . . . . . . . . . . . . . 119 | 9.5.5. 404 Not Found . . . . . . . . . . . . . . . . . . . . 120 | |||
| 9.5.6. 405 Method Not Allowed . . . . . . . . . . . . . . . 120 | 9.5.6. 405 Method Not Allowed . . . . . . . . . . . . . . . 121 | |||
| 9.5.7. 406 Not Acceptable . . . . . . . . . . . . . . . . . 120 | 9.5.7. 406 Not Acceptable . . . . . . . . . . . . . . . . . 121 | |||
| 9.5.8. 407 Proxy Authentication Required . . . . . . . . . . 120 | 9.5.8. 407 Proxy Authentication Required . . . . . . . . . . 121 | |||
| 9.5.9. 408 Request Timeout . . . . . . . . . . . . . . . . . 120 | 9.5.9. 408 Request Timeout . . . . . . . . . . . . . . . . . 121 | |||
| 9.5.10. 409 Conflict . . . . . . . . . . . . . . . . . . . . 121 | 9.5.10. 409 Conflict . . . . . . . . . . . . . . . . . . . . 122 | |||
| 9.5.11. 410 Gone . . . . . . . . . . . . . . . . . . . . . . 121 | 9.5.11. 410 Gone . . . . . . . . . . . . . . . . . . . . . . 122 | |||
| 9.5.12. 411 Length Required . . . . . . . . . . . . . . . . . 121 | 9.5.12. 411 Length Required . . . . . . . . . . . . . . . . . 122 | |||
| 9.5.13. 412 Precondition Failed . . . . . . . . . . . . . . . 122 | 9.5.13. 412 Precondition Failed . . . . . . . . . . . . . . . 123 | |||
| 9.5.14. 413 Payload Too Large . . . . . . . . . . . . . . . . 122 | 9.5.14. 413 Payload Too Large . . . . . . . . . . . . . . . . 123 | |||
| 9.5.15. 414 URI Too Long . . . . . . . . . . . . . . . . . . 122 | 9.5.15. 414 URI Too Long . . . . . . . . . . . . . . . . . . 123 | |||
| 9.5.16. 415 Unsupported Media Type . . . . . . . . . . . . . 122 | 9.5.16. 415 Unsupported Media Type . . . . . . . . . . . . . 123 | |||
| 9.5.17. 416 Range Not Satisfiable . . . . . . . . . . . . . . 123 | 9.5.17. 416 Range Not Satisfiable . . . . . . . . . . . . . . 124 | |||
| 9.5.18. 417 Expectation Failed . . . . . . . . . . . . . . . 123 | 9.5.18. 417 Expectation Failed . . . . . . . . . . . . . . . 124 | |||
| 9.5.19. 426 Upgrade Required . . . . . . . . . . . . . . . . 123 | 9.5.19. 418 (Unused) . . . . . . . . . . . . . . . . . . . . 124 | |||
| 9.6. Server Error 5xx . . . . . . . . . . . . . . . . . . . . 124 | 9.5.20. 422 Unprocessable Entity . . . . . . . . . . . . . . 125 | |||
| 9.6.1. 500 Internal Server Error . . . . . . . . . . . . . . 124 | 9.5.21. 426 Upgrade Required . . . . . . . . . . . . . . . . 125 | |||
| 9.6.2. 501 Not Implemented . . . . . . . . . . . . . . . . . 124 | 9.6. Server Error 5xx . . . . . . . . . . . . . . . . . . . . 125 | |||
| 9.6.3. 502 Bad Gateway . . . . . . . . . . . . . . . . . . . 124 | 9.6.1. 500 Internal Server Error . . . . . . . . . . . . . . 126 | |||
| 9.6.4. 503 Service Unavailable . . . . . . . . . . . . . . . 125 | 9.6.2. 501 Not Implemented . . . . . . . . . . . . . . . . . 126 | |||
| 9.6.5. 504 Gateway Timeout . . . . . . . . . . . . . . . . . 125 | 9.6.3. 502 Bad Gateway . . . . . . . . . . . . . . . . . . . 126 | |||
| 9.6.6. 505 HTTP Version Not Supported . . . . . . . . . . . 125 | 9.6.4. 503 Service Unavailable . . . . . . . . . . . . . . . 126 | |||
| 9.7. Status Code Extensibility . . . . . . . . . . . . . . . . 125 | 9.6.5. 504 Gateway Timeout . . . . . . . . . . . . . . . . . 126 | |||
| 9.7.1. Status Code Registry . . . . . . . . . . . . . . . . 125 | 9.6.6. 505 HTTP Version Not Supported . . . . . . . . . . . 126 | |||
| 9.7.2. Considerations for New Status Codes . . . . . . . . . 126 | 9.7. Status Code Extensibility . . . . . . . . . . . . . . . . 127 | |||
| 10. Response Header Fields . . . . . . . . . . . . . . . . . . . 127 | 9.7.1. Status Code Registry . . . . . . . . . . . . . . . . 127 | |||
| 10.1. Control Data . . . . . . . . . . . . . . . . . . . . . . 127 | 9.7.2. Considerations for New Status Codes . . . . . . . . . 127 | |||
| 10.1.1. Origination Date . . . . . . . . . . . . . . . . . . 127 | 10. Response Header Fields . . . . . . . . . . . . . . . . . . . 128 | |||
| 10.1.2. Location . . . . . . . . . . . . . . . . . . . . . . 131 | 10.1. Control Data . . . . . . . . . . . . . . . . . . . . . . 128 | |||
| 10.1.3. Retry-After . . . . . . . . . . . . . . . . . . . . 132 | 10.1.1. Origination Date . . . . . . . . . . . . . . . . . . 129 | |||
| 10.1.4. Vary . . . . . . . . . . . . . . . . . . . . . . . . 133 | 10.1.2. Location . . . . . . . . . . . . . . . . . . . . . . 132 | |||
| 10.2. Validators . . . . . . . . . . . . . . . . . . . . . . . 134 | 10.1.3. Retry-After . . . . . . . . . . . . . . . . . . . . 133 | |||
| 10.2.1. Weak versus Strong . . . . . . . . . . . . . . . . . 135 | 10.1.4. Vary . . . . . . . . . . . . . . . . . . . . . . . . 134 | |||
| 10.2.2. Last-Modified . . . . . . . . . . . . . . . . . . . 137 | 10.2. Validators . . . . . . . . . . . . . . . . . . . . . . . 135 | |||
| 10.2.3. ETag . . . . . . . . . . . . . . . . . . . . . . . . 139 | 10.2.1. Weak versus Strong . . . . . . . . . . . . . . . . . 136 | |||
| 10.2.4. When to Use Entity-Tags and Last-Modified Dates . . 142 | 10.2.2. Last-Modified . . . . . . . . . . . . . . . . . . . 138 | |||
| 10.3. Authentication Challenges . . . . . . . . . . . . . . . 143 | 10.2.3. ETag . . . . . . . . . . . . . . . . . . . . . . . . 140 | |||
| 10.3.1. WWW-Authenticate . . . . . . . . . . . . . . . . . . 143 | 10.2.4. When to Use Entity-Tags and Last-Modified Dates . . 143 | |||
| 10.3.2. Proxy-Authenticate . . . . . . . . . . . . . . . . . 144 | 10.3. Authentication Challenges . . . . . . . . . . . . . . . 144 | |||
| 10.4. Response Context . . . . . . . . . . . . . . . . . . . . 144 | 10.3.1. WWW-Authenticate . . . . . . . . . . . . . . . . . . 144 | |||
| 10.4.1. Accept-Ranges . . . . . . . . . . . . . . . . . . . 145 | 10.3.2. Proxy-Authenticate . . . . . . . . . . . . . . . . . 145 | |||
| 10.4.2. Allow . . . . . . . . . . . . . . . . . . . . . . . 145 | 10.3.3. Authentication-Info . . . . . . . . . . . . . . . . 146 | |||
| 10.4.3. Server . . . . . . . . . . . . . . . . . . . . . . . 146 | 10.3.4. Proxy-Authentication-Info . . . . . . . . . . . . . 147 | |||
| 11. ABNF List Extension: #rule . . . . . . . . . . . . . . . . . 146 | 10.4. Response Context . . . . . . . . . . . . . . . . . . . . 147 | |||
| 12. Security Considerations . . . . . . . . . . . . . . . . . . . 148 | 10.4.1. Accept-Ranges . . . . . . . . . . . . . . . . . . . 147 | |||
| 12.1. Establishing Authority . . . . . . . . . . . . . . . . . 148 | 10.4.2. Allow . . . . . . . . . . . . . . . . . . . . . . . 148 | |||
| 12.2. Risks of Intermediaries . . . . . . . . . . . . . . . . 149 | 10.4.3. Server . . . . . . . . . . . . . . . . . . . . . . . 148 | |||
| 12.3. Attacks Based on File and Path Names . . . . . . . . . . 149 | 11. ABNF List Extension: #rule . . . . . . . . . . . . . . . . . 149 | |||
| 12.4. Attacks Based on Command, Code, or Query Injection . . . 150 | 12. Security Considerations . . . . . . . . . . . . . . . . . . . 150 | |||
| 12.5. Attacks via Protocol Element Length . . . . . . . . . . 151 | 12.1. Establishing Authority . . . . . . . . . . . . . . . . . 150 | |||
| 12.6. Disclosure of Personal Information . . . . . . . . . . . 151 | 12.2. Risks of Intermediaries . . . . . . . . . . . . . . . . 151 | |||
| 12.7. Privacy of Server Log Information . . . . . . . . . . . 151 | 12.3. Attacks Based on File and Path Names . . . . . . . . . . 152 | |||
| 12.8. Disclosure of Sensitive Information in URIs . . . . . . 152 | 12.4. Attacks Based on Command, Code, or Query Injection . . . 152 | |||
| 12.9. Disclosure of Fragment after Redirects . . . . . . . . . 152 | 12.5. Attacks via Protocol Element Length . . . . . . . . . . 153 | |||
| 12.10. Disclosure of Product Information . . . . . . . . . . . 153 | 12.6. Disclosure of Personal Information . . . . . . . . . . . 154 | |||
| 12.11. Browser Fingerprinting . . . . . . . . . . . . . . . . . 153 | 12.7. Privacy of Server Log Information . . . . . . . . . . . 154 | |||
| 12.12. Validator Retention . . . . . . . . . . . . . . . . . . 154 | 12.8. Disclosure of Sensitive Information in URIs . . . . . . 154 | |||
| 12.13. Denial-of-Service Attacks Using Range . . . . . . . . . 154 | 12.9. Disclosure of Fragment after Redirects . . . . . . . . . 155 | |||
| 12.14. Authentication Considerations . . . . . . . . . . . . . 155 | 12.10. Disclosure of Product Information . . . . . . . . . . . 155 | |||
| 12.14.1. Confidentiality of Credentials . . . . . . . . . . 155 | 12.11. Browser Fingerprinting . . . . . . . . . . . . . . . . . 155 | |||
| 12.14.2. Credentials and Idle Clients . . . . . . . . . . . 155 | 12.12. Validator Retention . . . . . . . . . . . . . . . . . . 156 | |||
| 12.14.3. Protection Spaces . . . . . . . . . . . . . . . . . 156 | 12.13. Denial-of-Service Attacks Using Range . . . . . . . . . 157 | |||
| 13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 156 | 12.14. Authentication Considerations . . . . . . . . . . . . . 157 | |||
| 13.1. URI Scheme Registration . . . . . . . . . . . . . . . . 156 | 12.14.1. Confidentiality of Credentials . . . . . . . . . . 157 | |||
| 13.2. Method Registration . . . . . . . . . . . . . . . . . . 157 | 12.14.2. Credentials and Idle Clients . . . . . . . . . . . 158 | |||
| 13.3. Status Code Registration . . . . . . . . . . . . . . . . 157 | 12.14.3. Protection Spaces . . . . . . . . . . . . . . . . . 158 | |||
| 13.4. Header Field Registration . . . . . . . . . . . . . . . 157 | 12.14.4. Additional Response Header Fields . . . . . . . . . 159 | |||
| 13.5. Authentication Scheme Registration . . . . . . . . . . . 157 | 13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 159 | |||
| 13.6. Content Coding Registration . . . . . . . . . . . . . . 157 | 13.1. URI Scheme Registration . . . . . . . . . . . . . . . . 159 | |||
| 13.7. Range Unit Registration . . . . . . . . . . . . . . . . 157 | 13.2. Method Registration . . . . . . . . . . . . . . . . . . 159 | |||
| 13.8. Media Type Registration . . . . . . . . . . . . . . . . 157 | 13.3. Status Code Registration . . . . . . . . . . . . . . . . 159 | |||
| 13.4. Header Field Registration . . . . . . . . . . . . . . . 160 | ||||
| 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 158 | 13.5. Authentication Scheme Registration . . . . . . . . . . . 160 | |||
| 14.1. Normative References . . . . . . . . . . . . . . . . . . 158 | 13.6. Content Coding Registration . . . . . . . . . . . . . . 160 | |||
| 14.2. Informative References . . . . . . . . . . . . . . . . . 159 | 13.7. Range Unit Registration . . . . . . . . . . . . . . . . 160 | |||
| Appendix A. Collected ABNF . . . . . . . . . . . . . . . . . . . 165 | 13.8. Media Type Registration . . . . . . . . . . . . . . . . 160 | |||
| Appendix B. Changes from RFC 7230 . . . . . . . . . . . . . . . 169 | 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 161 | |||
| Appendix C. Changes from RFC 7231 . . . . . . . . . . . . . . . 170 | 14.1. Normative References . . . . . . . . . . . . . . . . . . 161 | |||
| Appendix D. Changes from RFC 7232 . . . . . . . . . . . . . . . 170 | 14.2. Informative References . . . . . . . . . . . . . . . . . 162 | |||
| Appendix E. Changes from RFC 7233 . . . . . . . . . . . . . . . 170 | Appendix A. Collected ABNF . . . . . . . . . . . . . . . . . . . 168 | |||
| Appendix F. Changes from RFC 7235 . . . . . . . . . . . . . . . 170 | Appendix B. Changes from RFC 7230 . . . . . . . . . . . . . . . 172 | |||
| Appendix G. Change Log . . . . . . . . . . . . . . . . . . . . . 170 | Appendix C. Changes from RFC 7231 . . . . . . . . . . . . . . . 173 | |||
| G.1. Between RFC723x and draft 00 . . . . . . . . . . . . . . 170 | Appendix D. Changes from RFC 7232 . . . . . . . . . . . . . . . 173 | |||
| G.2. Since draft-ietf-httpbis-semantics-00 . . . . . . . . . . 170 | Appendix E. Changes from RFC 7233 . . . . . . . . . . . . . . . 173 | |||
| G.3. Since draft-ietf-httpbis-semantics-01 . . . . . . . . . . 171 | Appendix F. Changes from RFC 7235 . . . . . . . . . . . . . . . 173 | |||
| Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 | Appendix G. Changes from RFC 7615 . . . . . . . . . . . . . . . 173 | |||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 180 | Appendix H. Change Log . . . . . . . . . . . . . . . . . . . . . 173 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 180 | H.1. Between RFC723x and draft 00 . . . . . . . . . . . . . . 173 | |||
| H.2. Since draft-ietf-httpbis-semantics-00 . . . . . . . . . . 174 | ||||
| H.3. Since draft-ietf-httpbis-semantics-01 . . . . . . . . . . 174 | ||||
| H.4. Since draft-ietf-httpbis-semantics-02 . . . . . . . . . . 176 | ||||
| Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 | ||||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 184 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 185 | ||||
| 1. Introduction | 1. Introduction | |||
| The Hypertext Transfer Protocol (HTTP) is a stateless application- | The Hypertext Transfer Protocol (HTTP) is a stateless application- | |||
| level request/response protocol that uses extensible semantics and | level request/response protocol that uses extensible semantics and | |||
| self-descriptive messages for flexible interaction with network-based | self-descriptive messages for flexible interaction with network-based | |||
| hypertext information systems. HTTP is defined by a series of | hypertext information systems. HTTP is defined by a series of | |||
| documents that collectively form the HTTP/1.1 specification: | documents that collectively form the HTTP/1.1 specification: | |||
| o "HTTP Semantics" (this document) | o "HTTP Semantics" (this document) | |||
| skipping to change at page 8, line 50 ¶ | skipping to change at page 9, line 10 ¶ | |||
| negotiation" (Section 6.4). | negotiation" (Section 6.4). | |||
| This document defines HTTP range requests, partial responses, and the | This document defines HTTP range requests, partial responses, and the | |||
| multipart/byteranges media type. | multipart/byteranges media type. | |||
| This document obsoletes the portions of RFC 7230 that are independent | This document obsoletes the portions of RFC 7230 that are independent | |||
| of the HTTP/1.1 messaging syntax and connection management, with the | of the HTTP/1.1 messaging syntax and connection management, with the | |||
| changes being summarized in Appendix B. The other parts of RFC 7230 | changes being summarized in Appendix B. The other parts of RFC 7230 | |||
| are obsoleted by "HTTP/1.1 Messaging" [Messaging]. This document | are obsoleted by "HTTP/1.1 Messaging" [Messaging]. This document | |||
| also obsoletes RFC 7231 (see Appendix C), RFC 7232 (see Appendix D), | also obsoletes RFC 7231 (see Appendix C), RFC 7232 (see Appendix D), | |||
| RFC 7233 (see Appendix E), and RFC 7235 (see Appendix F). | RFC 7233 (see Appendix E), and RFC 7235 (see Appendix F), and RFC | |||
| 7615 (see Appendix G). | ||||
| 1.1. Requirements Notation | 1.1. Requirements Notation | |||
| 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 [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| Conformance criteria and considerations regarding error handling are | Conformance criteria and considerations regarding error handling are | |||
| defined in Section 3. | defined in Section 3. | |||
| skipping to change at page 9, line 36 ¶ | skipping to change at page 9, line 44 ¶ | |||
| The following core rules are included by reference, as defined in | The following core rules are included by reference, as defined in | |||
| Appendix B.1 of [RFC5234]: ALPHA (letters), CR (carriage return), | Appendix B.1 of [RFC5234]: ALPHA (letters), CR (carriage return), | |||
| CRLF (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double | CRLF (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double | |||
| quote), HEXDIG (hexadecimal 0-9/A-F/a-f), HTAB (horizontal tab), LF | quote), HEXDIG (hexadecimal 0-9/A-F/a-f), HTAB (horizontal tab), LF | |||
| (line feed), OCTET (any 8-bit sequence of data), SP (space), and | (line feed), OCTET (any 8-bit sequence of data), SP (space), and | |||
| VCHAR (any visible US-ASCII character). | VCHAR (any visible US-ASCII character). | |||
| The rules below are defined in [Messaging]: | The rules below are defined in [Messaging]: | |||
| obs-fold = <obs-fold, see [Messaging], Section 5.2> | obs-fold = <obs-fold, see [Messaging], Section 5.2> | |||
| protocol-name = <protocol-name, see [Messaging], Section 9.7> | protocol-name = <protocol-name, see [Messaging], Section 9.8> | |||
| protocol-version = <protocol-version, see [Messaging], Section 9.7> | protocol-version = <protocol-version, see [Messaging], Section 9.8> | |||
| request-target = <request-target, see [Messaging], Section 3.2> | request-target = <request-target, see [Messaging], Section 3.2> | |||
| This specification uses the terms "character", "character encoding | This specification uses the terms "character", "character encoding | |||
| scheme", "charset", and "protocol element" as they are defined in | scheme", "charset", and "protocol element" as they are defined in | |||
| [RFC6365]. | [RFC6365]. | |||
| 2. Architecture | 2. Architecture | |||
| HTTP was created for the World Wide Web (WWW) architecture and has | HTTP was created for the World Wide Web (WWW) architecture and has | |||
| evolved over time to support the scalability needs of a worldwide | evolved over time to support the scalability needs of a worldwide | |||
| skipping to change at page 11, line 8 ¶ | skipping to change at page 11, line 16 ¶ | |||
| A server responds to a client's request by sending one or more HTTP | A server responds to a client's request by sending one or more HTTP | |||
| response messages, each beginning with a status line that includes | response messages, each beginning with a status line that includes | |||
| the protocol version, a success or error code, and textual reason | the protocol version, a success or error code, and textual reason | |||
| phrase (Section 4 of [Messaging]), possibly followed by header fields | phrase (Section 4 of [Messaging]), possibly followed by header fields | |||
| containing server information, resource metadata, and representation | containing server information, resource metadata, and representation | |||
| metadata (Section 5 of [Messaging]), an empty line to indicate the | metadata (Section 5 of [Messaging]), an empty line to indicate the | |||
| end of the header section, and finally a message body containing the | end of the header section, and finally a message body containing the | |||
| payload body (if any, Section 6 of [Messaging]). | payload body (if any, Section 6 of [Messaging]). | |||
| The mechanism used to correlate between request and response messages | ||||
| is version dependent; some versions of HTTP use implicit ordering of | ||||
| messages, while others use an explicit identifier. | ||||
| A connection might be used for multiple request/response exchanges, | A connection might be used for multiple request/response exchanges, | |||
| as defined in Section 9.3 of [Messaging]. | as defined in Section 9.4 of [Messaging]. | |||
| Responses (both final and non-final) can be sent at any time after a | ||||
| request is received, even if it is not yet complete. However, | ||||
| clients (including intermediaries) might abandon a request if the | ||||
| response is not forthcoming within a reasonable period of time. | ||||
| The following example illustrates a typical message exchange for a | The following example illustrates a typical message exchange for a | |||
| GET request (Section 7.3.1) on the URI "http://www.example.com/ | GET request (Section 7.3.1) on the URI "http://www.example.com/ | |||
| hello.txt": | hello.txt": | |||
| Client request: | Client request: | |||
| GET /hello.txt HTTP/1.1 | GET /hello.txt HTTP/1.1 | |||
| User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 | User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 | |||
| Host: www.example.com | Host: www.example.com | |||
| skipping to change at page 12, line 34 ¶ | skipping to change at page 13, line 16 ¶ | |||
| client, usually via local configuration rules, to receive requests | client, usually via local configuration rules, to receive requests | |||
| for some type(s) of absolute URI and attempt to satisfy those | for some type(s) of absolute URI and attempt to satisfy those | |||
| requests via translation through the HTTP interface. Some | requests via translation through the HTTP interface. Some | |||
| translations are minimal, such as for proxy requests for "http" URIs, | translations are minimal, such as for proxy requests for "http" URIs, | |||
| whereas other requests might require translation to and from entirely | whereas other requests might require translation to and from entirely | |||
| different application-level protocols. Proxies are often used to | different application-level protocols. Proxies are often used to | |||
| group an organization's HTTP requests through a common intermediary | group an organization's HTTP requests through a common intermediary | |||
| for the sake of security, annotation services, or shared caching. | for the sake of security, annotation services, or shared caching. | |||
| Some proxies are designed to apply transformations to selected | Some proxies are designed to apply transformations to selected | |||
| messages or payloads while they are being forwarded, as described in | messages or payloads while they are being forwarded, as described in | |||
| Section 5.6.2. | Section 5.5.2. | |||
| A "gateway" (a.k.a. "reverse proxy") is an intermediary that acts as | A "gateway" (a.k.a. "reverse proxy") is an intermediary that acts as | |||
| an origin server for the outbound connection but translates received | an origin server for the outbound connection but translates received | |||
| requests and forwards them inbound to another server or servers. | requests and forwards them inbound to another server or servers. | |||
| Gateways are often used to encapsulate legacy or untrusted | Gateways are often used to encapsulate legacy or untrusted | |||
| information services, to improve server performance through | information services, to improve server performance through | |||
| "accelerator" caching, and to enable partitioning or load balancing | "accelerator" caching, and to enable partitioning or load balancing | |||
| of HTTP services across multiple machines. | of HTTP services across multiple machines. | |||
| All HTTP requirements applicable to an origin server also apply to | All HTTP requirements applicable to an origin server also apply to | |||
| skipping to change at page 14, line 38 ¶ | skipping to change at page 15, line 20 ¶ | |||
| use in off-line or high-latency environments, and so on. | use in off-line or high-latency environments, and so on. | |||
| 2.4. Uniform Resource Identifiers | 2.4. Uniform Resource Identifiers | |||
| Uniform Resource Identifiers (URIs) [RFC3986] are used throughout | Uniform Resource Identifiers (URIs) [RFC3986] are used throughout | |||
| HTTP as the means for identifying resources (Section 2.5). URI | HTTP as the means for identifying resources (Section 2.5). URI | |||
| references are used to target requests, indicate redirects, and | references are used to target requests, indicate redirects, and | |||
| define relationships. | define relationships. | |||
| The definitions of "URI-reference", "absolute-URI", "relative-part", | The definitions of "URI-reference", "absolute-URI", "relative-part", | |||
| "authority", "port", "host", "path-abempty", "segment", "query", and | "authority", "port", "host", "path-abempty", "segment", and "query" | |||
| "fragment" are adopted from the URI generic syntax. An "absolute- | are adopted from the URI generic syntax. An "absolute-path" rule is | |||
| path" rule is defined for protocol elements that can contain a non- | defined for protocol elements that can contain a non-empty path | |||
| empty path component. (This rule differs slightly from the path- | component. (This rule differs slightly from the path-abempty rule of | |||
| abempty rule of RFC 3986, which allows for an empty path to be used | RFC 3986, which allows for an empty path to be used in references, | |||
| in references, and path-absolute rule, which does not allow paths | and path-absolute rule, which does not allow paths that begin with | |||
| that begin with "//".) A "partial-URI" rule is defined for protocol | "//".) A "partial-URI" rule is defined for protocol elements that | |||
| elements that can contain a relative URI but not a fragment | can contain a relative URI but not a fragment component. | |||
| component. | ||||
| URI-reference = <URI-reference, see [RFC3986], Section 4.1> | URI-reference = <URI-reference, see [RFC3986], Section 4.1> | |||
| absolute-URI = <absolute-URI, see [RFC3986], Section 4.3> | absolute-URI = <absolute-URI, see [RFC3986], Section 4.3> | |||
| relative-part = <relative-part, see [RFC3986], Section 4.2> | relative-part = <relative-part, see [RFC3986], Section 4.2> | |||
| authority = <authority, see [RFC3986], Section 3.2> | authority = <authority, see [RFC3986], Section 3.2> | |||
| uri-host = <host, see [RFC3986], Section 3.2.2> | uri-host = <host, see [RFC3986], Section 3.2.2> | |||
| port = <port, see [RFC3986], Section 3.2.3> | port = <port, see [RFC3986], Section 3.2.3> | |||
| path-abempty = <path-abempty, see [RFC3986], Section 3.3> | path-abempty = <path-abempty, see [RFC3986], Section 3.3> | |||
| segment = <segment, see [RFC3986], Section 3.3> | segment = <segment, see [RFC3986], Section 3.3> | |||
| query = <query, see [RFC3986], Section 3.4> | query = <query, see [RFC3986], Section 3.4> | |||
| fragment = <fragment, see [RFC3986], Section 3.5> | ||||
| absolute-path = 1*( "/" segment ) | absolute-path = 1*( "/" segment ) | |||
| partial-URI = relative-part [ "?" query ] | partial-URI = relative-part [ "?" query ] | |||
| Each protocol element in HTTP that allows a URI reference will | Each protocol element in HTTP that allows a URI reference will | |||
| indicate in its ABNF production whether the element allows any form | indicate in its ABNF production whether the element allows any form | |||
| of reference (URI-reference), only a URI in absolute form (absolute- | of reference (URI-reference), only a URI in absolute form (absolute- | |||
| URI), only the path and optional query components, or some | URI), only the path and optional query components, or some | |||
| combination of the above. Unless otherwise indicated, URI references | combination of the above. Unless otherwise indicated, URI references | |||
| are parsed relative to the effective request URI (Section 5.3). | are parsed relative to the effective request URI (Section 5.3). | |||
| skipping to change at page 16, line 13 ¶ | skipping to change at page 16, line 40 ¶ | |||
| +------------+------------------------------------+---------------+ | +------------+------------------------------------+---------------+ | |||
| 2.5.1. http URI Scheme | 2.5.1. http URI Scheme | |||
| The "http" URI scheme is hereby defined for the purpose of minting | The "http" URI scheme is hereby defined for the purpose of minting | |||
| identifiers according to their association with the hierarchical | identifiers according to their association with the hierarchical | |||
| namespace governed by a potential HTTP origin server listening for | namespace governed by a potential HTTP origin server listening for | |||
| TCP ([RFC0793]) connections on a given port. | TCP ([RFC0793]) connections on a given port. | |||
| http-URI = "http:" "//" authority path-abempty [ "?" query ] | http-URI = "http:" "//" authority path-abempty [ "?" query ] | |||
| [ "#" fragment ] | ||||
| The origin server for an "http" URI is identified by the authority | The origin server for an "http" URI is identified by the authority | |||
| component, which includes a host identifier and optional TCP port | component, which includes a host identifier and optional TCP port | |||
| ([RFC3986], Section 3.2.2). The hierarchical path component and | ([RFC3986], Section 3.2.2). The hierarchical path component and | |||
| optional query component serve as an identifier for a potential | optional query component serve as an identifier for a potential | |||
| target resource within that origin server's name space. The optional | target resource within that origin server's name space. | |||
| fragment component allows for indirect identification of a secondary | ||||
| resource, independent of the URI scheme, as defined in Section 3.5 of | ||||
| [RFC3986]. | ||||
| A sender MUST NOT generate an "http" URI with an empty host | A sender MUST NOT generate an "http" URI with an empty host | |||
| identifier. A recipient that processes such a URI reference MUST | identifier. A recipient that processes such a URI reference MUST | |||
| reject it as invalid. | reject it as invalid. | |||
| If the host identifier is provided as an IP address, the origin | If the host identifier is provided as an IP address, the origin | |||
| server is the listener (if any) on the indicated TCP port at that IP | server is the listener (if any) on the indicated TCP port at that IP | |||
| address. If host is a registered name, the registered name is an | address. If host is a registered name, the registered name is an | |||
| indirect identifier for use with a name resolution service, such as | indirect identifier for use with a name resolution service, such as | |||
| DNS, to find an address for that origin server. If the port | DNS, to find an address for that origin server. If the port | |||
| skipping to change at page 17, line 46 ¶ | skipping to change at page 18, line 20 ¶ | |||
| given TCP port for TLS-secured connections ([RFC5246]). | given TCP port for TLS-secured connections ([RFC5246]). | |||
| All of the requirements listed above for the "http" scheme are also | All of the requirements listed above for the "http" scheme are also | |||
| requirements for the "https" scheme, except that TCP port 443 is the | requirements for the "https" scheme, except that TCP port 443 is the | |||
| default if the port subcomponent is empty or not given, and the user | default if the port subcomponent is empty or not given, and the user | |||
| agent MUST ensure that its connection to the origin server is secured | agent MUST ensure that its connection to the origin server is secured | |||
| through the use of strong encryption, end-to-end, prior to sending | through the use of strong encryption, end-to-end, prior to sending | |||
| the first HTTP request. | the first HTTP request. | |||
| https-URI = "https:" "//" authority path-abempty [ "?" query ] | https-URI = "https:" "//" authority path-abempty [ "?" query ] | |||
| [ "#" fragment ] | ||||
| Note that the "https" URI scheme depends on both TLS and TCP for | Note that the "https" URI scheme depends on both TLS and TCP for | |||
| establishing authority. Resources made available via the "https" | establishing authority. Resources made available via the "https" | |||
| scheme have no shared identity with the "http" scheme even if their | scheme have no shared identity with the "http" scheme even if their | |||
| resource identifiers indicate the same authority (the same host | resource identifiers indicate the same authority (the same host | |||
| listening to the same TCP port). They are distinct namespaces and | listening to the same TCP port). They are distinct namespaces and | |||
| are considered to be distinct origin servers. However, an extension | are considered to be distinct origin servers. However, an extension | |||
| to HTTP that is defined to apply to entire host domains, such as the | to HTTP that is defined to apply to entire host domains, such as the | |||
| Cookie protocol [RFC6265], can allow information set by one service | Cookie protocol [RFC6265], can allow information set by one service | |||
| to impact communication with other services within a matching group | to impact communication with other services within a matching group | |||
| of host domains. | of host domains. | |||
| The process for authoritative access to an "https" identified | The process for authoritative access to an "https" identified | |||
| resource is defined in [RFC2818]. | resource is defined in [RFC2818]. | |||
| 2.5.3. http and https URI Normalization and Comparison | 2.5.3. Fragment Identifiers on http(s) URI References | |||
| Fragment identifiers allow for indirect identification of a secondary | ||||
| resource, independent of the URI scheme, as defined in Section 3.5 of | ||||
| [RFC3986]. Some protocol elements that refer to a URI allow | ||||
| inclusion of a fragment, while others do not. They are distinguished | ||||
| by use of the ABNF rule for elements where fragment is allowed; | ||||
| otherwise, a specific rule that excludes fragments is used (see | ||||
| Section 5.1). | ||||
| Note: the fragment identifier component is not part of the actual | ||||
| scheme definition for a URI scheme (see Section 4.3 of [RFC3986]), | ||||
| thus does not appear in the ABNF definitions for the "http" and | ||||
| "https" URI schemes above. | ||||
| 2.5.4. http and https URI Normalization and Comparison | ||||
| Since the "http" and "https" schemes conform to the URI generic | Since the "http" and "https" schemes conform to the URI generic | |||
| syntax, such URIs are normalized and compared according to the | syntax, such URIs are normalized and compared according to the | |||
| algorithm defined in Section 6 of [RFC3986], using the defaults | algorithm defined in Section 6 of [RFC3986], using the defaults | |||
| described above for each scheme. | described above for each scheme. | |||
| If the port is equal to the default port for a scheme, the normal | If the port is equal to the default port for a scheme, the normal | |||
| form is to omit the port subcomponent. When not being used in | form is to omit the port subcomponent. When not being used in | |||
| absolute form as the request target of an OPTIONS request, an empty | absolute form as the request target of an OPTIONS request, an empty | |||
| path component is equivalent to an absolute path of "/", so the | path component is equivalent to an absolute path of "/", so the | |||
| skipping to change at page 22, line 15 ¶ | skipping to change at page 23, line 5 ¶ | |||
| When an HTTP message is received with a major version number that the | When an HTTP message is received with a major version number that the | |||
| recipient implements, but a higher minor version number than what the | recipient implements, but a higher minor version number than what the | |||
| recipient implements, the recipient SHOULD process the message as if | recipient implements, the recipient SHOULD process the message as if | |||
| it were in the highest minor version within that major version to | it were in the highest minor version within that major version to | |||
| which the recipient is conformant. A recipient can assume that a | which the recipient is conformant. A recipient can assume that a | |||
| message with a higher minor version, when sent to a recipient that | message with a higher minor version, when sent to a recipient that | |||
| has not yet indicated support for that higher version, is | has not yet indicated support for that higher version, is | |||
| sufficiently backwards-compatible to be safely processed by any | sufficiently backwards-compatible to be safely processed by any | |||
| implementation of the same major version. | implementation of the same major version. | |||
| [[CREF1: When a major version of HTTP does not define any minor | When a major version of HTTP does not define any minor versions, the | |||
| versions, the minor version "0" is implied and ought to be used when | minor version "0" is implied and is used when referring to that | |||
| referring to that protocol within a protocol element that requires | protocol within a protocol element that requires sending a minor | |||
| sending a minor version. ]] | version. | |||
| 4. Message Abstraction | 4. Message Abstraction | |||
| Each major version of HTTP defines its own syntax for the inclusion | Each major version of HTTP defines its own syntax for the inclusion | |||
| of information in messages. Nevertheless, a common abstraction is | of information in messages. Nevertheless, a common abstraction is | |||
| that a message includes some form of envelope/framing, a potential | that a message includes some form of envelope/framing, a potential | |||
| set of named data fields, and a potential body. This section defines | set of named data fields, and a potential body. This section defines | |||
| the abstraction for message fields as field-name and field-value | the abstraction for message fields as field-name and field-value | |||
| pairs. | pairs. | |||
| 4.1. Field Names | 4.1. Header Field Names | |||
| Header fields are key:value pairs that can be used to communicate | Header fields are key:value pairs that can be used to communicate | |||
| data about the message, its payload, the target resource, or the | data about the message, its payload, the target resource, or the | |||
| connection (i.e., control data). | connection (i.e., control data). | |||
| The requirements for header field names are defined in [BCP90]. | The requirements for header field names are defined in [BCP90]. | |||
| The field-name token labels the corresponding field-value as having | The field-name token labels the corresponding field-value as having | |||
| the semantics defined by that header field. For example, the Date | the semantics defined by that header field. For example, the Date | |||
| header field is defined in Section 10.1.1.2 as containing the | header field is defined in Section 10.1.1.2 as containing the | |||
| skipping to change at page 23, line 12 ¶ | skipping to change at page 24, line 5 ¶ | |||
| be implemented by all HTTP/1.x implementations whether or not they | be implemented by all HTTP/1.x implementations whether or not they | |||
| advertise conformance with HTTP/1.1. | advertise conformance with HTTP/1.1. | |||
| New header fields can be introduced without changing the protocol | New header fields can be introduced without changing the protocol | |||
| version if their defined semantics allow them to be safely ignored by | version if their defined semantics allow them to be safely ignored by | |||
| recipients that do not recognize them. Header field extensibility is | recipients that do not recognize them. Header field extensibility is | |||
| discussed in Section 4.1.2. | discussed in Section 4.1.2. | |||
| The following field names are defined by this document: | The following field names are defined by this document: | |||
| +---------------------+----------+----------+-------------------+ | +---------------------------+----------+----------+-----------------+ | |||
| | Header Field Name | Protocol | Status | Reference | | | Header Field Name | Protocol | Status | Reference | | |||
| +---------------------+----------+----------+-------------------+ | +---------------------------+----------+----------+-----------------+ | |||
| | Accept | http | standard | Section 8.4.2 | | | Accept | http | standard | Section 8.4.2 | | |||
| | Accept-Charset | http | standard | Section 8.4.3 | | | Accept-Charset | http | standard | Section 8.4.3 | | |||
| | Accept-Encoding | http | standard | Section 8.4.4 | | | Accept-Encoding | http | standard | Section 8.4.4 | | |||
| | Accept-Language | http | standard | Section 8.4.5 | | | Accept-Language | http | standard | Section 8.4.5 | | |||
| | Accept-Ranges | http | standard | Section 10.4.1 | | | Accept-Ranges | http | standard | Section 10.4.1 | | |||
| | Allow | http | standard | Section 10.4.2 | | | Allow | http | standard | Section 10.4.2 | | |||
| | Authorization | http | standard | Section 8.5.3 | | | Authentication-Info | http | standard | Section 10.3.3 | | |||
| | Content-Encoding | http | standard | Section 6.2.2 | | | Authorization | http | standard | Section 8.5.3 | | |||
| | Content-Language | http | standard | Section 6.2.3 | | | Content-Encoding | http | standard | Section 6.2.2 | | |||
| | Content-Length | http | standard | Section 6.2.4 | | | Content-Language | http | standard | Section 6.2.3 | | |||
| | Content-Location | http | standard | Section 6.2.5 | | | Content-Length | http | standard | Section 6.2.4 | | |||
| | Content-Range | http | standard | Section 6.3.3 | | | Content-Location | http | standard | Section 6.2.5 | | |||
| | Content-Type | http | standard | Section 6.2.1 | | | Content-Range | http | standard | Section 6.3.3 | | |||
| | Date | http | standard | Section 10.1.1.2 | | | Content-Type | http | standard | Section 6.2.1 | | |||
| | ETag | http | standard | Section 10.2.3 | | | Date | http | standard | Section 10.1.1. | | |||
| | Expect | http | standard | Section 8.1.1 | | | | | | 2 | | |||
| | From | http | standard | Section 8.6.1 | | | ETag | http | standard | Section 10.2.3 | | |||
| | Host | http | standard | Section 5.4 | | | Expect | http | standard | Section 8.1.1 | | |||
| | If-Match | http | standard | Section 8.2.3 | | | From | http | standard | Section 8.6.1 | | |||
| | If-Modified-Since | http | standard | Section 8.2.5 | | | Host | http | standard | Section 5.4 | | |||
| | If-None-Match | http | standard | Section 8.2.4 | | | If-Match | http | standard | Section 8.2.3 | | |||
| | If-Range | http | standard | Section 8.2.7 | | | If-Modified-Since | http | standard | Section 8.2.5 | | |||
| | If-Unmodified-Since | http | standard | Section 8.2.6 | | | If-None-Match | http | standard | Section 8.2.4 | | |||
| | Last-Modified | http | standard | Section 10.2.2 | | | If-Range | http | standard | Section 8.2.7 | | |||
| | Location | http | standard | Section 10.1.2 | | | If-Unmodified-Since | http | standard | Section 8.2.6 | | |||
| | Max-Forwards | http | standard | Section 8.1.2 | | | Last-Modified | http | standard | Section 10.2.2 | | |||
| | Proxy-Authenticate | http | standard | Section 10.3.2 | | | Location | http | standard | Section 10.1.2 | | |||
| | Proxy-Authorization | http | standard | Section 8.5.4 | | | Max-Forwards | http | standard | Section 8.1.2 | | |||
| | Range | http | standard | Section 8.3 | | | Proxy-Authenticate | http | standard | Section 10.3.2 | | |||
| | Referer | http | standard | Section 8.6.2 | | | Proxy-Authentication-Info | http | standard | Section 10.3.4 | | |||
| | Retry-After | http | standard | Section 10.1.3 | | | Proxy-Authorization | http | standard | Section 8.5.4 | | |||
| | Server | http | standard | Section 10.4.3 | | | Range | http | standard | Section 8.3 | | |||
| | Trailer | http | standard | Section 4.4 | | | Referer | http | standard | Section 8.6.2 | | |||
| | User-Agent | http | standard | Section 8.6.3 | | | Retry-After | http | standard | Section 10.1.3 | | |||
| | Vary | http | standard | Section 10.1.4 | | | Server | http | standard | Section 10.4.3 | | |||
| | Via | http | standard | Section 5.6.1 | | | Trailer | http | standard | Section 4.4 | | |||
| | WWW-Authenticate | http | standard | Section 10.3.1 | | | User-Agent | http | standard | Section 8.6.3 | | |||
| +---------------------+----------+----------+-------------------+ | | Vary | http | standard | Section 10.1.4 | | |||
| | Via | http | standard | Section 5.5.1 | | ||||
| | WWW-Authenticate | http | standard | Section 10.3.1 | | ||||
| +---------------------------+----------+----------+-----------------+ | ||||
| 4.1.1. Field Name Registry | 4.1.1. Header Field Name Registry | |||
| HTTP header fields are registered within the "Message Headers" | HTTP header fields are registered within the "Message Headers" | |||
| registry located at <https://www.iana.org/assignments/message- | registry located at <https://www.iana.org/assignments/message- | |||
| headers>, as defined by [BCP90], with the protocol "http". | headers>, as defined by [BCP90], with the protocol "http". | |||
| 4.1.2. Field Extensibility | 4.1.2. Header Field Extensibility | |||
| Header fields are fully extensible: there is no limit on the | Header fields are fully extensible: there is no limit on the | |||
| introduction of new field names, each presumably defining new | introduction of new field names, each presumably defining new | |||
| semantics, nor on the number of header fields used in a given | semantics, nor on the number of header fields used in a given | |||
| message. Existing fields are defined in each part of this | message. Existing fields are defined in each part of this | |||
| specification and in many other specifications outside this document | specification and in many other specifications outside this document | |||
| set. | set. | |||
| New header fields can be defined such that, when they are understood | New header fields can be defined such that, when they are understood | |||
| by a recipient, they might override or enhance the interpretation of | by a recipient, they might override or enhance the interpretation of | |||
| skipping to change at page 24, line 35 ¶ | skipping to change at page 25, line 35 ¶ | |||
| A proxy MUST forward unrecognized header fields unless the field-name | A proxy MUST forward unrecognized header fields unless the field-name | |||
| is listed in the Connection header field (Section 9.1 of [Messaging]) | is listed in the Connection header field (Section 9.1 of [Messaging]) | |||
| or the proxy is specifically configured to block, or otherwise | or the proxy is specifically configured to block, or otherwise | |||
| transform, such fields. Other recipients SHOULD ignore unrecognized | transform, such fields. Other recipients SHOULD ignore unrecognized | |||
| header fields. These requirements allow HTTP's functionality to be | header fields. These requirements allow HTTP's functionality to be | |||
| enhanced without requiring prior update of deployed intermediaries. | enhanced without requiring prior update of deployed intermediaries. | |||
| All defined header fields ought to be registered with IANA in the | All defined header fields ought to be registered with IANA in the | |||
| "Message Headers" registry. | "Message Headers" registry. | |||
| 4.1.3. Considerations for New Fields | 4.1.3. Considerations for New Header Fields | |||
| Authors of specifications defining new fields are advised to keep the | Authors of specifications defining new fields are advised to keep the | |||
| name as short as practical and not to prefix the name with "X-" | name as short as practical and not to prefix the name with "X-" | |||
| unless the header field will never be used on the Internet. (The | unless the header field will never be used on the Internet. (The | |||
| "X-" prefix idiom has been extensively misused in practice; it was | "X-" prefix idiom has been extensively misused in practice; it was | |||
| intended to only be used as a mechanism for avoiding name collisions | intended to only be used as a mechanism for avoiding name collisions | |||
| inside proprietary software or intranet processing, since the prefix | inside proprietary software or intranet processing, since the prefix | |||
| would ensure that private names never collide with a newly registered | would ensure that private names never collide with a newly registered | |||
| Internet name; see [BCP178] for further information). | Internet name; see [BCP178] for further information). | |||
| skipping to change at page 26, line 5 ¶ | skipping to change at page 27, line 5 ¶ | |||
| Section 10.1.4). | Section 10.1.4). | |||
| o Whether the header field is useful or allowable in trailers (see | o Whether the header field is useful or allowable in trailers (see | |||
| Section 7.1 of [Messaging]). | Section 7.1 of [Messaging]). | |||
| o Whether the header field ought to be preserved across redirects. | o Whether the header field ought to be preserved across redirects. | |||
| o Whether it introduces any additional security considerations, such | o Whether it introduces any additional security considerations, such | |||
| as disclosure of privacy-related data. | as disclosure of privacy-related data. | |||
| 4.2. Field Values | 4.2. Header Field Values | |||
| This specification does not use ABNF rules to define each "Field- | This specification does not use ABNF rules to define each "Field- | |||
| Name: Field Value" pair, as was done in earlier editions. Instead, | Name: Field Value" pair, as was done in earlier editions. Instead, | |||
| this specification uses ABNF rules that are named according to each | this specification uses ABNF rules that are named according to each | |||
| registered field name, wherein the rule defines the valid grammar for | registered field name, wherein the rule defines the valid grammar for | |||
| that field's corresponding field values (i.e., after the field-value | that field's corresponding field values (i.e., after the field-value | |||
| has been extracted by a generic field parser). | has been extracted by a generic field parser). | |||
| field-value = *( field-content / obs-fold ) | field-value = *( field-content / obs-fold ) | |||
| field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] | field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] | |||
| field-vchar = VCHAR / obs-text | field-vchar = VCHAR / obs-text | |||
| Historically, HTTP header field values could be extended over | Historically, HTTP header field values could be extended over | |||
| multiple lines by preceding each extra line with at least one space | multiple lines by preceding each extra line with at least one space | |||
| or horizontal tab (obs-fold). [[CREF2: This document assumes that | or horizontal tab (obs-fold). [[CREF1: This document assumes that | |||
| any such obs-fold has been replaced with one or more SP octets prior | any such obs-fold has been replaced with one or more SP octets prior | |||
| to interpreting the field value, as described in Section 5.2 of | to interpreting the field value, as described in Section 5.2 of | |||
| [Messaging].]] | [Messaging].]] | |||
| Historically, HTTP has allowed field content with text in the | Historically, HTTP has allowed field content with text in the | |||
| ISO-8859-1 charset [ISO-8859-1], supporting other charsets only | ISO-8859-1 charset [ISO-8859-1], supporting other charsets only | |||
| through use of [RFC2047] encoding. In practice, most HTTP header | through use of [RFC2047] encoding. In practice, most HTTP header | |||
| field values use only a subset of the US-ASCII charset [USASCII]. | field values use only a subset of the US-ASCII charset [USASCII]. | |||
| Newly defined header fields SHOULD limit their field values to | Newly defined header fields SHOULD limit their field values to | |||
| US-ASCII octets. A recipient SHOULD treat other octets in field | US-ASCII octets. A recipient SHOULD treat other octets in field | |||
| content (obs-text) as opaque data. | content (obs-text) as opaque data. | |||
| 4.2.1. Field Order | 4.2.1. Header Field Order | |||
| The order in which header fields with differing field names are | The order in which header fields with differing field names are | |||
| received is not significant. However, it is good practice to send | received is not significant. However, it is good practice to send | |||
| header fields that contain control data first, such as Host on | header fields that contain control data first, such as Host on | |||
| requests and Date on responses, so that implementations can decide | requests and Date on responses, so that implementations can decide | |||
| when not to handle a message as early as possible. A server MUST NOT | when not to handle a message as early as possible. A server MUST NOT | |||
| apply a request to the target resource until the entire request | apply a request to the target resource until the entire request | |||
| header section is received, since later header fields might include | header section is received, since later header fields might include | |||
| conditionals, authentication credentials, or deliberately misleading | conditionals, authentication credentials, or deliberately misleading | |||
| duplicate header fields that would impact request processing. | duplicate header fields that would impact request processing. | |||
| skipping to change at page 27, line 18 ¶ | skipping to change at page 28, line 18 ¶ | |||
| forwarding a message. | forwarding a message. | |||
| Note: In practice, the "Set-Cookie" header field ([RFC6265]) often | Note: In practice, the "Set-Cookie" header field ([RFC6265]) often | |||
| appears multiple times in a response message and does not use the | appears multiple times in a response message and does not use the | |||
| list syntax, violating the above requirements on multiple header | list syntax, violating the above requirements on multiple header | |||
| fields with the same name. Since it cannot be combined into a | fields with the same name. Since it cannot be combined into a | |||
| single field-value, recipients ought to handle "Set-Cookie" as a | single field-value, recipients ought to handle "Set-Cookie" as a | |||
| special case while processing header fields. (See Appendix A.2.3 | special case while processing header fields. (See Appendix A.2.3 | |||
| of [Kri2001] for details.) | of [Kri2001] for details.) | |||
| 4.2.2. Field Limits | 4.2.2. Header Field Limits | |||
| HTTP does not place a predefined limit on the length of each header | HTTP does not place a predefined limit on the length of each header | |||
| field or on the length of the header section as a whole, as described | field or on the length of the header section as a whole, as described | |||
| in Section 3. Various ad hoc limitations on individual header field | in Section 3. Various ad hoc limitations on individual header field | |||
| length are found in practice, often depending on the specific field | length are found in practice, often depending on the specific field | |||
| semantics. | semantics. | |||
| A server that receives a request header field, or set of fields, | A server that receives a request header field, or set of fields, | |||
| larger than it wishes to process MUST respond with an appropriate 4xx | larger than it wishes to process MUST respond with an appropriate 4xx | |||
| (Client Error) status code. Ignoring such header fields would | (Client Error) status code. Ignoring such header fields would | |||
| increase the server's vulnerability to request smuggling attacks | increase the server's vulnerability to request smuggling attacks | |||
| (Section 11.2 of [Messaging]). | (Section 11.2 of [Messaging]). | |||
| A client MAY discard or truncate received header fields that are | A client MAY discard or truncate received header fields that are | |||
| larger than the client wishes to process if the field semantics are | larger than the client wishes to process if the field semantics are | |||
| such that the dropped value(s) can be safely ignored without changing | such that the dropped value(s) can be safely ignored without changing | |||
| the message framing or response semantics. | the message framing or response semantics. | |||
| 4.2.3. Field Value Components | 4.2.3. Header Field Value Components | |||
| Most HTTP header field values are defined using common syntax | Most HTTP header field values are defined using common syntax | |||
| components (token, quoted-string, and comment) separated by | components (token, quoted-string, and comment) separated by | |||
| whitespace or specific delimiting characters. Delimiters are chosen | whitespace or specific delimiting characters. Delimiters are chosen | |||
| from the set of US-ASCII visual characters not allowed in a token | from the set of US-ASCII visual characters not allowed in a token | |||
| (DQUOTE and "(),/:;<=>?@[\]{}"). | (DQUOTE and "(),/:;<=>?@[\]{}"). | |||
| token = 1*tchar | token = 1*tchar | |||
| tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" | tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" | |||
| skipping to change at page 28, line 32 ¶ | skipping to change at page 29, line 32 ¶ | |||
| as if it were replaced by the octet following the backslash. | as if it were replaced by the octet following the backslash. | |||
| quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) | quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) | |||
| A sender SHOULD NOT generate a quoted-pair in a quoted-string except | A sender SHOULD NOT generate a quoted-pair in a quoted-string except | |||
| where necessary to quote DQUOTE and backslash octets occurring within | where necessary to quote DQUOTE and backslash octets occurring within | |||
| that string. A sender SHOULD NOT generate a quoted-pair in a comment | that string. A sender SHOULD NOT generate a quoted-pair in a comment | |||
| except where necessary to quote parentheses ["(" and ")"] and | except where necessary to quote parentheses ["(" and ")"] and | |||
| backslash octets occurring within that comment. | backslash octets occurring within that comment. | |||
| 4.2.4. Designing New Field Values | 4.2.4. Designing New Header Field Values | |||
| New header field values typically have their syntax defined using | New header field values typically have their syntax defined using | |||
| ABNF ([RFC5234]), using the extension defined in Section 11 as | ABNF ([RFC5234]), using the extension defined in Section 11 as | |||
| necessary, and are usually constrained to the range of US-ASCII | necessary, and are usually constrained to the range of US-ASCII | |||
| characters. Header fields needing a greater range of characters can | characters. Header fields needing a greater range of characters can | |||
| use an encoding such as the one defined in [RFC8187]. | use an encoding such as the one defined in [RFC8187]. | |||
| Leading and trailing whitespace in raw field values is removed upon | Leading and trailing whitespace in raw field values is removed upon | |||
| field parsing (Section 5.1 of [Messaging]). Field definitions where | field parsing (Section 5.1 of [Messaging]). Field definitions where | |||
| leading or trailing whitespace in values is significant will have to | leading or trailing whitespace in values is significant will have to | |||
| skipping to change at page 30, line 7 ¶ | skipping to change at page 31, line 7 ¶ | |||
| OWS = *( SP / HTAB ) | OWS = *( SP / HTAB ) | |||
| ; optional whitespace | ; optional whitespace | |||
| RWS = 1*( SP / HTAB ) | RWS = 1*( SP / HTAB ) | |||
| ; required whitespace | ; required whitespace | |||
| BWS = OWS | BWS = OWS | |||
| ; "bad" whitespace | ; "bad" whitespace | |||
| 4.4. Trailer | 4.4. Trailer | |||
| [[CREF3: The "Trailer" header field in a message indicates fields | [[CREF2: The "Trailer" header field in a message indicates fields | |||
| that the sender anticipates sending after the message header block | that the sender anticipates sending after the message header block | |||
| (i.e., during or after the payload is sent). This is typically used | (i.e., during or after the payload is sent). This is typically used | |||
| to supply metadata that might be dynamically generated while the data | to supply metadata that might be dynamically generated while the data | |||
| is sent, such as a message integrity check, digital signature, or | is sent, such as a message integrity check, digital signature, or | |||
| post-processing status. ]] | post-processing status. ]] | |||
| Trailer = 1#field-name | Trailer = 1#field-name | |||
| [[CREF4: How, where, and when trailer fields might be sent depends on | [[CREF3: How, where, and when trailer fields might be sent depends on | |||
| both the protocol in use (HTTP version and/or transfer coding) and | both the protocol in use (HTTP version and/or transfer coding) and | |||
| the semantics of each named header field. Many header fields cannot | the semantics of each named header field. Many header fields cannot | |||
| be processed outside the header section because their evaluation is | be processed outside the header section because their evaluation is | |||
| necessary for message routing, authentication, or configuration prior | necessary for message routing, authentication, or configuration prior | |||
| to receiving the representation data. ]] | to receiving the representation data. ]] | |||
| 5. Message Routing | 5. Message Routing | |||
| HTTP request message routing is determined by each client based on | HTTP request message routing is determined by each client based on | |||
| the target resource, the client's proxy configuration, and | the target resource, the client's proxy configuration, and | |||
| skipping to change at page 33, line 12 ¶ | skipping to change at page 34, line 12 ¶ | |||
| Host field-value for redirecting requests to internal servers, or for | Host field-value for redirecting requests to internal servers, or for | |||
| use as a cache key in a shared cache, without first verifying that | use as a cache key in a shared cache, without first verifying that | |||
| the intercepted connection is targeting a valid IP address for that | the intercepted connection is targeting a valid IP address for that | |||
| host. | host. | |||
| A server MUST respond with a 400 (Bad Request) status code to any | A server MUST respond with a 400 (Bad Request) status code to any | |||
| HTTP/1.1 request message that lacks a Host header field and to any | HTTP/1.1 request message that lacks a Host header field and to any | |||
| request message that contains more than one Host header field or a | request message that contains more than one Host header field or a | |||
| Host header field with an invalid field-value. | Host header field with an invalid field-value. | |||
| 5.5. Associating a Response to a Request | 5.5. Message Forwarding | |||
| HTTP does not include a request identifier for associating a given | ||||
| request message with its corresponding one or more response messages. | ||||
| Hence, it relies on the order of response arrival to correspond | ||||
| exactly to the order in which requests are made on the same | ||||
| connection. More than one response message per request only occurs | ||||
| when one or more informational responses (1xx, see Section 9.2) | ||||
| precede a final response to the same request. | ||||
| A client that has more than one outstanding request on a connection | ||||
| MUST maintain a list of outstanding requests in the order sent and | ||||
| MUST associate each received response message on that connection to | ||||
| the highest ordered request that has not yet received a final (non- | ||||
| 1xx) response. | ||||
| 5.6. Message Forwarding | ||||
| As described in Section 2.2, intermediaries can serve a variety of | As described in Section 2.2, intermediaries can serve a variety of | |||
| roles in the processing of HTTP requests and responses. Some | roles in the processing of HTTP requests and responses. Some | |||
| intermediaries are used to improve performance or availability. | intermediaries are used to improve performance or availability. | |||
| Others are used for access control or to filter content. Since an | Others are used for access control or to filter content. Since an | |||
| HTTP stream has characteristics similar to a pipe-and-filter | HTTP stream has characteristics similar to a pipe-and-filter | |||
| architecture, there are no inherent limits to the extent an | architecture, there are no inherent limits to the extent an | |||
| intermediary can enhance (or interfere) with either direction of the | intermediary can enhance (or interfere) with either direction of the | |||
| stream. | stream. | |||
| skipping to change at page 34, line 8 ¶ | skipping to change at page 34, line 40 ¶ | |||
| ought to recognize its own server names, including any aliases, local | ought to recognize its own server names, including any aliases, local | |||
| variations, or literal IP addresses, and respond to such requests | variations, or literal IP addresses, and respond to such requests | |||
| directly. | directly. | |||
| An HTTP message can be parsed as a stream for incremental processing | An HTTP message can be parsed as a stream for incremental processing | |||
| or forwarding downstream. However, recipients cannot rely on | or forwarding downstream. However, recipients cannot rely on | |||
| incremental delivery of partial messages, since some implementations | incremental delivery of partial messages, since some implementations | |||
| will buffer or delay message forwarding for the sake of network | will buffer or delay message forwarding for the sake of network | |||
| efficiency, security checks, or payload transformations. | efficiency, security checks, or payload transformations. | |||
| 5.6.1. Via | 5.5.1. Via | |||
| The "Via" header field indicates the presence of intermediate | The "Via" header field indicates the presence of intermediate | |||
| protocols and recipients between the user agent and the server (on | protocols and recipients between the user agent and the server (on | |||
| requests) or between the origin server and the client (on responses), | requests) or between the origin server and the client (on responses), | |||
| similar to the "Received" header field in email (Section 3.6.7 of | similar to the "Received" header field in email (Section 3.6.7 of | |||
| [RFC5322]). Via can be used for tracking message forwards, avoiding | [RFC5322]). Via can be used for tracking message forwards, avoiding | |||
| request loops, and identifying the protocol capabilities of senders | request loops, and identifying the protocol capabilities of senders | |||
| along the request/response chain. | along the request/response chain. | |||
| Via = 1#( received-protocol RWS received-by [ RWS comment ] ) | Via = 1#( received-protocol RWS received-by [ RWS comment ] ) | |||
| received-protocol = [ protocol-name "/" ] protocol-version | received-protocol = [ protocol-name "/" ] protocol-version | |||
| ; see [Messaging], Section 9.7 | ; see [Messaging], Section 9.8 | |||
| received-by = ( uri-host [ ":" port ] ) / pseudonym | received-by = ( uri-host [ ":" port ] ) / pseudonym | |||
| pseudonym = token | pseudonym = token | |||
| Multiple Via field values represent each proxy or gateway that has | Multiple Via field values represent each proxy or gateway that has | |||
| forwarded the message. Each intermediary appends its own information | forwarded the message. Each intermediary appends its own information | |||
| about how the message was received, such that the end result is | about how the message was received, such that the end result is | |||
| ordered according to the sequence of forwarding recipients. | ordered according to the sequence of forwarding recipients. | |||
| A proxy MUST send an appropriate Via header field, as described | A proxy MUST send an appropriate Via header field, as described | |||
| below, in each message that it forwards. An HTTP-to-HTTP gateway | below, in each message that it forwards. An HTTP-to-HTTP gateway | |||
| skipping to change at page 35, line 43 ¶ | skipping to change at page 36, line 28 ¶ | |||
| could be collapsed to | could be collapsed to | |||
| Via: 1.0 ricky, 1.1 mertz, 1.0 lucy | Via: 1.0 ricky, 1.1 mertz, 1.0 lucy | |||
| A sender SHOULD NOT combine multiple entries unless they are all | A sender SHOULD NOT combine multiple entries unless they are all | |||
| under the same organizational control and the hosts have already been | under the same organizational control and the hosts have already been | |||
| replaced by pseudonyms. A sender MUST NOT combine entries that have | replaced by pseudonyms. A sender MUST NOT combine entries that have | |||
| different received-protocol values. | different received-protocol values. | |||
| 5.6.2. Transformations | 5.5.2. Transformations | |||
| Some intermediaries include features for transforming messages and | Some intermediaries include features for transforming messages and | |||
| their payloads. A proxy might, for example, convert between image | their payloads. A proxy might, for example, convert between image | |||
| formats in order to save cache space or to reduce the amount of | formats in order to save cache space or to reduce the amount of | |||
| traffic on a slow link. However, operational problems might occur | traffic on a slow link. However, operational problems might occur | |||
| when these transformations are applied to payloads intended for | when these transformations are applied to payloads intended for | |||
| critical applications, such as medical imaging or scientific data | critical applications, such as medical imaging or scientific data | |||
| analysis, particularly when integrity checks or digital signatures | analysis, particularly when integrity checks or digital signatures | |||
| are used to ensure that the payload received is identical to the | are used to ensure that the payload received is identical to the | |||
| original. | original. | |||
| skipping to change at page 36, line 38 ¶ | skipping to change at page 37, line 24 ¶ | |||
| "*". | "*". | |||
| A proxy MAY modify the message body through application or removal of | A proxy MAY modify the message body through application or removal of | |||
| a transfer coding (Section 7 of [Messaging]). | a transfer coding (Section 7 of [Messaging]). | |||
| A proxy MUST NOT transform the payload (Section 6.3) of a message | A proxy MUST NOT transform the payload (Section 6.3) of a message | |||
| that contains a no-transform cache-control directive (Section 5.2 of | that contains a no-transform cache-control directive (Section 5.2 of | |||
| [Caching]). | [Caching]). | |||
| A proxy MAY transform the payload of a message that does not contain | A proxy MAY transform the payload of a message that does not contain | |||
| a no-transform cache-control directive. A proxy that transforms a | a no-transform cache-control directive. A proxy that transforms the | |||
| payload MUST add a Warning header field with the warn-code of 214 | payload of a 200 (OK) response can inform downstream recipients that | |||
| ("Transformation Applied") if one is not already in the message (see | a transformation has been applied by changing the response status | |||
| Section 5.5 of [Caching]). A proxy that transforms the payload of a | code to 203 (Non-Authoritative Information) (Section 9.3.4). | |||
| 200 (OK) response can further inform downstream recipients that a | ||||
| transformation has been applied by changing the response status code | ||||
| to 203 (Non-Authoritative Information) (Section 9.3.4). | ||||
| A proxy SHOULD NOT modify header fields that provide information | A proxy SHOULD NOT modify header fields that provide information | |||
| about the endpoints of the communication chain, the resource state, | about the endpoints of the communication chain, the resource state, | |||
| or the selected representation (other than the payload) unless the | or the selected representation (other than the payload) unless the | |||
| field's definition specifically allows such modification or the | field's definition specifically allows such modification or the | |||
| modification is deemed necessary for privacy or security. | modification is deemed necessary for privacy or security. | |||
| 6. Representations | 6. Representations | |||
| Considering that a resource could be anything, and that the uniform | Considering that a resource could be anything, and that the uniform | |||
| skipping to change at page 38, line 48 ¶ | skipping to change at page 39, line 29 ¶ | |||
| 6.1.1.1. Charset | 6.1.1.1. Charset | |||
| HTTP uses charset names to indicate or negotiate the character | HTTP uses charset names to indicate or negotiate the character | |||
| encoding scheme of a textual representation [RFC6365]. A charset is | encoding scheme of a textual representation [RFC6365]. A charset is | |||
| identified by a case-insensitive token. | identified by a case-insensitive token. | |||
| charset = token | charset = token | |||
| Charset names ought to be registered in the IANA "Character Sets" | Charset names ought to be registered in the IANA "Character Sets" | |||
| registry (<https://www.iana.org/assignments/character-sets>) | registry (<https://www.iana.org/assignments/character-sets>) | |||
| according to the procedures defined in [RFC2978]. | according to the procedures defined in Section 2 of [RFC2978]. | |||
| Note: in practice, charset names are furthermore restricted by the | ||||
| "mime-charset" ABNF rule defined in Section 2.3 of [RFC2978] (as | ||||
| corrected in [Err1912]). However, that rule allows two characters | ||||
| not included in "token" ("{" and "}"), but at the time of this | ||||
| writing no character set using these was registered (see | ||||
| [Err5433]). | ||||
| 6.1.1.2. Canonicalization and Text Defaults | 6.1.1.2. Canonicalization and Text Defaults | |||
| Media types are registered with a canonical form in order to be | Media types are registered with a canonical form in order to be | |||
| interoperable among systems with varying native encoding formats. | interoperable among systems with varying native encoding formats. | |||
| Representations selected or transferred via HTTP ought to be in | Representations selected or transferred via HTTP ought to be in | |||
| canonical form, for many of the same reasons described by the | canonical form, for many of the same reasons described by the | |||
| Multipurpose Internet Mail Extensions (MIME) [RFC2045]. However, the | Multipurpose Internet Mail Extensions (MIME) [RFC2045]. However, the | |||
| performance characteristics of email deployments (i.e., store and | performance characteristics of email deployments (i.e., store and | |||
| forward messages to peers) are significantly different from those | forward messages to peers) are significantly different from those | |||
| skipping to change at page 48, line 12 ¶ | skipping to change at page 49, line 7 ¶ | |||
| linguistic audiences. An example would be a beginner's language | linguistic audiences. An example would be a beginner's language | |||
| primer, such as "A First Lesson in Latin", which is clearly intended | primer, such as "A First Lesson in Latin", which is clearly intended | |||
| to be used by an English-literate audience. In this case, the | to be used by an English-literate audience. In this case, the | |||
| Content-Language would properly only include "en". | Content-Language would properly only include "en". | |||
| Content-Language MAY be applied to any media type -- it is not | Content-Language MAY be applied to any media type -- it is not | |||
| limited to textual documents. | limited to textual documents. | |||
| 6.2.4. Content-Length | 6.2.4. Content-Length | |||
| [[CREF5: The "Content-Length" header field indicates the number of | [[CREF4: The "Content-Length" header field indicates the number of | |||
| data octets (body length) for the representation. In some cases, | data octets (body length) for the representation. In some cases, | |||
| Content-Length is used to define or estimate message framing. ]] | Content-Length is used to define or estimate message framing. ]] | |||
| Content-Length = 1*DIGIT | Content-Length = 1*DIGIT | |||
| An example is | An example is | |||
| Content-Length: 3495 | Content-Length: 3495 | |||
| A sender MUST NOT send a Content-Length header field in any message | A sender MUST NOT send a Content-Length header field in any message | |||
| skipping to change at page 60, line 9 ¶ | skipping to change at page 60, line 48 ¶ | |||
| example, a client can send conditional request header fields | example, a client can send conditional request header fields | |||
| (Section 8.2) to make the requested action conditional on the current | (Section 8.2) to make the requested action conditional on the current | |||
| state of the target resource. | state of the target resource. | |||
| method = token | method = token | |||
| HTTP was originally designed to be usable as an interface to | HTTP was originally designed to be usable as an interface to | |||
| distributed object systems. The request method was envisioned as | distributed object systems. The request method was envisioned as | |||
| applying semantics to a target resource in much the same way as | applying semantics to a target resource in much the same way as | |||
| invoking a defined method on an identified object would apply | invoking a defined method on an identified object would apply | |||
| semantics. The method token is case-sensitive because it might be | semantics. | |||
| used as a gateway to object-based systems with case-sensitive method | ||||
| names. | The method token is case-sensitive because it might be used as a | |||
| gateway to object-based systems with case-sensitive method names. By | ||||
| convention, standardized methods are defined in all-uppercase US- | ||||
| ASCII letters. | ||||
| Unlike distributed objects, the standardized request methods in HTTP | Unlike distributed objects, the standardized request methods in HTTP | |||
| are not resource-specific, since uniform interfaces provide for | are not resource-specific, since uniform interfaces provide for | |||
| better visibility and reuse in network-based systems [REST]. Once | better visibility and reuse in network-based systems [REST]. Once | |||
| defined, a standardized method ought to have the same semantics when | defined, a standardized method ought to have the same semantics when | |||
| applied to any resource, though each resource determines for itself | applied to any resource, though each resource determines for itself | |||
| whether those semantics are implemented or allowed. | whether those semantics are implemented or allowed. | |||
| This specification defines a number of standardized methods that are | This specification defines a number of standardized methods that are | |||
| commonly used in HTTP, as outlined by the following table. By | commonly used in HTTP, as outlined by the following table. | |||
| convention, standardized methods are defined in all-uppercase US- | ||||
| ASCII letters. | ||||
| +---------+-------------------------------------------------+-------+ | +---------+-------------------------------------------------+-------+ | |||
| | Method | Description | Sec. | | | Method | Description | Sec. | | |||
| +---------+-------------------------------------------------+-------+ | +---------+-------------------------------------------------+-------+ | |||
| | GET | Transfer a current representation of the target | 7.3.1 | | | GET | Transfer a current representation of the target | 7.3.1 | | |||
| | | resource. | | | | | resource. | | | |||
| | HEAD | Same as GET, but only transfer the status line | 7.3.2 | | | HEAD | Same as GET, but only transfer the status line | 7.3.2 | | |||
| | | and header section. | | | | | and header section. | | | |||
| | POST | Perform resource-specific processing on the | 7.3.3 | | | POST | Perform resource-specific processing on the | 7.3.3 | | |||
| | | request payload. | | | | | request payload. | | | |||
| skipping to change at page 65, line 6 ¶ | skipping to change at page 65, line 50 ¶ | |||
| Satisfiable)). | Satisfiable)). | |||
| If one or more resources has been created on the origin server as a | If one or more resources has been created on the origin server as a | |||
| result of successfully processing a POST request, the origin server | result of successfully processing a POST request, the origin server | |||
| SHOULD send a 201 (Created) response containing a Location header | SHOULD send a 201 (Created) response containing a Location header | |||
| field that provides an identifier for the primary resource created | field that provides an identifier for the primary resource created | |||
| (Section 10.1.2) and a representation that describes the status of | (Section 10.1.2) and a representation that describes the status of | |||
| the request while referring to the new resource(s). | the request while referring to the new resource(s). | |||
| Responses to POST requests are only cacheable when they include | Responses to POST requests are only cacheable when they include | |||
| explicit freshness information (see Section 4.2.1 of [Caching]). | explicit freshness information (see Section 4.2.1 of [Caching]) and a | |||
| However, POST caching is not widely implemented. For cases where an | Content-Location header field that has the same value as the POST's | |||
| origin server wishes the client to be able to cache the result of a | effective request URI (Section 6.2.5). A cached POST response can be | |||
| POST in a way that can be reused by a later GET, the origin server | reused to satisfy a later GET or HEAD request, but not a POST | |||
| MAY send a 200 (OK) response containing the result and a Content- | request, since POST is required to be written through to the origin | |||
| Location header field that has the same value as the POST's effective | server, because it is unsafe; see Section 4 of [Caching]. | |||
| request URI (Section 6.2.5). | ||||
| If the result of processing a POST would be equivalent to a | If the result of processing a POST would be equivalent to a | |||
| representation of an existing resource, an origin server MAY redirect | representation of an existing resource, an origin server MAY redirect | |||
| the user agent to that resource by sending a 303 (See Other) response | the user agent to that resource by sending a 303 (See Other) response | |||
| with the existing resource's identifier in the Location field. This | with the existing resource's identifier in the Location field. This | |||
| has the benefits of providing the user agent a resource identifier | has the benefits of providing the user agent a resource identifier | |||
| and transferring the representation via a method more amenable to | and transferring the representation via a method more amenable to | |||
| shared caching, though at the cost of an extra request if the user | shared caching, though at the cost of an extra request if the user | |||
| agent does not already have the representation cached. | agent does not already have the representation cached. | |||
| skipping to change at page 71, line 49 ¶ | skipping to change at page 72, line 44 ¶ | |||
| A client MUST NOT generate header fields in a TRACE request | A client MUST NOT generate header fields in a TRACE request | |||
| containing sensitive data that might be disclosed by the response. | containing sensitive data that might be disclosed by the response. | |||
| For example, it would be foolish for a user agent to send stored user | For example, it would be foolish for a user agent to send stored user | |||
| credentials Section 8.5 or cookies [RFC6265] in a TRACE request. The | credentials Section 8.5 or cookies [RFC6265] in a TRACE request. The | |||
| final recipient of the request SHOULD exclude any request header | final recipient of the request SHOULD exclude any request header | |||
| fields that are likely to contain sensitive data when that recipient | fields that are likely to contain sensitive data when that recipient | |||
| generates the response body. | generates the response body. | |||
| TRACE allows the client to see what is being received at the other | TRACE allows the client to see what is being received at the other | |||
| end of the request chain and use that data for testing or diagnostic | end of the request chain and use that data for testing or diagnostic | |||
| information. The value of the Via header field (Section 5.6.1) is of | information. The value of the Via header field (Section 5.5.1) is of | |||
| particular interest, since it acts as a trace of the request chain. | particular interest, since it acts as a trace of the request chain. | |||
| Use of the Max-Forwards header field allows the client to limit the | Use of the Max-Forwards header field allows the client to limit the | |||
| length of the request chain, which is useful for testing a chain of | length of the request chain, which is useful for testing a chain of | |||
| proxies forwarding messages in an infinite loop. | proxies forwarding messages in an infinite loop. | |||
| A client MUST NOT send a message body in a TRACE request. | A client MUST NOT send a message body in a TRACE request. | |||
| Responses to the TRACE method are not cacheable. | Responses to the TRACE method are not cacheable. | |||
| 7.4. Method Extensibility | 7.4. Method Extensibility | |||
| skipping to change at page 75, line 33 ¶ | skipping to change at page 76, line 26 ¶ | |||
| o A server MAY omit sending a 100 (Continue) response if it has | o A server MAY omit sending a 100 (Continue) response if it has | |||
| already received some or all of the message body for the | already received some or all of the message body for the | |||
| corresponding request, or if the framing indicates that there is | corresponding request, or if the framing indicates that there is | |||
| no message body. | no message body. | |||
| o A server that sends a 100 (Continue) response MUST ultimately send | o A server that sends a 100 (Continue) response MUST ultimately send | |||
| a final status code, once the message body is received and | a final status code, once the message body is received and | |||
| processed, unless the connection is closed prematurely. | processed, unless the connection is closed prematurely. | |||
| o A server that responds with a final status code before reading the | o A server that responds with a final status code before reading the | |||
| entire message body SHOULD indicate in that response whether it | entire request payload body SHOULD indicate whether it intends to | |||
| intends to close the connection or continue reading and discarding | close the connection (see Section 9.7 of [Messaging]) or continue | |||
| the request message (see Section 9.6 of [Messaging]). | reading the payload body. | |||
| An origin server MUST, upon receiving an HTTP/1.1 (or later) request- | An origin server MUST, upon receiving an HTTP/1.1 (or later) request- | |||
| line and a complete header section that contains a 100-continue | line and a complete header section that contains a 100-continue | |||
| expectation and indicates a request message body will follow, either | expectation and indicates a request message body will follow, either | |||
| send an immediate response with a final status code, if that status | send an immediate response with a final status code, if that status | |||
| can be determined by examining just the request-line and header | can be determined by examining just the request-line and header | |||
| fields, or send an immediate 100 (Continue) response to encourage the | fields, or send an immediate 100 (Continue) response to encourage the | |||
| client to send the request's message body. The origin server MUST | client to send the request's message body. The origin server MUST | |||
| NOT wait for the message body before sending the 100 (Continue) | NOT wait for the message body before sending the 100 (Continue) | |||
| response. | response. | |||
| skipping to change at page 100, line 14 ¶ | skipping to change at page 101, line 14 ¶ | |||
| (Section 5.2.2.6 of [Caching]), within the scope of the request in | (Section 5.2.2.6 of [Caching]), within the scope of the request in | |||
| which they appear. | which they appear. | |||
| Therefore, new authentication schemes that choose not to carry | Therefore, new authentication schemes that choose not to carry | |||
| credentials in the Authorization header field (e.g., using a newly | credentials in the Authorization header field (e.g., using a newly | |||
| defined header field) will need to explicitly disallow caching, by | defined header field) will need to explicitly disallow caching, by | |||
| mandating the use of either Cache-Control request directives | mandating the use of either Cache-Control request directives | |||
| (e.g., "no-store", Section 5.2.1.5 of [Caching]) or response | (e.g., "no-store", Section 5.2.1.5 of [Caching]) or response | |||
| directives (e.g., "private"). | directives (e.g., "private"). | |||
| o Schemes using Authentication-Info, Proxy-Authentication-Info, or | ||||
| any other authentication related response header field need to | ||||
| consider and document the related security considerations (see | ||||
| Section 12.14.4). | ||||
| 8.6. Request Context | 8.6. Request Context | |||
| The following request header fields provide additional information | The following request header fields provide additional information | |||
| about the request context, including information about the user, user | about the request context, including information about the user, user | |||
| agent, and resource behind the request. | agent, and resource behind the request. | |||
| +-------------------+---------------+ | +-------------------+---------------+ | |||
| | Header Field Name | Defined in... | | | Header Field Name | Defined in... | | |||
| +-------------------+---------------+ | +-------------------+---------------+ | |||
| | From | Section 8.6.1 | | | From | Section 8.6.1 | | |||
| skipping to change at page 105, line 43 ¶ | skipping to change at page 106, line 43 ¶ | |||
| | 408 | Request Timeout | Section 9.5.9 | | | 408 | Request Timeout | Section 9.5.9 | | |||
| | 409 | Conflict | Section 9.5.10 | | | 409 | Conflict | Section 9.5.10 | | |||
| | 410 | Gone | Section 9.5.11 | | | 410 | Gone | Section 9.5.11 | | |||
| | 411 | Length Required | Section 9.5.12 | | | 411 | Length Required | Section 9.5.12 | | |||
| | 412 | Precondition Failed | Section 9.5.13 | | | 412 | Precondition Failed | Section 9.5.13 | | |||
| | 413 | Payload Too Large | Section 9.5.14 | | | 413 | Payload Too Large | Section 9.5.14 | | |||
| | 414 | URI Too Long | Section 9.5.15 | | | 414 | URI Too Long | Section 9.5.15 | | |||
| | 415 | Unsupported Media Type | Section 9.5.16 | | | 415 | Unsupported Media Type | Section 9.5.16 | | |||
| | 416 | Range Not Satisfiable | Section 9.5.17 | | | 416 | Range Not Satisfiable | Section 9.5.17 | | |||
| | 417 | Expectation Failed | Section 9.5.18 | | | 417 | Expectation Failed | Section 9.5.18 | | |||
| | 426 | Upgrade Required | Section 9.5.19 | | | 418 | (Unused) | Section 9.5.19 | | |||
| | 422 | Unprocessable Entity | Section 9.5.20 | | ||||
| | 426 | Upgrade Required | Section 9.5.21 | | ||||
| | 500 | Internal Server Error | Section 9.6.1 | | | 500 | Internal Server Error | Section 9.6.1 | | |||
| | 501 | Not Implemented | Section 9.6.2 | | | 501 | Not Implemented | Section 9.6.2 | | |||
| | 502 | Bad Gateway | Section 9.6.3 | | | 502 | Bad Gateway | Section 9.6.3 | | |||
| | 503 | Service Unavailable | Section 9.6.4 | | | 503 | Service Unavailable | Section 9.6.4 | | |||
| | 504 | Gateway Timeout | Section 9.6.5 | | | 504 | Gateway Timeout | Section 9.6.5 | | |||
| | 505 | HTTP Version Not Supported | Section 9.6.6 | | | 505 | HTTP Version Not Supported | Section 9.6.6 | | |||
| +-------+-------------------------------+-----------------+ | +-------+-------------------------------+-----------------+ | |||
| Note that this list is not exhaustive -- it does not include | Note that this list is not exhaustive -- it does not include | |||
| extension status codes defined in other specifications (Section 9.7). | extension status codes defined in other specifications (Section 9.7). | |||
| skipping to change at page 106, line 47 ¶ | skipping to change at page 107, line 47 ¶ | |||
| discard the 100 response. | discard the 100 response. | |||
| If the request did not contain an Expect header field containing the | If the request did not contain an Expect header field containing the | |||
| 100-continue expectation, the client can simply discard this interim | 100-continue expectation, the client can simply discard this interim | |||
| response. | response. | |||
| 9.2.2. 101 Switching Protocols | 9.2.2. 101 Switching Protocols | |||
| The 101 (Switching Protocols) status code indicates that the server | The 101 (Switching Protocols) status code indicates that the server | |||
| understands and is willing to comply with the client's request, via | understands and is willing to comply with the client's request, via | |||
| the Upgrade header field (Section 9.7 of [Messaging]), for a change | the Upgrade header field (Section 9.8 of [Messaging]), for a change | |||
| in the application protocol being used on this connection. The | in the application protocol being used on this connection. The | |||
| server MUST generate an Upgrade header field in the response that | server MUST generate an Upgrade header field in the response that | |||
| indicates which protocol(s) will be switched to immediately after the | indicates which protocol(s) will be switched to immediately after the | |||
| empty line that terminates the 101 response. | empty line that terminates the 101 response. | |||
| It is assumed that the server will only agree to switch protocols | It is assumed that the server will only agree to switch protocols | |||
| when it is advantageous to do so. For example, switching to a newer | when it is advantageous to do so. For example, switching to a newer | |||
| version of HTTP might be advantageous over older versions, and | version of HTTP might be advantageous over older versions, and | |||
| switching to a real-time, synchronous protocol might be advantageous | switching to a real-time, synchronous protocol might be advantageous | |||
| when delivering resources that use such features. | when delivering resources that use such features. | |||
| skipping to change at page 108, line 41 ¶ | skipping to change at page 109, line 41 ¶ | |||
| until the process is completed. The representation sent with this | until the process is completed. The representation sent with this | |||
| response ought to describe the request's current status and point to | response ought to describe the request's current status and point to | |||
| (or embed) a status monitor that can provide the user with an | (or embed) a status monitor that can provide the user with an | |||
| estimate of when the request will be fulfilled. | estimate of when the request will be fulfilled. | |||
| 9.3.4. 203 Non-Authoritative Information | 9.3.4. 203 Non-Authoritative Information | |||
| The 203 (Non-Authoritative Information) status code indicates that | The 203 (Non-Authoritative Information) status code indicates that | |||
| the request was successful but the enclosed payload has been modified | the request was successful but the enclosed payload has been modified | |||
| from that of the origin server's 200 (OK) response by a transforming | from that of the origin server's 200 (OK) response by a transforming | |||
| proxy (Section 5.6.2). This status code allows the proxy to notify | proxy (Section 5.5.2). This status code allows the proxy to notify | |||
| recipients when a transformation has been applied, since that | recipients when a transformation has been applied, since that | |||
| knowledge might impact later decisions regarding the content. For | knowledge might impact later decisions regarding the content. For | |||
| example, future cache validation requests for the content might only | example, future cache validation requests for the content might only | |||
| be applicable along the same request path (through the same proxies). | be applicable along the same request path (through the same proxies). | |||
| The 203 response is similar to the Warning code of 214 Transformation | The 203 response is similar to the Warning code of 214 Transformation | |||
| Applied (Section 5.5 of [Caching]), which has the advantage of being | Applied (Section 5.5 of [Caching]), which has the advantage of being | |||
| applicable to responses with any status code. | applicable to responses with any status code. | |||
| A 203 response is cacheable by default; i.e., unless otherwise | A 203 response is cacheable by default; i.e., unless otherwise | |||
| skipping to change at page 123, line 15 ¶ | skipping to change at page 124, line 15 ¶ | |||
| 9.5.17. 416 Range Not Satisfiable | 9.5.17. 416 Range Not Satisfiable | |||
| The 416 (Range Not Satisfiable) status code indicates that none of | The 416 (Range Not Satisfiable) status code indicates that none of | |||
| the ranges in the request's Range header field (Section 8.3) overlap | the ranges in the request's Range header field (Section 8.3) overlap | |||
| the current extent of the selected representation or that the set of | the current extent of the selected representation or that the set of | |||
| ranges requested has been rejected due to invalid ranges or an | ranges requested has been rejected due to invalid ranges or an | |||
| excessive request of small or overlapping ranges. | excessive request of small or overlapping ranges. | |||
| For byte ranges, failing to overlap the current extent means that the | For byte ranges, failing to overlap the current extent means that the | |||
| first-byte-pos of all of the byte-range-spec values were greater than | first-byte-pos of all of the byte-range-spec values were greater than | |||
| the current length of the selected representation. When this status | or equal to the current length of the selected representation. When | |||
| code is generated in response to a byte-range request, the sender | this status code is generated in response to a byte-range request, | |||
| SHOULD generate a Content-Range header field specifying the current | the sender SHOULD generate a Content-Range header field specifying | |||
| length of the selected representation (Section 6.3.3). | the current length of the selected representation (Section 6.3.3). | |||
| For example: | For example: | |||
| HTTP/1.1 416 Range Not Satisfiable | HTTP/1.1 416 Range Not Satisfiable | |||
| Date: Fri, 20 Jan 2012 15:41:54 GMT | Date: Fri, 20 Jan 2012 15:41:54 GMT | |||
| Content-Range: bytes */47022 | Content-Range: bytes */47022 | |||
| Note: Because servers are free to ignore Range, many | Note: Because servers are free to ignore Range, many | |||
| implementations will simply respond with the entire selected | implementations will simply respond with the entire selected | |||
| representation in a 200 (OK) response. That is partly because | representation in a 200 (OK) response. That is partly because | |||
| skipping to change at page 123, line 43 ¶ | skipping to change at page 124, line 43 ¶ | |||
| on receiving a 416 (Range Not Satisfiable) response even when it | on receiving a 416 (Range Not Satisfiable) response even when it | |||
| is most appropriate. | is most appropriate. | |||
| 9.5.18. 417 Expectation Failed | 9.5.18. 417 Expectation Failed | |||
| The 417 (Expectation Failed) status code indicates that the | The 417 (Expectation Failed) status code indicates that the | |||
| expectation given in the request's Expect header field | expectation given in the request's Expect header field | |||
| (Section 8.1.1) could not be met by at least one of the inbound | (Section 8.1.1) could not be met by at least one of the inbound | |||
| servers. | servers. | |||
| 9.5.19. 426 Upgrade Required | 9.5.19. 418 (Unused) | |||
| [RFC2324] was an April 1 RFC that lampooned the various ways HTTP was | ||||
| abused; one such abuse was the definition of an application-specific | ||||
| 418 status code. In the intervening years, this status code has been | ||||
| widely implemented as an "Easter Egg", and therefore is effectively | ||||
| consumed by this use. | ||||
| Therefore, the 418 status code is reserved in the IANA HTTP Status | ||||
| Code registry. This indicates that the status code cannot be | ||||
| assigned to other applications currently. If future circumstances | ||||
| require its use (e.g., exhaustion of 4NN status codes), it can be re- | ||||
| assigned to another use. | ||||
| 9.5.20. 422 Unprocessable Entity | ||||
| The 422 (Unprocessable Entity) status code indicates that the server | ||||
| understands the content type of the request entity (hence a 415 | ||||
| (Unsupported Media Type) status code is inappropriate), and the | ||||
| syntax of the request entity is correct but was unable to process the | ||||
| contained instructions. For example, this error condition may occur | ||||
| if an XML request body contains well-formed (i.e., syntactically | ||||
| correct), but semantically erroneous, XML instructions. | ||||
| 9.5.21. 426 Upgrade Required | ||||
| The 426 (Upgrade Required) status code indicates that the server | The 426 (Upgrade Required) status code indicates that the server | |||
| refuses to perform the request using the current protocol but might | refuses to perform the request using the current protocol but might | |||
| be willing to do so after the client upgrades to a different | be willing to do so after the client upgrades to a different | |||
| protocol. The server MUST send an Upgrade header field in a 426 | protocol. The server MUST send an Upgrade header field in a 426 | |||
| response to indicate the required protocol(s) (Section 9.7 of | response to indicate the required protocol(s) (Section 9.8 of | |||
| [Messaging]). | [Messaging]). | |||
| Example: | Example: | |||
| HTTP/1.1 426 Upgrade Required | HTTP/1.1 426 Upgrade Required | |||
| Upgrade: HTTP/3.0 | Upgrade: HTTP/3.0 | |||
| Connection: Upgrade | Connection: Upgrade | |||
| Content-Length: 53 | Content-Length: 53 | |||
| Content-Type: text/plain | Content-Type: text/plain | |||
| skipping to change at page 143, line 27 ¶ | skipping to change at page 144, line 27 ¶ | |||
| Authentication challenges indicate what mechanisms are available for | Authentication challenges indicate what mechanisms are available for | |||
| the client to provide authentication credentials in future requests. | the client to provide authentication credentials in future requests. | |||
| +--------------------+----------------+ | +--------------------+----------------+ | |||
| | Header Field Name | Defined in... | | | Header Field Name | Defined in... | | |||
| +--------------------+----------------+ | +--------------------+----------------+ | |||
| | WWW-Authenticate | Section 10.3.1 | | | WWW-Authenticate | Section 10.3.1 | | |||
| | Proxy-Authenticate | Section 10.3.2 | | | Proxy-Authenticate | Section 10.3.2 | | |||
| +--------------------+----------------+ | +--------------------+----------------+ | |||
| Furthermore, the "Authentication-Info" and "Proxy-Authentication- | ||||
| Info" response header fields are defined for use in authentication | ||||
| schemes that need to return information once the client's | ||||
| authentication credentials have been accepted. | ||||
| +---------------------------+----------------+ | ||||
| | Header Field Name | Defined in... | | ||||
| +---------------------------+----------------+ | ||||
| | Authentication-Info | Section 10.3.3 | | ||||
| | Proxy-Authentication-Info | Section 10.3.4 | | ||||
| +---------------------------+----------------+ | ||||
| 10.3.1. WWW-Authenticate | 10.3.1. WWW-Authenticate | |||
| The "WWW-Authenticate" header field indicates the authentication | The "WWW-Authenticate" header field indicates the authentication | |||
| scheme(s) and parameters applicable to the target resource. | scheme(s) and parameters applicable to the target resource. | |||
| WWW-Authenticate = 1#challenge | WWW-Authenticate = 1#challenge | |||
| A server generating a 401 (Unauthorized) response MUST send a WWW- | A server generating a 401 (Unauthorized) response MUST send a WWW- | |||
| Authenticate header field containing at least one challenge. A | Authenticate header field containing at least one challenge. A | |||
| server MAY generate a WWW-Authenticate header field in other response | server MAY generate a WWW-Authenticate header field in other response | |||
| skipping to change at page 144, line 46 ¶ | skipping to change at page 146, line 8 ¶ | |||
| proxies are used within the same administrative domain, such as | proxies are used within the same administrative domain, such as | |||
| office and regional caching proxies within a large corporate network, | office and regional caching proxies within a large corporate network, | |||
| it is common for credentials to be generated by the user agent and | it is common for credentials to be generated by the user agent and | |||
| passed through the hierarchy until consumed. Hence, in such a | passed through the hierarchy until consumed. Hence, in such a | |||
| configuration, it will appear as if Proxy-Authenticate is being | configuration, it will appear as if Proxy-Authenticate is being | |||
| forwarded because each proxy will send the same challenge set. | forwarded because each proxy will send the same challenge set. | |||
| Note that the parsing considerations for WWW-Authenticate apply to | Note that the parsing considerations for WWW-Authenticate apply to | |||
| this header field as well; see Section 10.3.1 for details. | this header field as well; see Section 10.3.1 for details. | |||
| 10.3.3. Authentication-Info | ||||
| HTTP authentication schemes can use the Authentication-Info response | ||||
| header field to communicate information after the client's | ||||
| authentication credentials have been accepted. This information can | ||||
| include a finalization message from the server (e.g., it can contain | ||||
| the server authentication). | ||||
| The field value is a list of parameters (name/value pairs), using the | ||||
| "auth-param" syntax defined in Section 8.5.1. This specification | ||||
| only describes the generic format; authentication schemes using | ||||
| Authentication-Info will define the individual parameters. The | ||||
| "Digest" Authentication Scheme, for instance, defines multiple | ||||
| parameters in Section 3.5 of [RFC7616]. | ||||
| Authentication-Info = #auth-param | ||||
| The Authentication-Info header field can be used in any HTTP | ||||
| response, independently of request method and status code. Its | ||||
| semantics are defined by the authentication scheme indicated by the | ||||
| Authorization header field (Section 8.5.3) of the corresponding | ||||
| request. | ||||
| A proxy forwarding a response is not allowed to modify the field | ||||
| value in any way. | ||||
| Authentication-Info can be used inside trailers (Section 7.1.2 of | ||||
| [Messaging]) when the authentication scheme explicitly allows this. | ||||
| 10.3.3.1. Parameter Value Format | ||||
| Parameter values can be expressed either as "token" or as "quoted- | ||||
| string" (Section 4.2.3). | ||||
| Authentication scheme definitions need to allow both notations, both | ||||
| for senders and recipients. This allows recipients to use generic | ||||
| parsing components, independent of the authentication scheme in use. | ||||
| For backwards compatibility, authentication scheme definitions can | ||||
| restrict the format for senders to one of the two variants. This can | ||||
| be important when it is known that deployed implementations will fail | ||||
| when encountering one of the two formats. | ||||
| 10.3.4. Proxy-Authentication-Info | ||||
| The Proxy-Authentication-Info response header field is equivalent to | ||||
| Authentication-Info, except that it applies to proxy authentication | ||||
| (Section 8.5.1) and its semantics are defined by the authentication | ||||
| scheme indicated by the Proxy-Authorization header field | ||||
| (Section 8.5.4) of the corresponding request: | ||||
| Proxy-Authentication-Info = #auth-param | ||||
| However, unlike Authentication-Info, the Proxy-Authentication-Info | ||||
| header field applies only to the next outbound client on the response | ||||
| chain. This is because only the client that chose a given proxy is | ||||
| likely to have the credentials necessary for authentication. | ||||
| However, when multiple proxies are used within the same | ||||
| administrative domain, such as office and regional caching proxies | ||||
| within a large corporate network, it is common for credentials to be | ||||
| generated by the user agent and passed through the hierarchy until | ||||
| consumed. Hence, in such a configuration, it will appear as if | ||||
| Proxy-Authentication-Info is being forwarded because each proxy will | ||||
| send the same field value. | ||||
| 10.4. Response Context | 10.4. Response Context | |||
| The remaining response header fields provide more information about | The remaining response header fields provide more information about | |||
| the target resource for potential use in later requests. | the target resource for potential use in later requests. | |||
| +-------------------+----------------+ | +-------------------+----------------+ | |||
| | Header Field Name | Defined in... | | | Header Field Name | Defined in... | | |||
| +-------------------+----------------+ | +-------------------+----------------+ | |||
| | Accept-Ranges | Section 10.4.1 | | | Accept-Ranges | Section 10.4.1 | | |||
| | Allow | Section 10.4.2 | | | Allow | Section 10.4.2 | | |||
| skipping to change at page 153, line 7 ¶ | skipping to change at page 155, line 30 ¶ | |||
| of the response. In particular, when a redirect occurs and the | of the response. In particular, when a redirect occurs and the | |||
| original request's fragment identifier is inherited by the new | original request's fragment identifier is inherited by the new | |||
| reference in Location (Section 10.1.2), this might have the effect of | reference in Location (Section 10.1.2), this might have the effect of | |||
| disclosing one site's fragment to another site. If the first site | disclosing one site's fragment to another site. If the first site | |||
| uses personal information in fragments, it ought to ensure that | uses personal information in fragments, it ought to ensure that | |||
| redirects to other sites include a (possibly empty) fragment | redirects to other sites include a (possibly empty) fragment | |||
| component in order to block that inheritance. | component in order to block that inheritance. | |||
| 12.10. Disclosure of Product Information | 12.10. Disclosure of Product Information | |||
| The User-Agent (Section 8.6.3), Via (Section 5.6.1), and Server | The User-Agent (Section 8.6.3), Via (Section 5.5.1), and Server | |||
| (Section 10.4.3) header fields often reveal information about the | (Section 10.4.3) header fields often reveal information about the | |||
| respective sender's software systems. In theory, this can make it | respective sender's software systems. In theory, this can make it | |||
| easier for an attacker to exploit known security holes; in practice, | easier for an attacker to exploit known security holes; in practice, | |||
| attackers tend to try all potential holes regardless of the apparent | attackers tend to try all potential holes regardless of the apparent | |||
| software versions being used. | software versions being used. | |||
| Proxies that serve as a portal through a network firewall ought to | Proxies that serve as a portal through a network firewall ought to | |||
| take special precautions regarding the transfer of header information | take special precautions regarding the transfer of header information | |||
| that might identify hosts behind the firewall. The Via header field | that might identify hosts behind the firewall. The Via header field | |||
| allows intermediaries to replace sensitive machine names with | allows intermediaries to replace sensitive machine names with | |||
| skipping to change at page 156, line 41 ¶ | skipping to change at page 159, line 17 ¶ | |||
| authentication credentials for other resources. | authentication credentials for other resources. | |||
| This is of particular concern when an origin server hosts resources | This is of particular concern when an origin server hosts resources | |||
| for multiple parties under the same canonical root URI | for multiple parties under the same canonical root URI | |||
| (Section 8.5.2). Possible mitigation strategies include restricting | (Section 8.5.2). Possible mitigation strategies include restricting | |||
| direct access to authentication credentials (i.e., not making the | direct access to authentication credentials (i.e., not making the | |||
| content of the Authorization request header field available), and | content of the Authorization request header field available), and | |||
| separating protection spaces by using a different host name (or port | separating protection spaces by using a different host name (or port | |||
| number) for each party. | number) for each party. | |||
| 12.14.4. Additional Response Header Fields | ||||
| Adding information to responses that are sent over an unencrypted | ||||
| channel can affect security and privacy. The presence of the | ||||
| Authentication-Info and Proxy-Authentication-Info header fields alone | ||||
| indicates that HTTP authentication is in use. Additional information | ||||
| could be exposed by the contents of the authentication-scheme | ||||
| specific parameters; this will have to be considered in the | ||||
| definitions of these schemes. | ||||
| 13. IANA Considerations | 13. IANA Considerations | |||
| The change controller for the following registrations is: "IETF | The change controller for the following registrations is: "IETF | |||
| (iesg@ietf.org) - Internet Engineering Task Force". | (iesg@ietf.org) - Internet Engineering Task Force". | |||
| 13.1. URI Scheme Registration | 13.1. URI Scheme Registration | |||
| Please update the registry of URI Schemes [BCP35] at | Please update the registry of URI Schemes [BCP35] at | |||
| <https://www.iana.org/assignments/uri-schemes/> with the permanent | <https://www.iana.org/assignments/uri-schemes/> with the permanent | |||
| schemes listed in the first table of Section 2.5. | schemes listed in the first table of Section 2.5. | |||
| skipping to change at page 157, line 19 ¶ | skipping to change at page 160, line 5 ¶ | |||
| registration procedure of Section 7.4.1 and the method names | registration procedure of Section 7.4.1 and the method names | |||
| summarized in the table of Section 7.2. | summarized in the table of Section 7.2. | |||
| 13.3. Status Code Registration | 13.3. Status Code Registration | |||
| Please update the "Hypertext Transfer Protocol (HTTP) Status Code | Please update the "Hypertext Transfer Protocol (HTTP) Status Code | |||
| Registry" at <https://www.iana.org/assignments/http-status-codes> | Registry" at <https://www.iana.org/assignments/http-status-codes> | |||
| with the registration procedure of Section 9.7.1 and the status code | with the registration procedure of Section 9.7.1 and the status code | |||
| values summarized in the table of Section 9.1. | values summarized in the table of Section 9.1. | |||
| Additionally, please update the following entry in the Hypertext | ||||
| Transfer Protocol (HTTP) Status Code Registry: | ||||
| Value: 418 | ||||
| Description: (Unused) | ||||
| Reference Section 9.5.19 | ||||
| 13.4. Header Field Registration | 13.4. Header Field Registration | |||
| Please update the "Message Headers" registry of "Permanent Message | Please update the "Message Headers" registry of "Permanent Message | |||
| Header Field Names" at <https://www.iana.org/assignments/message- | Header Field Names" at <https://www.iana.org/assignments/message- | |||
| headers> with the header field names listed in the table of | headers> with the header field names listed in the table of | |||
| Section 4.1. | Section 4.1. | |||
| 13.5. Authentication Scheme Registration | 13.5. Authentication Scheme Registration | |||
| Please update the "Hypertext Transfer Protocol (HTTP) Authentication | Please update the "Hypertext Transfer Protocol (HTTP) Authentication | |||
| skipping to change at page 158, line 10 ¶ | skipping to change at page 161, line 10 ¶ | |||
| Please update the "Media Types" registry at | Please update the "Media Types" registry at | |||
| <https://www.iana.org/assignments/media-types> with the registration | <https://www.iana.org/assignments/media-types> with the registration | |||
| information in Section 6.3.4 for the media type "multipart/ | information in Section 6.3.4 for the media type "multipart/ | |||
| byteranges". | byteranges". | |||
| 14. References | 14. References | |||
| 14.1. Normative References | 14.1. Normative References | |||
| [Caching] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [Caching] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "HTTP Caching", draft-ietf-httpbis-cache-02 (work in | Ed., "HTTP Caching", draft-ietf-httpbis-cache-03 (work in | |||
| progress), July 2018. | progress), October 2018. | |||
| [Messaging] | [Messaging] | |||
| Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "HTTP/1.1 Messaging", draft-ietf-httpbis-messaging-02 | Ed., "HTTP/1.1 Messaging", draft-ietf-httpbis-messaging-03 | |||
| (work in progress), July 2018. | (work in progress), October 2018. | |||
| [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | |||
| RFC 793, DOI 10.17487/RFC0793, September 1981, | RFC 793, DOI 10.17487/RFC0793, September 1981, | |||
| <https://www.rfc-editor.org/info/rfc793>. | <https://www.rfc-editor.org/info/rfc793>. | |||
| [RFC1950] Deutsch, L. and J-L. Gailly, "ZLIB Compressed Data Format | [RFC1950] Deutsch, L. and J-L. Gailly, "ZLIB Compressed Data Format | |||
| Specification version 3.3", RFC 1950, | Specification version 3.3", RFC 1950, | |||
| DOI 10.17487/RFC1950, May 1996, | DOI 10.17487/RFC1950, May 1996, | |||
| <https://www.rfc-editor.org/info/rfc1950>. | <https://www.rfc-editor.org/info/rfc1950>. | |||
| skipping to change at page 160, line 14 ¶ | skipping to change at page 163, line 14 ¶ | |||
| [BCP35] Thaler, D., Ed., Hansen, T., and T. Hardie, "Guidelines | [BCP35] Thaler, D., Ed., Hansen, T., and T. Hardie, "Guidelines | |||
| and Registration Procedures for URI Schemes", BCP 35, | and Registration Procedures for URI Schemes", BCP 35, | |||
| RFC 7595, June 2015, | RFC 7595, June 2015, | |||
| <https://www.rfc-editor.org/info/bcp35>. | <https://www.rfc-editor.org/info/bcp35>. | |||
| [BCP90] Klyne, G., Nottingham, M., and J. Mogul, "Registration | [BCP90] Klyne, G., Nottingham, M., and J. Mogul, "Registration | |||
| Procedures for Message Header Fields", BCP 90, RFC 3864, | Procedures for Message Header Fields", BCP 90, RFC 3864, | |||
| September 2004, <https://www.rfc-editor.org/info/bcp90>. | September 2004, <https://www.rfc-editor.org/info/bcp90>. | |||
| [Err1912] RFC Errata, Erratum ID 1912, RFC 2978, | ||||
| <https://www.rfc-editor.org/errata/eid1912>. | ||||
| [Err5433] RFC Errata, Erratum ID 5433, RFC 2978, | ||||
| <https://www.rfc-editor.org/errata/eid5433>. | ||||
| [Georgiev] | [Georgiev] | |||
| Georgiev, M., Iyengar, S., Jana, S., Anubhai, R., Boneh, | Georgiev, M., Iyengar, S., Jana, S., Anubhai, R., Boneh, | |||
| D., and V. Shmatikov, "The Most Dangerous Code in the | D., and V. Shmatikov, "The Most Dangerous Code in the | |||
| World: Validating SSL Certificates in Non-browser | World: Validating SSL Certificates in Non-browser | |||
| Software", In Proceedings of the 2012 ACM Conference on | Software", In Proceedings of the 2012 ACM Conference on | |||
| Computer and Communications Security (CCS '12), pp. 38-49, | Computer and Communications Security (CCS '12), pp. 38-49, | |||
| October 2012, | October 2012, | |||
| <http://doi.acm.org/10.1145/2382196.2382204>. | <http://doi.acm.org/10.1145/2382196.2382204>. | |||
| [ISO-8859-1] | [ISO-8859-1] | |||
| skipping to change at page 161, line 24 ¶ | skipping to change at page 164, line 29 ¶ | |||
| [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, | |||
| DOI 10.17487/RFC2145, May 1997, | DOI 10.17487/RFC2145, May 1997, | |||
| <https://www.rfc-editor.org/info/rfc2145>. | <https://www.rfc-editor.org/info/rfc2145>. | |||
| [RFC2295] Holtman, K. and A. Mutz, "Transparent Content Negotiation | [RFC2295] Holtman, K. and A. Mutz, "Transparent Content Negotiation | |||
| in HTTP", RFC 2295, DOI 10.17487/RFC2295, March 1998, | in HTTP", RFC 2295, DOI 10.17487/RFC2295, March 1998, | |||
| <https://www.rfc-editor.org/info/rfc2295>. | <https://www.rfc-editor.org/info/rfc2295>. | |||
| [RFC2324] Masinter, L., "Hyper Text Coffee Pot Control Protocol | ||||
| (HTCPCP/1.0)", RFC 2324, DOI 10.17487/RFC2324, April 1998, | ||||
| <https://www.rfc-editor.org/info/rfc2324>. | ||||
| [RFC2557] Palme, F., Hopmann, A., Shelness, N., and E. Stefferud, | [RFC2557] Palme, F., Hopmann, A., Shelness, N., and E. Stefferud, | |||
| "MIME Encapsulation of Aggregate Documents, such as HTML | "MIME Encapsulation of Aggregate Documents, such as HTML | |||
| (MHTML)", RFC 2557, DOI 10.17487/RFC2557, March 1999, | (MHTML)", RFC 2557, DOI 10.17487/RFC2557, March 1999, | |||
| <https://www.rfc-editor.org/info/rfc2557>. | <https://www.rfc-editor.org/info/rfc2557>. | |||
| [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, | Transfer Protocol -- HTTP/1.1", RFC 2616, | |||
| DOI 10.17487/RFC2616, June 1999, | DOI 10.17487/RFC2616, June 1999, | |||
| <https://www.rfc-editor.org/info/rfc2616>. | <https://www.rfc-editor.org/info/rfc2616>. | |||
| skipping to change at page 163, line 38 ¶ | skipping to change at page 166, line 46 ¶ | |||
| <https://www.rfc-editor.org/info/rfc7235>. | <https://www.rfc-editor.org/info/rfc7235>. | |||
| [RFC7538] Reschke, J., "The Hypertext Transfer Protocol Status Code | [RFC7538] Reschke, J., "The Hypertext Transfer Protocol Status Code | |||
| 308 (Permanent Redirect)", RFC 7538, DOI 10.17487/RFC7538, | 308 (Permanent Redirect)", RFC 7538, DOI 10.17487/RFC7538, | |||
| April 2015, <https://www.rfc-editor.org/info/rfc7538>. | April 2015, <https://www.rfc-editor.org/info/rfc7538>. | |||
| [RFC7578] Masinter, L., "Returning Values from Forms: multipart/ | [RFC7578] Masinter, L., "Returning Values from Forms: multipart/ | |||
| form-data", RFC 7578, DOI 10.17487/RFC7578, July 2015, | form-data", RFC 7578, DOI 10.17487/RFC7578, July 2015, | |||
| <https://www.rfc-editor.org/info/rfc7578>. | <https://www.rfc-editor.org/info/rfc7578>. | |||
| [RFC7615] Reschke, J., "HTTP Authentication-Info and Proxy- | ||||
| Authentication-Info Response Header Fields", RFC 7615, | ||||
| DOI 10.17487/RFC7615, September 2015, | ||||
| <https://www.rfc-editor.org/info/rfc7615>. | ||||
| [RFC7616] Shekh-Yusef, R., Ed., Ahrens, D., and S. Bremer, "HTTP | [RFC7616] Shekh-Yusef, R., Ed., Ahrens, D., and S. Bremer, "HTTP | |||
| Digest Access Authentication", RFC 7616, | Digest Access Authentication", RFC 7616, | |||
| DOI 10.17487/RFC7616, September 2015, | DOI 10.17487/RFC7616, September 2015, | |||
| <https://www.rfc-editor.org/info/rfc7616>. | <https://www.rfc-editor.org/info/rfc7616>. | |||
| [RFC7617] Reschke, J., "The 'Basic' HTTP Authentication Scheme", | [RFC7617] Reschke, J., "The 'Basic' HTTP Authentication Scheme", | |||
| RFC 7617, DOI 10.17487/RFC7617, September 2015, | RFC 7617, DOI 10.17487/RFC7617, September 2015, | |||
| <https://www.rfc-editor.org/info/rfc7617>. | <https://www.rfc-editor.org/info/rfc7617>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| skipping to change at page 165, line 20 ¶ | skipping to change at page 168, line 20 ¶ | |||
| Accept = [ ( "," / ( media-range [ accept-params ] ) ) *( OWS "," [ | Accept = [ ( "," / ( media-range [ accept-params ] ) ) *( OWS "," [ | |||
| OWS ( media-range [ accept-params ] ) ] ) ] | OWS ( media-range [ accept-params ] ) ] ) ] | |||
| Accept-Charset = *( "," OWS ) ( ( charset / "*" ) [ weight ] ) *( OWS | Accept-Charset = *( "," OWS ) ( ( charset / "*" ) [ weight ] ) *( OWS | |||
| "," [ OWS ( ( charset / "*" ) [ weight ] ) ] ) | "," [ OWS ( ( charset / "*" ) [ weight ] ) ] ) | |||
| Accept-Encoding = [ ( "," / ( codings [ weight ] ) ) *( OWS "," [ OWS | Accept-Encoding = [ ( "," / ( codings [ weight ] ) ) *( OWS "," [ OWS | |||
| ( codings [ weight ] ) ] ) ] | ( codings [ weight ] ) ] ) ] | |||
| Accept-Language = *( "," OWS ) ( language-range [ weight ] ) *( OWS | Accept-Language = *( "," OWS ) ( language-range [ weight ] ) *( OWS | |||
| "," [ OWS ( language-range [ weight ] ) ] ) | "," [ OWS ( language-range [ weight ] ) ] ) | |||
| Accept-Ranges = acceptable-ranges | Accept-Ranges = acceptable-ranges | |||
| Allow = [ ( "," / method ) *( OWS "," [ OWS method ] ) ] | Allow = [ ( "," / method ) *( OWS "," [ OWS method ] ) ] | |||
| Authentication-Info = [ ( "," / auth-param ) *( OWS "," [ OWS | ||||
| auth-param ] ) ] | ||||
| Authorization = credentials | Authorization = credentials | |||
| BWS = OWS | BWS = OWS | |||
| Content-Encoding = *( "," OWS ) content-coding *( OWS "," [ OWS | Content-Encoding = *( "," OWS ) content-coding *( OWS "," [ OWS | |||
| content-coding ] ) | content-coding ] ) | |||
| Content-Language = *( "," OWS ) language-tag *( OWS "," [ OWS | Content-Language = *( "," OWS ) language-tag *( OWS "," [ OWS | |||
| language-tag ] ) | language-tag ] ) | |||
| Content-Length = 1*DIGIT | Content-Length = 1*DIGIT | |||
| Content-Location = absolute-URI / partial-URI | Content-Location = absolute-URI / partial-URI | |||
| skipping to change at page 166, line 4 ¶ | skipping to change at page 169, line 7 ¶ | |||
| Host = uri-host [ ":" port ] | Host = uri-host [ ":" port ] | |||
| IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT | IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT | |||
| If-Match = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS | If-Match = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS | |||
| entity-tag ] ) ) | entity-tag ] ) ) | |||
| If-Modified-Since = HTTP-date | If-Modified-Since = HTTP-date | |||
| If-None-Match = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS | If-None-Match = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS | |||
| entity-tag ] ) ) | entity-tag ] ) ) | |||
| If-Range = entity-tag / HTTP-date | If-Range = entity-tag / HTTP-date | |||
| If-Unmodified-Since = HTTP-date | If-Unmodified-Since = HTTP-date | |||
| Last-Modified = HTTP-date | Last-Modified = HTTP-date | |||
| Location = URI-reference | Location = URI-reference | |||
| Max-Forwards = 1*DIGIT | Max-Forwards = 1*DIGIT | |||
| OWS = *( SP / HTAB ) | OWS = *( SP / HTAB ) | |||
| Proxy-Authenticate = *( "," OWS ) challenge *( OWS "," [ OWS | Proxy-Authenticate = *( "," OWS ) challenge *( OWS "," [ OWS | |||
| challenge ] ) | challenge ] ) | |||
| Proxy-Authentication-Info = [ ( "," / auth-param ) *( OWS "," [ OWS | ||||
| auth-param ] ) ] | ||||
| Proxy-Authorization = credentials | Proxy-Authorization = credentials | |||
| RWS = 1*( SP / HTAB ) | RWS = 1*( SP / HTAB ) | |||
| Range = byte-ranges-specifier / other-ranges-specifier | Range = byte-ranges-specifier / other-ranges-specifier | |||
| Referer = absolute-URI / partial-URI | Referer = absolute-URI / partial-URI | |||
| Retry-After = HTTP-date / delay-seconds | Retry-After = HTTP-date / delay-seconds | |||
| Server = product *( RWS ( product / comment ) ) | Server = product *( RWS ( product / comment ) ) | |||
| Trailer = *( "," OWS ) field-name *( OWS "," [ OWS field-name ] ) | Trailer = *( "," OWS ) field-name *( OWS "," [ OWS field-name ] ) | |||
| skipping to change at page 168, line 5 ¶ | skipping to change at page 171, line 10 ¶ | |||
| entity-tag = [ weak ] opaque-tag | entity-tag = [ weak ] opaque-tag | |||
| etagc = "!" / %x23-7E ; '#'-'~' | etagc = "!" / %x23-7E ; '#'-'~' | |||
| / obs-text | / obs-text | |||
| field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] | field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] | |||
| field-name = token | field-name = token | |||
| field-value = *( field-content / obs-fold ) | field-value = *( field-content / obs-fold ) | |||
| field-vchar = VCHAR / obs-text | field-vchar = VCHAR / obs-text | |||
| first-byte-pos = 1*DIGIT | first-byte-pos = 1*DIGIT | |||
| fragment = <fragment, see [RFC3986], Section 3.5> | ||||
| hour = 2DIGIT | hour = 2DIGIT | |||
| http-URI = "http://" authority path-abempty [ "?" query ] [ "#" | http-URI = "http://" authority path-abempty [ "?" query ] | |||
| fragment ] | https-URI = "https://" authority path-abempty [ "?" query ] | |||
| https-URI = "https://" authority path-abempty [ "?" query ] [ "#" | ||||
| fragment ] | ||||
| language-range = <language-range, see [RFC4647], Section 2.1> | language-range = <language-range, see [RFC4647], Section 2.1> | |||
| language-tag = <Language-Tag, see [RFC5646], Section 2.1> | language-tag = <Language-Tag, see [RFC5646], Section 2.1> | |||
| last-byte-pos = 1*DIGIT | last-byte-pos = 1*DIGIT | |||
| mailbox = <mailbox, see [RFC5322], Section 3.4> | mailbox = <mailbox, see [RFC5322], Section 3.4> | |||
| media-range = ( "*/*" / ( type "/*" ) / ( type "/" subtype ) ) *( OWS | media-range = ( "*/*" / ( type "/*" ) / ( type "/" subtype ) ) *( OWS | |||
| ";" OWS parameter ) | ";" OWS parameter ) | |||
| media-type = type "/" subtype *( OWS ";" OWS parameter ) | media-type = type "/" subtype *( OWS ";" OWS parameter ) | |||
| method = token | method = token | |||
| skipping to change at page 169, line 4 ¶ | skipping to change at page 172, line 5 ¶ | |||
| other-range-set = 1*VCHAR | other-range-set = 1*VCHAR | |||
| other-range-unit = token | other-range-unit = token | |||
| other-ranges-specifier = other-range-unit "=" other-range-set | other-ranges-specifier = other-range-unit "=" other-range-set | |||
| parameter = token "=" ( token / quoted-string ) | parameter = token "=" ( token / quoted-string ) | |||
| partial-URI = relative-part [ "?" query ] | partial-URI = relative-part [ "?" query ] | |||
| path-abempty = <path-abempty, see [RFC3986], Section 3.3> | path-abempty = <path-abempty, see [RFC3986], Section 3.3> | |||
| port = <port, see [RFC3986], Section 3.2.3> | port = <port, see [RFC3986], Section 3.2.3> | |||
| product = token [ "/" product-version ] | product = token [ "/" product-version ] | |||
| product-version = token | product-version = token | |||
| protocol-name = <protocol-name, see [Messaging], Section 9.7> | protocol-name = <protocol-name, see [Messaging], Section 9.8> | |||
| protocol-version = <protocol-version, see [Messaging], Section 9.7> | protocol-version = <protocol-version, see [Messaging], Section 9.8> | |||
| pseudonym = token | pseudonym = token | |||
| qdtext = HTAB / SP / "!" / %x23-5B ; '#'-'[' | qdtext = HTAB / SP / "!" / %x23-5B ; '#'-'[' | |||
| / %x5D-7E ; ']'-'~' | / %x5D-7E ; ']'-'~' | |||
| / obs-text | / obs-text | |||
| query = <query, see [RFC3986], Section 3.4> | query = <query, see [RFC3986], Section 3.4> | |||
| quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) | quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) | |||
| quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE | quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE | |||
| qvalue = ( "0" [ "." *3DIGIT ] ) / ( "1" [ "." *3"0" ] ) | qvalue = ( "0" [ "." *3DIGIT ] ) / ( "1" [ "." *3"0" ] ) | |||
| skipping to change at page 170, line 5 ¶ | skipping to change at page 173, line 5 ¶ | |||
| year = 4DIGIT | year = 4DIGIT | |||
| Appendix B. Changes from RFC 7230 | Appendix B. Changes from RFC 7230 | |||
| Most of the sections introducing HTTP's design goals, history, | Most of the sections introducing HTTP's design goals, history, | |||
| architecture, conformance criteria, protocol versioning, URIs, | architecture, conformance criteria, protocol versioning, URIs, | |||
| message routing, and header field values have been moved here | message routing, and header field values have been moved here | |||
| (without substantive change). | (without substantive change). | |||
| Furthermore: | ||||
| Add status code 422 (previously defined in Section 11.2 of [RFC4918]) | ||||
| because of it's general applicability. (Section 9.5.20) | ||||
| Appendix C. Changes from RFC 7231 | Appendix C. Changes from RFC 7231 | |||
| None yet. | None yet. | |||
| Appendix D. Changes from RFC 7232 | Appendix D. Changes from RFC 7232 | |||
| None yet. | None yet. | |||
| Appendix E. Changes from RFC 7233 | Appendix E. Changes from RFC 7233 | |||
| None yet. | None yet. | |||
| Appendix F. Changes from RFC 7235 | Appendix F. Changes from RFC 7235 | |||
| None yet. | None yet. | |||
| Appendix G. Change Log | Appendix G. Changes from RFC 7615 | |||
| None yet. | ||||
| Appendix H. Change Log | ||||
| This section is to be removed before publishing as an RFC. | This section is to be removed before publishing as an RFC. | |||
| G.1. Between RFC723x and draft 00 | H.1. Between RFC723x and draft 00 | |||
| The changes were purely editorial: | The changes were purely editorial: | |||
| o Change boilerplate and abstract to indicate the "draft" status, | o Change boilerplate and abstract to indicate the "draft" status, | |||
| and update references to ancestor specifications. | and update references to ancestor specifications. | |||
| o Remove version "1.1" from document title, indicating that this | o Remove version "1.1" from document title, indicating that this | |||
| specification applies to all HTTP versions. | specification applies to all HTTP versions. | |||
| o Adjust historical notes. | o Adjust historical notes. | |||
| o Update links to sibling specifications. | o Update links to sibling specifications. | |||
| o Replace sections listing changes from RFC 2616 by new empty | o Replace sections listing changes from RFC 2616 by new empty | |||
| sections referring to RFC 723x. | sections referring to RFC 723x. | |||
| o Remove acknowledgements specific to RFC 723x. | o Remove acknowledgements specific to RFC 723x. | |||
| o Move "Acknowledgements" to the very end and make them unnumbered. | o Move "Acknowledgements" to the very end and make them unnumbered. | |||
| G.2. Since draft-ietf-httpbis-semantics-00 | H.2. Since draft-ietf-httpbis-semantics-00 | |||
| The changes in this draft are editorial, with respect to HTTP as a | The changes in this draft are editorial, with respect to HTTP as a | |||
| whole, to merge core HTTP semantics into this document: | whole, to merge core HTTP semantics into this document: | |||
| o Merged introduction, architecture, conformance, and ABNF | o Merged introduction, architecture, conformance, and ABNF | |||
| extensions from RFC 7230 (Messaging). | extensions from RFC 7230 (Messaging). | |||
| o Rearranged architecture to extract conformance, http(s) schemes, | o Rearranged architecture to extract conformance, http(s) schemes, | |||
| and protocol versioning into a separate major section. | and protocol versioning into a separate major section. | |||
| skipping to change at page 171, line 22 ¶ | skipping to change at page 174, line 32 ¶ | |||
| o Merged entire content of RFC 7233 (Range Requests). | o Merged entire content of RFC 7233 (Range Requests). | |||
| o Merged entire content of RFC 7235 (Auth Framework). | o Merged entire content of RFC 7235 (Auth Framework). | |||
| o Moved all extensibility tips, registration procedures, and | o Moved all extensibility tips, registration procedures, and | |||
| registry tables from the IANA considerations to normative | registry tables from the IANA considerations to normative | |||
| sections, reducing the IANA considerations to just instructions | sections, reducing the IANA considerations to just instructions | |||
| that will be removed prior to publication as an RFC. | that will be removed prior to publication as an RFC. | |||
| G.3. Since draft-ietf-httpbis-semantics-01 | H.3. Since draft-ietf-httpbis-semantics-01 | |||
| o Improve [Welch] citation (<https://github.com/httpwg/http-core/ | o Improve [Welch] citation (<https://github.com/httpwg/http-core/ | |||
| issues/63>) | issues/63>) | |||
| o Remove HTTP/1.1-ism about Range Requests | o Remove HTTP/1.1-ism about Range Requests | |||
| (<https://github.com/httpwg/http-core/issues/71>) | (<https://github.com/httpwg/http-core/issues/71>) | |||
| o Cite RFC 8126 instead of RFC 5226 (<https://github.com/httpwg/ | o Cite RFC 8126 instead of RFC 5226 (<https://github.com/httpwg/ | |||
| http-core/issues/75>) | http-core/issues/75>) | |||
| skipping to change at page 172, line 42 ¶ | skipping to change at page 176, line 5 ¶ | |||
| o In Section 11, fixed an example that had trailing whitespace where | o In Section 11, fixed an example that had trailing whitespace where | |||
| it shouldn't (<https://github.com/httpwg/http-core/issues/104>, | it shouldn't (<https://github.com/httpwg/http-core/issues/104>, | |||
| <https://www.rfc-editor.org/errata/eid4169>) | <https://www.rfc-editor.org/errata/eid4169>) | |||
| o In Section 9.3.7, remove words that were potentially misleading | o In Section 9.3.7, remove words that were potentially misleading | |||
| with respect to the relation to the requested ranges | with respect to the relation to the requested ranges | |||
| (<https://github.com/httpwg/http-core/issues/102>, | (<https://github.com/httpwg/http-core/issues/102>, | |||
| <https://www.rfc-editor.org/errata/eid4358>) | <https://www.rfc-editor.org/errata/eid4358>) | |||
| H.4. Since draft-ietf-httpbis-semantics-02 | ||||
| o Included (Proxy-)Auth-Info header field definition from RFC 7615 | ||||
| (<https://github.com/httpwg/http-core/issues/9>) | ||||
| o In Section 7.3.3, clarify POST caching | ||||
| (<https://github.com/httpwg/http-core/issues/17>) | ||||
| o Add Section 9.5.19 to reserve the 418 status code | ||||
| (<https://github.com/httpwg/http-core/issues/43>) | ||||
| o In Section 2.1 and Section 8.1.1, clarified when a response can be | ||||
| sent (<https://github.com/httpwg/http-core/issues/82>) | ||||
| o In Section 6.1.1.1, explain the difference between the "token" | ||||
| production, the RFC 2978 ABNF for charset names, and the actual | ||||
| registration practice (<https://github.com/httpwg/http-core/ | ||||
| issues/100>, <https://www.rfc-editor.org/errata/eid4689>) | ||||
| o In Section 2.5, removed the fragment component in the URI scheme | ||||
| definitions as per Section 4.3 of [RFC3986], furthermore moved | ||||
| fragment discussion into a separate section | ||||
| (<https://github.com/httpwg/http-core/issues/103>, | ||||
| <https://www.rfc-editor.org/errata/eid4251>, <https://www.rfc- | ||||
| editor.org/errata/eid4252>) | ||||
| o In Section 3.5, add language about minor HTTP version number | ||||
| defaulting (<https://github.com/httpwg/http-core/issues/115>) | ||||
| o Added Section 9.5.20 for status code 422, previously defined in | ||||
| Section 11.2 of [RFC4918] (<https://github.com/httpwg/http-core/ | ||||
| issues/123>) | ||||
| o In Section 9.5.17, fixed prose about byte range comparison | ||||
| (<https://github.com/httpwg/http-core/issues/135>, | ||||
| <https://www.rfc-editor.org/errata/eid5474>) | ||||
| o In Section 2.1, explain that request/response correlation is | ||||
| version specific (<https://github.com/httpwg/http-core/ | ||||
| issues/145>) | ||||
| Index | Index | |||
| 1 | 1 | |||
| 100 Continue (status code) 106 | 100 Continue (status code) 107 | |||
| 100-continue (expect value) 74 | 100-continue (expect value) 74 | |||
| 101 Switching Protocols (status code) 106 | 101 Switching Protocols (status code) 107 | |||
| 1xx Informational (status code class) 106 | 1xx Informational (status code class) 107 | |||
| 2 | 2 | |||
| 200 OK (status code) 107 | 200 OK (status code) 108 | |||
| 201 Created (status code) 108 | 201 Created (status code) 109 | |||
| 202 Accepted (status code) 108 | 202 Accepted (status code) 109 | |||
| 203 Non-Authoritative Information (status code) 108 | 203 Non-Authoritative Information (status code) 109 | |||
| 204 No Content (status code) 109 | 204 No Content (status code) 110 | |||
| 205 Reset Content (status code) 109 | 205 Reset Content (status code) 110 | |||
| 206 Partial Content (status code) 110 | 206 Partial Content (status code) 111 | |||
| 2xx Successful (status code class) 107 | 2xx Successful (status code class) 108 | |||
| 3 | 3 | |||
| 300 Multiple Choices (status code) 114 | 300 Multiple Choices (status code) 115 | |||
| 301 Moved Permanently (status code) 115 | 301 Moved Permanently (status code) 116 | |||
| 302 Found (status code) 116 | 302 Found (status code) 117 | |||
| 303 See Other (status code) 116 | 303 See Other (status code) 117 | |||
| 304 Not Modified (status code) 117 | 304 Not Modified (status code) 118 | |||
| 305 Use Proxy (status code) 117 | 305 Use Proxy (status code) 118 | |||
| 306 (Unused) (status code) 118 | 306 (Unused) (status code) 119 | |||
| 307 Temporary Redirect (status code) 118 | 307 Temporary Redirect (status code) 119 | |||
| 3xx Redirection (status code class) 113 | 3xx Redirection (status code class) 114 | |||
| 4 | 4 | |||
| 400 Bad Request (status code) 118 | 400 Bad Request (status code) 119 | |||
| 401 Unauthorized (status code) 118 | 401 Unauthorized (status code) 119 | |||
| 402 Payment Required (status code) 119 | 402 Payment Required (status code) 120 | |||
| 403 Forbidden (status code) 119 | 403 Forbidden (status code) 120 | |||
| 404 Not Found (status code) 119 | 404 Not Found (status code) 120 | |||
| 405 Method Not Allowed (status code) 120 | 405 Method Not Allowed (status code) 121 | |||
| 406 Not Acceptable (status code) 120 | 406 Not Acceptable (status code) 121 | |||
| 407 Proxy Authentication Required (status code) 120 | 407 Proxy Authentication Required (status code) 121 | |||
| 408 Request Timeout (status code) 120 | 408 Request Timeout (status code) 121 | |||
| 409 Conflict (status code) 121 | 409 Conflict (status code) 122 | |||
| 410 Gone (status code) 121 | 410 Gone (status code) 122 | |||
| 411 Length Required (status code) 121 | 411 Length Required (status code) 122 | |||
| 412 Precondition Failed (status code) 122 | 412 Precondition Failed (status code) 123 | |||
| 413 Payload Too Large (status code) 122 | 413 Payload Too Large (status code) 123 | |||
| 414 URI Too Long (status code) 122 | 414 URI Too Long (status code) 123 | |||
| 415 Unsupported Media Type (status code) 122 | 415 Unsupported Media Type (status code) 123 | |||
| 416 Range Not Satisfiable (status code) 123 | 416 Range Not Satisfiable (status code) 124 | |||
| 417 Expectation Failed (status code) 123 | 417 Expectation Failed (status code) 124 | |||
| 426 Upgrade Required (status code) 123 | 418 (Unused) (status code) 124 | |||
| 4xx Client Error (status code class) 118 | 422 Unprocessable Entity (status code) 125 | |||
| 426 Upgrade Required (status code) 125 | ||||
| 4xx Client Error (status code class) 119 | ||||
| 5 | 5 | |||
| 500 Internal Server Error (status code) 124 | 500 Internal Server Error (status code) 126 | |||
| 501 Not Implemented (status code) 124 | 501 Not Implemented (status code) 126 | |||
| 502 Bad Gateway (status code) 124 | 502 Bad Gateway (status code) 126 | |||
| 503 Service Unavailable (status code) 125 | 503 Service Unavailable (status code) 126 | |||
| 504 Gateway Timeout (status code) 125 | 504 Gateway Timeout (status code) 126 | |||
| 505 HTTP Version Not Supported (status code) 125 | 505 HTTP Version Not Supported (status code) 126 | |||
| 5xx Server Error (status code class) 124 | 5xx Server Error (status code class) 125 | |||
| A | A | |||
| Accept header field 88 | Accept header field 89 | |||
| Accept-Charset header field 90 | Accept-Charset header field 91 | |||
| Accept-Encoding header field 91 | Accept-Encoding header field 92 | |||
| Accept-Language header field 93 | Accept-Language header field 94 | |||
| Accept-Ranges header field 145 | Accept-Ranges header field 147 | |||
| Allow header field 145 | Allow header field 148 | |||
| Authorization header field 97 | Authentication-Info header field 146 | |||
| accelerator 12 | Authorization header field 98 | |||
| authoritative response 148 | accelerator 13 | |||
| authoritative response 150 | ||||
| B | B | |||
| browser 10 | browser 10 | |||
| C | C | |||
| CONNECT method 69 | CONNECT method 70 | |||
| Canonical Root URI 96 | Canonical Root URI 97 | |||
| Content-Encoding header field 46 | Content-Encoding header field 47 | |||
| Content-Language header field 47 | Content-Language header field 48 | |||
| Content-Length header field 48 | Content-Length header field 49 | |||
| Content-Location header field 49 | Content-Location header field 50 | |||
| Content-Range header field 53 | Content-Range header field 54 | |||
| Content-Type header field 45 | Content-Type header field 46 | |||
| cache 13 | cache 14 | |||
| cacheable 14, 62 | cacheable 14, 63 | |||
| captive portal 13 | captive portal 14 | |||
| client 10 | client 10 | |||
| compress (Coding Format) 40 | compress (Coding Format) 41 | |||
| compress (content coding) 40 | compress (content coding) 40 | |||
| conditional request 76 | conditional request 77 | |||
| connection 10 | connection 10 | |||
| content coding 40 | content coding 40 | |||
| content negotiation 8 | content negotiation 8 | |||
| D | D | |||
| DELETE method 68 | DELETE method 68 | |||
| Date header field 130 | Date header field 131 | |||
| Delimiters 27 | Delimiters 28 | |||
| deflate (Coding Format) 40 | deflate (Coding Format) 41 | |||
| deflate (content coding) 40 | deflate (content coding) 40 | |||
| downstream 12 | downstream 12 | |||
| E | E | |||
| ETag header field 139 | ETag header field 140 | |||
| Expect header field 74 | Expect header field 74 | |||
| effective request URI 31 | effective request URI 32 | |||
| F | F | |||
| From header field 100 | Fragment Identifiers 18 | |||
| From header field 101 | ||||
| G | G | |||
| GET method 63 | GET method 64 | |||
| Grammar | Grammar | |||
| absolute-path 15 | absolute-path 15 | |||
| absolute-URI 15 | absolute-URI 15 | |||
| Accept 88 | Accept 89 | |||
| Accept-Charset 91 | Accept-Charset 92 | |||
| Accept-Encoding 91 | Accept-Encoding 92 | |||
| accept-ext 88 | accept-ext 89 | |||
| Accept-Language 93 | Accept-Language 94 | |||
| accept-params 88 | accept-params 89 | |||
| Accept-Ranges 145 | Accept-Ranges 147 | |||
| acceptable-ranges 145 | acceptable-ranges 147 | |||
| Allow 145 | Allow 148 | |||
| ALPHA 9 | ALPHA 9 | |||
| asctime-date 130 | asctime-date 131 | |||
| auth-param 95 | auth-param 96 | |||
| auth-scheme 95 | auth-scheme 96 | |||
| Authentication-Info 146 | ||||
| authority 15 | authority 15 | |||
| Authorization 97 | Authorization 98 | |||
| BWS 29 | BWS 30 | |||
| byte-content-range 53 | byte-content-range 54 | |||
| byte-range 53 | byte-range 54 | |||
| byte-range-resp 53 | byte-range-resp 54 | |||
| byte-range-set 43 | byte-range-set 44 | |||
| byte-range-spec 43 | byte-range-spec 44 | |||
| byte-ranges-specifier 43 | byte-ranges-specifier 44 | |||
| bytes-unit 42-43 | bytes-unit 43 | |||
| challenge 95 | challenge 96 | |||
| charset 38 | charset 39 | |||
| codings 91 | codings 92 | |||
| comment 28 | comment 29 | |||
| complete-length 53 | complete-length 54 | |||
| content-coding 40 | content-coding 40 | |||
| Content-Encoding 46 | Content-Encoding 47 | |||
| Content-Language 47 | Content-Language 48 | |||
| Content-Length 48 | Content-Length 49 | |||
| Content-Location 49 | Content-Location 50 | |||
| Content-Range 53 | Content-Range 54 | |||
| Content-Type 45 | Content-Type 46 | |||
| CR 9 | CR 9 | |||
| credentials 96 | credentials 97 | |||
| CRLF 9 | CRLF 9 | |||
| ctext 28 | ctext 29 | |||
| CTL 9 | CTL 9 | |||
| Date 130 | Date 131 | |||
| date1 129 | date1 130 | |||
| day 129 | day 130 | |||
| day-name 129 | day-name 130 | |||
| day-name-l 129 | day-name-l 130 | |||
| delay-seconds 133 | delay-seconds 134 | |||
| DIGIT 9 | DIGIT 9 | |||
| DQUOTE 9 | DQUOTE 9 | |||
| entity-tag 139 | entity-tag 140 | |||
| ETag 139 | ETag 140 | |||
| etagc 139 | etagc 140 | |||
| Expect 74 | Expect 74 | |||
| field-content 26 | field-content 27 | |||
| field-name 22, 30 | field-name 23, 31 | |||
| field-value 26 | field-value 27 | |||
| field-vchar 26 | field-vchar 27 | |||
| first-byte-pos 43 | first-byte-pos 44 | |||
| fragment 15 | From 101 | |||
| From 100 | GMT 130 | |||
| GMT 129 | ||||
| HEXDIG 9 | HEXDIG 9 | |||
| Host 32 | Host 33 | |||
| hour 129 | hour 130 | |||
| HTAB 9 | HTAB 9 | |||
| HTTP-date 127 | HTTP-date 129 | |||
| http-URI 16 | http-URI 16 | |||
| https-URI 17 | https-URI 18 | |||
| If-Match 80 | If-Match 81 | |||
| If-Modified-Since 82 | If-Modified-Since 83 | |||
| If-None-Match 81 | If-None-Match 82 | |||
| If-Range 85 | If-Range 86 | |||
| If-Unmodified-Since 83 | If-Unmodified-Since 84 | |||
| IMF-fixdate 129 | IMF-fixdate 130 | |||
| language-range 93 | language-range 94 | |||
| language-tag 42 | language-tag 42 | |||
| last-byte-pos 43 | last-byte-pos 44 | |||
| Last-Modified 137 | Last-Modified 138 | |||
| LF 9 | LF 9 | |||
| Location 131 | Location 132 | |||
| Max-Forwards 76 | Max-Forwards 77 | |||
| media-range 88 | media-range 89 | |||
| media-type 38 | media-type 38 | |||
| method 59 | method 60 | |||
| minute 129 | minute 130 | |||
| month 129 | month 130 | |||
| obs-date 129 | obs-date 130 | |||
| obs-text 28 | obs-text 29 | |||
| OCTET 9 | OCTET 9 | |||
| opaque-tag 139 | opaque-tag 140 | |||
| other-content-range 53 | other-content-range 54 | |||
| other-range-resp 53 | other-range-resp 54 | |||
| other-range-unit 42, 44 | other-range-unit 43, 45 | |||
| OWS 29 | OWS 30 | |||
| parameter 38 | parameter 38 | |||
| partial-URI 15 | partial-URI 15 | |||
| port 15 | port 15 | |||
| product 102 | product 103 | |||
| product-version 102 | product-version 103 | |||
| protocol-name 34 | protocol-name 35 | |||
| protocol-version 34 | protocol-version 35 | |||
| Proxy-Authenticate 144 | Proxy-Authenticate 145 | |||
| Proxy-Authorization 97 | Proxy-Authentication-Info 147 | |||
| pseudonym 34 | Proxy-Authorization 98 | |||
| qdtext 28 | pseudonym 35 | |||
| qdtext 29 | ||||
| query 15 | query 15 | |||
| quoted-pair 28 | quoted-pair 29 | |||
| quoted-string 28 | quoted-string 29 | |||
| qvalue 88 | qvalue 89 | |||
| Range 86 | Range 87 | |||
| range-unit 42 | range-unit 43 | |||
| ranges-specifier 43 | ranges-specifier 44 | |||
| received-by 34 | received-by 35 | |||
| received-protocol 34 | received-protocol 35 | |||
| Referer 101 | Referer 102 | |||
| Retry-After 133 | Retry-After 134 | |||
| rfc850-date 130 | rfc850-date 131 | |||
| RWS 29 | RWS 30 | |||
| second 129 | second 130 | |||
| segment 15 | segment 15 | |||
| Server 146 | Server 148 | |||
| SP 9 | SP 9 | |||
| subtype 38 | subtype 38 | |||
| suffix-byte-range-spec 43 | suffix-byte-range-spec 44 | |||
| suffix-length 43 | suffix-length 44 | |||
| tchar 27 | tchar 28 | |||
| time-of-day 129 | time-of-day 130 | |||
| token 27 | token 28 | |||
| token68 95 | token68 96 | |||
| Trailer 30 | Trailer 31 | |||
| type 38 | type 38 | |||
| unsatisfied-range 53 | unsatisfied-range 54 | |||
| uri-host 15 | uri-host 15 | |||
| URI-reference 15 | URI-reference 15 | |||
| User-Agent 102 | User-Agent 103 | |||
| Vary 133 | Vary 134 | |||
| VCHAR 9 | VCHAR 9 | |||
| Via 34 | Via 35 | |||
| weak 139 | weak 140 | |||
| weight 88 | weight 89 | |||
| WWW-Authenticate 143 | WWW-Authenticate 144 | |||
| year 129 | year 130 | |||
| gateway 12 | gateway 13 | |||
| gzip (Coding Format) 41 | gzip (Coding Format) 41 | |||
| gzip (content coding) 40 | gzip (content coding) 40 | |||
| H | H | |||
| HEAD method 63 | HEAD method 64 | |||
| Host header field 32 | Host header field 33 | |||
| http URI scheme 16 | http URI scheme 16 | |||
| https URI scheme 17 | https URI scheme 18 | |||
| I | I | |||
| If-Match header field 80 | If-Match header field 81 | |||
| If-Modified-Since header field 82 | If-Modified-Since header field 83 | |||
| If-None-Match header field 81 | If-None-Match header field 82 | |||
| If-Range header field 85 | If-Range header field 85 | |||
| If-Unmodified-Since header field 83 | If-Unmodified-Since header field 84 | |||
| idempotent 62 | idempotent 63 | |||
| inbound 12 | inbound 12 | |||
| interception proxy 13 | interception proxy 14 | |||
| intermediary 11 | intermediary 12 | |||
| L | L | |||
| Last-Modified header field 137 | Last-Modified header field 138 | |||
| Location header field 131 | Location header field 132 | |||
| M | M | |||
| Max-Forwards header field 76 | Max-Forwards header field 77 | |||
| Media Type | Media Type | |||
| multipart/byteranges 55 | multipart/byteranges 55 | |||
| multipart/x-byteranges 55 | multipart/x-byteranges 56 | |||
| message 10 | message 10 | |||
| metadata 134 | metadata 135 | |||
| multipart/byteranges Media Type 55 | multipart/byteranges Media Type 55 | |||
| multipart/x-byteranges Media Type 55 | multipart/x-byteranges Media Type 56 | |||
| N | N | |||
| non-transforming proxy 35 | non-transforming proxy 36 | |||
| O | O | |||
| OPTIONS method 70 | OPTIONS method 71 | |||
| origin server 10 | origin server 10 | |||
| outbound 12 | outbound 12 | |||
| P | P | |||
| POST method 64 | POST method 65 | |||
| PUT method 65 | PUT method 66 | |||
| Protection Space 96 | Protection Space 97 | |||
| Proxy-Authenticate header field 144 | Proxy-Authenticate header field 145 | |||
| Proxy-Authorization header field 97 | Proxy-Authentication-Info header field 147 | |||
| payload 51 | Proxy-Authorization header field 98 | |||
| phishing 148 | payload 52 | |||
| proxy 12 | phishing 150 | |||
| proxy 13 | ||||
| R | R | |||
| Range header field 86 | Range header field 87 | |||
| Realm 96 | Realm 97 | |||
| Referer header field 101 | Referer header field 102 | |||
| Retry-After header field 132 | Retry-After header field 133 | |||
| recipient 10 | recipient 10 | |||
| representation 37 | representation 37 | |||
| request 10 | request 10 | |||
| resource 14 | resource 15 | |||
| response 10 | response 10 | |||
| reverse proxy 12 | reverse proxy 13 | |||
| S | S | |||
| Server header field 146 | Server header field 148 | |||
| Status Codes Classes | Status Codes Classes | |||
| 1xx Informational 106 | 1xx Informational 107 | |||
| 2xx Successful 107 | 2xx Successful 108 | |||
| 3xx Redirection 113 | 3xx Redirection 114 | |||
| 4xx Client Error 118 | 4xx Client Error 119 | |||
| 5xx Server Error 124 | 5xx Server Error 125 | |||
| safe 61 | safe 62 | |||
| selected representation 37, 77, 134 | selected representation 37, 78, 135 | |||
| sender 10 | sender 10 | |||
| server 10 | server 10 | |||
| spider 10 | spider 10 | |||
| T | T | |||
| TRACE method 71 | TRACE method 72 | |||
| Trailer header field 30 | Trailer header field 31 | |||
| target URI 30 | target URI 31 | |||
| target resource 30 | target resource 31 | |||
| transforming proxy 35 | transforming proxy 36 | |||
| transparent proxy 13 | transparent proxy 14 | |||
| tunnel 13 | tunnel 13 | |||
| U | U | |||
| URI scheme | URI scheme | |||
| http 16 | http 16 | |||
| https 17 | https 18 | |||
| User-Agent header field 103 | ||||
| User-Agent header field 102 | ||||
| upstream 12 | upstream 12 | |||
| user agent 10 | user agent 10 | |||
| V | V | |||
| Vary header field 133 | Vary header field 134 | |||
| Via header field 34 | Via header field 34 | |||
| validator 134 | validator 135 | |||
| strong 135 | strong 136 | |||
| weak 135 | weak 136 | |||
| W | W | |||
| WWW-Authenticate header field 143 | WWW-Authenticate header field 144 | |||
| X | X | |||
| x-compress (content coding) 40 | x-compress (content coding) 40 | |||
| x-gzip (content coding) 40 | x-gzip (content coding) 40 | |||
| Acknowledgments | Acknowledgments | |||
| This edition of the HTTP specification builds on the many | This edition of the HTTP specification builds on the many | |||
| contributions that went into RFC 1945, RFC 2068, RFC 2145, and RFC | contributions that went into RFC 1945, RFC 2068, RFC 2145, and RFC | |||
| 2616, including substantial contributions made by the previous | 2616, including substantial contributions made by the previous | |||
| End of changes. 144 change blocks. | ||||
| 612 lines changed or deleted | 825 lines changed or added | |||
This html diff was produced by rfcdiff 1.46. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||