| draft-ietf-httpbis-semantics-14.txt | draft-ietf-httpbis-semantics-15.txt | |||
|---|---|---|---|---|
| HTTP Working Group R. Fielding, Ed. | HTTP Working Group R. Fielding, Ed. | |||
| Internet-Draft Adobe | Internet-Draft Adobe | |||
| Obsoletes: 2818, 7230, 7231, 7232, 7233, 7235, M. Nottingham, Ed. | Obsoletes: 2818, 7230, 7231, 7232, 7233, 7235, M. Nottingham, Ed. | |||
| 7538, 7615, 7694 (if approved) Fastly | 7538, 7615, 7694 (if approved) Fastly | |||
| Updates: 3864 (if approved) J. Reschke, Ed. | Updates: 3864 (if approved) J. Reschke, Ed. | |||
| Intended status: Standards Track greenbytes | Intended status: Standards Track greenbytes | |||
| Expires: July 17, 2021 January 13, 2021 | Expires: 1 October 2021 30 March 2021 | |||
| HTTP Semantics | HTTP Semantics | |||
| draft-ietf-httpbis-semantics-14 | draft-ietf-httpbis-semantics-15 | |||
| 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 describes the overall architecture of HTTP, | systems. This document describes the overall architecture of HTTP, | |||
| establishes common terminology, and defines aspects of the protocol | establishes common terminology, and defines aspects of the protocol | |||
| that are shared by all versions. In this definition are core | that are shared by all versions. In this definition are core | |||
| protocol elements, extensibility mechanisms, and the "http" and | protocol elements, extensibility mechanisms, and the "http" and | |||
| "https" Uniform Resource Identifier (URI) schemes. | "https" Uniform Resource Identifier (URI) schemes. | |||
| skipping to change at page 1, line 39 ¶ | skipping to change at page 1, line 39 ¶ | |||
| 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 C.15. | The changes in this draft are summarized in Appendix C.16. | |||
| 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 July 17, 2021. | This Internet-Draft will expire on 1 October 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| skipping to change at page 2, line 42 ¶ | skipping to change at page 2, line 42 ¶ | |||
| the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
| 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 . . . . . . . . . . . . . . . . . . . . . . . . 9 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 1.1. Purpose . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 1.1. Purpose . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 1.2. History and Evolution . . . . . . . . . . . . . . . . . . 10 | 1.2. History and Evolution . . . . . . . . . . . . . . . . . . 9 | |||
| 1.3. Core Semantics . . . . . . . . . . . . . . . . . . . . . 10 | 1.3. Core Semantics . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 1.4. Specifications Obsoleted by this Document . . . . . . . . 11 | 1.4. Specifications Obsoleted by this Document . . . . . . . . 11 | |||
| 2. Conformance . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 2. Conformance . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 2.1. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 12 | 2.1. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 2.2. Requirements Notation . . . . . . . . . . . . . . . . . . 12 | 2.2. Requirements Notation . . . . . . . . . . . . . . . . . . 12 | |||
| 2.3. Length Requirements . . . . . . . . . . . . . . . . . . . 13 | 2.3. Length Requirements . . . . . . . . . . . . . . . . . . . 13 | |||
| 2.4. Error Handling . . . . . . . . . . . . . . . . . . . . . 14 | 2.4. Error Handling . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 2.5. Protocol Version . . . . . . . . . . . . . . . . . . . . 14 | 2.5. Protocol Version . . . . . . . . . . . . . . . . . . . . 15 | |||
| 3. Terminology and Core Concepts . . . . . . . . . . . . . . . . 15 | 3. Terminology and Core Concepts . . . . . . . . . . . . . . . . 15 | |||
| 3.1. Resources . . . . . . . . . . . . . . . . . . . . . . . . 15 | 3.1. Resources . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 3.2. Representations . . . . . . . . . . . . . . . . . . . . . 16 | 3.2. Representations . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 3.3. Connections, Clients and Servers . . . . . . . . . . . . 16 | 3.3. Connections, Clients and Servers . . . . . . . . . . . . 17 | |||
| 3.4. Messages . . . . . . . . . . . . . . . . . . . . . . . . 17 | 3.4. Messages . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 3.5. User Agents . . . . . . . . . . . . . . . . . . . . . . . 17 | 3.5. User Agents . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 3.6. Origin Server . . . . . . . . . . . . . . . . . . . . . . 18 | 3.6. Origin Server . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 3.7. Intermediaries . . . . . . . . . . . . . . . . . . . . . 18 | 3.7. Intermediaries . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 3.8. Caches . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 3.8. Caches . . . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 3.9. Example Message Exchange . . . . . . . . . . . . . . . . 21 | 3.9. Example Message Exchange . . . . . . . . . . . . . . . . 22 | |||
| 4. Identifiers in HTTP . . . . . . . . . . . . . . . . . . . . . 22 | 4. Identifiers in HTTP . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 4.1. URI References . . . . . . . . . . . . . . . . . . . . . 22 | 4.1. URI References . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 4.2. HTTP-Related URI Schemes . . . . . . . . . . . . . . . . 23 | 4.2. HTTP-Related URI Schemes . . . . . . . . . . . . . . . . 23 | |||
| 4.2.1. http URI Scheme . . . . . . . . . . . . . . . . . . . 23 | 4.2.1. http URI Scheme . . . . . . . . . . . . . . . . . . . 24 | |||
| 4.2.2. https URI Scheme . . . . . . . . . . . . . . . . . . 24 | 4.2.2. https URI Scheme . . . . . . . . . . . . . . . . . . 25 | |||
| 4.2.3. http(s) Normalization and Comparison . . . . . . . . 25 | 4.2.3. http(s) Normalization and Comparison . . . . . . . . 25 | |||
| 4.2.4. Deprecation of userinfo in http(s) URIs . . . . . . . 25 | 4.2.4. Deprecation of userinfo in http(s) URIs . . . . . . . 26 | |||
| 4.2.5. http(s) References with Fragment Identifiers . . . . 26 | 4.2.5. http(s) References with Fragment Identifiers . . . . 27 | |||
| 4.3. Authoritative Access . . . . . . . . . . . . . . . . . . 26 | 4.3. Authoritative Access . . . . . . . . . . . . . . . . . . 27 | |||
| 4.3.1. URI Origin . . . . . . . . . . . . . . . . . . . . . 26 | 4.3.1. URI Origin . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 4.3.2. http origins . . . . . . . . . . . . . . . . . . . . 27 | 4.3.2. http origins . . . . . . . . . . . . . . . . . . . . 28 | |||
| 4.3.3. https origins . . . . . . . . . . . . . . . . . . . . 28 | 4.3.3. https origins . . . . . . . . . . . . . . . . . . . . 29 | |||
| 4.3.4. https certificate verification . . . . . . . . . . . 29 | 4.3.4. https certificate verification . . . . . . . . . . . 30 | |||
| 5. Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | 4.3.5. IP-ID reference identity . . . . . . . . . . . . . . 31 | |||
| 5.1. Field Names . . . . . . . . . . . . . . . . . . . . . . . 30 | 5. Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 5.2. Field Lines and Combined Field Value . . . . . . . . . . 31 | 5.1. Field Names . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 5.3. Field Order . . . . . . . . . . . . . . . . . . . . . . . 31 | 5.2. Field Lines and Combined Field Value . . . . . . . . . . 32 | |||
| 5.4. Field Limits . . . . . . . . . . . . . . . . . . . . . . 32 | 5.3. Field Order . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 5.5. Field Values . . . . . . . . . . . . . . . . . . . . . . 33 | 5.4. Field Limits . . . . . . . . . . . . . . . . . . . . . . 34 | |||
| 5.6. Common Rules for Defining Field Values . . . . . . . . . 35 | 5.5. Field Values . . . . . . . . . . . . . . . . . . . . . . 34 | |||
| 5.6.1. Lists (#rule ABNF Extension) . . . . . . . . . . . . 35 | 5.6. Common Rules for Defining Field Values . . . . . . . . . 36 | |||
| 5.6.2. Tokens . . . . . . . . . . . . . . . . . . . . . . . 36 | 5.6.1. Lists (#rule ABNF Extension) . . . . . . . . . . . . 36 | |||
| 5.6.3. Whitespace . . . . . . . . . . . . . . . . . . . . . 36 | 5.6.2. Tokens . . . . . . . . . . . . . . . . . . . . . . . 37 | |||
| 5.6.4. Quoted Strings . . . . . . . . . . . . . . . . . . . 37 | 5.6.3. Whitespace . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 5.6.5. Comments . . . . . . . . . . . . . . . . . . . . . . 38 | 5.6.4. Quoted Strings . . . . . . . . . . . . . . . . . . . 39 | |||
| 5.6.6. Parameters . . . . . . . . . . . . . . . . . . . . . 38 | 5.6.5. Comments . . . . . . . . . . . . . . . . . . . . . . 39 | |||
| 5.6.7. Date/Time Formats . . . . . . . . . . . . . . . . . . 38 | 5.6.6. Parameters . . . . . . . . . . . . . . . . . . . . . 39 | |||
| 6. Message Abstraction . . . . . . . . . . . . . . . . . . . . . 40 | 5.6.7. Date/Time Formats . . . . . . . . . . . . . . . . . . 40 | |||
| 6.1. Framing and Completeness . . . . . . . . . . . . . . . . 41 | 6. Message Abstraction . . . . . . . . . . . . . . . . . . . . . 42 | |||
| 6.2. Control Data . . . . . . . . . . . . . . . . . . . . . . 42 | 6.1. Framing and Completeness . . . . . . . . . . . . . . . . 43 | |||
| 6.3. Header Fields . . . . . . . . . . . . . . . . . . . . . . 43 | 6.2. Control Data . . . . . . . . . . . . . . . . . . . . . . 44 | |||
| 6.4. Content . . . . . . . . . . . . . . . . . . . . . . . . . 43 | 6.3. Header Fields . . . . . . . . . . . . . . . . . . . . . . 45 | |||
| 6.4.1. Content Semantics . . . . . . . . . . . . . . . . . . 44 | 6.4. Content . . . . . . . . . . . . . . . . . . . . . . . . . 45 | |||
| 6.4.2. Identifying Content . . . . . . . . . . . . . . . . . 45 | 6.4.1. Content Semantics . . . . . . . . . . . . . . . . . . 45 | |||
| 6.5. Trailer Fields . . . . . . . . . . . . . . . . . . . . . 46 | 6.4.2. Identifying Content . . . . . . . . . . . . . . . . . 46 | |||
| 6.5.1. Limitations on use of Trailers . . . . . . . . . . . 46 | 6.5. Trailer Fields . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 6.5.2. Processing Trailer Fields . . . . . . . . . . . . . . 47 | 6.5.1. Limitations on use of Trailers . . . . . . . . . . . 48 | |||
| 7. Routing HTTP Messages . . . . . . . . . . . . . . . . . . . . 48 | 6.5.2. Processing Trailer Fields . . . . . . . . . . . . . . 49 | |||
| 7.1. Determining the Target Resource . . . . . . . . . . . . . 48 | 7. Routing HTTP Messages . . . . . . . . . . . . . . . . . . . . 49 | |||
| 7.2. Host and :authority . . . . . . . . . . . . . . . . . . . 49 | 7.1. Determining the Target Resource . . . . . . . . . . . . . 49 | |||
| 7.3. Routing Inbound Requests . . . . . . . . . . . . . . . . 50 | 7.2. Host and :authority . . . . . . . . . . . . . . . . . . . 50 | |||
| 7.3.1. To a Cache . . . . . . . . . . . . . . . . . . . . . 50 | 7.3. Routing Inbound Requests . . . . . . . . . . . . . . . . 51 | |||
| 7.3.2. To a Proxy . . . . . . . . . . . . . . . . . . . . . 50 | 7.3.1. To a Cache . . . . . . . . . . . . . . . . . . . . . 51 | |||
| 7.3.3. To the Origin . . . . . . . . . . . . . . . . . . . . 50 | 7.3.2. To a Proxy . . . . . . . . . . . . . . . . . . . . . 51 | |||
| 7.4. Rejecting Misdirected Requests . . . . . . . . . . . . . 50 | 7.3.3. To the Origin . . . . . . . . . . . . . . . . . . . . 51 | |||
| 7.5. Response Correlation . . . . . . . . . . . . . . . . . . 51 | 7.4. Rejecting Misdirected Requests . . . . . . . . . . . . . 52 | |||
| 7.6. Message Forwarding . . . . . . . . . . . . . . . . . . . 51 | 7.5. Response Correlation . . . . . . . . . . . . . . . . . . 52 | |||
| 7.6.1. Connection . . . . . . . . . . . . . . . . . . . . . 51 | 7.6. Message Forwarding . . . . . . . . . . . . . . . . . . . 53 | |||
| 7.6.2. Max-Forwards . . . . . . . . . . . . . . . . . . . . 53 | 7.6.1. Connection . . . . . . . . . . . . . . . . . . . . . 53 | |||
| 7.6.3. Via . . . . . . . . . . . . . . . . . . . . . . . . . 54 | 7.6.2. Max-Forwards . . . . . . . . . . . . . . . . . . . . 55 | |||
| 7.7. Message Transformations . . . . . . . . . . . . . . . . . 55 | 7.6.3. Via . . . . . . . . . . . . . . . . . . . . . . . . . 56 | |||
| 7.8. Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . 56 | 7.7. Message Transformations . . . . . . . . . . . . . . . . . 57 | |||
| 8. Representation Data and Metadata . . . . . . . . . . . . . . 59 | 7.8. Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . 58 | |||
| 8.1. Representation Data . . . . . . . . . . . . . . . . . . . 59 | 8. Representation Data and Metadata . . . . . . . . . . . . . . 61 | |||
| 8.2. Representation Metadata . . . . . . . . . . . . . . . . . 59 | 8.1. Representation Data . . . . . . . . . . . . . . . . . . . 61 | |||
| 8.3. Content-Type . . . . . . . . . . . . . . . . . . . . . . 59 | 8.2. Representation Metadata . . . . . . . . . . . . . . . . . 61 | |||
| 8.3.1. Media Type . . . . . . . . . . . . . . . . . . . . . 60 | 8.3. Content-Type . . . . . . . . . . . . . . . . . . . . . . 61 | |||
| 8.3.2. Charset . . . . . . . . . . . . . . . . . . . . . . . 61 | 8.3.1. Media Type . . . . . . . . . . . . . . . . . . . . . 62 | |||
| 8.3.3. Canonicalization and Text Defaults . . . . . . . . . 61 | 8.3.2. Charset . . . . . . . . . . . . . . . . . . . . . . . 63 | |||
| 8.3.4. Multipart Types . . . . . . . . . . . . . . . . . . . 62 | 8.3.3. Multipart Types . . . . . . . . . . . . . . . . . . . 63 | |||
| 8.4. Content-Encoding . . . . . . . . . . . . . . . . . . . . 62 | 8.4. Content-Encoding . . . . . . . . . . . . . . . . . . . . 64 | |||
| 8.4.1. Content Codings . . . . . . . . . . . . . . . . . . . 63 | 8.4.1. Content Codings . . . . . . . . . . . . . . . . . . . 65 | |||
| 8.5. Content-Language . . . . . . . . . . . . . . . . . . . . 64 | 8.5. Content-Language . . . . . . . . . . . . . . . . . . . . 66 | |||
| 8.5.1. Language Tags . . . . . . . . . . . . . . . . . . . . 65 | 8.5.1. Language Tags . . . . . . . . . . . . . . . . . . . . 67 | |||
| 8.6. Content-Length . . . . . . . . . . . . . . . . . . . . . 66 | 8.6. Content-Length . . . . . . . . . . . . . . . . . . . . . 67 | |||
| 8.7. Content-Location . . . . . . . . . . . . . . . . . . . . 67 | 8.7. Content-Location . . . . . . . . . . . . . . . . . . . . 69 | |||
| 8.8. Validator Fields . . . . . . . . . . . . . . . . . . . . 69 | 8.8. Validator Fields . . . . . . . . . . . . . . . . . . . . 71 | |||
| 8.8.1. Weak versus Strong . . . . . . . . . . . . . . . . . 70 | 8.8.1. Weak versus Strong . . . . . . . . . . . . . . . . . 71 | |||
| 8.8.2. Last-Modified . . . . . . . . . . . . . . . . . . . . 71 | 8.8.2. Last-Modified . . . . . . . . . . . . . . . . . . . . 73 | |||
| 8.8.3. ETag . . . . . . . . . . . . . . . . . . . . . . . . 73 | 8.8.3. ETag . . . . . . . . . . . . . . . . . . . . . . . . 75 | |||
| 8.8.4. When to Use Entity-Tags and Last-Modified Dates . . . 77 | 8.8.4. When to Use Entity-Tags and Last-Modified Dates . . . 78 | |||
| 9. Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 | 9. Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 | |||
| 9.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 77 | 9.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 79 | |||
| 9.2. Common Method Properties . . . . . . . . . . . . . . . . 79 | 9.2. Common Method Properties . . . . . . . . . . . . . . . . 81 | |||
| 9.2.1. Safe Methods . . . . . . . . . . . . . . . . . . . . 80 | 9.2.1. Safe Methods . . . . . . . . . . . . . . . . . . . . 81 | |||
| 9.2.2. Idempotent Methods . . . . . . . . . . . . . . . . . 81 | 9.2.2. Idempotent Methods . . . . . . . . . . . . . . . . . 82 | |||
| 9.2.3. Methods and Caching . . . . . . . . . . . . . . . . . 82 | 9.2.3. Methods and Caching . . . . . . . . . . . . . . . . . 83 | |||
| 9.3. Method Definitions . . . . . . . . . . . . . . . . . . . 82 | 9.3. Method Definitions . . . . . . . . . . . . . . . . . . . 83 | |||
| 9.3.1. GET . . . . . . . . . . . . . . . . . . . . . . . . . 82 | 9.3.1. GET . . . . . . . . . . . . . . . . . . . . . . . . . 83 | |||
| 9.3.2. HEAD . . . . . . . . . . . . . . . . . . . . . . . . 83 | 9.3.2. HEAD . . . . . . . . . . . . . . . . . . . . . . . . 84 | |||
| 9.3.3. POST . . . . . . . . . . . . . . . . . . . . . . . . 84 | 9.3.3. POST . . . . . . . . . . . . . . . . . . . . . . . . 85 | |||
| 9.3.4. PUT . . . . . . . . . . . . . . . . . . . . . . . . . 85 | 9.3.4. PUT . . . . . . . . . . . . . . . . . . . . . . . . . 86 | |||
| 9.3.5. DELETE . . . . . . . . . . . . . . . . . . . . . . . 88 | 9.3.5. DELETE . . . . . . . . . . . . . . . . . . . . . . . 89 | |||
| 9.3.6. CONNECT . . . . . . . . . . . . . . . . . . . . . . . 89 | 9.3.6. CONNECT . . . . . . . . . . . . . . . . . . . . . . . 90 | |||
| 9.3.7. OPTIONS . . . . . . . . . . . . . . . . . . . . . . . 90 | 9.3.7. OPTIONS . . . . . . . . . . . . . . . . . . . . . . . 91 | |||
| 9.3.8. TRACE . . . . . . . . . . . . . . . . . . . . . . . . 91 | 9.3.8. TRACE . . . . . . . . . . . . . . . . . . . . . . . . 92 | |||
| 10. Message Context . . . . . . . . . . . . . . . . . . . . . . . 92 | 10. Message Context . . . . . . . . . . . . . . . . . . . . . . . 93 | |||
| 10.1. Request Context Fields . . . . . . . . . . . . . . . . . 92 | 10.1. Request Context Fields . . . . . . . . . . . . . . . . . 93 | |||
| 10.1.1. Expect . . . . . . . . . . . . . . . . . . . . . . . 92 | 10.1.1. Expect . . . . . . . . . . . . . . . . . . . . . . . 93 | |||
| 10.1.2. From . . . . . . . . . . . . . . . . . . . . . . . . 94 | 10.1.2. From . . . . . . . . . . . . . . . . . . . . . . . . 95 | |||
| 10.1.3. Referer . . . . . . . . . . . . . . . . . . . . . . 95 | 10.1.3. Referer . . . . . . . . . . . . . . . . . . . . . . 96 | |||
| 10.1.4. TE . . . . . . . . . . . . . . . . . . . . . . . . . 96 | 10.1.4. TE . . . . . . . . . . . . . . . . . . . . . . . . . 97 | |||
| 10.1.5. Trailer . . . . . . . . . . . . . . . . . . . . . . 97 | 10.1.5. Trailer . . . . . . . . . . . . . . . . . . . . . . 98 | |||
| 10.1.6. User-Agent . . . . . . . . . . . . . . . . . . . . . 97 | 10.1.6. User-Agent . . . . . . . . . . . . . . . . . . . . . 98 | |||
| 10.2. Response Context Fields . . . . . . . . . . . . . . . . 98 | 10.2. Response Context Fields . . . . . . . . . . . . . . . . 99 | |||
| 10.2.1. Allow . . . . . . . . . . . . . . . . . . . . . . . 99 | 10.2.1. Allow . . . . . . . . . . . . . . . . . . . . . . . 100 | |||
| 10.2.2. Date . . . . . . . . . . . . . . . . . . . . . . . . 99 | 10.2.2. Date . . . . . . . . . . . . . . . . . . . . . . . . 100 | |||
| 10.2.3. Location . . . . . . . . . . . . . . . . . . . . . . 100 | 10.2.3. Location . . . . . . . . . . . . . . . . . . . . . . 101 | |||
| 10.2.4. Retry-After . . . . . . . . . . . . . . . . . . . . 102 | 10.2.4. Retry-After . . . . . . . . . . . . . . . . . . . . 103 | |||
| 10.2.5. Server . . . . . . . . . . . . . . . . . . . . . . . 102 | 10.2.5. Server . . . . . . . . . . . . . . . . . . . . . . . 103 | |||
| 11. HTTP Authentication . . . . . . . . . . . . . . . . . . . . . 103 | 11. HTTP Authentication . . . . . . . . . . . . . . . . . . . . . 104 | |||
| 11.1. Authentication Scheme . . . . . . . . . . . . . . . . . 103 | 11.1. Authentication Scheme . . . . . . . . . . . . . . . . . 104 | |||
| 11.2. Authentication Parameters . . . . . . . . . . . . . . . 103 | 11.2. Authentication Parameters . . . . . . . . . . . . . . . 104 | |||
| 11.3. Challenge and Response . . . . . . . . . . . . . . . . . 104 | 11.3. Challenge and Response . . . . . . . . . . . . . . . . . 105 | |||
| 11.4. Credentials . . . . . . . . . . . . . . . . . . . . . . 105 | 11.4. Credentials . . . . . . . . . . . . . . . . . . . . . . 106 | |||
| 11.5. Establishing a Protection Space (Realm) . . . . . . . . 105 | 11.5. Establishing a Protection Space (Realm) . . . . . . . . 106 | |||
| 11.6. Authenticating Users to Origin Servers . . . . . . . . . 106 | 11.6. Authenticating Users to Origin Servers . . . . . . . . . 107 | |||
| 11.6.1. WWW-Authenticate . . . . . . . . . . . . . . . . . . 106 | 11.6.1. WWW-Authenticate . . . . . . . . . . . . . . . . . . 107 | |||
| 11.6.2. Authorization . . . . . . . . . . . . . . . . . . . 107 | 11.6.2. Authorization . . . . . . . . . . . . . . . . . . . 108 | |||
| 11.6.3. Authentication-Info . . . . . . . . . . . . . . . . 108 | 11.6.3. Authentication-Info . . . . . . . . . . . . . . . . 109 | |||
| 11.7. Authenticating Clients to Proxies . . . . . . . . . . . 108 | 11.7. Authenticating Clients to Proxies . . . . . . . . . . . 109 | |||
| 11.7.1. Proxy-Authenticate . . . . . . . . . . . . . . . . . 108 | 11.7.1. Proxy-Authenticate . . . . . . . . . . . . . . . . . 109 | |||
| 11.7.2. Proxy-Authorization . . . . . . . . . . . . . . . . 109 | 11.7.2. Proxy-Authorization . . . . . . . . . . . . . . . . 110 | |||
| 11.7.3. Proxy-Authentication-Info . . . . . . . . . . . . . 109 | 11.7.3. Proxy-Authentication-Info . . . . . . . . . . . . . 110 | |||
| 12. Content Negotiation . . . . . . . . . . . . . . . . . . . . . 110 | 12. Content Negotiation . . . . . . . . . . . . . . . . . . . . . 111 | |||
| 12.1. Proactive Negotiation . . . . . . . . . . . . . . . . . 111 | 12.1. Proactive Negotiation . . . . . . . . . . . . . . . . . 112 | |||
| 12.2. Reactive Negotiation . . . . . . . . . . . . . . . . . . 112 | 12.2. Reactive Negotiation . . . . . . . . . . . . . . . . . . 113 | |||
| 12.3. Request Content Negotiation . . . . . . . . . . . . . . 113 | 12.3. Request Content Negotiation . . . . . . . . . . . . . . 114 | |||
| 12.4. Content Negotiation Field Features . . . . . . . . . . . 113 | 12.4. Content Negotiation Field Features . . . . . . . . . . . 114 | |||
| 12.4.1. Absence . . . . . . . . . . . . . . . . . . . . . . 113 | 12.4.1. Absence . . . . . . . . . . . . . . . . . . . . . . 114 | |||
| 12.4.2. Quality Values . . . . . . . . . . . . . . . . . . . 114 | 12.4.2. Quality Values . . . . . . . . . . . . . . . . . . . 114 | |||
| 12.4.3. Wildcard Values . . . . . . . . . . . . . . . . . . 114 | 12.4.3. Wildcard Values . . . . . . . . . . . . . . . . . . 115 | |||
| 12.5. Content Negotiation Fields . . . . . . . . . . . . . . . 114 | 12.5. Content Negotiation Fields . . . . . . . . . . . . . . . 115 | |||
| 12.5.1. Accept . . . . . . . . . . . . . . . . . . . . . . . 115 | 12.5.1. Accept . . . . . . . . . . . . . . . . . . . . . . . 115 | |||
| 12.5.2. Accept-Charset . . . . . . . . . . . . . . . . . . . 117 | 12.5.2. Accept-Charset . . . . . . . . . . . . . . . . . . . 118 | |||
| 12.5.3. Accept-Encoding . . . . . . . . . . . . . . . . . . 118 | 12.5.3. Accept-Encoding . . . . . . . . . . . . . . . . . . 118 | |||
| 12.5.4. Accept-Language . . . . . . . . . . . . . . . . . . 119 | 12.5.4. Accept-Language . . . . . . . . . . . . . . . . . . 120 | |||
| 12.5.5. Vary . . . . . . . . . . . . . . . . . . . . . . . . 121 | 12.5.5. Vary . . . . . . . . . . . . . . . . . . . . . . . . 121 | |||
| 13. Conditional Requests . . . . . . . . . . . . . . . . . . . . 122 | 13. Conditional Requests . . . . . . . . . . . . . . . . . . . . 123 | |||
| 13.1. Preconditions . . . . . . . . . . . . . . . . . . . . . 122 | 13.1. Preconditions . . . . . . . . . . . . . . . . . . . . . 123 | |||
| 13.1.1. If-Match . . . . . . . . . . . . . . . . . . . . . . 123 | 13.1.1. If-Match . . . . . . . . . . . . . . . . . . . . . . 124 | |||
| 13.1.2. If-None-Match . . . . . . . . . . . . . . . . . . . 124 | 13.1.2. If-None-Match . . . . . . . . . . . . . . . . . . . 125 | |||
| 13.1.3. If-Modified-Since . . . . . . . . . . . . . . . . . 126 | 13.1.3. If-Modified-Since . . . . . . . . . . . . . . . . . 127 | |||
| 13.1.4. If-Unmodified-Since . . . . . . . . . . . . . . . . 128 | 13.1.4. If-Unmodified-Since . . . . . . . . . . . . . . . . 129 | |||
| 13.1.5. If-Range . . . . . . . . . . . . . . . . . . . . . . 129 | 13.1.5. If-Range . . . . . . . . . . . . . . . . . . . . . . 130 | |||
| 13.2. Evaluation of Preconditions . . . . . . . . . . . . . . 130 | 13.2. Evaluation of Preconditions . . . . . . . . . . . . . . 131 | |||
| 13.2.1. When to Evaluate . . . . . . . . . . . . . . . . . . 131 | 13.2.1. When to Evaluate . . . . . . . . . . . . . . . . . . 132 | |||
| 13.2.2. Precedence of Preconditions . . . . . . . . . . . . 132 | 13.2.2. Precedence of Preconditions . . . . . . . . . . . . 132 | |||
| 14. Range Requests . . . . . . . . . . . . . . . . . . . . . . . 133 | 14. Range Requests . . . . . . . . . . . . . . . . . . . . . . . 134 | |||
| 14.1. Range Units . . . . . . . . . . . . . . . . . . . . . . 133 | 14.1. Range Units . . . . . . . . . . . . . . . . . . . . . . 134 | |||
| 14.1.1. Range Specifiers . . . . . . . . . . . . . . . . . . 134 | 14.1.1. Range Specifiers . . . . . . . . . . . . . . . . . . 135 | |||
| 14.1.2. Byte Ranges . . . . . . . . . . . . . . . . . . . . 135 | 14.1.2. Byte Ranges . . . . . . . . . . . . . . . . . . . . 136 | |||
| 14.2. Range . . . . . . . . . . . . . . . . . . . . . . . . . 137 | 14.2. Range . . . . . . . . . . . . . . . . . . . . . . . . . 137 | |||
| 14.3. Accept-Ranges . . . . . . . . . . . . . . . . . . . . . 138 | 14.3. Accept-Ranges . . . . . . . . . . . . . . . . . . . . . 139 | |||
| 14.4. Content-Range . . . . . . . . . . . . . . . . . . . . . 139 | 14.4. Content-Range . . . . . . . . . . . . . . . . . . . . . 139 | |||
| 14.5. Partial PUT . . . . . . . . . . . . . . . . . . . . . . 141 | 14.5. Partial PUT . . . . . . . . . . . . . . . . . . . . . . 141 | |||
| 14.6. Media Type multipart/byteranges . . . . . . . . . . . . 141 | 14.6. Media Type multipart/byteranges . . . . . . . . . . . . 142 | |||
| 15. Status Codes . . . . . . . . . . . . . . . . . . . . . . . . 143 | 15. Status Codes . . . . . . . . . . . . . . . . . . . . . . . . 144 | |||
| 15.1. Overview of Status Codes . . . . . . . . . . . . . . . . 144 | 15.1. Overview of Status Codes . . . . . . . . . . . . . . . . 145 | |||
| 15.2. Informational 1xx . . . . . . . . . . . . . . . . . . . 144 | 15.2. Informational 1xx . . . . . . . . . . . . . . . . . . . 145 | |||
| 15.2.1. 100 Continue . . . . . . . . . . . . . . . . . . . . 145 | 15.2.1. 100 Continue . . . . . . . . . . . . . . . . . . . . 146 | |||
| 15.2.2. 101 Switching Protocols . . . . . . . . . . . . . . 145 | 15.2.2. 101 Switching Protocols . . . . . . . . . . . . . . 146 | |||
| 15.3. Successful 2xx . . . . . . . . . . . . . . . . . . . . . 145 | 15.3. Successful 2xx . . . . . . . . . . . . . . . . . . . . . 146 | |||
| 15.3.1. 200 OK . . . . . . . . . . . . . . . . . . . . . . . 146 | 15.3.1. 200 OK . . . . . . . . . . . . . . . . . . . . . . . 147 | |||
| 15.3.2. 201 Created . . . . . . . . . . . . . . . . . . . . 146 | 15.3.2. 201 Created . . . . . . . . . . . . . . . . . . . . 147 | |||
| 15.3.3. 202 Accepted . . . . . . . . . . . . . . . . . . . . 147 | 15.3.3. 202 Accepted . . . . . . . . . . . . . . . . . . . . 148 | |||
| 15.3.4. 203 Non-Authoritative Information . . . . . . . . . 147 | 15.3.4. 203 Non-Authoritative Information . . . . . . . . . 148 | |||
| 15.3.5. 204 No Content . . . . . . . . . . . . . . . . . . . 147 | 15.3.5. 204 No Content . . . . . . . . . . . . . . . . . . . 148 | |||
| 15.3.6. 205 Reset Content . . . . . . . . . . . . . . . . . 148 | 15.3.6. 205 Reset Content . . . . . . . . . . . . . . . . . 149 | |||
| 15.3.7. 206 Partial Content . . . . . . . . . . . . . . . . 148 | 15.3.7. 206 Partial Content . . . . . . . . . . . . . . . . 149 | |||
| 15.4. Redirection 3xx . . . . . . . . . . . . . . . . . . . . 152 | 15.4. Redirection 3xx . . . . . . . . . . . . . . . . . . . . 153 | |||
| 15.4.1. 300 Multiple Choices . . . . . . . . . . . . . . . . 154 | 15.4.1. 300 Multiple Choices . . . . . . . . . . . . . . . . 155 | |||
| 15.4.2. 301 Moved Permanently . . . . . . . . . . . . . . . 155 | 15.4.2. 301 Moved Permanently . . . . . . . . . . . . . . . 156 | |||
| 15.4.3. 302 Found . . . . . . . . . . . . . . . . . . . . . 155 | 15.4.3. 302 Found . . . . . . . . . . . . . . . . . . . . . 156 | |||
| 15.4.4. 303 See Other . . . . . . . . . . . . . . . . . . . 156 | 15.4.4. 303 See Other . . . . . . . . . . . . . . . . . . . 157 | |||
| 15.4.5. 304 Not Modified . . . . . . . . . . . . . . . . . . 156 | 15.4.5. 304 Not Modified . . . . . . . . . . . . . . . . . . 158 | |||
| 15.4.6. 305 Use Proxy . . . . . . . . . . . . . . . . . . . 157 | 15.4.6. 305 Use Proxy . . . . . . . . . . . . . . . . . . . 158 | |||
| 15.4.7. 306 (Unused) . . . . . . . . . . . . . . . . . . . . 157 | 15.4.7. 306 (Unused) . . . . . . . . . . . . . . . . . . . . 158 | |||
| 15.4.8. 307 Temporary Redirect . . . . . . . . . . . . . . . 157 | 15.4.8. 307 Temporary Redirect . . . . . . . . . . . . . . . 159 | |||
| 15.4.9. 308 Permanent Redirect . . . . . . . . . . . . . . . 158 | 15.4.9. 308 Permanent Redirect . . . . . . . . . . . . . . . 159 | |||
| 15.5. Client Error 4xx . . . . . . . . . . . . . . . . . . . . 158 | 15.5. Client Error 4xx . . . . . . . . . . . . . . . . . . . . 159 | |||
| 15.5.1. 400 Bad Request . . . . . . . . . . . . . . . . . . 158 | 15.5.1. 400 Bad Request . . . . . . . . . . . . . . . . . . 160 | |||
| 15.5.2. 401 Unauthorized . . . . . . . . . . . . . . . . . . 159 | 15.5.2. 401 Unauthorized . . . . . . . . . . . . . . . . . . 160 | |||
| 15.5.3. 402 Payment Required . . . . . . . . . . . . . . . . 159 | 15.5.3. 402 Payment Required . . . . . . . . . . . . . . . . 160 | |||
| 15.5.4. 403 Forbidden . . . . . . . . . . . . . . . . . . . 159 | 15.5.4. 403 Forbidden . . . . . . . . . . . . . . . . . . . 160 | |||
| 15.5.5. 404 Not Found . . . . . . . . . . . . . . . . . . . 159 | 15.5.5. 404 Not Found . . . . . . . . . . . . . . . . . . . 161 | |||
| 15.5.6. 405 Method Not Allowed . . . . . . . . . . . . . . . 160 | 15.5.6. 405 Method Not Allowed . . . . . . . . . . . . . . . 161 | |||
| 15.5.7. 406 Not Acceptable . . . . . . . . . . . . . . . . . 160 | 15.5.7. 406 Not Acceptable . . . . . . . . . . . . . . . . . 161 | |||
| 15.5.8. 407 Proxy Authentication Required . . . . . . . . . 160 | 15.5.8. 407 Proxy Authentication Required . . . . . . . . . 162 | |||
| 15.5.9. 408 Request Timeout . . . . . . . . . . . . . . . . 160 | 15.5.9. 408 Request Timeout . . . . . . . . . . . . . . . . 162 | |||
| 15.5.10. 409 Conflict . . . . . . . . . . . . . . . . . . . . 161 | 15.5.10. 409 Conflict . . . . . . . . . . . . . . . . . . . . 162 | |||
| 15.5.11. 410 Gone . . . . . . . . . . . . . . . . . . . . . . 161 | 15.5.11. 410 Gone . . . . . . . . . . . . . . . . . . . . . . 162 | |||
| 15.5.12. 411 Length Required . . . . . . . . . . . . . . . . 162 | 15.5.12. 411 Length Required . . . . . . . . . . . . . . . . 163 | |||
| 15.5.13. 412 Precondition Failed . . . . . . . . . . . . . . 162 | 15.5.13. 412 Precondition Failed . . . . . . . . . . . . . . 163 | |||
| 15.5.14. 413 Content Too Large . . . . . . . . . . . . . . . 162 | 15.5.14. 413 Content Too Large . . . . . . . . . . . . . . . 163 | |||
| 15.5.15. 414 URI Too Long . . . . . . . . . . . . . . . . . . 162 | 15.5.15. 414 URI Too Long . . . . . . . . . . . . . . . . . . 164 | |||
| 15.5.16. 415 Unsupported Media Type . . . . . . . . . . . . . 163 | 15.5.16. 415 Unsupported Media Type . . . . . . . . . . . . . 164 | |||
| 15.5.17. 416 Range Not Satisfiable . . . . . . . . . . . . . 163 | 15.5.17. 416 Range Not Satisfiable . . . . . . . . . . . . . 164 | |||
| 15.5.18. 417 Expectation Failed . . . . . . . . . . . . . . . 164 | 15.5.18. 417 Expectation Failed . . . . . . . . . . . . . . . 165 | |||
| 15.5.19. 418 (Unused) . . . . . . . . . . . . . . . . . . . . 164 | 15.5.19. 418 (Unused) . . . . . . . . . . . . . . . . . . . . 165 | |||
| 15.5.20. 421 Misdirected Request . . . . . . . . . . . . . . 164 | 15.5.20. 421 Misdirected Request . . . . . . . . . . . . . . 166 | |||
| 15.5.21. 422 Unprocessable Content . . . . . . . . . . . . . 165 | 15.5.21. 422 Unprocessable Content . . . . . . . . . . . . . 166 | |||
| 15.5.22. 426 Upgrade Required . . . . . . . . . . . . . . . . 165 | 15.5.22. 426 Upgrade Required . . . . . . . . . . . . . . . . 166 | |||
| 15.6. Server Error 5xx . . . . . . . . . . . . . . . . . . . . 165 | 15.6. Server Error 5xx . . . . . . . . . . . . . . . . . . . . 167 | |||
| 15.6.1. 500 Internal Server Error . . . . . . . . . . . . . 165 | 15.6.1. 500 Internal Server Error . . . . . . . . . . . . . 167 | |||
| 15.6.2. 501 Not Implemented . . . . . . . . . . . . . . . . 166 | 15.6.2. 501 Not Implemented . . . . . . . . . . . . . . . . 167 | |||
| 15.6.3. 502 Bad Gateway . . . . . . . . . . . . . . . . . . 166 | 15.6.3. 502 Bad Gateway . . . . . . . . . . . . . . . . . . 167 | |||
| 15.6.4. 503 Service Unavailable . . . . . . . . . . . . . . 166 | 15.6.4. 503 Service Unavailable . . . . . . . . . . . . . . 167 | |||
| 15.6.5. 504 Gateway Timeout . . . . . . . . . . . . . . . . 166 | 15.6.5. 504 Gateway Timeout . . . . . . . . . . . . . . . . 168 | |||
| 15.6.6. 505 HTTP Version Not Supported . . . . . . . . . . . 166 | 15.6.6. 505 HTTP Version Not Supported . . . . . . . . . . . 168 | |||
| 16. Extending HTTP . . . . . . . . . . . . . . . . . . . . . . . 167 | 16. Extending HTTP . . . . . . . . . . . . . . . . . . . . . . . 168 | |||
| 16.1. Method Extensibility . . . . . . . . . . . . . . . . . . 167 | 16.1. Method Extensibility . . . . . . . . . . . . . . . . . . 169 | |||
| 16.1.1. Method Registry . . . . . . . . . . . . . . . . . . 167 | 16.1.1. Method Registry . . . . . . . . . . . . . . . . . . 169 | |||
| 16.1.2. Considerations for New Methods . . . . . . . . . . . 168 | 16.1.2. Considerations for New Methods . . . . . . . . . . . 169 | |||
| 16.2. Status Code Extensibility . . . . . . . . . . . . . . . 168 | 16.2. Status Code Extensibility . . . . . . . . . . . . . . . 170 | |||
| 16.2.1. Status Code Registry . . . . . . . . . . . . . . . . 169 | 16.2.1. Status Code Registry . . . . . . . . . . . . . . . . 170 | |||
| 16.2.2. Considerations for New Status Codes . . . . . . . . 169 | 16.2.2. Considerations for New Status Codes . . . . . . . . 170 | |||
| 16.3. Field Extensibility . . . . . . . . . . . . . . . . . . 170 | 16.3. Field Extensibility . . . . . . . . . . . . . . . . . . 171 | |||
| 16.3.1. Field Name Registry . . . . . . . . . . . . . . . . 170 | 16.3.1. Field Name Registry . . . . . . . . . . . . . . . . 172 | |||
| 16.3.2. Considerations for New Fields . . . . . . . . . . . 172 | 16.3.2. Considerations for New Fields . . . . . . . . . . . 173 | |||
| 16.4. Authentication Scheme Extensibility . . . . . . . . . . 174 | 16.4. Authentication Scheme Extensibility . . . . . . . . . . 175 | |||
| 16.4.1. Authentication Scheme Registry . . . . . . . . . . . 174 | 16.4.1. Authentication Scheme Registry . . . . . . . . . . . 176 | |||
| 16.4.2. Considerations for New Authentication Schemes . . . 175 | 16.4.2. Considerations for New Authentication Schemes . . . 176 | |||
| 16.5. Range Unit Extensibility . . . . . . . . . . . . . . . . 176 | 16.5. Range Unit Extensibility . . . . . . . . . . . . . . . . 177 | |||
| 16.5.1. Range Unit Registry . . . . . . . . . . . . . . . . 176 | 16.5.1. Range Unit Registry . . . . . . . . . . . . . . . . 178 | |||
| 16.5.2. Considerations for New Range Units . . . . . . . . . 176 | 16.5.2. Considerations for New Range Units . . . . . . . . . 178 | |||
| 16.6. Content Coding Extensibility . . . . . . . . . . . . . . 176 | 16.6. Content Coding Extensibility . . . . . . . . . . . . . . 178 | |||
| 16.6.1. Content Coding Registry . . . . . . . . . . . . . . 177 | 16.6.1. Content Coding Registry . . . . . . . . . . . . . . 178 | |||
| 16.6.2. Considerations for New Content Codings . . . . . . . 177 | 16.6.2. Considerations for New Content Codings . . . . . . . 179 | |||
| 16.7. Upgrade Token Registry . . . . . . . . . . . . . . . . . 177 | 16.7. Upgrade Token Registry . . . . . . . . . . . . . . . . . 179 | |||
| 17. Security Considerations . . . . . . . . . . . . . . . . . . . 178 | 17. Security Considerations . . . . . . . . . . . . . . . . . . . 180 | |||
| 17.1. Establishing Authority . . . . . . . . . . . . . . . . . 178 | 17.1. Establishing Authority . . . . . . . . . . . . . . . . . 180 | |||
| 17.2. Risks of Intermediaries . . . . . . . . . . . . . . . . 179 | 17.2. Risks of Intermediaries . . . . . . . . . . . . . . . . 181 | |||
| 17.3. Attacks Based on File and Path Names . . . . . . . . . . 180 | 17.3. Attacks Based on File and Path Names . . . . . . . . . . 182 | |||
| 17.4. Attacks Based on Command, Code, or Query Injection . . . 181 | 17.4. Attacks Based on Command, Code, or Query Injection . . . 182 | |||
| 17.5. Attacks via Protocol Element Length . . . . . . . . . . 181 | 17.5. Attacks via Protocol Element Length . . . . . . . . . . 183 | |||
| 17.6. Attacks using Shared-dictionary Compression . . . . . . 182 | 17.6. Attacks using Shared-dictionary Compression . . . . . . 183 | |||
| 17.7. Disclosure of Personal Information . . . . . . . . . . . 182 | 17.7. Disclosure of Personal Information . . . . . . . . . . . 184 | |||
| 17.8. Privacy of Server Log Information . . . . . . . . . . . 182 | 17.8. Privacy of Server Log Information . . . . . . . . . . . 184 | |||
| 17.9. Disclosure of Sensitive Information in URIs . . . . . . 183 | 17.9. Disclosure of Sensitive Information in URIs . . . . . . 185 | |||
| 17.10. Disclosure of Fragment after Redirects . . . . . . . . . 184 | 17.10. Disclosure of Fragment after Redirects . . . . . . . . . 185 | |||
| 17.11. Disclosure of Product Information . . . . . . . . . . . 184 | 17.11. Disclosure of Product Information . . . . . . . . . . . 186 | |||
| 17.12. Browser Fingerprinting . . . . . . . . . . . . . . . . . 184 | 17.12. Browser Fingerprinting . . . . . . . . . . . . . . . . . 186 | |||
| 17.13. Validator Retention . . . . . . . . . . . . . . . . . . 185 | 17.13. Validator Retention . . . . . . . . . . . . . . . . . . 187 | |||
| 17.14. Denial-of-Service Attacks Using Range . . . . . . . . . 186 | 17.14. Denial-of-Service Attacks Using Range . . . . . . . . . 187 | |||
| 17.15. Authentication Considerations . . . . . . . . . . . . . 186 | 17.15. Authentication Considerations . . . . . . . . . . . . . 188 | |||
| 17.15.1. Confidentiality of Credentials . . . . . . . . . . 186 | 17.15.1. Confidentiality of Credentials . . . . . . . . . . 188 | |||
| 17.15.2. Credentials and Idle Clients . . . . . . . . . . . 187 | 17.15.2. Credentials and Idle Clients . . . . . . . . . . . 188 | |||
| 17.15.3. Protection Spaces . . . . . . . . . . . . . . . . . 187 | 17.15.3. Protection Spaces . . . . . . . . . . . . . . . . . 189 | |||
| 17.15.4. Additional Response Fields . . . . . . . . . . . . 188 | 17.15.4. Additional Response Fields . . . . . . . . . . . . 189 | |||
| 18. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 188 | 18. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 189 | |||
| 18.1. URI Scheme Registration . . . . . . . . . . . . . . . . 188 | 18.1. URI Scheme Registration . . . . . . . . . . . . . . . . 190 | |||
| 18.2. Method Registration . . . . . . . . . . . . . . . . . . 188 | 18.2. Method Registration . . . . . . . . . . . . . . . . . . 190 | |||
| 18.3. Status Code Registration . . . . . . . . . . . . . . . . 189 | 18.3. Status Code Registration . . . . . . . . . . . . . . . . 190 | |||
| 18.4. Field Name Registration . . . . . . . . . . . . . . . . 190 | 18.4. Field Name Registration . . . . . . . . . . . . . . . . 193 | |||
| 18.5. Authentication Scheme Registration . . . . . . . . . . . 192 | 18.5. Authentication Scheme Registration . . . . . . . . . . . 195 | |||
| 18.6. Content Coding Registration . . . . . . . . . . . . . . 192 | 18.6. Content Coding Registration . . . . . . . . . . . . . . 196 | |||
| 18.7. Range Unit Registration . . . . . . . . . . . . . . . . 193 | 18.7. Range Unit Registration . . . . . . . . . . . . . . . . 196 | |||
| 18.8. Media Type Registration . . . . . . . . . . . . . . . . 193 | 18.8. Media Type Registration . . . . . . . . . . . . . . . . 197 | |||
| 18.9. Port Registration . . . . . . . . . . . . . . . . . . . 193 | 18.9. Port Registration . . . . . . . . . . . . . . . . . . . 197 | |||
| 18.10. Upgrade Token Registration . . . . . . . . . . . . . . . 194 | 18.10. Upgrade Token Registration . . . . . . . . . . . . . . . 197 | |||
| 19. References . . . . . . . . . . . . . . . . . . . . . . . . . 194 | 19. References . . . . . . . . . . . . . . . . . . . . . . . . . 197 | |||
| 19.1. Normative References . . . . . . . . . . . . . . . . . . 194 | 19.1. Normative References . . . . . . . . . . . . . . . . . . 197 | |||
| 19.2. Informative References . . . . . . . . . . . . . . . . . 196 | 19.2. Informative References . . . . . . . . . . . . . . . . . 199 | |||
| Appendix A. Collected ABNF . . . . . . . . . . . . . . . . . . . 202 | Appendix A. Collected ABNF . . . . . . . . . . . . . . . . . . . 205 | |||
| Appendix B. Changes from previous RFCs . . . . . . . . . . . . . 207 | Appendix B. Changes from previous RFCs . . . . . . . . . . . . . 210 | |||
| B.1. Changes from RFC 2818 . . . . . . . . . . . . . . . . . . 207 | B.1. Changes from RFC 2818 . . . . . . . . . . . . . . . . . . 210 | |||
| B.2. Changes from RFC 7230 . . . . . . . . . . . . . . . . . . 207 | B.2. Changes from RFC 7230 . . . . . . . . . . . . . . . . . . 210 | |||
| B.3. Changes from RFC 7231 . . . . . . . . . . . . . . . . . . 208 | B.3. Changes from RFC 7231 . . . . . . . . . . . . . . . . . . 211 | |||
| B.4. Changes from RFC 7232 . . . . . . . . . . . . . . . . . . 210 | B.4. Changes from RFC 7232 . . . . . . . . . . . . . . . . . . 213 | |||
| B.5. Changes from RFC 7233 . . . . . . . . . . . . . . . . . . 210 | B.5. Changes from RFC 7233 . . . . . . . . . . . . . . . . . . 213 | |||
| B.6. Changes from RFC 7235 . . . . . . . . . . . . . . . . . . 210 | B.6. Changes from RFC 7235 . . . . . . . . . . . . . . . . . . 214 | |||
| B.7. Changes from RFC 7538 . . . . . . . . . . . . . . . . . . 210 | B.7. Changes from RFC 7538 . . . . . . . . . . . . . . . . . . 214 | |||
| B.8. Changes from RFC 7615 . . . . . . . . . . . . . . . . . . 211 | B.8. Changes from RFC 7615 . . . . . . . . . . . . . . . . . . 214 | |||
| B.9. Changes from RFC 7694 . . . . . . . . . . . . . . . . . . 211 | B.9. Changes from RFC 7694 . . . . . . . . . . . . . . . . . . 214 | |||
| Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 211 | Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 214 | |||
| C.1. Between RFC723x and draft 00 . . . . . . . . . . . . . . 211 | C.1. Between RFC723x and draft 00 . . . . . . . . . . . . . . 214 | |||
| C.2. Since draft-ietf-httpbis-semantics-00 . . . . . . . . . . 211 | C.2. Since draft-ietf-httpbis-semantics-00 . . . . . . . . . . 215 | |||
| C.3. Since draft-ietf-httpbis-semantics-01 . . . . . . . . . . 212 | C.3. Since draft-ietf-httpbis-semantics-01 . . . . . . . . . . 215 | |||
| C.4. Since draft-ietf-httpbis-semantics-02 . . . . . . . . . . 213 | C.4. Since draft-ietf-httpbis-semantics-02 . . . . . . . . . . 216 | |||
| C.5. Since draft-ietf-httpbis-semantics-03 . . . . . . . . . . 214 | C.5. Since draft-ietf-httpbis-semantics-03 . . . . . . . . . . 217 | |||
| C.6. Since draft-ietf-httpbis-semantics-04 . . . . . . . . . . 215 | C.6. Since draft-ietf-httpbis-semantics-04 . . . . . . . . . . 218 | |||
| C.7. Since draft-ietf-httpbis-semantics-05 . . . . . . . . . . 215 | C.7. Since draft-ietf-httpbis-semantics-05 . . . . . . . . . . 219 | |||
| C.8. Since draft-ietf-httpbis-semantics-06 . . . . . . . . . . 217 | C.8. Since draft-ietf-httpbis-semantics-06 . . . . . . . . . . 220 | |||
| C.9. Since draft-ietf-httpbis-semantics-07 . . . . . . . . . . 218 | C.9. Since draft-ietf-httpbis-semantics-07 . . . . . . . . . . 221 | |||
| C.10. Since draft-ietf-httpbis-semantics-08 . . . . . . . . . . 219 | C.10. Since draft-ietf-httpbis-semantics-08 . . . . . . . . . . 223 | |||
| C.11. Since draft-ietf-httpbis-semantics-09 . . . . . . . . . . 221 | C.11. Since draft-ietf-httpbis-semantics-09 . . . . . . . . . . 224 | |||
| C.12. Since draft-ietf-httpbis-semantics-10 . . . . . . . . . . 221 | C.12. Since draft-ietf-httpbis-semantics-10 . . . . . . . . . . 224 | |||
| C.13. Since draft-ietf-httpbis-semantics-11 . . . . . . . . . . 222 | C.13. Since draft-ietf-httpbis-semantics-11 . . . . . . . . . . 226 | |||
| C.14. Since draft-ietf-httpbis-semantics-12 . . . . . . . . . . 223 | C.14. Since draft-ietf-httpbis-semantics-12 . . . . . . . . . . 226 | |||
| C.15. Since draft-ietf-httpbis-semantics-13 . . . . . . . . . . 225 | C.15. Since draft-ietf-httpbis-semantics-13 . . . . . . . . . . 228 | |||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 225 | C.16. Since draft-ietf-httpbis-semantics-14 . . . . . . . . . . 229 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 226 | Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 231 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 232 | ||||
| 1. Introduction | 1. Introduction | |||
| 1.1. Purpose | 1.1. Purpose | |||
| The Hypertext Transfer Protocol (HTTP) is a family of stateless, | The Hypertext Transfer Protocol (HTTP) is a family of stateless, | |||
| application-level, request/response protocols that share a generic | application-level, request/response protocols that share a generic | |||
| interface, extensible semantics, and self-descriptive messages to | interface, extensible semantics, and self-descriptive messages to | |||
| enable flexible interaction with network-based hypertext information | enable flexible interaction with network-based hypertext information | |||
| systems. | systems. | |||
| skipping to change at page 11, line 31 ¶ | skipping to change at page 11, line 21 ¶ | |||
| Semantics also include representation metadata that describe how | Semantics also include representation metadata that describe how | |||
| content is intended to be interpreted by a recipient, request header | content is intended to be interpreted by a recipient, request header | |||
| fields that might influence content selection, and the various | fields that might influence content selection, and the various | |||
| selection algorithms that are collectively referred to as _content | selection algorithms that are collectively referred to as _content | |||
| negotiation_ (Section 12). | negotiation_ (Section 12). | |||
| 1.4. Specifications Obsoleted by this Document | 1.4. Specifications Obsoleted by this Document | |||
| This document obsoletes the following specifications: | This document obsoletes the following specifications: | |||
| -------------------------------------------- ----------- --------- | +============================================+===========+=========+ | |||
| Title Reference Changes | | Title | Reference | Changes | | |||
| -------------------------------------------- ----------- --------- | +============================================+===========+=========+ | |||
| HTTP Over TLS [RFC2818] B.1 | | HTTP Over TLS | [RFC2818] | B.1 | | |||
| HTTP/1.1 Message Syntax and Routing [*] [RFC7230] B.2 | +--------------------------------------------+-----------+---------+ | |||
| HTTP/1.1 Semantics and Content [RFC7231] B.3 | | HTTP/1.1 Message Syntax and Routing [*] | [RFC7230] | B.2 | | |||
| HTTP/1.1 Conditional Requests [RFC7232] B.4 | +--------------------------------------------+-----------+---------+ | |||
| HTTP/1.1 Range Requests [RFC7233] B.5 | | HTTP/1.1 Semantics and Content | [RFC7231] | B.3 | | |||
| HTTP/1.1 Authentication [RFC7235] B.6 | +--------------------------------------------+-----------+---------+ | |||
| HTTP Status Code 308 (Permanent Redirect) [RFC7538] B.7 | | HTTP/1.1 Conditional Requests | [RFC7232] | B.4 | | |||
| HTTP Authentication-Info and Proxy- [RFC7615] B.8 | +--------------------------------------------+-----------+---------+ | |||
| Authentication-Info Response Header Fields | | HTTP/1.1 Range Requests | [RFC7233] | B.5 | | |||
| HTTP Client-Initiated Content-Encoding [RFC7694] B.9 | +--------------------------------------------+-----------+---------+ | |||
| -------------------------------------------- ----------- --------- | | HTTP/1.1 Authentication | [RFC7235] | B.6 | | |||
| +--------------------------------------------+-----------+---------+ | ||||
| | HTTP Status Code 308 (Permanent Redirect) | [RFC7538] | B.7 | | ||||
| +--------------------------------------------+-----------+---------+ | ||||
| | HTTP Authentication-Info and Proxy- | [RFC7615] | B.8 | | ||||
| | Authentication-Info Response Header Fields | | | | ||||
| +--------------------------------------------+-----------+---------+ | ||||
| | HTTP Client-Initiated Content-Encoding | [RFC7694] | B.9 | | ||||
| +--------------------------------------------+-----------+---------+ | ||||
| Table 1 | Table 1 | |||
| [*] This document only obsoletes the portions of RFC 7230 that are | [*] This document only obsoletes the portions of RFC 7230 that are | |||
| independent of the HTTP/1.1 messaging syntax and connection | independent of the HTTP/1.1 messaging syntax and connection | |||
| management; the remaining bits of RFC 7230 are obsoleted by | management; the remaining bits of RFC 7230 are obsoleted by | |||
| "HTTP/1.1" [Messaging]. | "HTTP/1.1" [Messaging]. | |||
| 2. Conformance | 2. Conformance | |||
| 2.1. Syntax Notation | 2.1. Syntax Notation | |||
| This specification uses the Augmented Backus-Naur Form (ABNF) | This specification uses the Augmented Backus-Naur Form (ABNF) | |||
| notation of [RFC5234], extended with the notation for case- | notation of [RFC5234], extended with the notation for case- | |||
| sensitivity in strings defined in [RFC7405]. | sensitivity in strings defined in [RFC7405]. | |||
| It also uses a list extension, defined in Section 5.6.1, that allows | It also uses a list extension, defined in Section 5.6.1, that allows | |||
| for compact definition of comma-separated lists using a "#" operator | for compact definition of comma-separated lists using a "#" operator | |||
| (similar to how the "*" operator indicates repetition). Appendix A | (similar to how the "*" operator indicates repetition). Appendix A | |||
| shows the collected grammar with all list operators expanded to | shows the collected grammar with all list operators expanded to | |||
| skipping to change at page 13, line 13 ¶ | skipping to change at page 13, line 13 ¶ | |||
| beyond the scope of a single communication. | beyond the scope of a single communication. | |||
| The verb "generate" is used instead of "send" where a requirement | The verb "generate" is used instead of "send" where a requirement | |||
| applies only to implementations that create the protocol element, | applies only to implementations that create the protocol element, | |||
| rather than an implementation that forwards a received element | rather than an implementation that forwards a received element | |||
| downstream. | downstream. | |||
| An implementation is considered conformant if it complies with all of | An implementation is considered conformant if it complies with all of | |||
| the requirements associated with the roles it partakes in HTTP. | the requirements associated with the roles it partakes in HTTP. | |||
| Conformance includes both the syntax and semantics of protocol | A sender MUST NOT generate protocol elements that do not match the | |||
| elements. A sender MUST NOT generate protocol elements that convey a | grammar defined by the corresponding ABNF rules. Within a given | |||
| meaning that is known by that sender to be false. A sender MUST NOT | message, a sender MUST NOT generate protocol elements or syntax | |||
| generate protocol elements that do not match the grammar defined by | alternatives that are only allowed to be generated by participants in | |||
| the corresponding ABNF rules. Within a given message, a sender MUST | other roles (i.e., a role that the sender does not have for that | |||
| NOT generate protocol elements or syntax alternatives that are only | message). | |||
| allowed to be generated by participants in other roles (i.e., a role | ||||
| that the sender does not have for that message). | Conformance to HTTP includes both conformance to the particular | |||
| messaging syntax of the protocol version in use and conformance to | ||||
| the semantics of protocol elements sent. For example, a client that | ||||
| claims conformance to HTTP/1.1 but fails to recognize the features | ||||
| required of HTTP/1.1 recipients will fail to interoperate with | ||||
| servers that adjust their responses in accordance with those claims. | ||||
| Features that reflect user choices, such as content negotiation and | ||||
| user-selected extensions, can impact application behavior beyond the | ||||
| protocol stream; sending protocol elements that inaccurately reflect | ||||
| a user's choices will confuse the user and inhibit choice. | ||||
| When an implementation fails semantic conformance, recipients of that | ||||
| implementation's messages will eventually develop workarounds to | ||||
| adjust their behavior accordingly. A recipient MAY employ such | ||||
| workarounds while remaining conformant to this protocol if the | ||||
| workarounds are limited to the implementations at fault. For | ||||
| example, servers often scan portions of the User-Agent field value, | ||||
| and user agents often scan the Server field value, to adjust their | ||||
| own behavior with respect to known bugs or poorly chosen defaults. | ||||
| 2.3. Length Requirements | 2.3. Length Requirements | |||
| A recipient SHOULD parse a received protocol element defensively, | A recipient SHOULD parse a received protocol element defensively, | |||
| with only marginal expectations that the element will conform to its | with only marginal expectations that the element will conform to its | |||
| ABNF grammar and fit within a reasonable buffer size. | ABNF grammar and fit within a reasonable buffer size. | |||
| HTTP does not have specific length limitations for many of its | HTTP does not have specific length limitations for many of its | |||
| protocol elements because the lengths that might be appropriate will | protocol elements because the lengths that might be appropriate will | |||
| vary widely, depending on the deployment context and purpose of the | vary widely, depending on the deployment context and purpose of the | |||
| skipping to change at page 15, line 39 ¶ | skipping to change at page 16, line 16 ¶ | |||
| The target of an HTTP request is called a _resource_. HTTP does not | The target of an HTTP request is called a _resource_. HTTP does not | |||
| limit the nature of a resource; it merely defines an interface that | limit the nature of a resource; it merely defines an interface that | |||
| might be used to interact with resources. Most resources are | might be used to interact with resources. Most resources are | |||
| identified by a Uniform Resource Identifier (URI), as described in | identified by a Uniform Resource Identifier (URI), as described in | |||
| Section 4. | Section 4. | |||
| One design goal of HTTP is to separate resource identification from | One design goal of HTTP is to separate resource identification from | |||
| request semantics, which is made possible by vesting the request | request semantics, which is made possible by vesting the request | |||
| semantics in the request method (Section 9) and a few request- | semantics in the request method (Section 9) and a few request- | |||
| modifying header fields. If there is a conflict between the method | modifying header fields. A resource cannot treat a request in a | |||
| semantics and any semantic implied by the URI itself, as described in | manner inconsistent with the semantics of the method of the request. | |||
| Section 9.2.1, the method semantics take precedence. | For example, though the URI of a resource might imply semantics that | |||
| are not safe, a client can expect the resource to avoid actions that | ||||
| are unsafe when processing a request with a safe method (see | ||||
| Section 9.2.1). | ||||
| HTTP relies upon the Uniform Resource Identifier (URI) standard | HTTP relies upon the Uniform Resource Identifier (URI) standard | |||
| [RFC3986] to indicate the target resource (Section 7.1) and | [RFC3986] to indicate the target resource (Section 7.1) and | |||
| relationships between resources. | relationships between resources. | |||
| 3.2. Representations | 3.2. Representations | |||
| A _representation_ is information that is intended to reflect a past, | A _representation_ is information that is intended to reflect a past, | |||
| current, or desired state of a given resource, in a format that can | current, or desired state of a given resource, in a format that can | |||
| be readily communicated via the protocol. A representation consists | be readily communicated via the protocol. A representation consists | |||
| skipping to change at page 17, line 5 ¶ | skipping to change at page 17, line 29 ¶ | |||
| An HTTP _client_ is a program that establishes a connection to a | An HTTP _client_ is a program that establishes a connection to a | |||
| server for the purpose of sending one or more HTTP requests. An HTTP | server for the purpose of sending one or more HTTP requests. An HTTP | |||
| _server_ is a program that accepts connections in order to service | _server_ is a program that accepts connections in order to service | |||
| HTTP requests by sending HTTP responses. | HTTP requests by sending HTTP responses. | |||
| The terms "client" and "server" refer only to the roles that these | The terms "client" and "server" refer only to the roles that these | |||
| programs perform for a particular connection. The same program might | programs perform for a particular connection. The same program might | |||
| act as a client on some connections and a server on others. | act as a client on some connections and a server on others. | |||
| HTTP is defined as a stateless protocol, meaning that each request | ||||
| message's semantics can be understood in isolation, and that the | ||||
| relationship between connections and messages on them has no impact | ||||
| on the interpretation of those messages. For example, a CONNECT | ||||
| request (Section 9.3.6) or a request with the Upgrade header field | ||||
| (Section 7.8) can occur at any time, not just in the first message on | ||||
| a connection. Many implementations depend on HTTP's stateless design | ||||
| in order to reuse proxied connections or dynamically load balance | ||||
| requests across multiple servers. | ||||
| As a result, a server MUST NOT assume that two requests on the same | ||||
| connection are from the same user agent unless the connection is | ||||
| secured and specific to that agent. Some non-standard HTTP | ||||
| extensions (e.g., [RFC4559]) have been known to violate this | ||||
| requirement, resulting in security and interoperability problems. | ||||
| 3.4. Messages | 3.4. Messages | |||
| HTTP is a stateless request/response protocol for exchanging | HTTP is a stateless request/response protocol for exchanging | |||
| _messages_ across a connection. The terms _sender_ and _recipient_ | _messages_ across a connection. The terms _sender_ and _recipient_ | |||
| refer to any implementation that sends or receives a given message, | refer to any implementation that sends or receives a given message, | |||
| respectively. | respectively. | |||
| A client sends requests to a server in the form of a _request_ | A client sends requests to a server in the form of a _request_ | |||
| message with a method (Section 9) and request target (Section 7.1). | message with a method (Section 9) and request target (Section 7.1). | |||
| The request might also contain header fields (Section 6.3) for | The request might also contain header fields (Section 6.3) for | |||
| skipping to change at page 19, line 48 ¶ | skipping to change at page 20, line 41 ¶ | |||
| 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 | |||
| the outbound communication of a gateway. A gateway communicates with | the outbound communication of a gateway. A gateway communicates with | |||
| inbound servers using any protocol that it desires, including private | inbound servers using any protocol that it desires, including private | |||
| extensions to HTTP that are outside the scope of this specification. | extensions to HTTP that are outside the scope of this specification. | |||
| However, an HTTP-to-HTTP gateway that wishes to interoperate with | However, an HTTP-to-HTTP gateway that wishes to interoperate with | |||
| third-party HTTP servers ought to conform to user agent requirements | third-party HTTP servers needs to conform to user agent requirements | |||
| on the gateway's inbound connection. | on the gateway's inbound connection. | |||
| A _tunnel_ acts as a blind relay between two connections without | A _tunnel_ acts as a blind relay between two connections without | |||
| changing the messages. Once active, a tunnel is not considered a | changing the messages. Once active, a tunnel is not considered a | |||
| party to the HTTP communication, though the tunnel might have been | party to the HTTP communication, though the tunnel might have been | |||
| initiated by an HTTP request. A tunnel ceases to exist when both | initiated by an HTTP request. A tunnel ceases to exist when both | |||
| ends of the relayed connection are closed. Tunnels are used to | ends of the relayed connection are closed. Tunnels are used to | |||
| extend a virtual connection through an intermediary, such as when | extend a virtual connection through an intermediary, such as when | |||
| Transport Layer Security (TLS, [RFC8446]) is used to establish | Transport Layer Security (TLS, [RFC8446]) is used to establish | |||
| confidential communication through a shared firewall proxy. | confidential communication through a shared firewall proxy. | |||
| skipping to change at page 20, line 33 ¶ | skipping to change at page 21, line 24 ¶ | |||
| For example, an _interception proxy_ [RFC3040] (also commonly known | For example, an _interception proxy_ [RFC3040] (also commonly known | |||
| as a _transparent proxy_ [RFC1919]) differs from an HTTP proxy | as a _transparent proxy_ [RFC1919]) differs from an HTTP proxy | |||
| because it is not chosen by the client. Instead, an interception | because it is not chosen by the client. Instead, an interception | |||
| proxy filters or redirects outgoing TCP port 80 packets (and | proxy filters or redirects outgoing TCP port 80 packets (and | |||
| occasionally other common port traffic). Interception proxies are | occasionally other common port traffic). Interception proxies are | |||
| commonly found on public network access points, as a means of | commonly found on public network access points, as a means of | |||
| enforcing account subscription prior to allowing use of non-local | enforcing account subscription prior to allowing use of non-local | |||
| Internet services, and within corporate firewalls to enforce network | Internet services, and within corporate firewalls to enforce network | |||
| usage policies. | usage policies. | |||
| HTTP is defined as a stateless protocol, meaning that each request | ||||
| message can be understood in isolation. Many implementations depend | ||||
| on HTTP's stateless design in order to reuse proxied connections or | ||||
| dynamically load balance requests across multiple servers. Hence, a | ||||
| server MUST NOT assume that two requests on the same connection are | ||||
| from the same user agent unless the connection is secured and | ||||
| specific to that agent. Some non-standard HTTP extensions (e.g., | ||||
| [RFC4559]) have been known to violate this requirement, resulting in | ||||
| security and interoperability problems. | ||||
| 3.8. Caches | 3.8. Caches | |||
| A _cache_ is a local store of previous response messages and the | A _cache_ is a local store of previous response messages and the | |||
| subsystem that controls its message storage, retrieval, and deletion. | subsystem that controls its message storage, retrieval, and deletion. | |||
| A cache stores cacheable responses in order to reduce the response | A cache stores cacheable responses in order to reduce the response | |||
| time and network bandwidth consumption on future, equivalent | time and network bandwidth consumption on future, equivalent | |||
| requests. Any client or server MAY employ a cache, though a cache | requests. Any client or server MAY employ a cache, though a cache | |||
| cannot be used while acting as a tunnel. | cannot be used while acting as a tunnel. | |||
| The effect of a cache is that the request/response chain is shortened | The effect of a cache is that the request/response chain is shortened | |||
| skipping to change at page 21, line 22 ¶ | skipping to change at page 21, line 50 ¶ | |||
| UA =========== A =========== B - - - - - - C - - - - - - O | UA =========== A =========== B - - - - - - C - - - - - - O | |||
| < < | < < | |||
| Figure 3 | Figure 3 | |||
| A response is _cacheable_ if a cache is allowed to store a copy of | A response is _cacheable_ if a cache is allowed to store a copy of | |||
| the response message for use in answering subsequent requests. Even | the response message for use in answering subsequent requests. Even | |||
| when a response is cacheable, there might be additional constraints | when a response is cacheable, there might be additional constraints | |||
| placed by the client or by the origin server on when that cached | placed by the client or by the origin server on when that cached | |||
| response can be used for a particular request. HTTP requirements for | response can be used for a particular request. HTTP requirements for | |||
| cache behavior and cacheable responses are defined in Section 2 of | cache behavior and cacheable responses are defined in [Caching]. | |||
| [Caching]. | ||||
| There is a wide variety of architectures and configurations of caches | There is a wide variety of architectures and configurations of caches | |||
| deployed across the World Wide Web and inside large organizations. | deployed across the World Wide Web and inside large organizations. | |||
| These include national hierarchies of proxy caches to save bandwidth | These include national hierarchies of proxy caches to save bandwidth | |||
| and reduce latency, Content Delivery Networks that use gateway | and reduce latency, Content Delivery Networks that use gateway | |||
| caching to optimise regional and global distribution of popular | caching to optimise regional and global distribution of popular | |||
| sites, collaborative systems that broadcast or multicast cache | sites, collaborative systems that broadcast or multicast cache | |||
| entries, archives of pre-fetched cache entries for use in off-line or | entries, archives of pre-fetched cache entries for use in off-line or | |||
| high-latency environments, and so on. | high-latency environments, and so on. | |||
| 3.9. Example Message Exchange | 3.9. Example Message Exchange | |||
| The following example illustrates a typical HTTP/1.1 message exchange | The following example illustrates a typical HTTP/1.1 message exchange | |||
| for a GET request (Section 9.3.1) on the URI "http://www.example.com/ | for a GET request (Section 9.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 | |||
| Accept-Language: en, mi | Accept-Language: en, mi | |||
| Server response: | Server response: | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Date: Mon, 27 Jul 2009 12:28:53 GMT | Date: Mon, 27 Jul 2009 12:28:53 GMT | |||
| Server: Apache | Server: Apache | |||
| Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT | Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT | |||
| ETag: "34aa387-d-1568eb00" | ETag: "34aa387-d-1568eb00" | |||
| Accept-Ranges: bytes | Accept-Ranges: bytes | |||
| Content-Length: 51 | Content-Length: 51 | |||
| Vary: Accept-Encoding | Vary: Accept-Encoding | |||
| Content-Type: text/plain | Content-Type: text/plain | |||
| Hello World! My content includes a trailing CRLF. | Hello World! My content includes a trailing CRLF. | |||
| 4. Identifiers in HTTP | 4. Identifiers in HTTP | |||
| Uniform Resource Identifiers (URIs) [RFC3986] are used throughout | Uniform Resource Identifiers (URIs) [RFC3986] are used throughout | |||
| HTTP as the means for identifying resources (Section 3.1). | HTTP as the means for identifying resources (Section 3.1). | |||
| 4.1. URI References | 4.1. URI References | |||
| URI references are used to target requests, indicate redirects, and | URI references are used to target requests, indicate redirects, and | |||
| define relationships. | define relationships. | |||
| skipping to change at page 23, line 21 ¶ | skipping to change at page 24, line 5 ¶ | |||
| example, the request line in HTTP/1.1) will necessarily be larger in | example, the request line in HTTP/1.1) will necessarily be larger in | |||
| some cases. | some cases. | |||
| 4.2. HTTP-Related URI Schemes | 4.2. HTTP-Related URI Schemes | |||
| IANA maintains the registry of URI Schemes [BCP35] at | IANA maintains the registry of URI Schemes [BCP35] at | |||
| <https://www.iana.org/assignments/uri-schemes/>. Although requests | <https://www.iana.org/assignments/uri-schemes/>. Although requests | |||
| might target any URI scheme, the following schemes are inherent to | might target any URI scheme, the following schemes are inherent to | |||
| HTTP servers: | HTTP servers: | |||
| ------------ ------------------------------------ ------- | +============+====================================+=======+ | |||
| URI Scheme Description Ref. | | URI Scheme | Description | Ref. | | |||
| ------------ ------------------------------------ ------- | +============+====================================+=======+ | |||
| http Hypertext Transfer Protocol 4.2.1 | | http | Hypertext Transfer Protocol | 4.2.1 | | |||
| https Hypertext Transfer Protocol Secure 4.2.2 | +------------+------------------------------------+-------+ | |||
| ------------ ------------------------------------ ------- | | https | Hypertext Transfer Protocol Secure | 4.2.2 | | |||
| +------------+------------------------------------+-------+ | ||||
| Table 2 | Table 2 | |||
| Note that the presence of an "http" or "https" URI does not imply | Note that the presence of an "http" or "https" URI does not imply | |||
| that there is always an HTTP server at the identified origin | that there is always an HTTP server at the identified origin | |||
| listening for connections. Anyone can mint a URI, whether or not a | listening for connections. Anyone can mint a URI, whether or not a | |||
| server exists and whether or not that server currently maps that | server exists and whether or not that server currently maps that | |||
| identifier to a resource. The delegated nature of registered names | identifier to a resource. The delegated nature of registered names | |||
| and IP addresses creates a federated namespace whether or not an HTTP | and IP addresses creates a federated namespace whether or not an HTTP | |||
| server is present. | server is present. | |||
| skipping to change at page 24, line 29 ¶ | skipping to change at page 25, line 14 ¶ | |||
| 4.2.2. https URI Scheme | 4.2.2. https URI Scheme | |||
| The "https" URI scheme is hereby defined for minting identifiers | The "https" URI scheme is hereby defined for minting identifiers | |||
| within the hierarchical namespace governed by a potential origin | within the hierarchical namespace governed by a potential origin | |||
| server listening for TCP connections on a given port and capable of | server listening for TCP connections on a given port and capable of | |||
| establishing a TLS ([RFC8446]) connection that has been secured for | establishing a TLS ([RFC8446]) connection that has been secured for | |||
| HTTP communication. In this context, _secured_ specifically means | HTTP communication. In this context, _secured_ specifically means | |||
| that the server has been authenticated as acting on behalf of the | that the server has been authenticated as acting on behalf of the | |||
| identified authority and all HTTP communication with that server has | identified authority and all HTTP communication with that server has | |||
| been protected for confidentiality and integrity through the use of | confidentiality and integrity protection that is acceptable to both | |||
| strong encryption. | client and server. | |||
| https-URI = "https" "://" authority path-abempty [ "?" query ] | https-URI = "https" "://" authority path-abempty [ "?" query ] | |||
| The origin server for an "https" URI is identified by the authority | The origin server for an "https" URI is identified by the authority | |||
| component, which includes a host identifier and optional port number | component, which includes a host identifier and optional port number | |||
| ([RFC3986], Section 3.2.2). If the port subcomponent is empty or not | ([RFC3986], Section 3.2.2). If the port subcomponent is empty or not | |||
| given, TCP port 443 (the reserved port for HTTP over TLS) is the | given, TCP port 443 (the reserved port for HTTP over TLS) is the | |||
| default. The origin determines who has the right to respond | default. The origin determines who has the right to respond | |||
| authoritatively to requests that target the identified resource, as | authoritatively to requests that target the identified resource, as | |||
| defined in Section 4.3.3. | defined in Section 4.3.3. | |||
| A sender MUST NOT generate an "https" URI with an empty host | A sender MUST NOT generate an "https" 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. | |||
| The hierarchical path component and optional query component identify | The hierarchical path component and optional query component identify | |||
| the target resource within that origin server's name space. | the target resource within that origin server's name space. | |||
| A client MUST ensure that its HTTP requests for an "https" resource | A client MUST ensure that its HTTP requests for an "https" resource | |||
| are secured, prior to being communicated, and that it only accepts | are secured, prior to being communicated, and that it only accepts | |||
| secured responses to those requests. | secured responses to those requests. Note that the definition of | |||
| what cryptographic mechanisms are acceptable to client and server are | ||||
| usually negotiated and can change over time. | ||||
| Resources made available via the "https" scheme have no shared | Resources made available via the "https" scheme have no shared | |||
| identity with the "http" scheme. They are distinct origins with | identity with the "http" scheme. They are distinct origins with | |||
| separate namespaces. However, an extension to HTTP that is defined | separate namespaces. However, an extension to HTTP that is defined | |||
| to apply to all origins with the same host, such as the Cookie | to apply to all origins with the same host, such as the Cookie | |||
| protocol [RFC6265], can allow information set by one service to | protocol [RFC6265], can allow information set by one service to | |||
| impact communication with other services within a matching group of | impact communication with other services within a matching group of | |||
| host domains. | host domains. | |||
| 4.2.3. http(s) Normalization and Comparison | 4.2.3. http(s) Normalization and Comparison | |||
| Since the "http" and "https" schemes conform to the URI generic | The "http" and "https" URI are normalized and compared according to | |||
| syntax, such URIs are normalized and compared according to the | the methods 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 | HTTP does not require use of a specific method for determining | |||
| form is to omit the port subcomponent. When not being used as the | equivalence. For example, a cache key might be compared as a simple | |||
| target of an OPTIONS request, an empty path component is equivalent | string, after syntax-based normalization, or after scheme-based | |||
| to an absolute path of "/", so the normal form is to provide a path | normalization. | |||
| of "/" instead. The scheme and host are case-insensitive and | ||||
| normally provided in lowercase; all other components are compared in | Two HTTP URIs that are equivalent after normalization (using any | |||
| a case-sensitive manner. Characters other than those in the | method) can be assumed to identify the same resource, and any HTTP | |||
| "reserved" set are equivalent to their percent-encoded octets: the | component MAY perform normalization. As a result, distinct resources | |||
| normal form is to not encode them (see Sections 2.1 and 2.2 of | SHOULD NOT be identified by HTTP URIs that are equivalent after | |||
| [RFC3986]). | normalization (using any method defined in Section 6.2 of [RFC3986]). | |||
| Scheme-based normalization (Section 6.2.3 of [RFC3986]) of "http" and | ||||
| "https" URIs involves the following additional rules: | ||||
| * 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 as the target of an OPTIONS request, an empty | ||||
| path component is equivalent to an absolute path of "/", so the | ||||
| normal form is to provide a path of "/" instead. | ||||
| * The scheme and host are case-insensitive and normally provided in | ||||
| lowercase; all other components are compared in a case-sensitive | ||||
| manner. | ||||
| * Characters other than those in the "reserved" set are equivalent | ||||
| to their percent-encoded octets: the normal form is to not encode | ||||
| them (see Sections 2.1 and 2.2 of [RFC3986]). | ||||
| For example, the following three URIs are equivalent: | For example, the following three URIs are equivalent: | |||
| http://example.com:80/~smith/home.html | http://example.com:80/~smith/home.html | |||
| http://EXAMPLE.com/%7Esmith/home.html | http://EXAMPLE.com/%7Esmith/home.html | |||
| http://EXAMPLE.com:/%7esmith/home.html | http://EXAMPLE.com:/%7esmith/home.html | |||
| 4.2.4. Deprecation of userinfo in http(s) URIs | 4.2.4. Deprecation of userinfo in http(s) URIs | |||
| The URI generic syntax for authority also includes a userinfo | The URI generic syntax for authority also includes a userinfo | |||
| skipping to change at page 29, line 43 ¶ | skipping to change at page 30, line 47 ¶ | |||
| 4.3.4. https certificate verification | 4.3.4. https certificate verification | |||
| To establish a secured connection to dereference a URI, a client MUST | To establish a secured connection to dereference a URI, a client MUST | |||
| verify that the service's identity is an acceptable match for the | verify that the service's identity is an acceptable match for the | |||
| URI's origin server. Certificate verification is used to prevent | URI's origin server. Certificate verification is used to prevent | |||
| server impersonation by an on-path attacker or by an attacker that | server impersonation by an on-path attacker or by an attacker that | |||
| controls name resolution. This process requires that a client be | controls name resolution. This process requires that a client be | |||
| configured with a set of trust anchors. | configured with a set of trust anchors. | |||
| In general, a client MUST verify the service identity using the | In general, a client MUST verify the service identity using the | |||
| verification process defined in Section 6 of [RFC6125] (for a | verification process defined in Section 6 of [RFC6125]. The client | |||
| reference identifier of type URI-ID) unless the client has been | MUST construct a reference identity from the service's host: if the | |||
| specifically configured to accept some other form of verification. | host is a literal IP address (Section 4.3.5), the reference identity | |||
| For example, a client might be connecting to a server whose address | is an IP-ID, otherwise the host is a name and the reference identity | |||
| and hostname are dynamic, with an expectation that the service will | is a DNS-ID. | |||
| present a specific certificate (or a certificate matching some | ||||
| externally defined reference identity) rather than one matching the | A reference identity of type CN-ID MUST NOT be used by clients. As | |||
| dynamic URI's origin server identifier. | noted in Section 6.2.1 of [RFC6125] a reference identity of type CN- | |||
| ID might be used by older clients. | ||||
| A client might be specially configured to accept an alternative form | ||||
| of server identity verification. For example, a client might be | ||||
| connecting to a server whose address and hostname are dynamic, with | ||||
| an expectation that the service will present a specific certificate | ||||
| (or a certificate matching some externally defined reference | ||||
| identity) rather than one matching the dynamic URI's origin server | ||||
| identifier. | ||||
| In special cases, it might be appropriate for a client to simply | In special cases, it might be appropriate for a client to simply | |||
| ignore the server's identity, but it must be understood that this | ignore the server's identity, but it must be understood that this | |||
| leaves a connection open to active attack. | leaves a connection open to active attack. | |||
| If the certificate is not valid for the URI's origin server, a user | If the certificate is not valid for the URI's origin server, a user | |||
| agent MUST either notify the user (user agents MAY give the user an | agent MUST either notify the user (user agents MAY give the user an | |||
| option to continue with the connection in any case) or terminate the | option to continue with the connection in any case) or terminate the | |||
| connection with a bad certificate error. Automated clients MUST log | connection with a bad certificate error. Automated clients MUST log | |||
| the error to an appropriate audit log (if available) and SHOULD | the error to an appropriate audit log (if available) and SHOULD | |||
| terminate the connection (with a bad certificate error). Automated | terminate the connection (with a bad certificate error). Automated | |||
| clients MAY provide a configuration setting that disables this check, | clients MAY provide a configuration setting that disables this check, | |||
| but MUST provide a setting which enables it. | but MUST provide a setting which enables it. | |||
| 4.3.5. IP-ID reference identity | ||||
| A server that is identified using an IP address literal in the "host" | ||||
| field of an "https" URI has a reference identity of type IP-ID. An | ||||
| IP version 4 address uses the "IPv4address" ABNF rule and an IP | ||||
| version 6 address uses the "IP-literal" production with the | ||||
| "IPv6address" option; see Section 3.2.2 of [RFC3986]. A reference | ||||
| identity of IP-ID contains the decoded bytes of the IP address. | ||||
| An IP version 4 address is 4 octets and an IP version 6 address is 16 | ||||
| octets. Use of IP-ID is not defined for any other IP version. The | ||||
| iPAddress choice in the certificate subjectAltName extension does not | ||||
| explicitly include the IP version and so relies on the length of the | ||||
| address to distinguish versions; see Section 4.2.1.6 of [RFC5280]. | ||||
| A reference identity of type IP-ID matches if the address is | ||||
| identical to an iPAddress value of the subjectAltName extension of | ||||
| the certificate. | ||||
| 5. Fields | 5. Fields | |||
| HTTP uses _fields_ to provide data in the form of extensible key/ | HTTP uses _fields_ to provide data in the form of extensible key/ | |||
| value pairs with a registered key namespace. Fields are sent and | value pairs with a registered key namespace. Fields are sent and | |||
| received within the header and trailer sections of messages | received within the header and trailer sections of messages | |||
| (Section 6). | (Section 6). | |||
| 5.1. Field Names | 5.1. Field Names | |||
| A field name labels the corresponding field value as having the | A field name labels the corresponding field value as having the | |||
| skipping to change at page 31, line 24 ¶ | skipping to change at page 33, line 14 ¶ | |||
| When a field name is only present once in a section, the combined | When a field name is only present once in a section, the combined | |||
| _field value_ for that field consists of the corresponding field line | _field value_ for that field consists of the corresponding field line | |||
| value. When a field name is repeated within a section, its combined | value. When a field name is repeated within a section, its combined | |||
| field value consists of the list of corresponding field line values | field value consists of the list of corresponding field line values | |||
| within that section, concatenated in order, with each non-empty field | within that section, concatenated in order, with each non-empty field | |||
| line value separated by a comma. | line value separated by a comma. | |||
| For example, this section: | For example, this section: | |||
| Example-Field: Foo, Bar | Example-Field: Foo, Bar | |||
| Example-Field: Baz | Example-Field: Baz | |||
| contains two field lines, both with the field name "Example-Field". | contains two field lines, both with the field name "Example-Field". | |||
| The first field line has a field line value of "Foo, Bar", while the | The first field line has a field line value of "Foo, Bar", while the | |||
| second field line value is "Baz". The field value for "Example- | second field line value is "Baz". The field value for "Example- | |||
| Field" is a list with three members: "Foo", "Bar", and "Baz". | Field" is a list with three members: "Foo", "Bar", and "Baz". | |||
| 5.3. Field Order | 5.3. Field Order | |||
| A recipient MAY combine multiple field lines within a field section | A recipient MAY combine multiple field lines within a field section | |||
| that have the same field name into one field line, without changing | that have the same field name into one field line, without changing | |||
| skipping to change at page 32, line 30 ¶ | skipping to change at page 34, line 12 ¶ | |||
| | processing fields. (See Appendix A.2.3 of [Kri2001] for | | processing fields. (See Appendix A.2.3 of [Kri2001] for | |||
| | details.) | | details.) | |||
| The order in which field lines with differing field names are | The order in which field lines with differing field names are | |||
| received in a section is not significant. However, it is good | received in a section is not significant. However, it is good | |||
| practice to send header fields that contain additional control data | practice to send header fields that contain additional control data | |||
| first, such as Host on requests and Date on responses, so that | first, such as Host on requests and Date on responses, so that | |||
| implementations can decide when not to handle a message as early as | implementations can decide when not to handle a message as early as | |||
| possible. | possible. | |||
| A server MUST NOT apply a request to the target resource until the | A server MUST NOT apply a request to the target resource until it | |||
| entire request header section is received, since later header field | receives the entire request header section, since later header field | |||
| lines might include conditionals, authentication credentials, or | lines might include conditionals, authentication credentials, or | |||
| deliberately misleading duplicate header fields that would impact | deliberately misleading duplicate header fields that could impact | |||
| request processing. | request processing. | |||
| 5.4. Field Limits | 5.4. Field Limits | |||
| HTTP does not place a predefined limit on the length of each field | HTTP does not place a predefined limit on the length of each field | |||
| line, field value, or on the length of a header or trailer section as | line, field value, or on the length of a header or trailer section as | |||
| a whole, as described in Section 2. Various ad hoc limitations on | a whole, as described in Section 2. Various ad hoc limitations on | |||
| individual lengths are found in practice, often depending on the | individual lengths are found in practice, often depending on the | |||
| specific field's semantics. | specific field's semantics. | |||
| skipping to change at page 33, line 12 ¶ | skipping to change at page 34, line 39 ¶ | |||
| fields would increase the server's vulnerability to request smuggling | fields would increase the server's vulnerability to request smuggling | |||
| attacks (Section 11.2 of [Messaging]). | attacks (Section 11.2 of [Messaging]). | |||
| A client MAY discard or truncate received field lines that are larger | A client MAY discard or truncate received field lines that are larger | |||
| than the client wishes to process if the field semantics are such | than the client wishes to process if the field semantics are such | |||
| that the dropped value(s) can be safely ignored without changing the | that the dropped value(s) can be safely ignored without changing the | |||
| message framing or response semantics. | message framing or response semantics. | |||
| 5.5. Field Values | 5.5. Field Values | |||
| HTTP field values typically have their syntax defined using ABNF | HTTP field values consist of a sequence of characters in a format | |||
| ([RFC5234]), using the extension defined in Section 5.6.1 as | defined by the field's grammar. Each field's grammar is usually | |||
| necessary, and are usually constrained to the range of US-ASCII | defined using ABNF ([RFC5234]). | |||
| characters. Fields needing a greater range of characters can use an | ||||
| encoding such as the one defined in [RFC8187]. | ||||
| field-value = *field-content | field-value = *field-content | |||
| field-content = field-vchar | field-content = field-vchar | |||
| [ 1*( SP / HTAB / field-vchar ) field-vchar ] | [ 1*( SP / HTAB / field-vchar ) field-vchar ] | |||
| field-vchar = VCHAR / obs-text | field-vchar = VCHAR / obs-text | |||
| A field value does not include leading or trailing whitespace. When | ||||
| a specific version of HTTP allows such whitespace to appear in a | ||||
| message, a field parsing implementation MUST exclude such whitespace | ||||
| prior to evaluating the field value. | ||||
| Field values are usually constrained to the range of US-ASCII | ||||
| characters [USASCII]. Fields needing a greater range of characters | ||||
| can use an encoding, such as the one defined in [RFC8187]. | ||||
| Historically, HTTP allowed field content with text in the ISO-8859-1 | Historically, HTTP allowed field content with text in the ISO-8859-1 | |||
| charset [ISO-8859-1], supporting other charsets only through use of | charset [ISO-8859-1], supporting other charsets only through use of | |||
| [RFC2047] encoding. In practice, most HTTP field values use only a | [RFC2047] encoding. Specifications for newly defined fields SHOULD | |||
| subset of the US-ASCII charset [USASCII]. Newly defined fields | limit their values to visible US-ASCII octets (VCHAR), SP, and HTAB. | |||
| SHOULD limit their values to US-ASCII octets. A recipient SHOULD | A recipient SHOULD treat other octets in field content (obs-text) as | |||
| treat other octets in field content (obs-text) as opaque data. | opaque data. | |||
| Field values containing control (CTL) characters such as CR or LF are | Field values containing CR or NUL characters are invalid and | |||
| invalid; recipients MUST either reject a field value containing | dangerous, due to the varying ways that implementations might parse | |||
| control characters, or convert them to SP before processing or | and interpret those characters; a recipient of CR or NUL within a | |||
| forwarding the message. | field value MUST either reject the message or replace each of those | |||
| characters with SP before further processing or forwarding of that | ||||
| message. Field values containing other CTL characters are also | ||||
| invalid; however, recipients MAY retain such characters for the sake | ||||
| of robustness if they only appear within safe field value contexts | ||||
| (e.g., opaque data). | ||||
| Leading and trailing whitespace in raw field values is removed upon | Fields that only anticipate a single member as the field value are | |||
| field parsing (e.g., Section 5.1 of [Messaging]). Field definitions | referred to as _singleton fields_. | |||
| where leading or trailing whitespace in values is significant will | ||||
| have to use a container syntax such as quoted-string (Section 5.6.4). | ||||
| Commas (",") often are used to separate members in field values. | Fields that allow multiple members as the field value are referred to | |||
| Fields that allow multiple members are referred to as _list-based | as _list-based fields_. The list operator extension of Section 5.6.1 | |||
| fields_. Fields that only anticipate a single member are referred to | is used as a common notation for defining field values that can | |||
| as _singleton fields_. | contain multiple members. | |||
| Because commas are used as a generic delimiter between members, they | Because commas (",") are used as the delimiter between members, they | |||
| need to be treated with care if they are allowed as data within a | need to be treated with care if they are allowed as data within a | |||
| member. This is true for both list-based and singleton fields, since | member. This is true for both list-based and singleton fields, since | |||
| a singleton field might be sent with multiple members erroneously; | a singleton field might be erroneously sent with multiple members and | |||
| being able to detect this condition improves interoperability. | detecting such errors improves interoperability. Fields that expect | |||
| Fields that expect to contain a comma within a member, such as an | to contain a comma within a member, such as within an HTTP-date or | |||
| HTTP-date or URI-reference element, ought to be defined with | URI-reference element, ought to be defined with delimiters around | |||
| delimiters around that element to distinguish any comma within that | that element to distinguish any comma within that data from potential | |||
| data from potential list separators. | list separators. | |||
| For example, a textual date and a URI (either of which might contain | For example, a textual date and a URI (either of which might contain | |||
| a comma) could be safely carried in list-based field values like | a comma) could be safely carried in list-based field values like | |||
| these: | these: | |||
| Example-URI-Field: "http://example.com/a.html,foo", | Example-URIs: "http://example.com/a.html,foo", | |||
| "http://without-a-comma.example.com/" | "http://without-a-comma.example.com/" | |||
| Example-Date-Field: "Sat, 04 May 1996", "Wed, 14 Sep 2005" | Example-Dates: "Sat, 04 May 1996", "Wed, 14 Sep 2005" | |||
| Note that double-quote delimiters are almost always used with the | ||||
| Note that double-quote delimiters almost always are used with the | ||||
| quoted-string production; using a different syntax inside double- | quoted-string production; using a different syntax inside double- | |||
| quotes will likely cause unnecessary confusion. | quotes will likely cause unnecessary confusion. | |||
| Many fields (such as Content-Type, defined in Section 8.3) use a | Many fields (such as Content-Type, defined in Section 8.3) use a | |||
| common syntax for parameters that allows both unquoted (token) and | common syntax for parameters that allows both unquoted (token) and | |||
| quoted (quoted-string) syntax for a parameter value (Section 5.6.6). | quoted (quoted-string) syntax for a parameter value (Section 5.6.6). | |||
| Use of common syntax allows recipients to reuse existing parser | Use of common syntax allows recipients to reuse existing parser | |||
| components. When allowing both forms, the meaning of a parameter | components. When allowing both forms, the meaning of a parameter | |||
| value ought to be the same whether it was received as a token or a | value ought to be the same whether it was received as a token or a | |||
| quoted string. | quoted string. | |||
| Historically, HTTP field values could be extended over multiple lines | Historically, HTTP field values could be extended over multiple lines | |||
| by preceding each extra line with at least one space or horizontal | by preceding each extra line with at least one space or horizontal | |||
| tab (obs-fold). This document assumes that any such obsolete line | tab (obs-fold). This document assumes that any such obsolete line | |||
| folding has been replaced with one or more SP octets prior to | folding has been removed prior to interpreting the field value (e.g., | |||
| interpreting the field value, as described in Section 5.2 of | as described in Section 5.2 of [Messaging]). | |||
| [Messaging]. | ||||
| | *Note:* This specification does not use ABNF rules to define | | *Note:* For defining field value syntax, this specification | |||
| | each "Field Name: Field Value" pair, as was done in earlier | | uses an ABNF rule named after the field name to define the | |||
| | editions (published before [RFC7230]). Instead, ABNF rules are | | allowed grammar for that field's value (after said value has | |||
| | named according to each registered field name, wherein the rule | | been extracted from the underlying messaging syntax and | |||
| | defines the valid grammar for that field's corresponding field | | multiple instances combined into a list). | |||
| | values (i.e., after the field value has been extracted by a | ||||
| | generic field parser). | ||||
| 5.6. Common Rules for Defining Field Values | 5.6. Common Rules for Defining Field Values | |||
| 5.6.1. Lists (#rule ABNF Extension) | 5.6.1. Lists (#rule ABNF Extension) | |||
| A #rule extension to the ABNF rules of [RFC5234] is used to improve | A #rule extension to the ABNF rules of [RFC5234] is used to improve | |||
| readability in the definitions of some list-based field values. | readability in the definitions of some list-based field values. | |||
| A construct "#" is defined, similar to "*", for defining comma- | A construct "#" is defined, similar to "*", for defining comma- | |||
| delimited lists of elements. The full form is "<n>#<m>element" | delimited lists of elements. The full form is "<n>#<m>element" | |||
| skipping to change at page 36, line 24 ¶ | skipping to change at page 37, line 49 ¶ | |||
| In contrast, the following values would be invalid, since at least | In contrast, the following values would be invalid, since at least | |||
| one non-empty element is required by the example-list production: | one non-empty element is required by the example-list production: | |||
| "" | "" | |||
| "," | "," | |||
| ", ," | ", ," | |||
| 5.6.2. Tokens | 5.6.2. Tokens | |||
| Many HTTP field values are defined using common syntax components, | ||||
| separated by whitespace or specific delimiting characters. | ||||
| Delimiters are chosen from the set of US-ASCII visual characters not | ||||
| allowed in a token (DQUOTE and "(),/:;<=>?@[\]{}"). | ||||
| Tokens are short textual identifiers that do not include whitespace | Tokens are short textual identifiers that do not include whitespace | |||
| or delimiters. | or delimiters. | |||
| token = 1*tchar | token = 1*tchar | |||
| tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" | tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" | |||
| / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" | / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" | |||
| / DIGIT / ALPHA | / DIGIT / ALPHA | |||
| ; any VCHAR, except delimiters | ; any VCHAR, except delimiters | |||
| Many HTTP field values are defined using common syntax components, | ||||
| separated by whitespace or specific delimiting characters. | ||||
| Delimiters are chosen from the set of US-ASCII visual characters not | ||||
| allowed in a token (DQUOTE and "(),/:;<=>?@[\]{}"). | ||||
| 5.6.3. Whitespace | 5.6.3. Whitespace | |||
| This specification uses three rules to denote the use of linear | This specification uses three rules to denote the use of linear | |||
| whitespace: OWS (optional whitespace), RWS (required whitespace), and | whitespace: OWS (optional whitespace), RWS (required whitespace), and | |||
| BWS ("bad" whitespace). | BWS ("bad" whitespace). | |||
| The OWS rule is used where zero or more linear whitespace octets | The OWS rule is used where zero or more linear whitespace octets | |||
| might appear. For protocol elements where optional whitespace is | might appear. For protocol elements where optional whitespace is | |||
| preferred to improve readability, a sender SHOULD generate the | preferred to improve readability, a sender SHOULD generate the | |||
| optional whitespace as a single SP; otherwise, a sender SHOULD NOT | optional whitespace as a single SP; otherwise, a sender SHOULD NOT | |||
| generate optional whitespace except as needed to white out invalid or | generate optional whitespace except as needed to overwrite invalid or | |||
| unwanted protocol elements during in-place message filtering. | unwanted protocol elements during in-place message filtering. | |||
| The RWS rule is used when at least one linear whitespace octet is | The RWS rule is used when at least one linear whitespace octet is | |||
| required to separate field tokens. A sender SHOULD generate RWS as a | required to separate field tokens. A sender SHOULD generate RWS as a | |||
| single SP. | single SP. | |||
| OWS and RWS have the same semantics as a single SP. Any content | OWS and RWS have the same semantics as a single SP. Any content | |||
| known to be defined as OWS or RWS MAY be replaced with a single SP | known to be defined as OWS or RWS MAY be replaced with a single SP | |||
| before interpreting it or forwarding the message downstream. | before interpreting it or forwarding the message downstream. | |||
| skipping to change at page 41, line 14 ¶ | skipping to change at page 42, line 47 ¶ | |||
| A _message_ consists of control data to describe and route the | A _message_ consists of control data to describe and route the | |||
| message, a headers lookup table of key/value pairs for extending that | message, a headers lookup table of key/value pairs for extending that | |||
| control data and conveying additional information about the sender, | control data and conveying additional information about the sender, | |||
| message, content, or context, a potentially unbounded stream of | message, content, or context, a potentially unbounded stream of | |||
| content, and a trailers lookup table of key/value pairs for | content, and a trailers lookup table of key/value pairs for | |||
| communicating information obtained while sending the content. | communicating information obtained while sending the content. | |||
| Framing and control data is sent first, followed by a header section | Framing and control data is sent first, followed by a header section | |||
| containing fields for the headers table. When a message includes | containing fields for the headers table. When a message includes | |||
| content, the content is sent after the header section and potentially | content, the content is sent after the header section, potentially | |||
| interleaved with zero or more trailer sections containing fields for | followed by a trailer section that might contain fields for the | |||
| the trailers table. | trailers table. | |||
| Messages are expected to be processed as a stream, wherein the | Messages are expected to be processed as a stream, wherein the | |||
| purpose of that stream and its continued processing is revealed while | purpose of that stream and its continued processing is revealed while | |||
| being read. Hence, control data describes what the recipient needs | being read. Hence, control data describes what the recipient needs | |||
| to know immediately, header fields describe what needs to be known | to know immediately, header fields describe what needs to be known | |||
| before receiving content, the content (when present) presumably | before receiving content, the content (when present) presumably | |||
| contains what the recipient wants or needs to fulfill the message | contains what the recipient wants or needs to fulfill the message | |||
| semantics, and trailer fields provide additional metadata that can be | semantics, and trailer fields provide optional metadata that was | |||
| dropped (safely ignored) when not desired. | unknown prior to sending the content. | |||
| Messages are intended to be _self-descriptive_: everything a | Messages are intended to be _self-descriptive_: everything a | |||
| recipient needs to know about the message can be determined by | recipient needs to know about the message can be determined by | |||
| looking at the message itself, after decoding or reconstituting parts | looking at the message itself, after decoding or reconstituting parts | |||
| that have been compressed or elided in transit, without requiring an | that have been compressed or elided in transit, without requiring an | |||
| understanding of the sender's current application state (established | understanding of the sender's current application state (established | |||
| via prior messages). | via prior messages). However, a client MUST retain knowledge of the | |||
| request when parsing, interpreting, or caching a corresponding | ||||
| response. For example, responses to the HEAD method look just like | ||||
| the beginning of a response to GET, but cannot be parsed in the same | ||||
| manner. | ||||
| Note that this message abstraction is a generalization across many | Note that this message abstraction is a generalization across many | |||
| versions of HTTP, including features that might not be found in some | versions of HTTP, including features that might not be found in some | |||
| versions. For example, trailers were introduced within the HTTP/1.1 | versions. For example, trailers were introduced within the HTTP/1.1 | |||
| chunked transfer coding as a single trailer section after the | chunked transfer coding as a trailer section after the content. An | |||
| content. An equivalent feature is present in HTTP/2 and HTTP/3 | equivalent feature is present in HTTP/2 and HTTP/3 within the header | |||
| within the header block that terminates each stream. However, | block that terminates each stream. | |||
| multiple trailer sections interleaved with content have only been | ||||
| deployed as frame extensions. | ||||
| 6.1. Framing and Completeness | 6.1. Framing and Completeness | |||
| Message framing indicates how each message begins and ends, such that | Message framing indicates how each message begins and ends, such that | |||
| each message can be distinguished from other messages or noise on the | each message can be distinguished from other messages or noise on the | |||
| same connection. Each major version of HTTP defines its own framing | same connection. Each major version of HTTP defines its own framing | |||
| mechanism. | mechanism. | |||
| HTTP/0.9 and early deployments of HTTP/1.0 used closure of the | HTTP/0.9 and early deployments of HTTP/1.0 used closure of the | |||
| underlying connection to end a response. For backwards | underlying connection to end a response. For backwards | |||
| skipping to change at page 42, line 4 ¶ | skipping to change at page 43, line 42 ¶ | |||
| 6.1. Framing and Completeness | 6.1. Framing and Completeness | |||
| Message framing indicates how each message begins and ends, such that | Message framing indicates how each message begins and ends, such that | |||
| each message can be distinguished from other messages or noise on the | each message can be distinguished from other messages or noise on the | |||
| same connection. Each major version of HTTP defines its own framing | same connection. Each major version of HTTP defines its own framing | |||
| mechanism. | mechanism. | |||
| HTTP/0.9 and early deployments of HTTP/1.0 used closure of the | HTTP/0.9 and early deployments of HTTP/1.0 used closure of the | |||
| underlying connection to end a response. For backwards | underlying connection to end a response. For backwards | |||
| compatibility, this implicit framing is also allowed in HTTP/1.1. | compatibility, this implicit framing is also allowed in HTTP/1.1. | |||
| However, implicit framing can fail to distinguish an incomplete | However, implicit framing can fail to distinguish an incomplete | |||
| response if the connection closes early. For that reason, almost all | response if the connection closes early. For that reason, almost all | |||
| modern implementations use explicit framing in the form of length- | modern implementations use explicit framing in the form of length- | |||
| delimited sequences of message data. | delimited sequences of message data. | |||
| A message is considered _complete_ when all of the octets indicated | A message is considered _complete_ when all of the octets indicated | |||
| by its framing are available. Note that, when no explicit framing is | by its framing are available. Note that, when no explicit framing is | |||
| used, a response message that is ended by the underlying connection's | used, a response message that is ended by the underlying connection's | |||
| close is considered complete even though it might be | close is considered complete even though it might be | |||
| indistinguishable from an incomplete response, unless a transport- | indistinguishable from an incomplete response, unless a transport- | |||
| level error indicates that it is not complete. | level error indicates that it is not complete. | |||
| 6.2. Control Data | 6.2. Control Data | |||
| Messages start with control data that describe its primary purpose. | Messages start with control data that describe its primary purpose. | |||
| Request message control data includes a request method (Section 9), | Request message control data includes a request method (Section 9), | |||
| request target (Section 7.1), and protocol version (Section 2.5). | request target (Section 7.1), and protocol version (Section 2.5). | |||
| Response message control data includes a status code (Section 15), | Response message control data includes a status code (Section 15), | |||
| optional reason phrase, and protocol version. | optional reason phrase, and protocol version. | |||
| In HTTP/1.1 [Messaging] and earlier, control data is sent as the | In HTTP/1.1 ([Messaging]) and earlier, control data is sent as the | |||
| first line of a message. In HTTP/2 ([RFC7540]) and HTTP/3 ([HTTP3]), | first line of a message. In HTTP/2 ([RFC7540]) and HTTP/3 ([HTTP3]), | |||
| control data is sent as pseudo-header fields with a reserved name | control data is sent as pseudo-header fields with a reserved name | |||
| prefix (e.g., ":authority"). | prefix (e.g., ":authority"). | |||
| Every HTTP message has a protocol version. Depending on the version | Every HTTP message has a protocol version. Depending on the version | |||
| in use, it might be identified within the message explicitly or | in use, it might be identified within the message explicitly or | |||
| inferred by the connection over which the message is received. | inferred by the connection over which the message is received. | |||
| Recipients use that version information to determine limitations or | Recipients use that version information to determine limitations or | |||
| potential for later communication with that sender. | potential for later communication with that sender. | |||
| skipping to change at page 43, line 12 ¶ | skipping to change at page 44, line 48 ¶ | |||
| from the response status code or header fields (e.g., Server) that | from the response status code or header fields (e.g., Server) that | |||
| the server improperly handles higher request versions. | the server improperly handles higher request versions. | |||
| A server SHOULD send a response version equal to the highest version | A server SHOULD send a response version equal to the highest version | |||
| to which the server is conformant that has a major version less than | to which the server is conformant that has a major version less than | |||
| or equal to the one received in the request. A server MUST NOT send | or equal to the one received in the request. A server MUST NOT send | |||
| a version to which it is not conformant. A server can send a 505 | a version to which it is not conformant. A server can send a 505 | |||
| (HTTP Version Not Supported) response if it wishes, for any reason, | (HTTP Version Not Supported) response if it wishes, for any reason, | |||
| to refuse service of the client's major protocol version. | to refuse service of the client's major protocol version. | |||
| When an HTTP message is received with a major version number that the | A recipient that receives a message with a major version number that | |||
| recipient implements, but a higher minor version number than what the | it implements and a minor version number higher than what it | |||
| recipient implements, the recipient SHOULD process the message as if | implements SHOULD process the message as if it were in the highest | |||
| it were in the highest minor version within that major version to | minor version within that major version to which the recipient is | |||
| which the recipient is conformant. A recipient can assume that a | conformant. A recipient can assume that a message with a higher | |||
| message with a higher minor version, when sent to a recipient that | minor version, when sent to a recipient that has not yet indicated | |||
| has not yet indicated support for that higher version, is | support for that higher version, is sufficiently backwards-compatible | |||
| sufficiently backwards-compatible to be safely processed by any | to be safely processed by any implementation of the same major | |||
| implementation of the same major version. | version. | |||
| 6.3. Header Fields | 6.3. Header Fields | |||
| Fields (Section 5) that are sent/received before the content are | Fields (Section 5) that are sent/received before the content are | |||
| referred to as "header fields" (or just "headers", colloquially). | referred to as "header fields" (or just "headers", colloquially). | |||
| The _header section_ of a message consists of a sequence of of header | The _header section_ of a message consists of a sequence of header | |||
| field lines. Each header field might modify or extend message | field lines. Each header field might modify or extend message | |||
| semantics, describe the sender, define the content, or provide | semantics, describe the sender, define the content, or provide | |||
| additional context. | additional context. | |||
| | *Note:* We refer to named fields specifically as a "header | | *Note:* We refer to named fields specifically as a "header | |||
| | field" when they are only allowed to be sent in the header | | field" when they are only allowed to be sent in the header | |||
| | section. | | section. | |||
| 6.4. Content | 6.4. Content | |||
| skipping to change at page 45, line 14 ¶ | skipping to change at page 46, line 47 ¶ | |||
| 6.4.2. Identifying Content | 6.4.2. Identifying Content | |||
| When a complete or partial representation is transferred as message | When a complete or partial representation is transferred as message | |||
| content, it is often desirable for the sender to supply, or the | content, it is often desirable for the sender to supply, or the | |||
| recipient to determine, an identifier for a resource corresponding to | recipient to determine, an identifier for a resource corresponding to | |||
| that representation. | that representation. | |||
| For a request message: | For a request message: | |||
| o If the request has a Content-Location header field, then the | * If the request has a Content-Location header field, then the | |||
| sender asserts that the content is a representation of the | sender asserts that the content is a representation of the | |||
| resource identified by the Content-Location field value. However, | resource identified by the Content-Location field value. However, | |||
| such an assertion cannot be trusted unless it can be verified by | such an assertion cannot be trusted unless it can be verified by | |||
| other means (not defined by this specification). The information | other means (not defined by this specification). The information | |||
| might still be useful for revision history links. | might still be useful for revision history links. | |||
| o Otherwise, the content is unidentified. | * Otherwise, the content is unidentified. | |||
| For a response message, the following rules are applied in order | For a response message, the following rules are applied in order | |||
| until a match is found: | until a match is found: | |||
| 1. If the request method is HEAD or the response status code is 204 | 1. If the request method is HEAD or the response status code is 204 | |||
| (No Content) or 304 (Not Modified), there is no content in the | (No Content) or 304 (Not Modified), there is no content in the | |||
| response. | response. | |||
| 2. If the request method is GET and the response status code is 200 | 2. If the request method is GET and the response status code is 200 | |||
| (OK), the content is a representation of the resource identified | (OK), the content is a representation of the resource identified | |||
| skipping to change at page 46, line 16 ¶ | skipping to change at page 47, line 43 ¶ | |||
| value is a reference to a URI different from the target URI, then | value is a reference to a URI different from the target URI, then | |||
| the sender asserts that the content is a representation of the | the sender asserts that the content is a representation of the | |||
| resource identified by the Content-Location field value. | resource identified by the Content-Location field value. | |||
| However, such an assertion cannot be trusted unless it can be | However, such an assertion cannot be trusted unless it can be | |||
| verified by other means (not defined by this specification). | verified by other means (not defined by this specification). | |||
| 7. Otherwise, the content is unidentified. | 7. Otherwise, the content is unidentified. | |||
| 6.5. Trailer Fields | 6.5. Trailer Fields | |||
| Fields (Section 5) that are sent/received after the header section | Fields (Section 5) that are located within a _trailer section_ are | |||
| has ended (usually after the content begins to stream) are referred | are referred to as "trailer fields" (or just "trailers", | |||
| to as "trailer fields" (or just "trailers", colloquially) and located | colloquially). Trailer fields can be useful for supplying message | |||
| within a _trailer section_. Trailer fields can be useful for | integrity checks, digital signatures, delivery metrics, or post- | |||
| supplying message integrity checks, digital signatures, delivery | processing status information. | |||
| metrics, or post-processing status information. | ||||
| Trailer fields ought to be processed and stored separately from the | Trailer fields ought to be processed and stored separately from the | |||
| fields in the header section to avoid contradicting message semantics | fields in the header section to avoid contradicting message semantics | |||
| known at the time the header section was complete. The presence or | known at the time the header section was complete. The presence or | |||
| absence of certain header fields might impact choices made for the | absence of certain header fields might impact choices made for the | |||
| routing or processing of the message as a whole before the trailers | routing or processing of the message as a whole before the trailers | |||
| are received; those choices cannot be unmade by the later discovery | are received; those choices cannot be unmade by the later discovery | |||
| of trailer fields. | of trailer fields. | |||
| 6.5.1. Limitations on use of Trailers | 6.5.1. Limitations on use of Trailers | |||
| Trailer sections are only possible when supported by the version of | A trailer section is only possible when supported by the version of | |||
| HTTP in use and enabled by an explicit framing mechanism. For | HTTP in use and enabled by an explicit framing mechanism. For | |||
| example, the chunked coding in HTTP/1.1 allows a trailer section to | example, the chunked coding in HTTP/1.1 allows a trailer section to | |||
| be sent after the content (Section 7.1.2 of [Messaging]). | be sent after the content (Section 7.1.2 of [Messaging]). | |||
| Many fields cannot be processed outside the header section because | Many fields cannot be processed outside the header section because | |||
| their evaluation is necessary prior to receiving the content, such as | their evaluation is necessary prior to receiving the content, such as | |||
| those that describe message framing, routing, authentication, request | those that describe message framing, routing, authentication, request | |||
| modifiers, response controls, or content format. A sender MUST NOT | modifiers, response controls, or content format. A sender MUST NOT | |||
| generate a trailer field unless the sender knows the corresponding | generate a trailer field unless the sender knows the corresponding | |||
| header field name's definition permits the field to be sent in | header field name's definition permits the field to be sent in | |||
| skipping to change at page 47, line 16 ¶ | skipping to change at page 48, line 34 ¶ | |||
| forward messages from one protocol version to another. If the entire | forward messages from one protocol version to another. If the entire | |||
| message can be buffered in transit, some intermediaries could merge | message can be buffered in transit, some intermediaries could merge | |||
| trailer fields into the header section (as appropriate) before it is | trailer fields into the header section (as appropriate) before it is | |||
| forwarded. However, in most cases, the trailers are simply | forwarded. However, in most cases, the trailers are simply | |||
| discarded. A recipient MUST NOT merge a trailer field into a header | discarded. A recipient MUST NOT merge a trailer field into a header | |||
| section unless the recipient understands the corresponding header | section unless the recipient understands the corresponding header | |||
| field definition and that definition explicitly permits and defines | field definition and that definition explicitly permits and defines | |||
| how trailer field values can be safely merged. | how trailer field values can be safely merged. | |||
| The presence of the keyword "trailers" in the TE header field | The presence of the keyword "trailers" in the TE header field | |||
| (Section 10.1.4) indicates that the client is willing to accept | (Section 10.1.4) of a request indicates that the client is willing to | |||
| trailer fields, on behalf of itself and any downstream clients. For | accept trailer fields, on behalf of itself and any downstream | |||
| requests from an intermediary, this implies that all downstream | clients. For requests from an intermediary, this implies that all | |||
| clients are willing to accept trailer fields in the forwarded | downstream clients are willing to accept trailer fields in the | |||
| response. Note that the presence of "trailers" does not mean that | forwarded response. Note that the presence of "trailers" does not | |||
| the client(s) will process any particular trailer field in the | mean that the client(s) will process any particular trailer field in | |||
| response; only that the trailer section(s) will not be dropped by any | the response; only that the trailer section(s) will not be dropped by | |||
| of the clients. | any of the clients. | |||
| Because of the potential for trailer fields to be discarded in | Because of the potential for trailer fields to be discarded in | |||
| transit, a server SHOULD NOT generate trailer fields that it believes | transit, a server SHOULD NOT generate trailer fields that it believes | |||
| are necessary for the user agent to receive. | are necessary for the user agent to receive. | |||
| 6.5.2. Processing Trailer Fields | 6.5.2. Processing Trailer Fields | |||
| The "Trailer" header field (Section 10.1.5) can be sent to indicate | ||||
| fields likely to be sent in the trailer section, which allows | ||||
| recipients to prepare for their receipt before processing the | ||||
| content. For example, this could be useful if a field name indicates | ||||
| that a dynamic checksum should be calculated as the content is | ||||
| received and then immediately checked upon receipt of the trailer | ||||
| field value. | ||||
| Like header fields, trailer fields with the same name are processed | Like header fields, trailer fields with the same name are processed | |||
| in the order received; multiple trailer field lines with the same | in the order received; multiple trailer field lines with the same | |||
| name have the equivalent semantics as appending the multiple values | name have the equivalent semantics as appending the multiple values | |||
| as a list of members, even when the field lines are received in | as a list of members. Trailer fields that might be generated more | |||
| separate trailer sections. Trailer fields that might be generated | than once during a message MUST be defined as a list-based field even | |||
| more than once during a message MUST be defined as a list-based field | if each member value is only processed once per field line received. | |||
| even if each member value is only processed once per field line | ||||
| received. | ||||
| Trailer fields are expected (but not required) to be processed one | ||||
| trailer section at a time. That is, for each trailer section | ||||
| received, a recipient that is looking for trailer fields will parse | ||||
| the received section into fields, invoke any associated processing | ||||
| for those fields at that point in the message processing, and then | ||||
| append those fields to the set of trailer fields received for the | ||||
| overall message. | ||||
| This behavior allows for iterative processing of trailer fields that | ||||
| contain incremental signatures or mid-stream status information, and | ||||
| fields that might refer to each other's values within the same | ||||
| section. However, there is no guarantee that trailer sections won't | ||||
| shift in relation to the content stream, or won't be recombined (or | ||||
| dropped) in transit. Trailer fields that refer to data outside the | ||||
| present trailer section need to use self-descriptive references | ||||
| (i.e., refer to the data by name, ordinal position, or an octet | ||||
| range) rather than assume it is the data most recently received. | ||||
| Likewise, at the end of a message, a recipient MAY treat the entire | At the end of a message, a recipient MAY treat the set of received | |||
| set of received trailer fields as one data structure to be considered | trailer fields as a data structure of key/value pairs, similar to | |||
| as the message concludes. Additional processing expectations, if | (but separate from) the header fields. Additional processing | |||
| any, can be defined within the field specification for a field | expectations, if any, can be defined within the field specification | |||
| intended for use in trailers. | for a field intended for use in trailers. | |||
| 7. Routing HTTP Messages | 7. Routing HTTP Messages | |||
| 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 | |||
| establishment or reuse of an inbound connection. The corresponding | establishment or reuse of an inbound connection. The corresponding | |||
| response routing follows the same connection chain back to the | response routing follows the same connection chain back to the | |||
| client. | client. | |||
| 7.1. Determining the Target Resource | 7.1. Determining the Target Resource | |||
| skipping to change at page 48, line 46 ¶ | skipping to change at page 50, line 15 ¶ | |||
| To perform an action on a _target resource_, the client sends a | To perform an action on a _target resource_, the client sends a | |||
| request message containing enough components of its parsed target URI | request message containing enough components of its parsed target URI | |||
| to enable recipients to identify that same resource. For historical | to enable recipients to identify that same resource. For historical | |||
| reasons, the parsed target URI components, collectively referred to | reasons, the parsed target URI components, collectively referred to | |||
| as the _request target_, are sent within the message control data and | as the _request target_, are sent within the message control data and | |||
| the Host header field (Section 7.2). | the Host header field (Section 7.2). | |||
| There are two unusual cases for which the request target components | There are two unusual cases for which the request target components | |||
| are in a method-specific form: | are in a method-specific form: | |||
| o For CONNECT (Section 9.3.6), the request target is the host name | * For CONNECT (Section 9.3.6), the request target is the host name | |||
| and port number of the tunnel destination, separated by a colon. | and port number of the tunnel destination, separated by a colon. | |||
| o For OPTIONS (Section 9.3.7), the request target can be a single | * For OPTIONS (Section 9.3.7), the request target can be a single | |||
| asterisk ("*"). | asterisk ("*"). | |||
| See the respective method definitions for details. These forms MUST | See the respective method definitions for details. These forms MUST | |||
| NOT be used with other methods. | NOT be used with other methods. | |||
| Upon receipt of a client's request, a server reconstructs the target | Upon receipt of a client's request, a server reconstructs the target | |||
| URI from the received components in accordance with their local | URI from the received components in accordance with their local | |||
| configuration and incoming connection context. This reconstruction | configuration and incoming connection context. This reconstruction | |||
| is specific to each major protocol version. For example, Appendix of | is specific to each major protocol version. For example, Appendix of | |||
| [Messaging] defines how a server determines the target URI of an | [Messaging] defines how a server determines the target URI of an | |||
| skipping to change at page 49, line 32 ¶ | skipping to change at page 50, line 48 ¶ | |||
| distinguish among resources while servicing requests for multiple | distinguish among resources while servicing requests for multiple | |||
| host names. | host names. | |||
| In HTTP/2 [RFC7540] and HTTP/3 [HTTP3], the Host header field is, in | In HTTP/2 [RFC7540] and HTTP/3 [HTTP3], the Host header field is, in | |||
| some cases, supplanted by the ":authority" pseudo-header field of a | some cases, supplanted by the ":authority" pseudo-header field of a | |||
| request's control data. | request's control data. | |||
| Host = uri-host [ ":" port ] ; Section 4 | Host = uri-host [ ":" port ] ; Section 4 | |||
| The target URI's authority information is critical for handling a | The target URI's authority information is critical for handling a | |||
| request. A user agent SHOULD generate Host as the first field in the | request. A user agent MUST generate a Host header field in a request | |||
| header section of a request unless it has already generated that | unless it sends that information as an ":authority" pseudo-header | |||
| information as an ":authority" pseudo-header field. | field. A user agent that sends Host SHOULD send it as the first | |||
| field in the header section of a request. | ||||
| For example, a GET request to the origin server for | For example, a GET request to the origin server for | |||
| <http://www.example.org/pub/WWW/> would begin with: | <http://www.example.org/pub/WWW/> would begin with: | |||
| GET /pub/WWW/ HTTP/1.1 | GET /pub/WWW/ HTTP/1.1 | |||
| Host: www.example.org | Host: www.example.org | |||
| Since the host and port information acts as an application-level | Since the host and port information acts as an application-level | |||
| routing mechanism, it is a frequent target for malware seeking to | routing mechanism, it is a frequent target for malware seeking to | |||
| poison a shared cache or redirect a request to an unintended server. | poison a shared cache or redirect a request to an unintended server. | |||
| An interception proxy is particularly vulnerable if it relies on the | An interception proxy is particularly vulnerable if it relies on the | |||
| host and port information for redirecting requests to internal | host and port information for redirecting requests to internal | |||
| servers, or for use as a cache key in a shared cache, without first | servers, or for use as a cache key in a shared cache, without first | |||
| verifying that the intercepted connection is targeting a valid IP | verifying that the intercepted connection is targeting a valid IP | |||
| address for that host. | address for that host. | |||
| skipping to change at page 51, line 12 ¶ | skipping to change at page 52, line 31 ¶ | |||
| that the origin server has rejected the request because it appears to | that the origin server has rejected the request because it appears to | |||
| have been misdirected (Section 15.5.20). | have been misdirected (Section 15.5.20). | |||
| 7.5. Response Correlation | 7.5. Response Correlation | |||
| A connection might be used for multiple request/response exchanges. | A connection might be used for multiple request/response exchanges. | |||
| The mechanism used to correlate between request and response messages | The mechanism used to correlate between request and response messages | |||
| is version dependent; some versions of HTTP use implicit ordering of | is version dependent; some versions of HTTP use implicit ordering of | |||
| messages, while others use an explicit identifier. | messages, while others use an explicit identifier. | |||
| Responses (both final and interim) can be sent at any time after a | All responses, regardless of the status code (including interim | |||
| request is received, even if it is not yet complete. However, | responses) can be sent at any time after a request is received, even | |||
| clients (including intermediaries) might abandon a request if the | if the request is not yet complete. A response can complete before | |||
| response is not forthcoming within a reasonable period of time. | its corresponding request is complete. Likewise, clients are not | |||
| expected to wait any specific amount of time for a response. Clients | ||||
| (including intermediaries) might abandon a request if the response is | ||||
| not forthcoming within a reasonable period of time. | ||||
| A client that receives a response while it is still sending the | ||||
| associated request SHOULD continue sending that request, unless it | ||||
| receives an explicit indication to the contrary (see, e.g., | ||||
| Section 9.5 of [Messaging] and Section 6.4 of [RFC7540]). | ||||
| 7.6. Message Forwarding | 7.6. Message Forwarding | |||
| As described in Section 3.7, intermediaries can serve a variety of | As described in Section 3.7, 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. | |||
| Intermediaries are expected to forward messages even when protocol | ||||
| elements are not recognized (e.g., new methods, status codes, or | ||||
| field names), since that preserves extensibility for downstream | ||||
| recipients. | ||||
| An intermediary not acting as a tunnel MUST implement the Connection | An intermediary not acting as a tunnel MUST implement the Connection | |||
| header field, as specified in Section 7.6.1, and exclude fields from | header field, as specified in Section 7.6.1, and exclude fields from | |||
| being forwarded that are only intended for the incoming connection. | being forwarded that are only intended for the incoming connection. | |||
| An intermediary MUST NOT forward a message to itself unless it is | An intermediary MUST NOT forward a message to itself unless it is | |||
| protected from an infinite request loop. In general, an intermediary | protected from an infinite request loop. In general, an intermediary | |||
| 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. | |||
| skipping to change at page 52, line 31 ¶ | skipping to change at page 54, line 25 ¶ | |||
| recipients on the chain ("end-to-end"), enabling the message to be | recipients on the chain ("end-to-end"), enabling the message to be | |||
| self-descriptive and allowing future connection-specific extensions | self-descriptive and allowing future connection-specific extensions | |||
| to be deployed without fear that they will be blindly forwarded by | to be deployed without fear that they will be blindly forwarded by | |||
| older intermediaries. | older intermediaries. | |||
| Furthermore, intermediaries SHOULD remove or replace field(s) whose | Furthermore, intermediaries SHOULD remove or replace field(s) whose | |||
| semantics are known to require removal before forwarding, whether or | semantics are known to require removal before forwarding, whether or | |||
| not they appear as a Connection option, after applying those fields' | not they appear as a Connection option, after applying those fields' | |||
| semantics. This includes but is not limited to: | semantics. This includes but is not limited to: | |||
| o Proxy-Connection (Appendix C.2.2 of [Messaging]) | * Proxy-Connection (Appendix C.2.2 of [Messaging]) | |||
| o Keep-Alive (Section 19.7.1 of [RFC2068]) | ||||
| o TE (Section 10.1.4) | * Keep-Alive (Section 19.7.1 of [RFC2068]) | |||
| o Trailer (Section 10.1.5) | * TE (Section 10.1.4) | |||
| o Transfer-Encoding (Section 6.1 of [Messaging]) | * Transfer-Encoding (Section 6.1 of [Messaging]) | |||
| o Upgrade (Section 7.8) | * Upgrade (Section 7.8) | |||
| The Connection header field's value has the following grammar: | The Connection header field's value has the following grammar: | |||
| Connection = #connection-option | Connection = #connection-option | |||
| connection-option = token | connection-option = token | |||
| Connection options are case-insensitive. | Connection options are case-insensitive. | |||
| A sender MUST NOT send a connection option corresponding to a field | A sender MUST NOT send a connection option corresponding to a field | |||
| that is intended for all recipients of the content. For example, | that is intended for all recipients of the content. For example, | |||
| Cache-Control is never appropriate as a connection option | Cache-Control is never appropriate as a connection option | |||
| (Section 5.2 of [Caching]). | (Section 5.2 of [Caching]). | |||
| The connection options do not always correspond to a field present in | Connection options do not always correspond to a field present in the | |||
| the message, since a connection-specific field might not be needed if | message, since a connection-specific field might not be needed if | |||
| there are no parameters associated with a connection option. In | there are no parameters associated with a connection option. In | |||
| contrast, a connection-specific field that is received without a | contrast, a connection-specific field received without a | |||
| corresponding connection option usually indicates that the field has | corresponding connection option usually indicates that the field has | |||
| been improperly forwarded by an intermediary and ought to be ignored | been improperly forwarded by an intermediary and ought to be ignored | |||
| by the recipient. | by the recipient. | |||
| When defining new connection options, specification authors ought to | When defining a new connection option that does not correspond to a | |||
| document it as reserved field name and register that definition in | field, specification authors ought to reserve the corresponding field | |||
| the Hypertext Transfer Protocol (HTTP) Field Name Registry | name anyway in order to avoid later collisions. Such reserved field | |||
| (Section 16.3.1), to avoid collisions. | names are registered in the Hypertext Transfer Protocol (HTTP) Field | |||
| Name Registry (Section 16.3.1). | ||||
| 7.6.2. Max-Forwards | 7.6.2. Max-Forwards | |||
| The "Max-Forwards" header field provides a mechanism with the TRACE | The "Max-Forwards" header field provides a mechanism with the TRACE | |||
| (Section 9.3.8) and OPTIONS (Section 9.3.7) request methods to limit | (Section 9.3.8) and OPTIONS (Section 9.3.7) request methods to limit | |||
| the number of times that the request is forwarded by proxies. This | the number of times that the request is forwarded by proxies. This | |||
| can be useful when the client is attempting to trace a request that | can be useful when the client is attempting to trace a request that | |||
| appears to be failing or looping mid-chain. | appears to be failing or looping mid-chain. | |||
| Max-Forwards = 1*DIGIT | Max-Forwards = 1*DIGIT | |||
| skipping to change at page 55, line 17 ¶ | skipping to change at page 57, line 17 ¶ | |||
| However, comments in Via are optional, and a recipient MAY remove | However, comments in Via are optional, and a recipient MAY remove | |||
| them prior to forwarding the message. | them prior to forwarding the message. | |||
| For example, a request message could be sent from an HTTP/1.0 user | For example, a request message could be sent from an HTTP/1.0 user | |||
| agent to an internal proxy code-named "fred", which uses HTTP/1.1 to | agent to an internal proxy code-named "fred", which uses HTTP/1.1 to | |||
| forward the request to a public proxy at p.example.net, which | forward the request to a public proxy at p.example.net, which | |||
| completes the request by forwarding it to the origin server at | completes the request by forwarding it to the origin server at | |||
| www.example.com. The request received by www.example.com would then | www.example.com. The request received by www.example.com would then | |||
| have the following Via header field: | have the following Via header field: | |||
| Via: 1.0 fred, 1.1 p.example.net | Via: 1.0 fred, 1.1 p.example.net | |||
| An intermediary used as a portal through a network firewall SHOULD | An intermediary used as a portal through a network firewall SHOULD | |||
| NOT forward the names and ports of hosts within the firewall region | NOT forward the names and ports of hosts within the firewall region | |||
| unless it is explicitly enabled to do so. If not enabled, such an | unless it is explicitly enabled to do so. If not enabled, such an | |||
| intermediary SHOULD replace each received-by host of any host behind | intermediary SHOULD replace each received-by host of any host behind | |||
| the firewall by an appropriate pseudonym for that host. | the firewall by an appropriate pseudonym for that host. | |||
| An intermediary MAY combine an ordered subsequence of Via header | An intermediary MAY combine an ordered subsequence of Via header | |||
| field list members into a single member if the entries have identical | field list members into a single member if the entries have identical | |||
| received-protocol values. For example, | received-protocol values. For example, | |||
| Via: 1.0 ricky, 1.1 ethel, 1.1 fred, 1.0 lucy | Via: 1.0 ricky, 1.1 ethel, 1.1 fred, 1.0 lucy | |||
| 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 list members unless they are all | A sender SHOULD NOT combine multiple list members 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 members that have | replaced by pseudonyms. A sender MUST NOT combine members that have | |||
| different received-protocol values. | different received-protocol values. | |||
| 7.7. Message Transformations | 7.7. Message Transformations | |||
| Some intermediaries include features for transforming messages and | Some intermediaries include features for transforming messages and | |||
| their content. A proxy might, for example, convert between image | their content. A proxy might, for example, convert between image | |||
| skipping to change at page 57, line 40 ¶ | skipping to change at page 59, line 40 ¶ | |||
| Upgrade header field to indicate the acceptable protocols, in order | Upgrade header field to indicate the acceptable protocols, in order | |||
| of descending preference. | of descending preference. | |||
| A server MAY send an Upgrade header field in any other response to | A server MAY send an Upgrade header field in any other response to | |||
| advertise that it implements support for upgrading to the listed | advertise that it implements support for upgrading to the listed | |||
| protocols, in order of descending preference, when appropriate for a | protocols, in order of descending preference, when appropriate for a | |||
| future request. | future request. | |||
| The following is a hypothetical example sent by a client: | The following is a hypothetical example sent by a client: | |||
| GET /hello HTTP/1.1 | GET /hello HTTP/1.1 | |||
| Host: www.example.com | Host: www.example.com | |||
| Connection: upgrade | Connection: upgrade | |||
| Upgrade: websocket, IRC/6.9, RTA/x11 | Upgrade: websocket, IRC/6.9, RTA/x11 | |||
| The capabilities and nature of the application-level communication | The capabilities and nature of the application-level communication | |||
| after the protocol change is entirely dependent upon the new | after the protocol change is entirely dependent upon the new | |||
| protocol(s) chosen. However, immediately after sending the 101 | protocol(s) chosen. However, immediately after sending the 101 | |||
| (Switching Protocols) response, the server is expected to continue | (Switching Protocols) response, the server is expected to continue | |||
| responding to the original request as if it had received its | responding to the original request as if it had received its | |||
| equivalent within the new protocol (i.e., the server still has an | equivalent within the new protocol (i.e., the server still has an | |||
| outstanding request to satisfy after the protocol has been changed, | outstanding request to satisfy after the protocol has been changed, | |||
| and is expected to do so without requiring the request to be | and is expected to do so without requiring the request to be | |||
| repeated). | repeated). | |||
| skipping to change at page 58, line 21 ¶ | skipping to change at page 60, line 27 ¶ | |||
| follows that with the new protocol's equivalent of a response to a | follows that with the new protocol's equivalent of a response to a | |||
| GET on the target resource. This allows a connection to be upgraded | GET on the target resource. This allows a connection to be upgraded | |||
| to protocols with the same semantics as HTTP without the latency cost | to protocols with the same semantics as HTTP without the latency cost | |||
| of an additional round trip. A server MUST NOT switch protocols | of an additional round trip. A server MUST NOT switch protocols | |||
| unless the received message semantics can be honored by the new | unless the received message semantics can be honored by the new | |||
| protocol; an OPTIONS request can be honored by any protocol. | protocol; an OPTIONS request can be honored by any protocol. | |||
| The following is an example response to the above hypothetical | The following is an example response to the above hypothetical | |||
| request: | request: | |||
| HTTP/1.1 101 Switching Protocols | HTTP/1.1 101 Switching Protocols | |||
| Connection: upgrade | Connection: upgrade | |||
| Upgrade: websocket | Upgrade: websocket | |||
| [... data stream switches to websocket with an appropriate response | [... data stream switches to websocket with an appropriate response | |||
| (as defined by new protocol) to the "GET /hello" request ...] | (as defined by new protocol) to the "GET /hello" request ...] | |||
| When Upgrade is sent, the sender MUST also send a Connection header | A sender of Upgrade MUST also send an "Upgrade" connection option in | |||
| field (Section 7.6.1) that contains an "upgrade" connection option, | the Connection header field (Section 7.6.1) to inform intermediaries | |||
| in order to prevent Upgrade from being accidentally forwarded by | not to forward this field. A server that receives an Upgrade header | |||
| intermediaries that might not implement the listed protocols. A | field in an HTTP/1.0 request MUST ignore that Upgrade field. | |||
| server MUST ignore an Upgrade header field that is received in an | ||||
| HTTP/1.0 request. | ||||
| A client cannot begin using an upgraded protocol on the connection | A client cannot begin using an upgraded protocol on the connection | |||
| until it has completely sent the request message (i.e., the client | until it has completely sent the request message (i.e., the client | |||
| can't change the protocol it is sending in the middle of a message). | can't change the protocol it is sending in the middle of a message). | |||
| If a server receives both an Upgrade and an Expect header field with | If a server receives both an Upgrade and an Expect header field with | |||
| the "100-continue" expectation (Section 10.1.1), the server MUST send | the "100-continue" expectation (Section 10.1.1), the server MUST send | |||
| a 100 (Continue) response before sending a 101 (Switching Protocols) | a 100 (Continue) response before sending a 101 (Switching Protocols) | |||
| response. | response. | |||
| The Upgrade header field only applies to switching protocols on top | The Upgrade header field only applies to switching protocols on top | |||
| skipping to change at page 59, line 24 ¶ | skipping to change at page 61, line 31 ¶ | |||
| The representation data associated with an HTTP message is either | The representation data associated with an HTTP message is either | |||
| provided as the content of the message or referred to by the message | provided as the content of the message or referred to by the message | |||
| semantics and the target URI. The representation data is in a format | semantics and the target URI. The representation data is in a format | |||
| and encoding defined by the representation metadata header fields. | and encoding defined by the representation metadata header fields. | |||
| The data type of the representation data is determined via the header | The data type of the representation data is determined via the header | |||
| fields Content-Type and Content-Encoding. These define a two-layer, | fields Content-Type and Content-Encoding. These define a two-layer, | |||
| ordered encoding model: | ordered encoding model: | |||
| representation-data := Content-Encoding( Content-Type( bits ) ) | representation-data := Content-Encoding( Content-Type( data ) ) | |||
| 8.2. Representation Metadata | 8.2. Representation Metadata | |||
| Representation header fields provide metadata about the | Representation header fields provide metadata about the | |||
| representation. When a message includes content, the representation | representation. When a message includes content, the representation | |||
| header fields describe how to interpret that data. In a response to | header fields describe how to interpret that data. In a response to | |||
| a HEAD request, the representation header fields describe the | a HEAD request, the representation header fields describe the | |||
| representation data that would have been enclosed in the content if | representation data that would have been enclosed in the content if | |||
| the same request had been a GET. | the same request had been a GET. | |||
| skipping to change at page 59, line 49 ¶ | skipping to change at page 62, line 7 ¶ | |||
| message content or the selected representation, as determined by the | message content or the selected representation, as determined by the | |||
| message semantics. The indicated media type defines both the data | message semantics. The indicated media type defines both the data | |||
| format and how that data is intended to be processed by a recipient, | format and how that data is intended to be processed by a recipient, | |||
| within the scope of the received message semantics, after any content | within the scope of the received message semantics, after any content | |||
| codings indicated by Content-Encoding are decoded. | codings indicated by Content-Encoding are decoded. | |||
| Content-Type = media-type | Content-Type = media-type | |||
| Media types are defined in Section 8.3.1. An example of the field is | Media types are defined in Section 8.3.1. An example of the field is | |||
| Content-Type: text/html; charset=ISO-8859-4 | Content-Type: text/html; charset=ISO-8859-4 | |||
| A sender that generates a message containing content SHOULD generate | A sender that generates a message containing content SHOULD generate | |||
| a Content-Type header field in that message unless the intended media | a Content-Type header field in that message unless the intended media | |||
| type of the enclosed representation is unknown to the sender. If a | type of the enclosed representation is unknown to the sender. If a | |||
| Content-Type header field is not present, the recipient MAY either | Content-Type header field is not present, the recipient MAY either | |||
| assume a media type of "application/octet-stream" ([RFC2046], | assume a media type of "application/octet-stream" ([RFC2046], | |||
| Section 4.5.1) or examine the data to determine its type. | Section 4.5.1) or examine the data to determine its type. | |||
| In practice, resource owners do not always properly configure their | In practice, resource owners do not always properly configure their | |||
| origin server to provide the correct Content-Type for a given | origin server to provide the correct Content-Type for a given | |||
| skipping to change at page 60, line 38 ¶ | skipping to change at page 62, line 42 ¶ | |||
| member of the list, but note that some implementations might have | member of the list, but note that some implementations might have | |||
| different error handling behaviors, leading to interoperability and/ | different error handling behaviors, leading to interoperability and/ | |||
| or security issues. | or security issues. | |||
| 8.3.1. Media Type | 8.3.1. Media Type | |||
| HTTP uses media types [RFC2046] in the Content-Type (Section 8.3) and | HTTP uses media types [RFC2046] in the Content-Type (Section 8.3) and | |||
| Accept (Section 12.5.1) header fields in order to provide open and | Accept (Section 12.5.1) header fields in order to provide open and | |||
| extensible data typing and type negotiation. Media types define both | extensible data typing and type negotiation. Media types define both | |||
| a data format and various processing models: how to process that data | a data format and various processing models: how to process that data | |||
| in accordance with each context in which it is received. | in accordance with the message context. | |||
| media-type = type "/" subtype parameters | media-type = type "/" subtype parameters | |||
| type = token | type = token | |||
| subtype = token | subtype = token | |||
| The type and subtype tokens are case-insensitive. | The type and subtype tokens are case-insensitive. | |||
| The type/subtype MAY be followed by semicolon-delimited parameters | The type/subtype MAY be followed by semicolon-delimited parameters | |||
| (Section 5.6.6) in the form of name=value pairs. The presence or | (Section 5.6.6) in the form of name=value pairs. The presence or | |||
| absence of a parameter might be significant to the processing of a | absence of a parameter might be significant to the processing of a | |||
| skipping to change at page 61, line 21 ¶ | skipping to change at page 63, line 24 ¶ | |||
| Text/HTML;Charset="utf-8" | Text/HTML;Charset="utf-8" | |||
| text/html; charset="utf-8" | text/html; charset="utf-8" | |||
| text/html;charset=UTF-8 | text/html;charset=UTF-8 | |||
| Media types ought to be registered with IANA according to the | Media types ought to be registered with IANA according to the | |||
| procedures defined in [BCP13]. | procedures defined in [BCP13]. | |||
| 8.3.2. Charset | 8.3.2. 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 ([RFC6365], Section 1.3) of a textual representation. | |||
| identified by a case-insensitive token. | In the fields defined by this document, charset names appear either | |||
| in parameters (Content-Type), or, for Accept-Encoding, in the form of | ||||
| charset = token | a plain token. In both cases, charset names are matched case- | |||
| insensitively. | ||||
| 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 Section 2 of [RFC2978]. | according to the procedures defined in Section 2 of [RFC2978]. | |||
| | *Note:* In theory, charset names are defined by the "mime- | | *Note:* In theory, charset names are defined by the "mime- | |||
| | charset" ABNF rule defined in Section 2.3 of [RFC2978] (as | | charset" ABNF rule defined in Section 2.3 of [RFC2978] (as | |||
| | corrected in [Err1912]). That rule allows two characters that | | corrected in [Err1912]). That rule allows two characters that | |||
| | are not included in "token" ("{" and "}"), but no charset name | | are not included in "token" ("{" and "}"), but no charset name | |||
| | registered at the time of this writing includes braces (see | | registered at the time of this writing includes braces (see | |||
| | [Err5433]). | | [Err5433]). | |||
| 8.3.3. Canonicalization and Text Defaults | 8.3.3. Multipart Types | |||
| Media types are registered with a canonical form in order to be | ||||
| interoperable among systems with varying native encoding formats. | ||||
| Representations selected or transferred via HTTP ought to be in | ||||
| canonical form, for many of the same reasons described by the | ||||
| Multipurpose Internet Mail Extensions (MIME) [RFC2045]. However, the | ||||
| performance characteristics of email deployments (i.e., store and | ||||
| forward messages to peers) are significantly different from those | ||||
| common to HTTP and the Web (server-based information services). | ||||
| Furthermore, MIME's constraints for the sake of compatibility with | ||||
| older mail transfer protocols do not apply to HTTP (see Appendix B of | ||||
| [Messaging]). | ||||
| MIME's canonical form requires that media subtypes of the "text" type | ||||
| use CRLF as the text line break. HTTP allows the transfer of text | ||||
| media with plain CR or LF alone representing a line break, when such | ||||
| line breaks are consistent for an entire representation. An HTTP | ||||
| sender MAY generate, and a recipient MUST be able to parse, line | ||||
| breaks in text media that consist of CRLF, bare CR, or bare LF. In | ||||
| addition, text media in HTTP is not limited to charsets that use | ||||
| octets 13 and 10 for CR and LF, respectively. This flexibility | ||||
| regarding line breaks applies only to text within a representation | ||||
| that has been assigned a "text" media type; it does not apply to | ||||
| "multipart" types or HTTP elements outside the content (e.g., header | ||||
| fields). | ||||
| If a representation is encoded with a content-coding, the underlying | ||||
| data ought to be in a form defined above prior to being encoded. | ||||
| 8.3.4. Multipart Types | ||||
| MIME provides for a number of "multipart" types - encapsulations of | MIME provides for a number of "multipart" types - encapsulations of | |||
| one or more representations within a single message body. All | one or more representations within a single message body. All | |||
| multipart types share a common syntax, as defined in Section 5.1.1 of | multipart types share a common syntax, as defined in Section 5.1.1 of | |||
| [RFC2046], and include a boundary parameter as part of the media type | [RFC2046], and include a boundary parameter as part of the media type | |||
| value. The message body is itself a protocol element; a sender MUST | value. The message body is itself a protocol element; a sender MUST | |||
| generate only CRLF to represent line breaks between body parts. | generate only CRLF to represent line breaks between body parts. | |||
| HTTP message framing does not use the multipart boundary as an | HTTP message framing does not use the multipart boundary as an | |||
| indicator of message body length, though it might be used by | indicator of message body length, though it might be used by | |||
| skipping to change at page 62, line 52 ¶ | skipping to change at page 64, line 27 ¶ | |||
| media type, and thus what decoding mechanisms have to be applied in | media type, and thus what decoding mechanisms have to be applied in | |||
| order to obtain data in the media type referenced by the Content-Type | order to obtain data in the media type referenced by the Content-Type | |||
| header field. Content-Encoding is primarily used to allow a | header field. Content-Encoding is primarily used to allow a | |||
| representation's data to be compressed without losing the identity of | representation's data to be compressed without losing the identity of | |||
| its underlying media type. | its underlying media type. | |||
| Content-Encoding = #content-coding | Content-Encoding = #content-coding | |||
| An example of its use is | An example of its use is | |||
| Content-Encoding: gzip | Content-Encoding: gzip | |||
| If one or more encodings have been applied to a representation, the | If one or more encodings have been applied to a representation, the | |||
| sender that applied the encodings MUST generate a Content-Encoding | sender that applied the encodings MUST generate a Content-Encoding | |||
| header field that lists the content codings in the order in which | header field that lists the content codings in the order in which | |||
| they were applied. Note that the coding named "identity" is reserved | they were applied. Note that the coding named "identity" is reserved | |||
| for its special role in Accept-Encoding, and thus SHOULD NOT be | for its special role in Accept-Encoding, and thus SHOULD NOT be | |||
| included. | included. | |||
| Additional information about the encoding parameters can be provided | Additional information about the encoding parameters can be provided | |||
| by other header fields not defined by this specification. | by other header fields not defined by this specification. | |||
| skipping to change at page 64, line 50 ¶ | skipping to change at page 66, line 27 ¶ | |||
| representation. | representation. | |||
| Content-Language = #language-tag | Content-Language = #language-tag | |||
| Language tags are defined in Section 8.5.1. The primary purpose of | Language tags are defined in Section 8.5.1. The primary purpose of | |||
| Content-Language is to allow a user to identify and differentiate | Content-Language is to allow a user to identify and differentiate | |||
| representations according to the users' own preferred language. | representations according to the users' own preferred language. | |||
| Thus, if the content is intended only for a Danish-literate audience, | Thus, if the content is intended only for a Danish-literate audience, | |||
| the appropriate field is | the appropriate field is | |||
| Content-Language: da | Content-Language: da | |||
| If no Content-Language is specified, the default is that the content | If no Content-Language is specified, the default is that the content | |||
| is intended for all language audiences. This might mean that the | is intended for all language audiences. This might mean that the | |||
| sender does not consider it to be specific to any natural language, | sender does not consider it to be specific to any natural language, | |||
| or that the sender does not know for which language it is intended. | or that the sender does not know for which language it is intended. | |||
| Multiple languages MAY be listed for content that is intended for | Multiple languages MAY be listed for content that is intended for | |||
| multiple audiences. For example, a rendition of the "Treaty of | multiple audiences. For example, a rendition of the "Treaty of | |||
| Waitangi", presented simultaneously in the original Maori and English | Waitangi", presented simultaneously in the original Maori and English | |||
| versions, would call for | versions, would call for | |||
| Content-Language: mi, en | Content-Language: mi, en | |||
| However, just because multiple languages are present within a | However, just because multiple languages are present within a | |||
| representation does not mean that it is intended for multiple | representation does not mean that it is intended for multiple | |||
| 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 limited | Content-Language MAY be applied to any media type - it is not limited | |||
| to textual documents. | to textual documents. | |||
| skipping to change at page 66, line 21 ¶ | skipping to change at page 67, line 48 ¶ | |||
| can be used to delimit framing (e.g., Section 6.2 of [Messaging]). | can be used to delimit framing (e.g., Section 6.2 of [Messaging]). | |||
| In other cases, Content-Length indicates the selected | In other cases, Content-Length indicates the selected | |||
| representation's current length, which can be used by recipients to | representation's current length, which can be used by recipients to | |||
| estimate transfer time or compare to previously stored | estimate transfer time or compare to previously stored | |||
| representations. | representations. | |||
| 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 | ||||
| that contains a Transfer-Encoding header field. | ||||
| A user agent SHOULD send a Content-Length in a request message when | A user agent SHOULD send Content-Length in a request when the method | |||
| no Transfer-Encoding is sent and the request method defines a meaning | defines a meaning for enclosed content and it is not sending | |||
| for enclosed content. For example, a Content-Length header field is | Transfer-Encoding. For example, a user agent normally sends Content- | |||
| normally sent in a POST request even when the value is 0 (indicating | Length in a POST request even when the value is 0 (indicating empty | |||
| empty content). A user agent SHOULD NOT send a Content-Length header | content). A user agent SHOULD NOT send a Content-Length header field | |||
| field when the request message does not contain content and the | when the request message does not contain content and the method | |||
| method semantics do not anticipate such data. | semantics do not anticipate such data. | |||
| A server MAY send a Content-Length header field in a response to a | A server MAY send a Content-Length header field in a response to a | |||
| HEAD request (Section 9.3.2); a server MUST NOT send Content-Length | HEAD request (Section 9.3.2); a server MUST NOT send Content-Length | |||
| in such a response unless its field value equals the decimal number | in such a response unless its field value equals the decimal number | |||
| of octets that would have been sent in the content of a response if | of octets that would have been sent in the content of a response if | |||
| the same request had used the GET method. | the same request had used the GET method. | |||
| A server MAY send a Content-Length header field in a 304 (Not | A server MAY send a Content-Length header field in a 304 (Not | |||
| Modified) response to a conditional GET request (Section 15.4.5); a | Modified) response to a conditional GET request (Section 15.4.5); a | |||
| server MUST NOT send Content-Length in such a response unless its | server MUST NOT send Content-Length in such a response unless its | |||
| skipping to change at page 67, line 15 ¶ | skipping to change at page 68, line 36 ¶ | |||
| Aside from the cases defined above, in the absence of Transfer- | Aside from the cases defined above, in the absence of Transfer- | |||
| Encoding, an origin server SHOULD send a Content-Length header field | Encoding, an origin server SHOULD send a Content-Length header field | |||
| when the content size is known prior to sending the complete header | when the content size is known prior to sending the complete header | |||
| section. This will allow downstream recipients to measure transfer | section. This will allow downstream recipients to measure transfer | |||
| progress, know when a received message is complete, and potentially | progress, know when a received message is complete, and potentially | |||
| reuse the connection for additional requests. | reuse the connection for additional requests. | |||
| Any Content-Length field value greater than or equal to zero is | Any Content-Length field value greater than or equal to zero is | |||
| valid. Since there is no predefined limit to the length of content, | valid. Since there is no predefined limit to the length of content, | |||
| a recipient MUST anticipate potentially large decimal numerals and | a recipient MUST anticipate potentially large decimal numerals and | |||
| prevent parsing errors due to integer conversion overflows | prevent parsing errors due to integer conversion overflows or | |||
| (Section 17.5). | precision loss due to integer conversion (Section 17.5). | |||
| If a message is received that has a Content-Length header field value | Because Content-Length is used for message delimitation in HTTP/1.1, | |||
| consisting of the same decimal value as a comma-separated list | its field value can impact how the message is parsed by downstream | |||
| (Section 5.6.1) - for example, "Content-Length: 42, 42" - indicating | recipients even when the immediate connection is not using HTTP/1.1. | |||
| that duplicate Content-Length header fields have been generated or | If the message is forwarded by a downstream intermediary, a Content- | |||
| combined by an upstream message processor, then the recipient MUST | Length field value that is inconsistent with the received message | |||
| either reject the message as invalid or replace the duplicated field | framing might cause a security failure due to request smuggling or | |||
| values with a single valid Content-Length field containing that | response splitting. | |||
| decimal value. | ||||
| As a result, a sender MUST NOT forward a message with a Content- | ||||
| Length header field value that is known to be incorrect. | ||||
| Likewise, a sender MUST NOT forward a message with a Content-Length | ||||
| header field value that does not match the ABNF above, with one | ||||
| exception: A recipient of a Content-Length header field value | ||||
| consisting of the same decimal value repeated as a comma-separated | ||||
| list (e.g, "Content-Length: 42, 42"), MAY either reject the message | ||||
| as invalid or replace that invalid field value with a single instance | ||||
| of the decimal value, since this likely indicates that a duplicate | ||||
| was generated or combined by an upstream message processor. | ||||
| 8.7. Content-Location | 8.7. Content-Location | |||
| The "Content-Location" header field references a URI that can be used | The "Content-Location" header field references a URI that can be used | |||
| as an identifier for a specific resource corresponding to the | as an identifier for a specific resource corresponding to the | |||
| representation in this message's content. In other words, if one | representation in this message's content. In other words, if one | |||
| were to perform a GET request on this URI at the time of this | were to perform a GET request on this URI at the time of this | |||
| message's generation, then a 200 (OK) response would contain the same | message's generation, then a 200 (OK) response would contain the same | |||
| representation that is enclosed as content in this message. | representation that is enclosed as content in this message. | |||
| skipping to change at page 68, line 21 ¶ | skipping to change at page 70, line 8 ¶ | |||
| local copies without the need for a subsequent GET request. | local copies without the need for a subsequent GET request. | |||
| If Content-Location is included in a 2xx (Successful) response | If Content-Location is included in a 2xx (Successful) response | |||
| message and its field value refers to a URI that differs from the | message and its field value refers to a URI that differs from the | |||
| target URI, then the origin server claims that the URI is an | target URI, then the origin server claims that the URI is an | |||
| identifier for a different resource corresponding to the enclosed | identifier for a different resource corresponding to the enclosed | |||
| representation. Such a claim can only be trusted if both identifiers | representation. Such a claim can only be trusted if both identifiers | |||
| share the same resource owner, which cannot be programmatically | share the same resource owner, which cannot be programmatically | |||
| determined via HTTP. | determined via HTTP. | |||
| o For a response to a GET or HEAD request, this is an indication | * For a response to a GET or HEAD request, this is an indication | |||
| that the target URI refers to a resource that is subject to | that the target URI refers to a resource that is subject to | |||
| content negotiation and the Content-Location field value is a more | content negotiation and the Content-Location field value is a more | |||
| specific identifier for the selected representation. | specific identifier for the selected representation. | |||
| o For a 201 (Created) response to a state-changing method, a | * For a 201 (Created) response to a state-changing method, a | |||
| Content-Location field value that is identical to the Location | Content-Location field value that is identical to the Location | |||
| field value indicates that this content is a current | field value indicates that this content is a current | |||
| representation of the newly created resource. | representation of the newly created resource. | |||
| o Otherwise, such a Content-Location indicates that this content is | * Otherwise, such a Content-Location indicates that this content is | |||
| a representation reporting on the requested action's status and | a representation reporting on the requested action's status and | |||
| that the same report is available (for future access with GET) at | that the same report is available (for future access with GET) at | |||
| the given URI. For example, a purchase transaction made via a | the given URI. For example, a purchase transaction made via a | |||
| POST request might include a receipt document as the content of | POST request might include a receipt document as the content of | |||
| the 200 (OK) response; the Content-Location field value provides | the 200 (OK) response; the Content-Location field value provides | |||
| an identifier for retrieving a copy of that same receipt in the | an identifier for retrieving a copy of that same receipt in the | |||
| future. | future. | |||
| A user agent that sends Content-Location in a request message is | A user agent that sends Content-Location in a request message is | |||
| stating that its value refers to where the user agent originally | stating that its value refers to where the user agent originally | |||
| skipping to change at page 69, line 39 ¶ | skipping to change at page 71, line 22 ¶ | |||
| necessarily the same as the representation enclosed as response | necessarily the same as the representation enclosed as response | |||
| content. | content. | |||
| In a successful response to a state-changing request, validator | In a successful response to a state-changing request, validator | |||
| fields describe the new representation that has replaced the prior | fields describe the new representation that has replaced the prior | |||
| selected representation as a result of processing the request. | selected representation as a result of processing the request. | |||
| For example, an ETag field in a 201 (Created) response communicates | For example, an ETag field in a 201 (Created) response communicates | |||
| the entity-tag of the newly created resource's representation, so | the entity-tag of the newly created resource's representation, so | |||
| that it can be used in later conditional requests to prevent the | that it can be used in later conditional requests to prevent the | |||
| "lost update" problem Section 13.1. | "lost update" problem (Section 13.1). | |||
| This specification defines two forms of metadata that are commonly | This specification defines two forms of metadata that are commonly | |||
| used to observe resource state and test for preconditions: | used to observe resource state and test for preconditions: | |||
| modification dates (Section 8.8.2) and opaque entity tags | modification dates (Section 8.8.2) and opaque entity tags | |||
| (Section 8.8.3). Additional metadata that reflects resource state | (Section 8.8.3). Additional metadata that reflects resource state | |||
| has been defined by various extensions of HTTP, such as Web | has been defined by various extensions of HTTP, such as Web | |||
| Distributed Authoring and Versioning (WebDAV, [RFC4918]), that are | Distributed Authoring and Versioning (WebDAV, [RFC4918]), that are | |||
| beyond the scope of this specification. A resource metadata value is | beyond the scope of this specification. A resource metadata value is | |||
| referred to as a _validator_ when it is used within a precondition. | referred to as a _validator_ when it is used within a precondition. | |||
| skipping to change at page 72, line 4 ¶ | skipping to change at page 73, line 32 ¶ | |||
| 8.8.2. Last-Modified | 8.8.2. Last-Modified | |||
| The "Last-Modified" header field in a response provides a timestamp | The "Last-Modified" header field in a response provides a timestamp | |||
| indicating the date and time at which the origin server believes the | indicating the date and time at which the origin server believes the | |||
| selected representation was last modified, as determined at the | selected representation was last modified, as determined at the | |||
| conclusion of handling the request. | conclusion of handling the request. | |||
| Last-Modified = HTTP-date | Last-Modified = HTTP-date | |||
| An example of its use is | An example of its use is | |||
| Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT | ||||
| Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT | ||||
| 8.8.2.1. Generation | 8.8.2.1. Generation | |||
| An origin server SHOULD send Last-Modified for any selected | An origin server SHOULD send Last-Modified for any selected | |||
| representation for which a last modification date can be reasonably | representation for which a last modification date can be reasonably | |||
| and consistently determined, since its use in conditional requests | and consistently determined, since its use in conditional requests | |||
| and evaluating cache freshness ([Caching]) results in a substantial | and evaluating cache freshness ([Caching]) can substantially reduce | |||
| reduction of HTTP traffic on the Internet and can be a significant | unnecessary transfers and significantly improve service availability | |||
| factor in improving service scalability and reliability. | and scalability. | |||
| A representation is typically the sum of many parts behind the | A representation is typically the sum of many parts behind the | |||
| resource interface. The last-modified time would usually be the most | resource interface. The last-modified time would usually be the most | |||
| recent time that any of those parts were changed. How that value is | recent time that any of those parts were changed. How that value is | |||
| determined for any given resource is an implementation detail beyond | determined for any given resource is an implementation detail beyond | |||
| the scope of this specification. What matters to HTTP is how | the scope of this specification. | |||
| recipients of the Last-Modified header field can use its value to | ||||
| make conditional requests and test the validity of locally cached | ||||
| responses. | ||||
| An origin server SHOULD obtain the Last-Modified value of the | An origin server SHOULD obtain the Last-Modified value of the | |||
| representation as close as possible to the time that it generates the | representation as close as possible to the time that it generates the | |||
| Date field value for its response. This allows a recipient to make | Date field value for its response. This allows a recipient to make | |||
| an accurate assessment of the representation's modification time, | an accurate assessment of the representation's modification time, | |||
| especially if the representation changes near the time that the | especially if the representation changes near the time that the | |||
| response is generated. | response is generated. | |||
| An origin server with a clock MUST NOT send a Last-Modified date that | An origin server with a clock MUST NOT send a Last-Modified date that | |||
| is later than the server's time of message origination (Date). If | is later than the server's time of message origination (Date). If | |||
| skipping to change at page 72, line 49 ¶ | skipping to change at page 74, line 26 ¶ | |||
| An origin server without a clock MUST NOT assign Last-Modified values | An origin server without a clock MUST NOT assign Last-Modified values | |||
| to a response unless these values were associated with the resource | to a response unless these values were associated with the resource | |||
| by some other system or user with a reliable clock. | by some other system or user with a reliable clock. | |||
| 8.8.2.2. Comparison | 8.8.2.2. Comparison | |||
| A Last-Modified time, when used as a validator in a request, is | A Last-Modified time, when used as a validator in a request, is | |||
| implicitly weak unless it is possible to deduce that it is strong, | implicitly weak unless it is possible to deduce that it is strong, | |||
| using the following rules: | using the following rules: | |||
| o The validator is being compared by an origin server to the actual | * The validator is being compared by an origin server to the actual | |||
| current validator for the representation and, | current validator for the representation and, | |||
| o That origin server reliably knows that the associated | * That origin server reliably knows that the associated | |||
| representation did not change twice during the second covered by | representation did not change twice during the second covered by | |||
| the presented validator; | the presented validator; | |||
| or | or | |||
| o The validator is about to be used by a client in an | * The validator is about to be used by a client in an | |||
| If-Modified-Since, If-Unmodified-Since, or If-Range header field, | If-Modified-Since, If-Unmodified-Since, or If-Range header field, | |||
| because the client has a cache entry for the associated | because the client has a cache entry for the associated | |||
| representation, and | representation, and | |||
| o That cache entry includes a Date value which is at least one | * That cache entry includes a Date value which is at least one | |||
| second after the Last-Modified value and the client has reason to | second after the Last-Modified value and the client has reason to | |||
| believe that they were generated by the same clock or that there | believe that they were generated by the same clock or that there | |||
| is enough difference between the Last-Modified and Date values to | is enough difference between the Last-Modified and Date values to | |||
| make clock synchronization issues unlikely; | make clock synchronization issues unlikely; | |||
| or | or | |||
| o The validator is being compared by an intermediate cache to the | * The validator is being compared by an intermediate cache to the | |||
| validator stored in its cache entry for the representation, and | validator stored in its cache entry for the representation, and | |||
| o That cache entry includes a Date value which is at least one | * That cache entry includes a Date value which is at least one | |||
| second after the Last-Modified value and the cache has reason to | second after the Last-Modified value and the cache has reason to | |||
| believe that they were generated by the same clock or that there | believe that they were generated by the same clock or that there | |||
| is enough difference between the Last-Modified and Date values to | is enough difference between the Last-Modified and Date values to | |||
| make clock synchronization issues unlikely. | make clock synchronization issues unlikely. | |||
| This method relies on the fact that if two different responses were | This method relies on the fact that if two different responses were | |||
| sent by the origin server during the same second, but both had the | sent by the origin server during the same second, but both had the | |||
| same Last-Modified time, then at least one of those responses would | same Last-Modified time, then at least one of those responses would | |||
| have a Date value equal to its Last-Modified time. | have a Date value equal to its Last-Modified time. | |||
| skipping to change at page 74, line 26 ¶ | skipping to change at page 75, line 49 ¶ | |||
| | backslash characters in entity tags. | | backslash characters in entity tags. | |||
| An entity-tag can be more reliable for validation than a modification | An entity-tag can be more reliable for validation than a modification | |||
| date in situations where it is inconvenient to store modification | date in situations where it is inconvenient to store modification | |||
| dates, where the one-second resolution of HTTP date values is not | dates, where the one-second resolution of HTTP date values is not | |||
| sufficient, or where modification dates are not consistently | sufficient, or where modification dates are not consistently | |||
| maintained. | maintained. | |||
| Examples: | Examples: | |||
| ETag: "xyzzy" | ETag: "xyzzy" | |||
| ETag: W/"xyzzy" | ETag: W/"xyzzy" | |||
| ETag: "" | ETag: "" | |||
| An entity-tag can be either a weak or strong validator, with strong | An entity-tag can be either a weak or strong validator, with strong | |||
| being the default. If an origin server provides an entity-tag for a | being the default. If an origin server provides an entity-tag for a | |||
| representation and the generation of that entity-tag does not satisfy | representation and the generation of that entity-tag does not satisfy | |||
| all of the characteristics of a strong validator (Section 8.8.1), | all of the characteristics of a strong validator (Section 8.8.1), | |||
| then the origin server MUST mark the entity-tag as weak by prefixing | then the origin server MUST mark the entity-tag as weak by prefixing | |||
| its opaque value with "W/" (case-sensitive). | its opaque value with "W/" (case-sensitive). | |||
| A sender MAY send the Etag field in a trailer section (see | A sender MAY send the Etag field in a trailer section (see | |||
| Section 6.5). However, since trailers are often ignored, it is | Section 6.5). However, since trailers are often ignored, it is | |||
| preferable to send Etag as a header field unless the entity-tag is | preferable to send Etag as a header field unless the entity-tag is | |||
| skipping to change at page 75, line 16 ¶ | skipping to change at page 76, line 36 ¶ | |||
| applied to all changes might use an internal revision number, perhaps | applied to all changes might use an internal revision number, perhaps | |||
| combined with a variance identifier for content negotiation, to | combined with a variance identifier for content negotiation, to | |||
| accurately differentiate between representations. Other | accurately differentiate between representations. Other | |||
| implementations might use a collision-resistant hash of | implementations might use a collision-resistant hash of | |||
| representation content, a combination of various file attributes, or | representation content, a combination of various file attributes, or | |||
| a modification timestamp that has sub-second resolution. | a modification timestamp that has sub-second resolution. | |||
| An origin server SHOULD send an ETag for any selected representation | An origin server SHOULD send an ETag for any selected representation | |||
| for which detection of changes can be reasonably and consistently | for which detection of changes can be reasonably and consistently | |||
| determined, since the entity-tag's use in conditional requests and | determined, since the entity-tag's use in conditional requests and | |||
| evaluating cache freshness ([Caching]) can result in a substantial | evaluating cache freshness ([Caching]) can substantially reduce | |||
| reduction of HTTP network traffic and can be a significant factor in | unnecessary transfers and significantly improve service availability, | |||
| improving service scalability and reliability. | scalability, and reliability. | |||
| 8.8.3.2. Comparison | 8.8.3.2. Comparison | |||
| There are two entity-tag comparison functions, depending on whether | There are two entity-tag comparison functions, depending on whether | |||
| or not the comparison context allows the use of weak validators: | or not the comparison context allows the use of weak validators: | |||
| _Strong comparison_: two entity-tags are equivalent if both are not | _Strong comparison_: two entity-tags are equivalent if both are not | |||
| weak and their opaque-tags match character-by-character. | weak and their opaque-tags match character-by-character. | |||
| _Weak comparison_: two entity-tags are equivalent if their opaque- | _Weak comparison_: two entity-tags are equivalent if their opaque- | |||
| tags match character-by-character, regardless of either or both | tags match character-by-character, regardless of either or both | |||
| being tagged as "weak". | being tagged as "weak". | |||
| The example below shows the results for a set of entity-tag pairs and | The example below shows the results for a set of entity-tag pairs and | |||
| both the weak and strong comparison function results: | both the weak and strong comparison function results: | |||
| -------- -------- ------------------- ----------------- | +========+========+===================+=================+ | |||
| ETag 1 ETag 2 Strong Comparison Weak Comparison | | ETag 1 | ETag 2 | Strong Comparison | Weak Comparison | | |||
| -------- -------- ------------------- ----------------- | +========+========+===================+=================+ | |||
| W/"1" W/"1" no match match | | W/"1" | W/"1" | no match | match | | |||
| W/"1" W/"2" no match no match | +--------+--------+-------------------+-----------------+ | |||
| W/"1" "1" no match match | | W/"1" | W/"2" | no match | no match | | |||
| "1" "1" match match | +--------+--------+-------------------+-----------------+ | |||
| -------- -------- ------------------- ----------------- | | W/"1" | "1" | no match | match | | |||
| +--------+--------+-------------------+-----------------+ | ||||
| | "1" | "1" | match | match | | ||||
| +--------+--------+-------------------+-----------------+ | ||||
| Table 3 | Table 3 | |||
| 8.8.3.3. Example: Entity-Tags Varying on Content-Negotiated Resources | 8.8.3.3. Example: Entity-Tags Varying on Content-Negotiated Resources | |||
| Consider a resource that is subject to content negotiation | Consider a resource that is subject to content negotiation | |||
| (Section 12), and where the representations sent in response to a GET | (Section 12), and where the representations sent in response to a GET | |||
| request vary based on the Accept-Encoding request header field | request vary based on the Accept-Encoding request header field | |||
| (Section 12.5.3): | (Section 12.5.3): | |||
| >> Request: | >> Request: | |||
| GET /index HTTP/1.1 | GET /index HTTP/1.1 | |||
| Host: www.example.com | Host: www.example.com | |||
| Accept-Encoding: gzip | Accept-Encoding: gzip | |||
| In this case, the response might or might not use the gzip content | In this case, the response might or might not use the gzip content | |||
| coding. If it does not, the response might look like: | coding. If it does not, the response might look like: | |||
| >> Response: | >> Response: | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Date: Fri, 26 Mar 2010 00:05:00 GMT | Date: Fri, 26 Mar 2010 00:05:00 GMT | |||
| ETag: "123-a" | ETag: "123-a" | |||
| Content-Length: 70 | Content-Length: 70 | |||
| Vary: Accept-Encoding | Vary: Accept-Encoding | |||
| Content-Type: text/plain | Content-Type: text/plain | |||
| Hello World! | ||||
| Hello World! | ||||
| Hello World! | ||||
| Hello World! | ||||
| Hello World! | ||||
| Hello World! | ||||
| Hello World! | ||||
| Hello World! | ||||
| Hello World! | ||||
| Hello World! | ||||
| An alternative representation that does use gzip content coding would | An alternative representation that does use gzip content coding would | |||
| be: | be: | |||
| >> Response: | >> Response: | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Date: Fri, 26 Mar 2010 00:05:00 GMT | Date: Fri, 26 Mar 2010 00:05:00 GMT | |||
| ETag: "123-b" | ETag: "123-b" | |||
| Content-Length: 43 | Content-Length: 43 | |||
| Vary: Accept-Encoding | Vary: Accept-Encoding | |||
| Content-Type: text/plain | Content-Type: text/plain | |||
| Content-Encoding: gzip | Content-Encoding: gzip | |||
| ...binary data... | ...binary data... | |||
| | *Note:* Content codings are a property of the representation | | *Note:* Content codings are a property of the representation | |||
| | data, so a strong entity-tag for a content-encoded | | data, so a strong entity-tag for a content-encoded | |||
| | representation has to be distinct from the entity tag of an | | representation has to be distinct from the entity tag of an | |||
| | unencoded representation to prevent potential conflicts during | | unencoded representation to prevent potential conflicts during | |||
| | cache updates and range requests. In contrast, transfer | | cache updates and range requests. In contrast, transfer | |||
| | codings (Section 7 of [Messaging]) apply only during message | | codings (Section 7 of [Messaging]) apply only during message | |||
| | transfer and do not result in distinct entity-tags. | | transfer and do not result in distinct entity-tags. | |||
| 8.8.4. When to Use Entity-Tags and Last-Modified Dates | 8.8.4. When to Use Entity-Tags and Last-Modified Dates | |||
| In 200 (OK) responses to GET or HEAD, an origin server: | In 200 (OK) responses to GET or HEAD, an origin server: | |||
| o SHOULD send an entity-tag validator unless it is not feasible to | * SHOULD send an entity-tag validator unless it is not feasible to | |||
| generate one. | generate one. | |||
| o MAY send a weak entity-tag instead of a strong entity-tag, if | * MAY send a weak entity-tag instead of a strong entity-tag, if | |||
| performance considerations support the use of weak entity-tags, or | performance considerations support the use of weak entity-tags, or | |||
| if it is unfeasible to send a strong entity-tag. | if it is unfeasible to send a strong entity-tag. | |||
| o SHOULD send a Last-Modified value if it is feasible to send one. | * SHOULD send a Last-Modified value if it is feasible to send one. | |||
| In other words, the preferred behavior for an origin server is to | In other words, the preferred behavior for an origin server is to | |||
| send both a strong entity-tag and a Last-Modified value in successful | send both a strong entity-tag and a Last-Modified value in successful | |||
| responses to a retrieval request. | responses to a retrieval request. | |||
| A client: | A client: | |||
| o MUST send that entity-tag in any cache validation request (using | * MUST send that entity-tag in any cache validation request (using | |||
| If-Match or If-None-Match) if an entity-tag has been provided by | If-Match or If-None-Match) if an entity-tag has been provided by | |||
| the origin server. | the origin server. | |||
| o SHOULD send the Last-Modified value in non-subrange cache | * SHOULD send the Last-Modified value in non-subrange cache | |||
| validation requests (using If-Modified-Since) if only a Last- | validation requests (using If-Modified-Since) if only a Last- | |||
| Modified value has been provided by the origin server. | Modified value has been provided by the origin server. | |||
| o MAY send the Last-Modified value in subrange cache validation | * MAY send the Last-Modified value in subrange cache validation | |||
| requests (using If-Unmodified-Since) if only a Last-Modified value | requests (using If-Unmodified-Since) if only a Last-Modified value | |||
| has been provided by an HTTP/1.0 origin server. The user agent | has been provided by an HTTP/1.0 origin server. The user agent | |||
| SHOULD provide a way to disable this, in case of difficulty. | SHOULD provide a way to disable this, in case of difficulty. | |||
| o SHOULD send both validators in cache validation requests if both | * SHOULD send both validators in cache validation requests if both | |||
| an entity-tag and a Last-Modified value have been provided by the | an entity-tag and a Last-Modified value have been provided by the | |||
| origin server. This allows both HTTP/1.0 and HTTP/1.1 caches to | origin server. This allows both HTTP/1.0 and HTTP/1.1 caches to | |||
| respond appropriately. | respond appropriately. | |||
| 9. Methods | 9. Methods | |||
| 9.1. Overview | 9.1. Overview | |||
| The request method token is the primary source of request semantics; | The request method token is the primary source of request semantics; | |||
| it indicates the purpose for which the client has made this request | it indicates the purpose for which the client has made this request | |||
| and what is expected by the client as a successful result. | and what is expected by the client as a successful result. | |||
| The request method's semantics might be further specialized by the | The request method's semantics might be further specialized by the | |||
| semantics of some header fields when present in a request if those | semantics of some header fields when present in a request if those | |||
| additional semantics do not conflict with the method. For example, a | additional semantics do not conflict with the method. For example, a | |||
| client can send conditional request header fields (Section 13.1) to | client can send conditional request header fields (Section 13.1) to | |||
| make the requested action conditional on the current state of the | make the requested action conditional on the current state of the | |||
| target resource. | target resource. | |||
| HTTP was originally designed to be usable as an interface to | HTTP is designed to be usable as an interface to distributed object | |||
| distributed object systems. The request method was envisioned as | systems. The request method invokes an action to be applied to a | |||
| applying semantics to a target resource in much the same way as | target resource in much the same way that a remote method invocation | |||
| invoking a defined method on an identified object would apply | can be sent to an identified object. | |||
| semantics. | ||||
| method = token | method = token | |||
| The method token is case-sensitive because it might be used as a | The method token is case-sensitive because it might be used as a | |||
| gateway to object-based systems with case-sensitive method names. By | gateway to object-based systems with case-sensitive method names. By | |||
| convention, standardized methods are defined in all-uppercase US- | convention, standardized methods are defined in all-uppercase US- | |||
| ASCII letters. | 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. | commonly used in HTTP, as outlined by the following table. | |||
| --------- -------------------------------------------- ------- | +=========+============================================+=======+ | |||
| Method Description Ref. | | Method | Description | Ref. | | |||
| --------- -------------------------------------------- ------- | +=========+============================================+=======+ | |||
| GET Transfer a current representation of the 9.3.1 | | GET | Transfer a current representation of the | 9.3.1 | | |||
| target resource. | | | target resource. | | | |||
| HEAD Same as GET, but do not transfer the 9.3.2 | +---------+--------------------------------------------+-------+ | |||
| response content. | | HEAD | Same as GET, but do not transfer the | 9.3.2 | | |||
| POST Perform resource-specific processing on 9.3.3 | | | response content. | | | |||
| the request content. | +---------+--------------------------------------------+-------+ | |||
| PUT Replace all current representations of the 9.3.4 | | POST | Perform resource-specific processing on | 9.3.3 | | |||
| target resource with the request content. | | | the request content. | | | |||
| DELETE Remove all current representations of the 9.3.5 | +---------+--------------------------------------------+-------+ | |||
| target resource. | | PUT | Replace all current representations of the | 9.3.4 | | |||
| CONNECT Establish a tunnel to the server 9.3.6 | | | target resource with the request content. | | | |||
| identified by the target resource. | +---------+--------------------------------------------+-------+ | |||
| OPTIONS Describe the communication options for the 9.3.7 | | DELETE | Remove all current representations of the | 9.3.5 | | |||
| target resource. | | | target resource. | | | |||
| TRACE Perform a message loop-back test along the 9.3.8 | +---------+--------------------------------------------+-------+ | |||
| path to the target resource. | | CONNECT | Establish a tunnel to the server | 9.3.6 | | |||
| --------- -------------------------------------------- ------- | | | identified by the target resource. | | | |||
| +---------+--------------------------------------------+-------+ | ||||
| | OPTIONS | Describe the communication options for the | 9.3.7 | | ||||
| | | target resource. | | | ||||
| +---------+--------------------------------------------+-------+ | ||||
| | TRACE | Perform a message loop-back test along the | 9.3.8 | | ||||
| | | path to the target resource. | | | ||||
| +---------+--------------------------------------------+-------+ | ||||
| Table 4 | Table 4 | |||
| All general-purpose servers MUST support the methods GET and HEAD. | All general-purpose servers MUST support the methods GET and HEAD. | |||
| All other methods are OPTIONAL. | All other methods are OPTIONAL. | |||
| The set of methods allowed by a target resource can be listed in an | The set of methods allowed by a target resource can be listed in an | |||
| Allow header field (Section 10.2.1). However, the set of allowed | Allow header field (Section 10.2.1). However, the set of allowed | |||
| methods can change dynamically. When a request method is received | methods can change dynamically. An origin server that receives a | |||
| that is unrecognized or not implemented by an origin server, the | request method that is unrecognized or not implemented SHOULD respond | |||
| origin server SHOULD respond with the 501 (Not Implemented) status | with the 501 (Not Implemented) status code. An origin server that | |||
| code. When a request method is received that is known by an origin | receives a request method that is recognized and implemented, but not | |||
| server but not allowed for the target resource, the origin server | allowed for the target resource, SHOULD respond with the 405 (Method | |||
| SHOULD respond with the 405 (Method Not Allowed) status code. | Not Allowed) status code. | |||
| Additional methods, outside the scope of this specification, have | Additional methods, outside the scope of this specification, have | |||
| been specified for use in HTTP. All such methods ought to be | been specified for use in HTTP. All such methods ought to be | |||
| registered within the "Hypertext Transfer Protocol (HTTP) Method | registered within the "Hypertext Transfer Protocol (HTTP) Method | |||
| Registry", as described in Section 16.1. | Registry", as described in Section 16.1. | |||
| 9.2. Common Method Properties | 9.2. Common Method Properties | |||
| 9.2.1. Safe Methods | 9.2.1. Safe Methods | |||
| Request methods are considered _safe_ if their defined semantics are | Request methods are considered _safe_ if their defined semantics are | |||
| essentially read-only; i.e., the client does not request, and does | essentially read-only; i.e., the client does not request, and does | |||
| not expect, any state change on the origin server as a result of | not expect, any state change on the origin server as a result of | |||
| applying a safe method to a target resource. Likewise, reasonable | applying a safe method to a target resource. Likewise, reasonable | |||
| use of a safe method is not expected to cause any harm, loss of | use of a safe method is not expected to cause any harm, loss of | |||
| property, or unusual burden on the origin server. | property, or unusual burden on the origin server. | |||
| This definition of safe methods does not prevent an implementation | This definition of safe methods does not prevent an implementation | |||
| skipping to change at page 81, line 32 ¶ | skipping to change at page 82, line 38 ¶ | |||
| before any response is received, then the client can establish a new | before any response is received, then the client can establish a new | |||
| connection and retry the idempotent request. It knows that repeating | connection and retry the idempotent request. It knows that repeating | |||
| the request will have the same intended effect, even if the original | the request will have the same intended effect, even if the original | |||
| request succeeded, though the response might differ. | request succeeded, though the response might differ. | |||
| A client SHOULD NOT automatically retry a request with a non- | A client SHOULD NOT automatically retry a request with a non- | |||
| idempotent method unless it has some means to know that the request | idempotent method unless it has some means to know that the request | |||
| semantics are actually idempotent, regardless of the method, or some | semantics are actually idempotent, regardless of the method, or some | |||
| means to detect that the original request was never applied. | means to detect that the original request was never applied. | |||
| For example, a user agent that knows (through design or | For example, a user agent can repeat a POST request automatically if | |||
| configuration) that a POST request to a given resource is safe can | it knows (through design or configuration) that the request is safe | |||
| repeat that request automatically. Likewise, a user agent designed | for that resource. Likewise, a user agent designed specifically to | |||
| specifically to operate on a version control repository might be able | operate on a version control repository might be able to recover from | |||
| to recover from partial failure conditions by checking the target | partial failure conditions by checking the target resource | |||
| resource revision(s) after a failed connection, reverting or fixing | revision(s) after a failed connection, reverting or fixing any | |||
| any changes that were partially applied, and then automatically | changes that were partially applied, and then automatically retrying | |||
| retrying the requests that failed. | the requests that failed. | |||
| Some clients use weaker signals to initiate automatic retries. For | Some clients take a riskier approach and attempt to guess when an | |||
| example, when a POST request is sent, but the underlying transport | automatic retry is possible. For example, a client might | |||
| connection is closed before any part of the response is received. | automatically retry a POST request if the underlying transport | |||
| Although this is commonly implemented, it is not recommended. | connection closed before any part of a response is received, | |||
| particularly if an idle persistent connection was used. | ||||
| A proxy MUST NOT automatically retry non-idempotent requests. A | A proxy MUST NOT automatically retry non-idempotent requests. A | |||
| client SHOULD NOT automatically retry a failed automatic retry. | client SHOULD NOT automatically retry a failed automatic retry. | |||
| 9.2.3. Methods and Caching | 9.2.3. Methods and Caching | |||
| For a cache to store and use a response, the associated method needs | For a cache to store and use a response, the associated method needs | |||
| to explicitly allow caching, and detail under what conditions a | to explicitly allow caching, and detail under what conditions a | |||
| response can be used to satisfy subsequent requests; a method | response can be used to satisfy subsequent requests; a method | |||
| definition which does not do so cannot be cached. For additional | definition which does not do so cannot be cached. For additional | |||
| skipping to change at page 83, line 35 ¶ | skipping to change at page 84, line 35 ¶ | |||
| (see Section 17.9). In some cases, the data can be filtered or | (see Section 17.9). In some cases, the data can be filtered or | |||
| transformed such that it would not reveal such information. In | transformed such that it would not reveal such information. In | |||
| others, particularly when there is no benefit from caching a | others, particularly when there is no benefit from caching a | |||
| response, using the POST method (Section 9.3.3) instead of GET can | response, using the POST method (Section 9.3.3) instead of GET can | |||
| transmit such information in the request content rather than within | transmit such information in the request content rather than within | |||
| the target URI. | the target URI. | |||
| 9.3.2. HEAD | 9.3.2. HEAD | |||
| The HEAD method is identical to GET except that the server MUST NOT | The HEAD method is identical to GET except that the server MUST NOT | |||
| send content in the response and the response always terminates at | send content in the response. HEAD is used to obtain metadata about | |||
| the end of the header section. HEAD is used to obtain metadata about | ||||
| the selected representation without transferring its representation | the selected representation without transferring its representation | |||
| data, often for the sake of testing hypertext links or finding recent | data, often for the sake of testing hypertext links or finding recent | |||
| modifications. | modifications. | |||
| The server SHOULD send the same header fields in response to a HEAD | The server SHOULD send the same header fields in response to a HEAD | |||
| request as it would have sent if the request method had been GET. | request as it would have sent if the request method had been GET. | |||
| However, a server MAY omit header fields for which a value is | However, a server MAY omit header fields for which a value is | |||
| determined only while generating the content. For example, some | determined only while generating the content. For example, some | |||
| servers buffer a dynamic response to GET until a minimum amount of | servers buffer a dynamic response to GET until a minimum amount of | |||
| data is generated so that they can more efficiently delimit small | data is generated so that they can more efficiently delimit small | |||
| skipping to change at page 84, line 22 ¶ | skipping to change at page 85, line 22 ¶ | |||
| response might also affect previously cached responses to GET; see | response might also affect previously cached responses to GET; see | |||
| Section 4.3.5 of [Caching]. | Section 4.3.5 of [Caching]. | |||
| 9.3.3. POST | 9.3.3. POST | |||
| The POST method requests that the target resource process the | The POST method requests that the target resource process the | |||
| representation enclosed in the request according to the resource's | representation enclosed in the request according to the resource's | |||
| own specific semantics. For example, POST is used for the following | own specific semantics. For example, POST is used for the following | |||
| functions (among others): | functions (among others): | |||
| o Providing a block of data, such as the fields entered into an HTML | * Providing a block of data, such as the fields entered into an HTML | |||
| form, to a data-handling process; | form, to a data-handling process; | |||
| o Posting a message to a bulletin board, newsgroup, mailing list, | * Posting a message to a bulletin board, newsgroup, mailing list, | |||
| blog, or similar group of articles; | blog, or similar group of articles; | |||
| o Creating a new resource that has yet to be identified by the | * Creating a new resource that has yet to be identified by the | |||
| origin server; and | origin server; and | |||
| o Appending data to a resource's existing representation(s). | * Appending data to a resource's existing representation(s). | |||
| An origin server indicates response semantics by choosing an | An origin server indicates response semantics by choosing an | |||
| appropriate status code depending on the result of processing the | appropriate status code depending on the result of processing the | |||
| POST request; almost all of the status codes defined by this | POST request; almost all of the status codes defined by this | |||
| specification could be received in a response to POST (the exceptions | specification could be received in a response to POST (the exceptions | |||
| being 206 (Partial Content), 304 (Not Modified), and 416 (Range Not | being 206 (Partial Content), 304 (Not Modified), and 416 (Range Not | |||
| 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 | |||
| skipping to change at page 86, line 51 ¶ | skipping to change at page 87, line 51 ¶ | |||
| trailer fields received in a PUT request (i.e., do not save them as | trailer fields received in a PUT request (i.e., do not save them as | |||
| part of the resource state). | part of the resource state). | |||
| An origin server MUST NOT send a validator field (Section 8.8), such | An origin server MUST NOT send a validator field (Section 8.8), such | |||
| as an ETag or Last-Modified field, in a successful response to PUT | as an ETag or Last-Modified field, in a successful response to PUT | |||
| unless the request's representation data was saved without any | unless the request's representation data was saved without any | |||
| transformation applied to the content (i.e., the resource's new | transformation applied to the content (i.e., the resource's new | |||
| representation data is identical to the content received in the PUT | representation data is identical to the content received in the PUT | |||
| request) and the validator field value reflects the new | request) and the validator field value reflects the new | |||
| representation. This requirement allows a user agent to know when | representation. This requirement allows a user agent to know when | |||
| the representation it has in memory remains current as a result of | the representation it sent (and retains in memory) is the result of | |||
| the PUT, thus not in need of being retrieved again from the origin | the PUT, and thus doesn't need to be retrieved again from the origin | |||
| server, and that the new validator(s) received in the response can be | server. The new validator(s) received in the response can be used | |||
| used for future conditional requests in order to prevent accidental | for future conditional requests in order to prevent accidental | |||
| overwrites (Section 13.1). | overwrites (Section 13.1). | |||
| The fundamental difference between the POST and PUT methods is | The fundamental difference between the POST and PUT methods is | |||
| highlighted by the different intent for the enclosed representation. | highlighted by the different intent for the enclosed representation. | |||
| The target resource in a POST request is intended to handle the | The target resource in a POST request is intended to handle the | |||
| enclosed representation according to the resource's own semantics, | enclosed representation according to the resource's own semantics, | |||
| whereas the enclosed representation in a PUT request is defined as | whereas the enclosed representation in a PUT request is defined as | |||
| replacing the state of the target resource. Hence, the intent of PUT | replacing the state of the target resource. Hence, the intent of PUT | |||
| is idempotent and visible to intermediaries, even though the exact | is idempotent and visible to intermediaries, even though the exact | |||
| effect is only known by the origin server. | effect is only known by the origin server. | |||
| skipping to change at page 88, line 39 ¶ | skipping to change at page 89, line 39 ¶ | |||
| field after a 201 (Created) response to a POST request, might allow a | field after a 201 (Created) response to a POST request, might allow a | |||
| corresponding DELETE request to undo those actions. Similarly, | corresponding DELETE request to undo those actions. Similarly, | |||
| custom user agent implementations that implement an authoring | custom user agent implementations that implement an authoring | |||
| function, such as revision control clients using HTTP for remote | function, such as revision control clients using HTTP for remote | |||
| operations, might use DELETE based on an assumption that the server's | operations, might use DELETE based on an assumption that the server's | |||
| URI space has been crafted to correspond to a version repository. | URI space has been crafted to correspond to a version repository. | |||
| If a DELETE method is successfully applied, the origin server SHOULD | If a DELETE method is successfully applied, the origin server SHOULD | |||
| send | send | |||
| o a 202 (Accepted) status code if the action will likely succeed but | * a 202 (Accepted) status code if the action will likely succeed but | |||
| has not yet been enacted, | has not yet been enacted, | |||
| o a 204 (No Content) status code if the action has been enacted and | * a 204 (No Content) status code if the action has been enacted and | |||
| no further information is to be supplied, or | no further information is to be supplied, or | |||
| o a 200 (OK) status code if the action has been enacted and the | * a 200 (OK) status code if the action has been enacted and the | |||
| response message includes a representation describing the status. | response message includes a representation describing the status. | |||
| A client SHOULD NOT generate content in a DELETE request. Content | A client SHOULD NOT generate content in a DELETE request. Content | |||
| received in a DELETE request has no defined semantics, cannot alter | received in a DELETE request has no defined semantics, cannot alter | |||
| the meaning or target of the request, and might lead some | the meaning or target of the request, and might lead some | |||
| implementations to reject the request. | implementations to reject the request. | |||
| Responses to the DELETE method are not cacheable. If a successful | Responses to the DELETE method are not cacheable. If a successful | |||
| DELETE request passes through a cache that has one or more stored | DELETE request passes through a cache that has one or more stored | |||
| responses for the target URI, those stored responses will be | responses for the target URI, those stored responses will be | |||
| skipping to change at page 89, line 20 ¶ | skipping to change at page 90, line 20 ¶ | |||
| 9.3.6. CONNECT | 9.3.6. CONNECT | |||
| The CONNECT method requests that the recipient establish a tunnel to | The CONNECT method requests that the recipient establish a tunnel to | |||
| the destination origin server identified by the request target and, | the destination origin server identified by the request target and, | |||
| if successful, thereafter restrict its behavior to blind forwarding | if successful, thereafter restrict its behavior to blind forwarding | |||
| of data, in both directions, until the tunnel is closed. Tunnels are | of data, in both directions, until the tunnel is closed. Tunnels are | |||
| commonly used to create an end-to-end virtual connection, through one | commonly used to create an end-to-end virtual connection, through one | |||
| or more proxies, which can then be secured using TLS (Transport Layer | or more proxies, which can then be secured using TLS (Transport Layer | |||
| Security, [RFC8446]). | Security, [RFC8446]). | |||
| Because CONNECT changes the request/response nature of an HTTP | CONNECT uses a special form of request target, unique to this method, | |||
| connection, specific HTTP versions might have different ways of | consisting of only the host and port number of the tunnel | |||
| mapping its semantics into the protocol's wire format. | destination, separated by a colon. There is no default port; a | |||
| client MUST send the port number even if the CONNECT request is based | ||||
| on a URI reference that contains an authority component with an | ||||
| elided port (Section 4.1). For example, | ||||
| CONNECT is intended only for use in requests to a proxy. An origin | CONNECT server.example.com:80 HTTP/1.1 | |||
| server that receives a CONNECT request for itself MAY respond with a | Host: server.example.com | |||
| 2xx (Successful) status code to indicate that a connection is | ||||
| established. However, most origin servers do not implement CONNECT. | ||||
| A client sending a CONNECT request MUST send the authority component | A server MUST reject a CONNECT request that targets an empty or | |||
| (described in Section 3.2 of [RFC3986]) as the request target; i.e., | invalid port number, typically by responding with a 400 (Bad Request) | |||
| the request target consists of only the host name and port number of | status code. | |||
| the tunnel destination, separated by a colon. For example, | ||||
| CONNECT server.example.com:80 HTTP/1.1 | Because CONNECT changes the request/response nature of an HTTP | |||
| Host: server.example.com:80 | connection, specific HTTP versions might have different ways of | |||
| mapping its semantics into the protocol's wire format. | ||||
| The recipient proxy can establish a tunnel either by directly | CONNECT is intended for use in requests to a proxy. The recipient | |||
| connecting to the request target or, if configured to use another | can establish a tunnel either by directly connecting to the server | |||
| identified by the request target or, if configured to use another | ||||
| proxy, by forwarding the CONNECT request to the next inbound proxy. | proxy, by forwarding the CONNECT request to the next inbound proxy. | |||
| An origin server MAY accept a CONNECT request, but most origin | ||||
| servers do not implement CONNECT. | ||||
| Any 2xx (Successful) response indicates that the sender (and all | Any 2xx (Successful) response indicates that the sender (and all | |||
| inbound proxies) will switch to tunnel mode immediately after the | inbound proxies) will switch to tunnel mode immediately after the | |||
| blank line that concludes the successful response's header section; | response header section; data received after that header section is | |||
| data received after that blank line is from the server identified by | from the server identified by the request target. Any response other | |||
| the request target. Any response other than a successful response | than a successful response indicates that the tunnel has not yet been | |||
| indicates that the tunnel has not yet been formed and that the | formed. | |||
| connection remains governed by HTTP. | ||||
| A tunnel is closed when a tunnel intermediary detects that either | A tunnel is closed when a tunnel intermediary detects that either | |||
| side has closed its connection: the intermediary MUST attempt to send | side has closed its connection: the intermediary MUST attempt to send | |||
| any outstanding data that came from the closed side to the other | any outstanding data that came from the closed side to the other | |||
| side, close both connections, and then discard any remaining data | side, close both connections, and then discard any remaining data | |||
| left undelivered. | left undelivered. | |||
| Proxy authentication might be used to establish the authority to | Proxy authentication might be used to establish the authority to | |||
| create a tunnel. For example, | create a tunnel. For example, | |||
| CONNECT server.example.com:80 HTTP/1.1 | CONNECT server.example.com:443 HTTP/1.1 | |||
| Host: server.example.com:80 | Host: server.example.com:443 | |||
| Proxy-Authorization: basic aGVsbG86d29ybGQ= | Proxy-Authorization: basic aGVsbG86d29ybGQ= | |||
| There are significant risks in establishing a tunnel to arbitrary | There are significant risks in establishing a tunnel to arbitrary | |||
| servers, particularly when the destination is a well-known or | servers, particularly when the destination is a well-known or | |||
| reserved TCP port that is not intended for Web traffic. For example, | reserved TCP port that is not intended for Web traffic. For example, | |||
| a CONNECT to "example.com:25" would suggest that the proxy connect to | a CONNECT to "example.com:25" would suggest that the proxy connect to | |||
| the reserved port for SMTP traffic; if allowed, that could trick the | the reserved port for SMTP traffic; if allowed, that could trick the | |||
| proxy into relaying spam email. Proxies that support CONNECT SHOULD | proxy into relaying spam email. Proxies that support CONNECT SHOULD | |||
| restrict its use to a limited set of known ports or a configurable | restrict its use to a limited set of known ports or a configurable | |||
| whitelist of safe request targets. | list of safe request targets. | |||
| A server MUST NOT send any Transfer-Encoding or Content-Length header | A server MUST NOT send any Transfer-Encoding or Content-Length header | |||
| fields in a 2xx (Successful) response to CONNECT. A client MUST | fields in a 2xx (Successful) response to CONNECT. A client MUST | |||
| ignore any Content-Length or Transfer-Encoding header fields received | ignore any Content-Length or Transfer-Encoding header fields received | |||
| in a successful response to CONNECT. | in a successful response to CONNECT. | |||
| Content within a CONNECT request message has no defined semantics; | A CONNECT request message does not have content. The interpretation | |||
| sending content in a CONNECT request might cause some existing | of and allowability of data sent after the header section of the | |||
| implementations to reject the request. | CONNECT request message is specific to the version of HTTP in use. | |||
| Responses to the CONNECT method are not cacheable. | Responses to the CONNECT method are not cacheable. | |||
| 9.3.7. OPTIONS | 9.3.7. OPTIONS | |||
| The OPTIONS method requests information about the communication | The OPTIONS method requests information about the communication | |||
| options available for the target resource, at either the origin | options available for the target resource, at either the origin | |||
| server or an intervening intermediary. This method allows a client | server or an intervening intermediary. This method allows a client | |||
| to determine the options and/or requirements associated with a | to determine the options and/or requirements associated with a | |||
| resource, or the capabilities of a server, without implying a | resource, or the capabilities of a server, without implying a | |||
| skipping to change at page 91, line 44 ¶ | skipping to change at page 92, line 44 ¶ | |||
| media type. Note that this specification does not define any use for | media type. Note that this specification does not define any use for | |||
| such content. | such content. | |||
| Responses to the OPTIONS method are not cacheable. | Responses to the OPTIONS method are not cacheable. | |||
| 9.3.8. TRACE | 9.3.8. TRACE | |||
| The TRACE method requests a remote, application-level loop-back of | The TRACE method requests a remote, application-level loop-back of | |||
| the request message. The final recipient of the request SHOULD | the request message. The final recipient of the request SHOULD | |||
| reflect the message received, excluding some fields described below, | reflect the message received, excluding some fields described below, | |||
| back to the client as the content of a 200 (OK) response with a | back to the client as the content of a 200 (OK) response. The | |||
| Content-Type of "message/http" (Section 10.1 of [Messaging]). The | "message/http" (Section 10.1 of [Messaging]) format is one way to do | |||
| final recipient is either the origin server or the first server to | so. The final recipient is either the origin server or the first | |||
| receive a Max-Forwards value of zero (0) in the request | server to receive a Max-Forwards value of zero (0) in the request | |||
| (Section 7.6.2). | (Section 7.6.2). | |||
| A client MUST NOT generate fields in a TRACE request containing | A client MUST NOT generate fields in a TRACE request containing | |||
| sensitive data that might be disclosed by the response. For example, | sensitive data that might be disclosed by the response. For example, | |||
| it would be foolish for a user agent to send stored user credentials | it would be foolish for a user agent to send stored user credentials | |||
| (Section 11) or cookies [RFC6265] in a TRACE request. The final | (Section 11) or cookies [RFC6265] in a TRACE request. The final | |||
| recipient of the request SHOULD exclude any request fields that are | recipient of the request SHOULD exclude any request fields that are | |||
| likely to contain sensitive data when that recipient generates the | likely to contain sensitive data when that recipient generates the | |||
| response content. | response content. | |||
| skipping to change at page 93, line 13 ¶ | skipping to change at page 94, line 13 ¶ | |||
| URI, and header fields are not sufficient to cause an immediate | URI, and header fields are not sufficient to cause an immediate | |||
| success, redirect, or error response. This allows the client to wait | success, redirect, or error response. This allows the client to wait | |||
| for an indication that it is worthwhile to send the content before | for an indication that it is worthwhile to send the content before | |||
| actually doing so, which can improve efficiency when the data is huge | actually doing so, which can improve efficiency when the data is huge | |||
| or when the client anticipates that an error is likely (e.g., when | or when the client anticipates that an error is likely (e.g., when | |||
| sending a state-changing method, for the first time, without | sending a state-changing method, for the first time, without | |||
| previously verified authentication credentials). | previously verified authentication credentials). | |||
| For example, a request that begins with | For example, a request that begins with | |||
| PUT /somewhere/fun HTTP/1.1 | PUT /somewhere/fun HTTP/1.1 | |||
| Host: origin.example.com | Host: origin.example.com | |||
| Content-Type: video/h264 | Content-Type: video/h264 | |||
| Content-Length: 1234567890987 | Content-Length: 1234567890987 | |||
| Expect: 100-continue | Expect: 100-continue | |||
| allows the origin server to immediately respond with an error | allows the origin server to immediately respond with an error | |||
| message, such as 401 (Unauthorized) or 405 (Method Not Allowed), | message, such as 401 (Unauthorized) or 405 (Method Not Allowed), | |||
| before the client starts filling the pipes with an unnecessary data | before the client starts filling the pipes with an unnecessary data | |||
| transfer. | transfer. | |||
| Requirements for clients: | Requirements for clients: | |||
| o A client MUST NOT generate a 100-continue expectation in a request | * A client MUST NOT generate a 100-continue expectation in a request | |||
| that does not include content. | that does not include content. | |||
| o A client that will wait for a 100 (Continue) response before | * A client that will wait for a 100 (Continue) response before | |||
| sending the request content MUST send an Expect header field | sending the request content MUST send an Expect header field | |||
| containing a 100-continue expectation. | containing a 100-continue expectation. | |||
| o A client that sends a 100-continue expectation is not required to | * A client that sends a 100-continue expectation is not required to | |||
| wait for any specific length of time; such a client MAY proceed to | wait for any specific length of time; such a client MAY proceed to | |||
| send the content even if it has not yet received a response. | send the content even if it has not yet received a response. | |||
| Furthermore, since 100 (Continue) responses cannot be sent through | Furthermore, since 100 (Continue) responses cannot be sent through | |||
| an HTTP/1.0 intermediary, such a client SHOULD NOT wait for an | an HTTP/1.0 intermediary, such a client SHOULD NOT wait for an | |||
| indefinite period before sending the content. | indefinite period before sending the content. | |||
| o A client that receives a 417 (Expectation Failed) status code in | * A client that receives a 417 (Expectation Failed) status code in | |||
| response to a request containing a 100-continue expectation SHOULD | response to a request containing a 100-continue expectation SHOULD | |||
| repeat that request without a 100-continue expectation, since the | repeat that request without a 100-continue expectation, since the | |||
| 417 response merely indicates that the response chain does not | 417 response merely indicates that the response chain does not | |||
| support expectations (e.g., it passes through an HTTP/1.0 server). | support expectations (e.g., it passes through an HTTP/1.0 server). | |||
| Requirements for servers: | Requirements for servers: | |||
| o A server that receives a 100-continue expectation in an HTTP/1.0 | * A server that receives a 100-continue expectation in an HTTP/1.0 | |||
| request MUST ignore that expectation. | request MUST ignore that expectation. | |||
| o A server MAY omit sending a 100 (Continue) response if it has | * A server MAY omit sending a 100 (Continue) response if it has | |||
| already received some or all of the content for the corresponding | already received some or all of the content for the corresponding | |||
| request, or if the framing indicates that there is no content. | request, or if the framing indicates that there is no content. | |||
| o A server that sends a 100 (Continue) response MUST ultimately send | * A server that sends a 100 (Continue) response MUST ultimately send | |||
| a final status code, once the request content is received and | a final status code, once it receives and processes the request | |||
| processed, unless the connection is closed prematurely. | content, unless the connection is closed prematurely. | |||
| o A server that responds with a final status code before reading the | * A server that responds with a final status code before reading the | |||
| entire request content SHOULD indicate whether it intends to close | entire request content SHOULD indicate whether it intends to close | |||
| the connection (e.g., see Section 9.6 of [Messaging]) or continue | the connection (e.g., see Section 9.6 of [Messaging]) or continue | |||
| reading the request content. | reading the request content. | |||
| 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 | |||
| that has a method, target URI, and complete header section that | that has a method, target URI, and complete header section that | |||
| contains a 100-continue expectation and an indication that request | contains a 100-continue expectation and an indication that request | |||
| content will follow, either send an immediate response with a final | content will follow, either send an immediate response with a final | |||
| status code, if that status can be determined by examining just the | status code, if that status can be determined by examining just the | |||
| method, target URI, and header fields, or send an immediate 100 | method, target URI, and header fields, or send an immediate 100 | |||
| skipping to change at page 95, line 5 ¶ | skipping to change at page 96, line 5 ¶ | |||
| human user who controls the requesting user agent. The address ought | human user who controls the requesting user agent. The address ought | |||
| to be machine-usable, as defined by "mailbox" in Section 3.4 of | to be machine-usable, as defined by "mailbox" in Section 3.4 of | |||
| [RFC5322]: | [RFC5322]: | |||
| From = mailbox | From = mailbox | |||
| mailbox = <mailbox, see [RFC5322], Section 3.4> | mailbox = <mailbox, see [RFC5322], Section 3.4> | |||
| An example is: | An example is: | |||
| From: webmaster@example.org | From: webmaster@example.org | |||
| The From header field is rarely sent by non-robotic user agents. A | The From header field is rarely sent by non-robotic user agents. A | |||
| user agent SHOULD NOT send a From header field without explicit | user agent SHOULD NOT send a From header field without explicit | |||
| configuration by the user, since that might conflict with the user's | configuration by the user, since that might conflict with the user's | |||
| privacy interests or their site's security policy. | privacy interests or their site's security policy. | |||
| A robotic user agent SHOULD send a valid From header field so that | A robotic user agent SHOULD send a valid From header field so that | |||
| the person responsible for running the robot can be contacted if | the person responsible for running the robot can be contacted if | |||
| problems occur on servers, such as if the robot is sending excessive, | problems occur on servers, such as if the robot is sending excessive, | |||
| unwanted, or invalid requests. | unwanted, or invalid requests. | |||
| A server SHOULD NOT use the From header field for access control or | A server SHOULD NOT use the From header field for access control or | |||
| authentication, since most recipients will assume that the field | authentication. | |||
| value is public information. | ||||
| 10.1.3. Referer | 10.1.3. Referer | |||
| The "Referer" [sic] header field allows the user agent to specify a | The "Referer" [sic] header field allows the user agent to specify a | |||
| URI reference for the resource from which the target URI was obtained | URI reference for the resource from which the target URI was obtained | |||
| (i.e., the "referrer", though the field name is misspelled). A user | (i.e., the "referrer", though the field name is misspelled). A user | |||
| agent MUST NOT include the fragment and userinfo components of the | agent MUST NOT include the fragment and userinfo components of the | |||
| URI reference [RFC3986], if any, when generating the Referer field | URI reference [RFC3986], if any, when generating the Referer field | |||
| value. | value. | |||
| skipping to change at page 95, line 46 ¶ | skipping to change at page 96, line 45 ¶ | |||
| The Referer header field allows servers to generate back-links to | The Referer header field allows servers to generate back-links to | |||
| other resources for simple analytics, logging, optimized caching, | other resources for simple analytics, logging, optimized caching, | |||
| etc. It also allows obsolete or mistyped links to be found for | etc. It also allows obsolete or mistyped links to be found for | |||
| maintenance. Some servers use the Referer header field as a means of | maintenance. Some servers use the Referer header field as a means of | |||
| denying links from other sites (so-called "deep linking") or | denying links from other sites (so-called "deep linking") or | |||
| restricting cross-site request forgery (CSRF), but not all requests | restricting cross-site request forgery (CSRF), but not all requests | |||
| contain it. | contain it. | |||
| Example: | Example: | |||
| Referer: http://www.example.org/hypertext/Overview.html | Referer: http://www.example.org/hypertext/Overview.html | |||
| If the target URI was obtained from a source that does not have its | If the target URI was obtained from a source that does not have its | |||
| own URI (e.g., input from the user keyboard, or an entry within the | own URI (e.g., input from the user keyboard, or an entry within the | |||
| user's bookmarks/favorites), the user agent MUST either exclude the | user's bookmarks/favorites), the user agent MUST either exclude the | |||
| Referer header field or send it with a value of "about:blank". | Referer header field or send it with a value of "about:blank". | |||
| The Referer header field value need not convey the full URI of the | ||||
| referring resource; a user agent MAY truncate parts other than the | ||||
| referring origin. | ||||
| The Referer header field has the potential to reveal information | The Referer header field has the potential to reveal information | |||
| about the request context or browsing history of the user, which is a | about the request context or browsing history of the user, which is a | |||
| privacy concern if the referring resource's identifier reveals | privacy concern if the referring resource's identifier reveals | |||
| personal information (such as an account name) or a resource that is | personal information (such as an account name) or a resource that is | |||
| supposed to be confidential (such as behind a firewall or internal to | supposed to be confidential (such as behind a firewall or internal to | |||
| a secured service). Most general-purpose user agents do not send the | a secured service). Most general-purpose user agents do not send the | |||
| Referer header field when the referring resource is a local "file" or | Referer header field when the referring resource is a local "file" or | |||
| "data" URI. A user agent MUST NOT send a Referer header field in an | "data" URI. A user agent SHOULD NOT send a Referer header field if | |||
| unsecured HTTP request if the referring page was received with a | the referring resource was accessed with a secure protocol and the | |||
| request target has an origin differing from that of the referring | ||||
| resource, unless the referring resource explicitly allows Referer to | ||||
| be sent. A user agent MUST NOT send a Referer header field in an | ||||
| unsecured HTTP request if the referring resource was accessed with a | ||||
| secure protocol. See Section 17.9 for additional security | secure protocol. See Section 17.9 for additional security | |||
| considerations. | considerations. | |||
| Some intermediaries have been known to indiscriminately remove | Some intermediaries have been known to indiscriminately remove | |||
| Referer header fields from outgoing requests. This has the | Referer header fields from outgoing requests. This has the | |||
| unfortunate side effect of interfering with protection against CSRF | unfortunate side effect of interfering with protection against CSRF | |||
| attacks, which can be far more harmful to their users. | attacks, which can be far more harmful to their users. | |||
| Intermediaries and user agent extensions that wish to limit | Intermediaries and user agent extensions that wish to limit | |||
| information disclosure in Referer ought to restrict their changes to | information disclosure in Referer ought to restrict their changes to | |||
| specific edits, such as replacing internal domain names with | specific edits, such as replacing internal domain names with | |||
| skipping to change at page 97, line 5 ¶ | skipping to change at page 98, line 10 ¶ | |||
| [Messaging]). | [Messaging]). | |||
| The TE field value consists of a list of tokens, each allowing for | The TE field value consists of a list of tokens, each allowing for | |||
| optional parameters (except for the special case "trailers"). | optional parameters (except for the special case "trailers"). | |||
| TE = #t-codings | TE = #t-codings | |||
| t-codings = "trailers" / ( transfer-coding [ weight ] ) | t-codings = "trailers" / ( transfer-coding [ weight ] ) | |||
| transfer-coding = token *( OWS ";" OWS transfer-parameter ) | transfer-coding = token *( OWS ";" OWS transfer-parameter ) | |||
| transfer-parameter = token BWS "=" BWS ( token / quoted-string ) | transfer-parameter = token BWS "=" BWS ( token / quoted-string ) | |||
| A sender of TE MUST also send a "TE" connection option within the | ||||
| Connection header field (Section 7.6.1) to inform intermediaries not | ||||
| to forward this field. | ||||
| 10.1.5. Trailer | 10.1.5. Trailer | |||
| The "Trailer" header field provides a list of field names that the | The "Trailer" header field provides a list of field names that the | |||
| sender anticipates sending as trailer fields within that message. | sender anticipates sending as trailer fields within that message. | |||
| This allows a recipient to prepare for receipt of the indicated | This allows a recipient to prepare for receipt of the indicated | |||
| metadata before it starts processing the content. | metadata before it starts processing the content. | |||
| Trailer = #field-name | Trailer = #field-name | |||
| For example, a sender might indicate that a message integrity check | For example, a sender might indicate that a message integrity check | |||
| will be computed as the content is being streamed and provide the | will be computed as the content is being streamed and provide the | |||
| final signature as a trailer field. This allows a recipient to | final signature as a trailer field. This allows a recipient to | |||
| perform the same check on the fly as the content is received. | perform the same check on the fly as it receives the content. | |||
| Because the Trailer field is not removed by intermediaries, it can | ||||
| also be used by downstream recipients to discover when a trailer | ||||
| field has been removed from a message. | ||||
| A sender that intends to generate one or more trailer fields in a | A sender that intends to generate one or more trailer fields in a | |||
| message SHOULD generate a Trailer header field in the header section | message SHOULD generate a Trailer header field in the header section | |||
| of that message to indicate which fields might be present in the | of that message to indicate which fields might be present in the | |||
| trailers. | trailers. | |||
| 10.1.6. User-Agent | 10.1.6. User-Agent | |||
| The "User-Agent" header field contains information about the user | The "User-Agent" header field contains information about the user | |||
| agent originating the request, which is often used by servers to help | agent originating the request, which is often used by servers to help | |||
| skipping to change at page 98, line 15 ¶ | skipping to change at page 99, line 21 ¶ | |||
| A sender SHOULD limit generated product identifiers to what is | A sender SHOULD limit generated product identifiers to what is | |||
| necessary to identify the product; a sender MUST NOT generate | necessary to identify the product; a sender MUST NOT generate | |||
| advertising or other nonessential information within the product | advertising or other nonessential information within the product | |||
| identifier. A sender SHOULD NOT generate information in | identifier. A sender SHOULD NOT generate information in | |||
| product-version that is not a version identifier (i.e., successive | product-version that is not a version identifier (i.e., successive | |||
| versions of the same product name ought to differ only in the | versions of the same product name ought to differ only in the | |||
| product-version portion of the product identifier). | product-version portion of the product identifier). | |||
| Example: | Example: | |||
| User-Agent: CERN-LineMode/2.15 libwww/2.17b3 | User-Agent: CERN-LineMode/2.15 libwww/2.17b3 | |||
| A user agent SHOULD NOT generate a User-Agent header field containing | A user agent SHOULD NOT generate a User-Agent header field containing | |||
| needlessly fine-grained detail and SHOULD limit the addition of | needlessly fine-grained detail and SHOULD limit the addition of | |||
| subproducts by third parties. Overly long and detailed User-Agent | subproducts by third parties. Overly long and detailed User-Agent | |||
| field values increase request latency and the risk of a user being | field values increase request latency and the risk of a user being | |||
| identified against their wishes ("fingerprinting"). | identified against their wishes ("fingerprinting"). | |||
| Likewise, implementations are encouraged not to use the product | Likewise, implementations are encouraged not to use the product | |||
| tokens of other implementations in order to declare compatibility | tokens of other implementations in order to declare compatibility | |||
| with them, as this circumvents the purpose of the field. If a user | with them, as this circumvents the purpose of the field. If a user | |||
| skipping to change at page 99, line 16 ¶ | skipping to change at page 100, line 19 ¶ | |||
| The "Allow" header field lists the set of methods advertised as | The "Allow" header field lists the set of methods advertised as | |||
| supported by the target resource. The purpose of this field is | supported by the target resource. The purpose of this field is | |||
| strictly to inform the recipient of valid request methods associated | strictly to inform the recipient of valid request methods associated | |||
| with the resource. | with the resource. | |||
| Allow = #method | Allow = #method | |||
| Example of use: | Example of use: | |||
| Allow: GET, HEAD, PUT | Allow: GET, HEAD, PUT | |||
| The actual set of allowed methods is defined by the origin server at | The actual set of allowed methods is defined by the origin server at | |||
| the time of each request. An origin server MUST generate an Allow | the time of each request. An origin server MUST generate an Allow | |||
| header field in a 405 (Method Not Allowed) response and MAY do so in | header field in a 405 (Method Not Allowed) response and MAY do so in | |||
| any other response. An empty Allow field value indicates that the | any other response. An empty Allow field value indicates that the | |||
| resource allows no methods, which might occur in a 405 response if | resource allows no methods, which might occur in a 405 response if | |||
| the resource has been temporarily disabled by configuration. | the resource has been temporarily disabled by configuration. | |||
| A proxy MUST NOT modify the Allow header field - it does not need to | A proxy MUST NOT modify the Allow header field - it does not need to | |||
| understand all of the indicated methods in order to handle them | understand all of the indicated methods in order to handle them | |||
| skipping to change at page 99, line 40 ¶ | skipping to change at page 100, line 43 ¶ | |||
| The "Date" header field represents the date and time at which the | The "Date" header field represents the date and time at which the | |||
| message was originated, having the same semantics as the Origination | message was originated, having the same semantics as the Origination | |||
| Date Field (orig-date) defined in Section 3.6.1 of [RFC5322]. The | Date Field (orig-date) defined in Section 3.6.1 of [RFC5322]. The | |||
| field value is an HTTP-date, as defined in Section 5.6.7. | field value is an HTTP-date, as defined in Section 5.6.7. | |||
| Date = HTTP-date | Date = HTTP-date | |||
| An example is | An example is | |||
| Date: Tue, 15 Nov 1994 08:12:31 GMT | Date: Tue, 15 Nov 1994 08:12:31 GMT | |||
| When a Date header field is generated, the sender SHOULD generate its | A sender that generates a Date header field SHOULD generate its field | |||
| field value as the best available approximation of the date and time | value as the best available approximation of the date and time of | |||
| of message generation. In theory, the date ought to represent the | message generation. In theory, the date ought to represent the | |||
| moment just before the content is generated. In practice, the date | moment just before generating the message content. In practice, a | |||
| can be generated at any time during message origination. | sender can generate the date value at any time during message | |||
| origination. | ||||
| An origin server MUST NOT send a Date header field if it does not | An origin server MUST NOT send a Date header field if it does not | |||
| have a clock capable of providing a reasonable approximation of the | have a clock capable of providing a reasonable approximation of the | |||
| current instance in Coordinated Universal Time. An origin server MAY | current instance in Coordinated Universal Time. An origin server MAY | |||
| send a Date header field if the response is in the 1xx | send a Date header field if the response is in the 1xx | |||
| (Informational) or 5xx (Server Error) class of status codes. An | (Informational) or 5xx (Server Error) class of status codes. An | |||
| origin server MUST send a Date header field in all other cases. | origin server MUST send a Date header field in all other cases. | |||
| A recipient with a clock that receives a response message without a | A recipient with a clock that receives a response message without a | |||
| Date header field MUST record the time it was received and append a | Date header field MUST record the time it was received and append a | |||
| skipping to change at page 101, line 9 ¶ | skipping to change at page 102, line 9 ¶ | |||
| If the Location value provided in a 3xx (Redirection) response does | If the Location value provided in a 3xx (Redirection) response does | |||
| not have a fragment component, a user agent MUST process the | not have a fragment component, a user agent MUST process the | |||
| redirection as if the value inherits the fragment component of the | redirection as if the value inherits the fragment component of the | |||
| URI reference used to generate the target URI (i.e., the redirection | URI reference used to generate the target URI (i.e., the redirection | |||
| inherits the original reference's fragment, if any). | inherits the original reference's fragment, if any). | |||
| For example, a GET request generated for the URI reference | For example, a GET request generated for the URI reference | |||
| "http://www.example.org/~tim" might result in a 303 (See Other) | "http://www.example.org/~tim" might result in a 303 (See Other) | |||
| response containing the header field: | response containing the header field: | |||
| Location: /People.html#tim | Location: /People.html#tim | |||
| which suggests that the user agent redirect to | which suggests that the user agent redirect to | |||
| "http://www.example.org/People.html#tim" | "http://www.example.org/People.html#tim" | |||
| Likewise, a GET request generated for the URI reference | Likewise, a GET request generated for the URI reference | |||
| "http://www.example.org/index.html#larry" might result in a 301 | "http://www.example.org/index.html#larry" might result in a 301 | |||
| (Moved Permanently) response containing the header field: | (Moved Permanently) response containing the header field: | |||
| Location: http://www.example.net/index.html | Location: http://www.example.net/index.html | |||
| which suggests that the user agent redirect to | which suggests that the user agent redirect to | |||
| "http://www.example.net/index.html#larry", preserving the original | "http://www.example.net/index.html#larry", preserving the original | |||
| fragment identifier. | fragment identifier. | |||
| There are circumstances in which a fragment identifier in a Location | There are circumstances in which a fragment identifier in a Location | |||
| value would not be appropriate. For example, the Location header | value would not be appropriate. For example, the Location header | |||
| field in a 201 (Created) response is supposed to provide a URI that | field in a 201 (Created) response is supposed to provide a URI that | |||
| is specific to the created resource. | is specific to the created resource. | |||
| skipping to change at page 102, line 16 ¶ | skipping to change at page 103, line 16 ¶ | |||
| Servers send the "Retry-After" header field to indicate how long the | Servers send the "Retry-After" header field to indicate how long the | |||
| user agent ought to wait before making a follow-up request. When | user agent ought to wait before making a follow-up request. When | |||
| sent with a 503 (Service Unavailable) response, Retry-After indicates | sent with a 503 (Service Unavailable) response, Retry-After indicates | |||
| how long the service is expected to be unavailable to the client. | how long the service is expected to be unavailable to the client. | |||
| When sent with any 3xx (Redirection) response, Retry-After indicates | When sent with any 3xx (Redirection) response, Retry-After indicates | |||
| the minimum time that the user agent is asked to wait before issuing | the minimum time that the user agent is asked to wait before issuing | |||
| the redirected request. | the redirected request. | |||
| The Retry-After field value can be either an HTTP-date or a number of | The Retry-After field value can be either an HTTP-date or a number of | |||
| seconds to delay after the response is received. | seconds to delay after receiving the response. | |||
| Retry-After = HTTP-date / delay-seconds | Retry-After = HTTP-date / delay-seconds | |||
| A delay-seconds value is a non-negative decimal integer, representing | A delay-seconds value is a non-negative decimal integer, representing | |||
| time in seconds. | time in seconds. | |||
| delay-seconds = 1*DIGIT | delay-seconds = 1*DIGIT | |||
| Two examples of its use are | Two examples of its use are | |||
| Retry-After: Fri, 31 Dec 1999 23:59:59 GMT | Retry-After: Fri, 31 Dec 1999 23:59:59 GMT | |||
| Retry-After: 120 | Retry-After: 120 | |||
| In the latter example, the delay is 2 minutes. | In the latter example, the delay is 2 minutes. | |||
| 10.2.5. Server | 10.2.5. Server | |||
| The "Server" header field contains information about the software | The "Server" header field contains information about the software | |||
| used by the origin server to handle the request, which is often used | used by the origin server to handle the request, which is often used | |||
| by clients to help identify the scope of reported interoperability | by clients to help identify the scope of reported interoperability | |||
| problems, to work around or tailor requests to avoid particular | problems, to work around or tailor requests to avoid particular | |||
| server limitations, and for analytics regarding server or operating | server limitations, and for analytics regarding server or operating | |||
| skipping to change at page 103, line 5 ¶ | skipping to change at page 104, line 5 ¶ | |||
| The Server header field value consists of one or more product | The Server header field value consists of one or more product | |||
| identifiers, each followed by zero or more comments (Section 5.6.5), | identifiers, each followed by zero or more comments (Section 5.6.5), | |||
| which together identify the origin server software and its | which together identify the origin server software and its | |||
| significant subproducts. By convention, the product identifiers are | significant subproducts. By convention, the product identifiers are | |||
| listed in decreasing order of their significance for identifying the | listed in decreasing order of their significance for identifying the | |||
| origin server software. Each product identifier consists of a name | origin server software. Each product identifier consists of a name | |||
| and optional version, as defined in Section 10.1.6. | and optional version, as defined in Section 10.1.6. | |||
| Example: | Example: | |||
| Server: CERN/3.0 libwww/2.17 | Server: CERN/3.0 libwww/2.17 | |||
| An origin server SHOULD NOT generate a Server header field containing | An origin server SHOULD NOT generate a Server header field containing | |||
| needlessly fine-grained detail and SHOULD limit the addition of | needlessly fine-grained detail and SHOULD limit the addition of | |||
| subproducts by third parties. Overly long and detailed Server field | subproducts by third parties. Overly long and detailed Server field | |||
| values increase response latency and potentially reveal internal | values increase response latency and potentially reveal internal | |||
| implementation details that might make it (slightly) easier for | implementation details that might make it (slightly) easier for | |||
| attackers to find and exploit known security holes. | attackers to find and exploit known security holes. | |||
| 11. HTTP Authentication | 11. HTTP Authentication | |||
| skipping to change at page 106, line 20 ¶ | skipping to change at page 107, line 20 ¶ | |||
| is a string, generally assigned by the origin server, that can have | is a string, generally assigned by the origin server, that can have | |||
| additional semantics specific to the authentication scheme. Note | additional semantics specific to the authentication scheme. Note | |||
| that a response can have multiple challenges with the same auth- | that a response can have multiple challenges with the same auth- | |||
| scheme but with different realms. | scheme but with different realms. | |||
| The protection space determines the domain over which credentials can | The protection space determines the domain over which credentials can | |||
| be automatically applied. If a prior request has been authorized, | be automatically applied. If a prior request has been authorized, | |||
| the user agent MAY reuse the same credentials for all other requests | the user agent MAY reuse the same credentials for all other requests | |||
| within that protection space for a period of time determined by the | within that protection space for a period of time determined by the | |||
| authentication scheme, parameters, and/or user preferences (such as a | authentication scheme, parameters, and/or user preferences (such as a | |||
| configurable inactivity timeout). Unless specifically allowed by the | configurable inactivity timeout). | |||
| authentication scheme, a single protection space cannot extend | ||||
| outside the scope of its server. | The extent of a protection space, and therefore the requests to which | |||
| credentials might be automatically applied, is not necessarily known | ||||
| to clients without additional information. An authentication scheme | ||||
| might define parameters that describe the extent of a protection | ||||
| space. Unless specifically allowed by the authentication scheme, a | ||||
| single protection space cannot extend outside the scope of its | ||||
| server. | ||||
| For historical reasons, a sender MUST only generate the quoted-string | For historical reasons, a sender MUST only generate the quoted-string | |||
| syntax. Recipients might have to support both token and quoted- | syntax. Recipients might have to support both token and quoted- | |||
| string syntax for maximum interoperability with existing clients that | string syntax for maximum interoperability with existing clients that | |||
| have been accepting both notations for a long time. | have been accepting both notations for a long time. | |||
| 11.6. Authenticating Users to Origin Servers | 11.6. Authenticating Users to Origin Servers | |||
| 11.6.1. WWW-Authenticate | 11.6.1. WWW-Authenticate | |||
| skipping to change at page 107, line 7 ¶ | skipping to change at page 108, line 13 ¶ | |||
| header fields in that response. | header fields in that response. | |||
| User agents are advised to take special care in parsing the field | User agents are advised to take special care in parsing the field | |||
| value, as it might contain more than one challenge, and each | value, as it might contain more than one challenge, and each | |||
| challenge can contain a comma-separated list of authentication | challenge can contain a comma-separated list of authentication | |||
| parameters. Furthermore, the header field itself can occur multiple | parameters. Furthermore, the header field itself can occur multiple | |||
| times. | times. | |||
| For instance: | For instance: | |||
| WWW-Authenticate: Newauth realm="apps", type=1, | WWW-Authenticate: Basic realm="simple", Newauth realm="apps", | |||
| title="Login to \"apps\"", Basic realm="simple" | type=1, title="Login to \"apps\"" | |||
| This header field contains two challenges; one for the "Newauth" | This header field contains two challenges; one for the "Basic" scheme | |||
| scheme with a realm value of "apps", and two additional parameters | with a realm value of "simple", and another for the "Newauth" scheme | |||
| "type" and "title", and another one for the "Basic" scheme with a | with a realm value of "apps", and two additional parameters "type" | |||
| realm value of "simple". | and "title". | |||
| Some user agents do not recognise this form, however. As a result, | Some user agents do not recognise this form, however. As a result, | |||
| sending a WWW-Authenticate field value with more than one member on | sending a WWW-Authenticate field value with more than one member on | |||
| the same field line might not be interoperable. | the same field line might not be interoperable. | |||
| | *Note:* The challenge grammar production uses the list syntax | | *Note:* The challenge grammar production uses the list syntax | |||
| | as well. Therefore, a sequence of comma, whitespace, and comma | | as well. Therefore, a sequence of comma, whitespace, and comma | |||
| | can be considered either as applying to the preceding | | can be considered either as applying to the preceding | |||
| | challenge, or to be an empty entry in the list of challenges. | | challenge, or to be an empty entry in the list of challenges. | |||
| | In practice, this ambiguity does not affect the semantics of | | In practice, this ambiguity does not affect the semantics of | |||
| skipping to change at page 111, line 12 ¶ | skipping to change at page 112, line 12 ¶ | |||
| time, is determined entirely by whatever entity or algorithm selects | time, is determined entirely by whatever entity or algorithm selects | |||
| or generates those responses. | or generates those responses. | |||
| 12.1. Proactive Negotiation | 12.1. Proactive Negotiation | |||
| When content negotiation preferences are sent by the user agent in a | When content negotiation preferences are sent by the user agent in a | |||
| request to encourage an algorithm located at the server to select the | request to encourage an algorithm located at the server to select the | |||
| preferred representation, it is called _proactive negotiation_ | preferred representation, it is called _proactive negotiation_ | |||
| (a.k.a., _server-driven negotiation_). Selection is based on the | (a.k.a., _server-driven negotiation_). Selection is based on the | |||
| available representations for a response (the dimensions over which | available representations for a response (the dimensions over which | |||
| it might vary, such as language, content-coding, etc.) compared to | it might vary, such as language, content coding, etc.) compared to | |||
| various information supplied in the request, including both the | various information supplied in the request, including both the | |||
| explicit negotiation header fields below and implicit | explicit negotiation header fields below and implicit | |||
| characteristics, such as the client's network address or parts of the | characteristics, such as the client's network address or parts of the | |||
| User-Agent field. | User-Agent field. | |||
| Proactive negotiation is advantageous when the algorithm for | Proactive negotiation is advantageous when the algorithm for | |||
| selecting from among the available representations is difficult to | selecting from among the available representations is difficult to | |||
| describe to a user agent, or when the server desires to send its | describe to a user agent, or when the server desires to send its | |||
| "best guess" to the user agent along with the first response (hoping | "best guess" to the user agent along with the first response (hoping | |||
| to avoid the round trip delay of a subsequent request if the "best | to avoid the round trip delay of a subsequent request if the "best | |||
| guess" is good enough for the user). In order to improve the | guess" is good enough for the user). In order to improve the | |||
| server's guess, a user agent MAY send request header fields that | server's guess, a user agent MAY send request header fields that | |||
| describe its preferences. | describe its preferences. | |||
| Proactive negotiation has serious disadvantages: | Proactive negotiation has serious disadvantages: | |||
| o It is impossible for the server to accurately determine what might | * It is impossible for the server to accurately determine what might | |||
| be "best" for any given user, since that would require complete | be "best" for any given user, since that would require complete | |||
| knowledge of both the capabilities of the user agent and the | knowledge of both the capabilities of the user agent and the | |||
| intended use for the response (e.g., does the user want to view it | intended use for the response (e.g., does the user want to view it | |||
| on screen or print it on paper?); | on screen or print it on paper?); | |||
| o Having the user agent describe its capabilities in every request | * Having the user agent describe its capabilities in every request | |||
| can be both very inefficient (given that only a small percentage | can be both very inefficient (given that only a small percentage | |||
| of responses have multiple representations) and a potential risk | of responses have multiple representations) and a potential risk | |||
| to the user's privacy; | to the user's privacy; | |||
| o It complicates the implementation of an origin server and the | * It complicates the implementation of an origin server and the | |||
| algorithms for generating responses to a request; and, | algorithms for generating responses to a request; and, | |||
| o It limits the reusability of responses for shared caching. | * It limits the reusability of responses for shared caching. | |||
| A user agent cannot rely on proactive negotiation preferences being | A user agent cannot rely on proactive negotiation preferences being | |||
| consistently honored, since the origin server might not implement | consistently honored, since the origin server might not implement | |||
| proactive negotiation for the requested resource or might decide that | proactive negotiation for the requested resource or might decide that | |||
| sending a response that doesn't conform to the user agent's | sending a response that doesn't conform to the user agent's | |||
| preferences is better than sending a 406 (Not Acceptable) response. | preferences is better than sending a 406 (Not Acceptable) response. | |||
| A Vary header field (Section 12.5.5) is often sent in a response | A Vary header field (Section 12.5.5) is often sent in a response | |||
| subject to proactive negotiation to indicate what parts of the | subject to proactive negotiation to indicate what parts of the | |||
| request information were used in the selection algorithm. | request information were used in the selection algorithm. | |||
| skipping to change at page 112, line 20 ¶ | skipping to change at page 113, line 20 ¶ | |||
| and Accept-Language are defined below for a user agent to engage in | and Accept-Language are defined below for a user agent to engage in | |||
| proactive negotiation of the response content. The preferences sent | proactive negotiation of the response content. The preferences sent | |||
| in these fields apply to any content in the response, including | in these fields apply to any content in the response, including | |||
| representations of the target resource, representations of error or | representations of the target resource, representations of error or | |||
| processing status, and potentially even the miscellaneous text | processing status, and potentially even the miscellaneous text | |||
| strings that might appear within the protocol. | strings that might appear within the protocol. | |||
| 12.2. Reactive Negotiation | 12.2. Reactive Negotiation | |||
| With _reactive negotiation_ (a.k.a., _agent-driven negotiation_), | With _reactive negotiation_ (a.k.a., _agent-driven negotiation_), | |||
| selection of the best response representation (regardless of the | selection of content (regardless of the status code) is performed by | |||
| status code) is performed by the user agent after receiving an | the user agent after receiving an initial response. The mechanism | |||
| initial response from the origin server that contains a list of | for reactive negotiation might be as simple as a list of references | |||
| resources for alternative representations. | to alternative representations. | |||
| If the user agent is not satisfied by the initial response | ||||
| representation, it can perform a GET request on one or more of the | ||||
| alternative resources, selected based on metadata included in the | ||||
| list, to obtain a different form of representation for that response. | ||||
| Selection of alternatives might be performed automatically by the | ||||
| user agent or manually by the user selecting from a generated | ||||
| (possibly hypertext) menu. | ||||
| Note that the above refers to representations of the response, in | If the user agent is not satisfied by the initial response content, | |||
| general, not representations of the resource. The alternative | it can perform a GET request on one or more of the alternative | |||
| representations are only considered representations of the target | resources to obtain a different representation. Selection of such | |||
| resource if the response in which those alternatives are provided has | alternatives might be performed automatically (by the user agent) or | |||
| the semantics of being a representation of the target resource (e.g., | manually (e.g., by the user selecting from a hypertext menu). | |||
| a 200 (OK) response to a GET request) or has the semantics of | ||||
| providing links to alternative representations for the target | ||||
| resource (e.g., a 300 (Multiple Choices) response to a GET request). | ||||
| A server might choose not to send an initial representation, other | A server might choose not to send an initial representation, other | |||
| than the list of alternatives, and thereby indicate that reactive | than the list of alternatives, and thereby indicate that reactive | |||
| negotiation by the user agent is preferred. For example, the | negotiation by the user agent is preferred. For example, the | |||
| alternatives listed in responses with the 300 (Multiple Choices) and | alternatives listed in responses with the 300 (Multiple Choices) and | |||
| 406 (Not Acceptable) status codes include information about the | 406 (Not Acceptable) status codes include information about available | |||
| available representations so that the user or user agent can react by | representations so that the user or user agent can react by making a | |||
| making a selection. | selection. | |||
| Reactive negotiation is advantageous when the response would vary | Reactive negotiation is advantageous when the response would vary | |||
| over commonly used dimensions (such as type, language, or encoding), | over commonly used dimensions (such as type, language, or encoding), | |||
| when the origin server is unable to determine a user agent's | when the origin server is unable to determine a user agent's | |||
| capabilities from examining the request, and generally when public | capabilities from examining the request, and generally when public | |||
| caches are used to distribute server load and reduce network usage. | caches are used to distribute server load and reduce network usage. | |||
| Reactive negotiation suffers from the disadvantages of transmitting a | Reactive negotiation suffers from the disadvantages of transmitting a | |||
| list of alternatives to the user agent, which degrades user-perceived | list of alternatives to the user agent, which degrades user-perceived | |||
| latency if transmitted in the header section, and needing a second | latency if transmitted in the header section, and needing a second | |||
| skipping to change at page 116, line 4 ¶ | skipping to change at page 116, line 40 ¶ | |||
| | *Note:* Use of the "q" parameter name to control content | | *Note:* Use of the "q" parameter name to control content | |||
| | negotiation is due to historical practice. Although this | | negotiation is due to historical practice. Although this | |||
| | prevents any media type parameter named "q" from being used | | prevents any media type parameter named "q" from being used | |||
| | with a media range, such an event is believed to be unlikely | | with a media range, such an event is believed to be unlikely | |||
| | given the lack of any "q" parameters in the IANA media type | | given the lack of any "q" parameters in the IANA media type | |||
| | registry and the rare usage of any media type parameters in | | registry and the rare usage of any media type parameters in | |||
| | Accept. Future media types are discouraged from registering | | Accept. Future media types are discouraged from registering | |||
| | any parameter named "q". | | any parameter named "q". | |||
| The example | The example | |||
| Accept: audio/*; q=0.2, audio/basic | ||||
| Accept: audio/*; q=0.2, audio/basic | ||||
| is interpreted as "I prefer audio/basic, but send me any audio type | is interpreted as "I prefer audio/basic, but send me any audio type | |||
| if it is the best available after an 80% markdown in quality". | if it is the best available after an 80% markdown in quality". | |||
| A more elaborate example is | A more elaborate example is | |||
| Accept: text/plain; q=0.5, text/html, | Accept: text/plain; q=0.5, text/html, | |||
| text/x-dvi; q=0.8, text/x-c | text/x-dvi; q=0.8, text/x-c | |||
| Verbally, this would be interpreted as "text/html and text/x-c are | Verbally, this would be interpreted as "text/html and text/x-c are | |||
| the equally preferred media types, but if they do not exist, then | the equally preferred media types, but if they do not exist, then | |||
| send the text/x-dvi representation, and if that does not exist, send | send the text/x-dvi representation, and if that does not exist, send | |||
| the text/plain representation". | the text/plain representation". | |||
| Media ranges can be overridden by more specific media ranges or | Media ranges can be overridden by more specific media ranges or | |||
| specific media types. If more than one media range applies to a | specific media types. If more than one media range applies to a | |||
| given type, the most specific reference has precedence. For example, | given type, the most specific reference has precedence. For example, | |||
| Accept: text/*, text/plain, text/plain;format=flowed, */* | Accept: text/*, text/plain, text/plain;format=flowed, */* | |||
| have the following precedence: | have the following precedence: | |||
| 1. text/plain;format=flowed | 1. text/plain;format=flowed | |||
| 2. text/plain | 2. text/plain | |||
| 3. text/* | 3. text/* | |||
| 4. */* | 4. */* | |||
| The media type quality factor associated with a given type is | The media type quality factor associated with a given type is | |||
| determined by finding the media range with the highest precedence | determined by finding the media range with the highest precedence | |||
| that matches the type. For example, | that matches the type. For example, | |||
| Accept: text/*;q=0.3, text/plain;q=0.7, text/plain;format=flowed, | Accept: text/*;q=0.3, text/plain;q=0.7, text/plain;format=flowed, | |||
| text/plain;format=fixed;q=0.4, */*;q=0.5 | text/plain;format=fixed;q=0.4, */*;q=0.5 | |||
| would cause the following values to be associated: | would cause the following values to be associated: | |||
| -------------------------- --------------- | +==========================+===============+ | |||
| Media Type Quality Value | | Media Type | Quality Value | | |||
| -------------------------- --------------- | +==========================+===============+ | |||
| text/plain;format=flowed 1 | | text/plain;format=flowed | 1 | | |||
| text/plain 0.7 | +--------------------------+---------------+ | |||
| text/html 0.3 | | text/plain | 0.7 | | |||
| image/jpeg 0.5 | +--------------------------+---------------+ | |||
| text/plain;format=fixed 0.4 | | text/html | 0.3 | | |||
| text/html;level=3 0.7 | +--------------------------+---------------+ | |||
| -------------------------- --------------- | | image/jpeg | 0.5 | | |||
| +--------------------------+---------------+ | ||||
| | text/plain;format=fixed | 0.4 | | ||||
| +--------------------------+---------------+ | ||||
| | text/html;level=3 | 0.7 | | ||||
| +--------------------------+---------------+ | ||||
| Table 5 | Table 5 | |||
| | *Note:* A user agent might be provided with a default set of | | *Note:* A user agent might be provided with a default set of | |||
| | quality values for certain media ranges. However, unless the | | quality values for certain media ranges. However, unless the | |||
| | user agent is a closed system that cannot interact with other | | user agent is a closed system that cannot interact with other | |||
| | rendering agents, this default set ought to be configurable by | | rendering agents, this default set ought to be configurable by | |||
| | the user. | | the user. | |||
| 12.5.2. Accept-Charset | 12.5.2. Accept-Charset | |||
| The "Accept-Charset" header field can be sent by a user agent to | The "Accept-Charset" header field can be sent by a user agent to | |||
| indicate its preferences for charsets in textual response content. | indicate its preferences for charsets in textual response content. | |||
| For example, this field allows user agents capable of understanding | For example, this field allows user agents capable of understanding | |||
| more comprehensive or special-purpose charsets to signal that | more comprehensive or special-purpose charsets to signal that | |||
| capability to an origin server that is capable of representing | capability to an origin server that is capable of representing | |||
| information in those charsets. | information in those charsets. | |||
| Accept-Charset = #( ( charset / "*" ) [ weight ] ) | Accept-Charset = #( ( token / "*" ) [ weight ] ) | |||
| Charset names are defined in Section 8.3.2. A user agent MAY | Charset names are defined in Section 8.3.2. A user agent MAY | |||
| associate a quality value with each charset to indicate the user's | associate a quality value with each charset to indicate the user's | |||
| relative preference for that charset, as defined in Section 12.4.2. | relative preference for that charset, as defined in Section 12.4.2. | |||
| An example is | An example is | |||
| Accept-Charset: iso-8859-5, unicode-1-1;q=0.8 | Accept-Charset: iso-8859-5, unicode-1-1;q=0.8 | |||
| The special value "*", if present in the Accept-Charset header field, | The special value "*", if present in the Accept-Charset header field, | |||
| matches every charset that is not mentioned elsewhere in the field. | matches every charset that is not mentioned elsewhere in the field. | |||
| | *Note:* Accept-Charset is deprecated because UTF-8 has become | | *Note:* Accept-Charset is deprecated because UTF-8 has become | |||
| | nearly ubiquitous and sending a detailed list of user-preferred | | nearly ubiquitous and sending a detailed list of user-preferred | |||
| | charsets wastes bandwidth, increases latency, and makes passive | | charsets wastes bandwidth, increases latency, and makes passive | |||
| | fingerprinting far too easy (Section 17.12). Most general- | | fingerprinting far too easy (Section 17.12). Most general- | |||
| | purpose user agents do not send Accept-Charset, unless | | purpose user agents do not send Accept-Charset, unless | |||
| | specifically configured to do so. | | specifically configured to do so. | |||
| skipping to change at page 118, line 26 ¶ | skipping to change at page 119, line 11 ¶ | |||
| An "identity" token is used as a synonym for "no encoding" in order | An "identity" token is used as a synonym for "no encoding" in order | |||
| to communicate when no encoding is preferred. | to communicate when no encoding is preferred. | |||
| Accept-Encoding = #( codings [ weight ] ) | Accept-Encoding = #( codings [ weight ] ) | |||
| codings = content-coding / "identity" / "*" | codings = content-coding / "identity" / "*" | |||
| Each codings value MAY be given an associated quality value | Each codings value MAY be given an associated quality value | |||
| representing the preference for that encoding, as defined in | representing the preference for that encoding, as defined in | |||
| Section 12.4.2. The asterisk "*" symbol in an Accept-Encoding field | Section 12.4.2. The asterisk "*" symbol in an Accept-Encoding field | |||
| matches any available content-coding not explicitly listed in the | matches any available content coding not explicitly listed in the | |||
| field. | field. | |||
| For example, | For example, | |||
| Accept-Encoding: compress, gzip | Accept-Encoding: compress, gzip | |||
| Accept-Encoding: | Accept-Encoding: | |||
| Accept-Encoding: * | Accept-Encoding: * | |||
| Accept-Encoding: compress;q=0.5, gzip;q=1.0 | Accept-Encoding: compress;q=0.5, gzip;q=1.0 | |||
| Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0 | Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0 | |||
| A server tests whether a content-coding for a given representation is | A server tests whether a content coding for a given representation is | |||
| acceptable using these rules: | acceptable using these rules: | |||
| 1. If no Accept-Encoding header field is in the request, any | 1. If no Accept-Encoding header field is in the request, any content | |||
| content-coding is considered acceptable by the user agent. | coding is considered acceptable by the user agent. | |||
| 2. If the representation has no content-coding, then it is | 2. If the representation has no content coding, then it is | |||
| acceptable by default unless specifically excluded by the Accept- | acceptable by default unless specifically excluded by the Accept- | |||
| Encoding header field stating either "identity;q=0" or "*;q=0" | Encoding header field stating either "identity;q=0" or "*;q=0" | |||
| without a more specific entry for "identity". | without a more specific entry for "identity". | |||
| 3. If the representation's content-coding is one of the content- | 3. If the representation's content coding is one of the content | |||
| codings listed in the Accept-Encoding field value, then it is | codings listed in the Accept-Encoding field value, then it is | |||
| acceptable unless it is accompanied by a qvalue of 0. (As | acceptable unless it is accompanied by a qvalue of 0. (As | |||
| defined in Section 12.4.2, a qvalue of 0 means "not acceptable".) | defined in Section 12.4.2, a qvalue of 0 means "not acceptable".) | |||
| 4. If multiple content-codings are acceptable, then the acceptable | A representation could be encoded with multiple content codings. | |||
| content-coding with the highest non-zero qvalue is preferred. | However, most content codings are alternative ways to accomplish the | |||
| same purpose (e.g., data compression). When selecting between | ||||
| multiple content codings that have the same purpose, the acceptable | ||||
| content coding with the highest non-zero qvalue is preferred. | ||||
| An Accept-Encoding header field with a field value that is empty | An Accept-Encoding header field with a field value that is empty | |||
| implies that the user agent does not want any content-coding in | implies that the user agent does not want any content coding in | |||
| response. If an Accept-Encoding header field is present in a request | response. If an Accept-Encoding header field is present in a request | |||
| and none of the available representations for the response have a | and none of the available representations for the response have a | |||
| content-coding that is listed as acceptable, the origin server SHOULD | content coding that is listed as acceptable, the origin server SHOULD | |||
| send a response without any content-coding. | send a response without any content coding. | |||
| When the Accept-Encoding header field is present in a response, it | When the Accept-Encoding header field is present in a response, it | |||
| indicates what content codings the resource was willing to accept in | indicates what content codings the resource was willing to accept in | |||
| the associated request. The field value is evaluated the same way as | the associated request. The field value is evaluated the same way as | |||
| in a request. | in a request. | |||
| Note that this information is specific to the associated request; the | Note that this information is specific to the associated request; the | |||
| set of supported encodings might be different for other resources on | set of supported encodings might be different for other resources on | |||
| the same server and could change over time or depend on other aspects | the same server and could change over time or depend on other aspects | |||
| of the request (such as the request method). | of the request (such as the request method). | |||
| skipping to change at page 120, line 13 ¶ | skipping to change at page 120, line 52 ¶ | |||
| response. Language tags are defined in Section 8.5.1. | response. Language tags are defined in Section 8.5.1. | |||
| Accept-Language = #( language-range [ weight ] ) | Accept-Language = #( language-range [ weight ] ) | |||
| language-range = | language-range = | |||
| <language-range, see [RFC4647], Section 2.1> | <language-range, see [RFC4647], Section 2.1> | |||
| Each language-range can be given an associated quality value | Each language-range can be given an associated quality value | |||
| representing an estimate of the user's preference for the languages | representing an estimate of the user's preference for the languages | |||
| specified by that range, as defined in Section 12.4.2. For example, | specified by that range, as defined in Section 12.4.2. For example, | |||
| Accept-Language: da, en-gb;q=0.8, en;q=0.7 | Accept-Language: da, en-gb;q=0.8, en;q=0.7 | |||
| would mean: "I prefer Danish, but will accept British English and | would mean: "I prefer Danish, but will accept British English and | |||
| other types of English". | other types of English". | |||
| Note that some recipients treat the order in which language tags are | Note that some recipients treat the order in which language tags are | |||
| listed as an indication of descending priority, particularly for tags | listed as an indication of descending priority, particularly for tags | |||
| that are assigned equal quality values (no value is the same as q=1). | that are assigned equal quality values (no value is the same as q=1). | |||
| However, this behavior cannot be relied upon. For consistency and to | However, this behavior cannot be relied upon. For consistency and to | |||
| maximize interoperability, many user agents assign each language tag | maximize interoperability, many user agents assign each language tag | |||
| a unique quality value while also listing them in order of decreasing | a unique quality value while also listing them in order of decreasing | |||
| quality. Additional discussion of language priority lists can be | quality. Additional discussion of language priority lists can be | |||
| skipping to change at page 121, line 29 ¶ | skipping to change at page 122, line 20 ¶ | |||
| If the list contains "*", it signals that other aspects of the | If the list contains "*", it signals that other aspects of the | |||
| request might play a role in selecting the response representation, | request might play a role in selecting the response representation, | |||
| possibly including elements outside the message syntax (e.g., the | possibly including elements outside the message syntax (e.g., the | |||
| client's network address). A recipient will not be able to determine | client's network address). A recipient will not be able to determine | |||
| whether this response is appropriate for a later request without | whether this response is appropriate for a later request without | |||
| forwarding the request to the origin server. A proxy MUST NOT | forwarding the request to the origin server. A proxy MUST NOT | |||
| generate "*" in a Vary field value. | generate "*" in a Vary field value. | |||
| For example, a response that contains | For example, a response that contains | |||
| Vary: accept-encoding, accept-language | Vary: accept-encoding, accept-language | |||
| indicates that the origin server might have used the request's | indicates that the origin server might have used the request's | |||
| Accept-Encoding and Accept-Language header fields (or lack thereof) | Accept-Encoding and Accept-Language header fields (or lack thereof) | |||
| as determining factors while choosing the content for this response. | as determining factors while choosing the content for this response. | |||
| An origin server might send Vary with a list of header fields for two | An origin server might send Vary with a list of header fields for two | |||
| purposes: | purposes: | |||
| 1. To inform cache recipients that they MUST NOT use this response | 1. To inform cache recipients that they MUST NOT use this response | |||
| to satisfy a later request unless the later request has the same | to satisfy a later request unless the later request has the same | |||
| skipping to change at page 122, line 31 ¶ | skipping to change at page 123, line 19 ¶ | |||
| applying the request method to the target resource. Section 13.2 | applying the request method to the target resource. Section 13.2 | |||
| defines when to evaluate preconditions and their order of precedence | defines when to evaluate preconditions and their order of precedence | |||
| when more than one precondition is present. | when more than one precondition is present. | |||
| Conditional GET requests are the most efficient mechanism for HTTP | Conditional GET requests are the most efficient mechanism for HTTP | |||
| cache updates [Caching]. Conditionals can also be applied to state- | cache updates [Caching]. Conditionals can also be applied to state- | |||
| changing methods, such as PUT and DELETE, to prevent the "lost | changing methods, such as PUT and DELETE, to prevent the "lost | |||
| update" problem: one client accidentally overwriting the work of | update" problem: one client accidentally overwriting the work of | |||
| another client that has been acting in parallel. | another client that has been acting in parallel. | |||
| Conditional request preconditions are based on the state of the | 13.1. Preconditions | |||
| Preconditions are usually defined with respect to a state of the | ||||
| target resource as a whole (its current value set) or the state as | target resource as a whole (its current value set) or the state as | |||
| observed in a previously obtained representation (one value in that | observed in a previously obtained representation (one value in that | |||
| set). A resource might have multiple current representations, each | set). If a resource has multiple current representations, each with | |||
| with its own observable state. The conditional request mechanisms | its own observable state, a precondition will assume that the mapping | |||
| assume that the mapping of requests to a selected representation | of each request to a selected representation (Section 3.2) is | |||
| (Section 3.2) will be consistent over time if the server intends to | consistent over time. Regardless, if the mapping is inconsistent or | |||
| take advantage of conditionals. Regardless, if the mapping is | the server is unable to select an appropriate representation, then no | |||
| inconsistent and the server is unable to select the appropriate | harm will result when the precondition evaluates to false. | |||
| representation, then no harm will result when the precondition | ||||
| evaluates to false. | ||||
| 13.1. Preconditions | Each precondition defined below consists of a comparison between a | |||
| set of validators obtained from prior representations of the target | ||||
| resource to the current state of validators for the selected | ||||
| representation (Section 8.8). Hence, these preconditions evaluate | ||||
| whether the state of the target resource has changed since a given | ||||
| state known by the client. The effect of such an evaluation depends | ||||
| on the method semantics and choice of conditional, as defined in | ||||
| Section 13.2. | ||||
| The request header fields below allow a client to place a | Other preconditions, defined by other specifications as extension | |||
| precondition on the state of the target resource, so that the action | fields, might place conditions on all recipients, on the state of the | |||
| corresponding to the method semantics will not be applied if the | target resource in general, or on a group of resources. For | |||
| precondition evaluates to false. Each precondition defined by this | instance, the "If" header field in WebDAV can make a request | |||
| specification consists of a comparison between a set of validators | conditional on various aspects of multiple resources, such as locks, | |||
| obtained from prior representations of the target resource to the | if the recipient understands and implements that field ([RFC4918], | |||
| current state of validators for the selected representation | Section 10.4). | |||
| (Section 8.8). Hence, these preconditions evaluate whether the state | ||||
| of the target resource has changed since a given state known by the | Extensibility of preconditions is only possible when the precondition | |||
| client. The effect of such an evaluation depends on the method | can be safely ignored if unknown (like If-Modified-Since), when | |||
| semantics and choice of conditional, as defined in Section 13.2. | deployment can be assumed for a given use case, or when | |||
| implementation is signaled by some other property of the target | ||||
| resource. This encourages a focus on mutually agreed deployment of | ||||
| common standards. | ||||
| 13.1.1. If-Match | 13.1.1. If-Match | |||
| The "If-Match" header field makes the request method conditional on | The "If-Match" header field makes the request method conditional on | |||
| the recipient origin server either having at least one current | the recipient origin server either having at least one current | |||
| representation of the target resource, when the field value is "*", | representation of the target resource, when the field value is "*", | |||
| or having a current representation of the target resource that has an | or having a current representation of the target resource that has an | |||
| entity-tag matching a member of the list of entity-tags provided in | entity-tag matching a member of the list of entity-tags provided in | |||
| the field value. | the field value. | |||
| An origin server MUST use the strong comparison function when | An origin server MUST use the strong comparison function when | |||
| comparing entity-tags for If-Match (Section 8.8.3.2), since the | comparing entity-tags for If-Match (Section 8.8.3.2), since the | |||
| client intends this precondition to prevent the method from being | client intends this precondition to prevent the method from being | |||
| applied if there have been any changes to the representation data. | applied if there have been any changes to the representation data. | |||
| If-Match = "*" / #entity-tag | If-Match = "*" / #entity-tag | |||
| Examples: | Examples: | |||
| If-Match: "xyzzy" | If-Match: "xyzzy" | |||
| If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" | If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" | |||
| If-Match: * | If-Match: * | |||
| If-Match is most often used with state-changing methods (e.g., POST, | If-Match is most often used with state-changing methods (e.g., POST, | |||
| PUT, DELETE) to prevent accidental overwrites when multiple user | PUT, DELETE) to prevent accidental overwrites when multiple user | |||
| agents might be acting in parallel on the same resource (i.e., to | agents might be acting in parallel on the same resource (i.e., to | |||
| prevent the "lost update" problem). It can also be used with any | prevent the "lost update" problem). It can also be used with any | |||
| method to abort a request if the selected representation does not | method to abort a request if the selected representation does not | |||
| match one that the client has already stored (or partially stored) | match one that the client has already stored (or partially stored) | |||
| from a prior request. | from a prior request. | |||
| An origin server that receives an If-Match header field MUST evaluate | An origin server that receives an If-Match header field MUST evaluate | |||
| skipping to change at page 125, line 5 ¶ | skipping to change at page 126, line 7 ¶ | |||
| A recipient MUST use the weak comparison function when comparing | A recipient MUST use the weak comparison function when comparing | |||
| entity-tags for If-None-Match (Section 8.8.3.2), since weak entity- | entity-tags for If-None-Match (Section 8.8.3.2), since weak entity- | |||
| tags can be used for cache validation even if there have been changes | tags can be used for cache validation even if there have been changes | |||
| to the representation data. | to the representation data. | |||
| If-None-Match = "*" / #entity-tag | If-None-Match = "*" / #entity-tag | |||
| Examples: | Examples: | |||
| If-None-Match: "xyzzy" | If-None-Match: "xyzzy" | |||
| If-None-Match: W/"xyzzy" | If-None-Match: W/"xyzzy" | |||
| If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" | If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" | |||
| If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz" | If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz" | |||
| If-None-Match: * | If-None-Match: * | |||
| If-None-Match is primarily used in conditional GET requests to enable | If-None-Match is primarily used in conditional GET requests to enable | |||
| efficient updates of cached information with a minimum amount of | efficient updates of cached information with a minimum amount of | |||
| transaction overhead. When a client desires to update one or more | transaction overhead. When a client desires to update one or more | |||
| stored responses that have entity-tags, the client SHOULD generate an | stored responses that have entity-tags, the client SHOULD generate an | |||
| If-None-Match header field containing a list of those entity-tags | If-None-Match header field containing a list of those entity-tags | |||
| when making a GET request; this allows recipient servers to send a | when making a GET request; this allows recipient servers to send a | |||
| 304 (Not Modified) response to indicate when one of those stored | 304 (Not Modified) response to indicate when one of those stored | |||
| responses matches the selected representation. | responses matches the selected representation. | |||
| skipping to change at page 126, line 21 ¶ | skipping to change at page 127, line 21 ¶ | |||
| The "If-Modified-Since" header field makes a GET or HEAD request | The "If-Modified-Since" header field makes a GET or HEAD request | |||
| method conditional on the selected representation's modification date | method conditional on the selected representation's modification date | |||
| being more recent than the date provided in the field value. | being more recent than the date provided in the field value. | |||
| Transfer of the selected representation's data is avoided if that | Transfer of the selected representation's data is avoided if that | |||
| data has not changed. | data has not changed. | |||
| If-Modified-Since = HTTP-date | If-Modified-Since = HTTP-date | |||
| An example of the field is: | An example of the field is: | |||
| If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT | If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT | |||
| A recipient MUST ignore If-Modified-Since if the request contains an | A recipient MUST ignore If-Modified-Since if the request contains an | |||
| If-None-Match header field; the condition in If-None-Match is | If-None-Match header field; the condition in If-None-Match is | |||
| considered to be a more accurate replacement for the condition in If- | considered to be a more accurate replacement for the condition in If- | |||
| Modified-Since, and the two are only combined for the sake of | Modified-Since, and the two are only combined for the sake of | |||
| interoperating with older intermediaries that might not implement | interoperating with older intermediaries that might not implement | |||
| If-None-Match. | If-None-Match. | |||
| A recipient MUST ignore the If-Modified-Since header field if the | A recipient MUST ignore the If-Modified-Since header field if the | |||
| received field value is not a valid HTTP-date, the field value has | received field value is not a valid HTTP-date, the field value has | |||
| skipping to change at page 128, line 17 ¶ | skipping to change at page 129, line 17 ¶ | |||
| The "If-Unmodified-Since" header field makes the request method | The "If-Unmodified-Since" header field makes the request method | |||
| conditional on the selected representation's last modification date | conditional on the selected representation's last modification date | |||
| being earlier than or equal to the date provided in the field value. | being earlier than or equal to the date provided in the field value. | |||
| This field accomplishes the same purpose as If-Match for cases where | This field accomplishes the same purpose as If-Match for cases where | |||
| the user agent does not have an entity-tag for the representation. | the user agent does not have an entity-tag for the representation. | |||
| If-Unmodified-Since = HTTP-date | If-Unmodified-Since = HTTP-date | |||
| An example of the field is: | An example of the field is: | |||
| If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT | If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT | |||
| A recipient MUST ignore If-Unmodified-Since if the request contains | A recipient MUST ignore If-Unmodified-Since if the request contains | |||
| an If-Match header field; the condition in If-Match is considered to | an If-Match header field; the condition in If-Match is considered to | |||
| be a more accurate replacement for the condition in If-Unmodified- | be a more accurate replacement for the condition in If-Unmodified- | |||
| Since, and the two are only combined for the sake of interoperating | Since, and the two are only combined for the sake of interoperating | |||
| with older intermediaries that might not implement If-Match. | with older intermediaries that might not implement If-Match. | |||
| A recipient MUST ignore the If-Unmodified-Since header field if the | A recipient MUST ignore the If-Unmodified-Since header field if the | |||
| received field value is not a valid HTTP-date (including when the | received field value is not a valid HTTP-date (including when the | |||
| field value appears to be a list of dates). | field value appears to be a list of dates). | |||
| skipping to change at page 131, line 34 ¶ | skipping to change at page 132, line 34 ¶ | |||
| MUST ignore the conditional request header fields defined by this | MUST ignore the conditional request header fields defined by this | |||
| specification when received with a request method that does not | specification when received with a request method that does not | |||
| involve the selection or modification of a selected representation, | involve the selection or modification of a selected representation, | |||
| such as CONNECT, OPTIONS, or TRACE. | such as CONNECT, OPTIONS, or TRACE. | |||
| Note that protocol extensions can modify the conditions under which | Note that protocol extensions can modify the conditions under which | |||
| revalidation is triggered. For example, the "immutable" cache | revalidation is triggered. For example, the "immutable" cache | |||
| directive (defined by [RFC8246]) instructs caches to forgo | directive (defined by [RFC8246]) instructs caches to forgo | |||
| revalidation of fresh responses even when requested by the client. | revalidation of fresh responses even when requested by the client. | |||
| Conditional request header fields that are defined by extensions to | ||||
| HTTP might place conditions on all recipients, on the state of the | ||||
| target resource in general, or on a group of resources. For | ||||
| instance, the "If" header field in WebDAV can make a request | ||||
| conditional on various aspects of multiple resources, such as locks, | ||||
| if the recipient understands and implements that field ([RFC4918], | ||||
| Section 10.4). | ||||
| Although conditional request header fields are defined as being | Although conditional request header fields are defined as being | |||
| usable with the HEAD method (to keep HEAD's semantics consistent with | usable with the HEAD method (to keep HEAD's semantics consistent with | |||
| those of GET), there is no point in sending a conditional HEAD | those of GET), there is no point in sending a conditional HEAD | |||
| because a successful response is around the same size as a 304 (Not | because a successful response is around the same size as a 304 (Not | |||
| Modified) response and more useful than a 412 (Precondition Failed) | Modified) response and more useful than a 412 (Precondition Failed) | |||
| response. | response. | |||
| 13.2.2. Precedence of Preconditions | 13.2.2. Precedence of Preconditions | |||
| When more than one conditional request header field is present in a | When more than one conditional request header field is present in a | |||
| skipping to change at page 132, line 22 ¶ | skipping to change at page 133, line 11 ¶ | |||
| validation, a validated cache is more efficient than a partial | validation, a validated cache is more efficient than a partial | |||
| response, and entity tags are presumed to be more accurate than date | response, and entity tags are presumed to be more accurate than date | |||
| validators. | validators. | |||
| A recipient cache or origin server MUST evaluate the request | A recipient cache or origin server MUST evaluate the request | |||
| preconditions defined by this specification in the following order: | preconditions defined by this specification in the following order: | |||
| 1. When recipient is the origin server and If-Match is present, | 1. When recipient is the origin server and If-Match is present, | |||
| evaluate the If-Match precondition: | evaluate the If-Match precondition: | |||
| o if true, continue to step 3 | * if true, continue to step 3 | |||
| o if false, respond 412 (Precondition Failed) unless it can be | * if false, respond 412 (Precondition Failed) unless it can be | |||
| determined that the state-changing request has already | determined that the state-changing request has already | |||
| succeeded (see Section 13.1.1) | succeeded (see Section 13.1.1) | |||
| 2. When recipient is the origin server, If-Match is not present, and | 2. When recipient is the origin server, If-Match is not present, and | |||
| If-Unmodified-Since is present, evaluate the If-Unmodified-Since | If-Unmodified-Since is present, evaluate the If-Unmodified-Since | |||
| precondition: | precondition: | |||
| o if true, continue to step 3 | * if true, continue to step 3 | |||
| o if false, respond 412 (Precondition Failed) unless it can be | * if false, respond 412 (Precondition Failed) unless it can be | |||
| determined that the state-changing request has already | determined that the state-changing request has already | |||
| succeeded (see Section 13.1.4) | succeeded (see Section 13.1.4) | |||
| 3. When If-None-Match is present, evaluate the If-None-Match | 3. When If-None-Match is present, evaluate the If-None-Match | |||
| precondition: | precondition: | |||
| o if true, continue to step 5 | * if true, continue to step 5 | |||
| o if false for GET/HEAD, respond 304 (Not Modified) | * if false for GET/HEAD, respond 304 (Not Modified) | |||
| o if false for other methods, respond 412 (Precondition Failed) | * if false for other methods, respond 412 (Precondition Failed) | |||
| 4. When the method is GET or HEAD, If-None-Match is not present, and | 4. When the method is GET or HEAD, If-None-Match is not present, and | |||
| If-Modified-Since is present, evaluate the If-Modified-Since | If-Modified-Since is present, evaluate the If-Modified-Since | |||
| precondition: | precondition: | |||
| o if true, continue to step 5 | * if true, continue to step 5 | |||
| o if false, respond 304 (Not Modified) | ||||
| * if false, respond 304 (Not Modified) | ||||
| 5. When the method is GET and both Range and If-Range are present, | 5. When the method is GET and both Range and If-Range are present, | |||
| evaluate the If-Range precondition: | evaluate the If-Range precondition: | |||
| o if the validator matches and the Range specification is | * if the validator matches and the Range specification is | |||
| applicable to the selected representation, respond 206 | applicable to the selected representation, respond 206 | |||
| (Partial Content) | (Partial Content) | |||
| 6. Otherwise, | 6. Otherwise, | |||
| * all conditions are met, so perform the requested action and | ||||
| o all conditions are met, so perform the requested action and | ||||
| respond according to its success or failure. | respond according to its success or failure. | |||
| Any extension to HTTP that defines additional conditional request | Any extension to HTTP that defines additional conditional request | |||
| header fields ought to define its own expectations regarding the | header fields ought to define its own expectations regarding the | |||
| order for evaluating such fields in relation to those defined in this | order for evaluating such fields in relation to those defined in this | |||
| document and other conditionals that might be found in practice. | document and other conditionals that might be found in practice. | |||
| 14. Range Requests | 14. Range Requests | |||
| Clients often encounter interrupted data transfers as a result of | Clients often encounter interrupted data transfers as a result of | |||
| skipping to change at page 135, line 39 ¶ | skipping to change at page 136, line 25 ¶ | |||
| last byte in the range; that is, the byte positions specified are | last byte in the range; that is, the byte positions specified are | |||
| inclusive. Byte offsets start at zero. | inclusive. Byte offsets start at zero. | |||
| If the representation data has a content coding applied, each byte | If the representation data has a content coding applied, each byte | |||
| range is calculated with respect to the encoded sequence of bytes, | range is calculated with respect to the encoded sequence of bytes, | |||
| not the sequence of underlying bytes that would be obtained after | not the sequence of underlying bytes that would be obtained after | |||
| decoding. | decoding. | |||
| Examples of bytes range specifiers: | Examples of bytes range specifiers: | |||
| o The first 500 bytes (byte offsets 0-499, inclusive): | * The first 500 bytes (byte offsets 0-499, inclusive): | |||
| bytes=0-499 | bytes=0-499 | |||
| o The second 500 bytes (byte offsets 500-999, inclusive): | * The second 500 bytes (byte offsets 500-999, inclusive): | |||
| bytes=500-999 | bytes=500-999 | |||
| A client can limit the number of bytes requested without knowing the | A client can limit the number of bytes requested without knowing the | |||
| size of the selected representation. If the last-pos value is | size of the selected representation. If the last-pos value is | |||
| absent, or if the value is greater than or equal to the current | absent, or if the value is greater than or equal to the current | |||
| length of the representation data, the byte range is interpreted as | length of the representation data, the byte range is interpreted as | |||
| the remainder of the representation (i.e., the server replaces the | the remainder of the representation (i.e., the server replaces the | |||
| value of last-pos with a value that is one less than the current | value of last-pos with a value that is one less than the current | |||
| length of the selected representation). | length of the selected representation). | |||
| A client can request the last N bytes (N > 0) of the selected | A client can request the last N bytes (N > 0) of the selected | |||
| representation using a suffix-range. If the selected representation | representation using a suffix-range. If the selected representation | |||
| is shorter than the specified suffix-length, the entire | is shorter than the specified suffix-length, the entire | |||
| representation is used. | representation is used. | |||
| Additional examples, assuming a representation of length 10000: | Additional examples, assuming a representation of length 10000: | |||
| o The final 500 bytes (byte offsets 9500-9999, inclusive): | * The final 500 bytes (byte offsets 9500-9999, inclusive): | |||
| bytes=-500 | bytes=-500 | |||
| Or: | Or: | |||
| bytes=9500- | bytes=9500- | |||
| o The first and last bytes only (bytes 0 and 9999): | * The first and last bytes only (bytes 0 and 9999): | |||
| bytes=0-0,-1 | bytes=0-0,-1 | |||
| o The first, middle, and last 1000 bytes: | * The first, middle, and last 1000 bytes: | |||
| bytes= 0-999, 4500-5499, -1000 | bytes= 0-999, 4500-5499, -1000 | |||
| o Other valid (but not canonical) specifications of the second 500 | * Other valid (but not canonical) specifications of the second 500 | |||
| bytes (byte offsets 500-999, inclusive): | bytes (byte offsets 500-999, inclusive): | |||
| bytes=500-600,601-999 | bytes=500-600,601-999 | |||
| bytes=500-700,601-999 | bytes=500-700,601-999 | |||
| If a valid bytes range-set includes at least one range-spec with a | If a valid bytes range-set includes at least one range-spec with a | |||
| first-pos that is less than the current length of the representation, | first-pos that is less than the current length of the representation, | |||
| or at least one suffix-range with a non-zero suffix-length, then the | or at least one suffix-range with a non-zero suffix-length, then the | |||
| bytes range-set is satisfiable. Otherwise, the bytes range-set is | bytes range-set is satisfiable. Otherwise, the bytes range-set is | |||
| unsatisfiable. | unsatisfiable. | |||
| skipping to change at page 138, line 52 ¶ | skipping to change at page 139, line 27 ¶ | |||
| The "Accept-Ranges" header field allows a server to indicate that it | The "Accept-Ranges" header field allows a server to indicate that it | |||
| supports range requests for the target resource. | supports range requests for the target resource. | |||
| Accept-Ranges = acceptable-ranges | Accept-Ranges = acceptable-ranges | |||
| acceptable-ranges = 1#range-unit / "none" | acceptable-ranges = 1#range-unit / "none" | |||
| An origin server that supports byte-range requests for a given target | An origin server that supports byte-range requests for a given target | |||
| resource MAY send | resource MAY send | |||
| Accept-Ranges: bytes | Accept-Ranges: bytes | |||
| to indicate what range units are supported. A client MAY generate | to indicate what range units are supported. A client MAY generate | |||
| range requests without having received this header field for the | range requests without having received this header field for the | |||
| resource involved. Range units are defined in Section 14.1. | resource involved. Range units are defined in Section 14.1. | |||
| A server that does not support any kind of range request for the | A server that does not support any kind of range request for the | |||
| target resource MAY send | target resource MAY send | |||
| Accept-Ranges: none | Accept-Ranges: none | |||
| to advise the client not to attempt a range request. | to advise the client not to attempt a range request. | |||
| 14.4. Content-Range | 14.4. Content-Range | |||
| The "Content-Range" header field is sent in a single part 206 | The "Content-Range" header field is sent in a single part 206 | |||
| (Partial Content) response to indicate the partial range of the | (Partial Content) response to indicate the partial range of the | |||
| selected representation enclosed as the message content, sent in each | selected representation enclosed as the message content, sent in each | |||
| part of a multipart 206 response to indicate the range enclosed | part of a multipart 206 response to indicate the range enclosed | |||
| within each body part, and sent in 416 (Range Not Satisfiable) | within each body part, and sent in 416 (Range Not Satisfiable) | |||
| skipping to change at page 140, line 8 ¶ | skipping to change at page 140, line 36 ¶ | |||
| For byte ranges, a sender SHOULD indicate the complete length of the | For byte ranges, a sender SHOULD indicate the complete length of the | |||
| representation from which the range has been extracted, unless the | representation from which the range has been extracted, unless the | |||
| complete length is unknown or difficult to determine. An asterisk | complete length is unknown or difficult to determine. An asterisk | |||
| character ("*") in place of the complete-length indicates that the | character ("*") in place of the complete-length indicates that the | |||
| representation length was unknown when the header field was | representation length was unknown when the header field was | |||
| generated. | generated. | |||
| The following example illustrates when the complete length of the | The following example illustrates when the complete length of the | |||
| selected representation is known by the sender to be 1234 bytes: | selected representation is known by the sender to be 1234 bytes: | |||
| Content-Range: bytes 42-1233/1234 | Content-Range: bytes 42-1233/1234 | |||
| and this second example illustrates when the complete length is | and this second example illustrates when the complete length is | |||
| unknown: | unknown: | |||
| Content-Range: bytes 42-1233/* | Content-Range: bytes 42-1233/* | |||
| A Content-Range field value is invalid if it contains a range-resp | A Content-Range field value is invalid if it contains a range-resp | |||
| that has a last-pos value less than its first-pos value, or a | that has a last-pos value less than its first-pos value, or a | |||
| complete-length value less than or equal to its last-pos value. The | complete-length value less than or equal to its last-pos value. The | |||
| recipient of an invalid Content-Range MUST NOT attempt to recombine | recipient of an invalid Content-Range MUST NOT attempt to recombine | |||
| the received content with a stored representation. | the received content with a stored representation. | |||
| A server generating a 416 (Range Not Satisfiable) response to a byte- | A server generating a 416 (Range Not Satisfiable) response to a byte- | |||
| range request SHOULD send a Content-Range header field with an | range request SHOULD send a Content-Range header field with an | |||
| unsatisfied-range value, as in the following example: | unsatisfied-range value, as in the following example: | |||
| Content-Range: bytes */1234 | Content-Range: bytes */1234 | |||
| The complete-length in a 416 response indicates the current length of | The complete-length in a 416 response indicates the current length of | |||
| the selected representation. | the selected representation. | |||
| The Content-Range header field has no meaning for status codes that | The Content-Range header field has no meaning for status codes that | |||
| do not explicitly describe its semantic. For this specification, | do not explicitly describe its semantic. For this specification, | |||
| only the 206 (Partial Content) and 416 (Range Not Satisfiable) status | only the 206 (Partial Content) and 416 (Range Not Satisfiable) status | |||
| codes describe a meaning for Content-Range. | codes describe a meaning for Content-Range. | |||
| The following are examples of Content-Range values in which the | The following are examples of Content-Range values in which the | |||
| selected representation contains a total of 1234 bytes: | selected representation contains a total of 1234 bytes: | |||
| o The first 500 bytes: | * The first 500 bytes: | |||
| Content-Range: bytes 0-499/1234 | Content-Range: bytes 0-499/1234 | |||
| o The second 500 bytes: | * The second 500 bytes: | |||
| Content-Range: bytes 500-999/1234 | Content-Range: bytes 500-999/1234 | |||
| o All except for the first 500 bytes: | * All except for the first 500 bytes: | |||
| Content-Range: bytes 500-1233/1234 | Content-Range: bytes 500-1233/1234 | |||
| o The last 500 bytes: | * The last 500 bytes: | |||
| Content-Range: bytes 734-1233/1234 | Content-Range: bytes 734-1233/1234 | |||
| 14.5. Partial PUT | 14.5. Partial PUT | |||
| Some origin servers support PUT of a partial representation when a | Some origin servers support PUT of a partial representation when the | |||
| Content-Range header field (Section 14.4) is sent in the request, | user agent sends a Content-Range header field (Section 14.4) in the | |||
| though such support is inconsistent and depends on private agreements | request, though such support is inconsistent and depends on private | |||
| with user agents. In general, it requests that the state of the | agreements with user agents. In general, it requests that the state | |||
| target resource be partly replaced with the enclosed content at an | of the target resource be partly replaced with the enclosed content | |||
| offset and length indicated by the Content-Range value, where the | at an offset and length indicated by the Content-Range value, where | |||
| offset is relative to the current selected representation. | the offset is relative to the current selected representation. | |||
| An origin server SHOULD respond with a 400 (Bad Request) status code | An origin server SHOULD respond with a 400 (Bad Request) status code | |||
| if it receives Content-Range on a PUT for a target resource that does | if it receives Content-Range on a PUT for a target resource that does | |||
| not support partial PUT requests. | not support partial PUT requests. | |||
| Partial PUT is not backwards compatible with the original definition | Partial PUT is not backwards compatible with the original definition | |||
| of PUT. It may result in the content being written as a complete | of PUT. It may result in the content being written as a complete | |||
| replacement for the current representation. | replacement for the current representation. | |||
| Partial resource updates are also possible by targeting a separately | Partial resource updates are also possible by targeting a separately | |||
| skipping to change at page 142, line 14 ¶ | skipping to change at page 143, line 5 ¶ | |||
| 3. A number of clients and servers were coded to an early draft of | 3. A number of clients and servers were coded to an early draft of | |||
| the byteranges specification that used a media type of multipart/ | the byteranges specification that used a media type of multipart/ | |||
| x-byteranges , which is almost (but not quite) compatible with | x-byteranges , which is almost (but not quite) compatible with | |||
| this type. | this type. | |||
| Despite the name, the "multipart/byteranges" media type is not | Despite the name, the "multipart/byteranges" media type is not | |||
| limited to byte ranges. The following example uses an "exampleunit" | limited to byte ranges. The following example uses an "exampleunit" | |||
| range unit: | range unit: | |||
| HTTP/1.1 206 Partial Content | HTTP/1.1 206 Partial Content | |||
| Date: Tue, 14 Nov 1995 06:25:24 GMT | Date: Tue, 14 Nov 1995 06:25:24 GMT | |||
| Last-Modified: Tue, 14 July 04:58:08 GMT | Last-Modified: Tue, 14 July 04:58:08 GMT | |||
| Content-Length: 2331785 | Content-Length: 2331785 | |||
| Content-Type: multipart/byteranges; boundary=THIS_STRING_SEPARATES | Content-Type: multipart/byteranges; boundary=THIS_STRING_SEPARATES | |||
| --THIS_STRING_SEPARATES | --THIS_STRING_SEPARATES | |||
| Content-Type: video/example | Content-Type: video/example | |||
| Content-Range: exampleunit 1.2-4.3/25 | Content-Range: exampleunit 1.2-4.3/25 | |||
| ...the first range... | ...the first range... | |||
| --THIS_STRING_SEPARATES | --THIS_STRING_SEPARATES | |||
| Content-Type: video/example | Content-Type: video/example | |||
| Content-Range: exampleunit 11.2-14.3/25 | Content-Range: exampleunit 11.2-14.3/25 | |||
| ...the second range | ...the second range | |||
| --THIS_STRING_SEPARATES-- | --THIS_STRING_SEPARATES-- | |||
| The following information serves as the registration form for the | The following information serves as the registration form for the | |||
| multipart/byteranges media type. | multipart/byteranges media type. | |||
| Type name: multipart | Type name: multipart | |||
| Subtype name: byteranges | Subtype name: byteranges | |||
| Required parameters: boundary | Required parameters: boundary | |||
| skipping to change at page 143, line 13 ¶ | skipping to change at page 144, line 4 ¶ | |||
| Applications that use this media type: HTTP components supporting | Applications that use this media type: HTTP components supporting | |||
| multiple ranges in a single request. | multiple ranges in a single request. | |||
| Fragment identifier considerations: N/A | Fragment identifier considerations: N/A | |||
| Additional information: Deprecated alias names for this type: N/A | Additional information: Deprecated alias names for this type: N/A | |||
| Magic number(s): N/A | Magic number(s): N/A | |||
| File extension(s): N/A | File extension(s): N/A | |||
| Macintosh file type code(s): N/A | Macintosh file type code(s): N/A | |||
| Person and email address to contact for further information: See Aut | Person and email address to contact for further information: See Aut | |||
| hors' Addresses section. | hors' Addresses section. | |||
| Intended usage: COMMON | Intended usage: COMMON | |||
| Restrictions on usage: N/A | Restrictions on usage: N/A | |||
| Author: See Authors' Addresses section. | Author: See Authors' Addresses section. | |||
| Change controller: IESG | Change controller: IESG | |||
| 15. Status Codes | 15. Status Codes | |||
| The (response) status code is a three-digit integer code giving the | The status code of a response is a three-digit integer code that | |||
| result of the attempt to understand and satisfy the request. | describes the result of the request and the semantics of the | |||
| response, including whether the request was successful and what | ||||
| HTTP status codes are extensible. HTTP clients are not required to | content is enclosed (if any). All valid status codes are within the | |||
| understand the meaning of all registered status codes, though such | range of 100 to 599, inclusive. | |||
| understanding is obviously desirable. However, a client MUST | ||||
| understand the class of any status code, as indicated by the first | ||||
| digit, and treat an unrecognized status code as being equivalent to | ||||
| the x00 status code of that class. | ||||
| For example, if an unrecognized status code of 471 is received by a | ||||
| client, the client can assume that there was something wrong with its | ||||
| request and treat the response as if it had received a 400 (Bad | ||||
| Request) status code. The response message will usually contain a | ||||
| representation that explains the status. | ||||
| The first digit of the status code defines the class of response. | The first digit of the status code defines the class of response. | |||
| The last two digits do not have any categorization role. There are | The last two digits do not have any categorization role. There are | |||
| five values for the first digit: | five values for the first digit: | |||
| o 1xx (Informational): The request was received, continuing process | * 1xx (Informational): The request was received, continuing process | |||
| o 2xx (Successful): The request was successfully received, | ||||
| * 2xx (Successful): The request was successfully received, | ||||
| understood, and accepted | understood, and accepted | |||
| o 3xx (Redirection): Further action needs to be taken in order to | * 3xx (Redirection): Further action needs to be taken in order to | |||
| complete the request | complete the request | |||
| o 4xx (Client Error): The request contains bad syntax or cannot be | * 4xx (Client Error): The request contains bad syntax or cannot be | |||
| fulfilled | fulfilled | |||
| o 5xx (Server Error): The server failed to fulfill an apparently | * 5xx (Server Error): The server failed to fulfill an apparently | |||
| valid request | valid request | |||
| HTTP status codes are extensible. A client is not required to | ||||
| understand the meaning of all registered status codes, though such | ||||
| understanding is obviously desirable. However, a client MUST | ||||
| understand the class of any status code, as indicated by the first | ||||
| digit, and treat an unrecognized status code as being equivalent to | ||||
| the x00 status code of that class. | ||||
| For example, if a client receives an unrecognized status code of 471, | ||||
| it can see from the first digit that there was something wrong with | ||||
| its request and treat the response as if it had received a 400 (Bad | ||||
| Request) status code. The response message will usually contain a | ||||
| representation that explains the status. | ||||
| Values outside the range 100..599 are invalid. Implementations often | ||||
| use three-digit integer values outside of that range (i.e., 600..999) | ||||
| for internal communication of non-HTTP status (e.g., library errors). | ||||
| A client that receives a response with an invalid status code SHOULD | ||||
| process the response as if it had a 5xx (Server Error) status code. | ||||
| A single request can have multiple associated responses: zero or more | A single request can have multiple associated responses: zero or more | |||
| _interim_ (non-final) responses with status codes in the | _interim_ (non-final) responses with status codes in the | |||
| "informational" (1xx) range, followed by exactly one _final_ response | "informational" (1xx) range, followed by exactly one _final_ response | |||
| with a status code in one of the other ranges. | with a status code in one of the other ranges. | |||
| 15.1. Overview of Status Codes | 15.1. Overview of Status Codes | |||
| The status codes listed below are defined in this specification. The | The status codes listed below are defined in this specification. The | |||
| reason phrases listed here are only recommendations - they can be | reason phrases listed here are only recommendations - they can be | |||
| replaced by local equivalents or left out altogether without | replaced by local equivalents or left out altogether without | |||
| skipping to change at page 145, line 38 ¶ | skipping to change at page 146, line 38 ¶ | |||
| 100-continue expectation, the client can simply discard this interim | 100-continue expectation, the client can simply discard this interim | |||
| response. | response. | |||
| 15.2.2. 101 Switching Protocols | 15.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 7.8), for a change in the | the Upgrade header field (Section 7.8), for a change in the | |||
| application protocol being used on this connection. The server MUST | application protocol being used on this connection. The server MUST | |||
| generate an Upgrade header field in the response that indicates which | generate an Upgrade header field in the response that indicates which | |||
| protocol(s) will be switched to immediately after the empty line that | protocol(s) will be in effect after this response. | |||
| 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. | |||
| 15.3. Successful 2xx | 15.3. Successful 2xx | |||
| The _2xx (Successful)_ class of status code indicates that the | The _2xx (Successful)_ class of status code indicates that the | |||
| client's request was successfully received, understood, and accepted. | client's request was successfully received, understood, and accepted. | |||
| 15.3.1. 200 OK | 15.3.1. 200 OK | |||
| The _200 (OK)_ status code indicates that the request has succeeded. | The _200 (OK)_ status code indicates that the request has succeeded. | |||
| The content sent in a 200 response depends on the request method. | The content sent in a 200 response depends on the request method. | |||
| For the methods defined by this specification, the intended meaning | For the methods defined by this specification, the intended meaning | |||
| of the content can be summarized as: | of the content can be summarized as: | |||
| ---------------- -------------------------------------------- | +================+============================================+ | |||
| request method response content is a representation of | | request method | response content is a representation of | | |||
| ---------------- -------------------------------------------- | +================+============================================+ | |||
| GET the target resource | | GET | the target resource | | |||
| HEAD the target resource, like GET, but without | +----------------+--------------------------------------------+ | |||
| transferring the representation data | | HEAD | the target resource, like GET, but without | | |||
| POST the status of, or results obtained from, | | | transferring the representation data | | |||
| the action | +----------------+--------------------------------------------+ | |||
| PUT, DELETE the status of the action | | POST | the status of, or results obtained from, | | |||
| OPTIONS communication options for the target | | | the action | | |||
| resource | +----------------+--------------------------------------------+ | |||
| TRACE the request message as received by the | | PUT, DELETE | the status of the action | | |||
| server returning the trace | +----------------+--------------------------------------------+ | |||
| ---------------- -------------------------------------------- | | OPTIONS | communication options for the target | | |||
| | | resource | | ||||
| +----------------+--------------------------------------------+ | ||||
| | TRACE | the request message as received by the | | ||||
| | | server returning the trace | | ||||
| +----------------+--------------------------------------------+ | ||||
| Table 6 | Table 6 | |||
| Aside from responses to CONNECT, a 200 response always has content, | Aside from responses to CONNECT, a 200 response always has content, | |||
| though an origin server MAY generate content of zero length. If no | though an origin server MAY generate content of zero length. If no | |||
| content is desired, an origin server ought to send _204 (No Content)_ | content is desired, an origin server ought to send _204 (No Content)_ | |||
| instead. For CONNECT, no content is allowed because the successful | instead. For CONNECT, no content is allowed because the successful | |||
| result is a tunnel, which begins immediately after the 200 response | result is a tunnel, which begins immediately after the 200 response | |||
| header section. | header section. | |||
| skipping to change at page 149, line 13 ¶ | skipping to change at page 150, line 18 ¶ | |||
| However, a server might want to send only a subset of the data | However, a server might want to send only a subset of the data | |||
| requested for reasons of its own, such as temporary unavailability, | requested for reasons of its own, such as temporary unavailability, | |||
| cache efficiency, load balancing, etc. Since a 206 response is self- | cache efficiency, load balancing, etc. Since a 206 response is self- | |||
| descriptive, the client can still understand a response that only | descriptive, the client can still understand a response that only | |||
| partially satisfies its range request. | partially satisfies its range request. | |||
| A client MUST inspect a 206 response's Content-Type and Content-Range | A client MUST inspect a 206 response's Content-Type and Content-Range | |||
| field(s) to determine what parts are enclosed and whether additional | field(s) to determine what parts are enclosed and whether additional | |||
| requests are needed. | requests are needed. | |||
| When a 206 response is generated, the server MUST generate the | A server that generates a 206 response MUST generate the following | |||
| following header fields, in addition to those required in the | header fields, in addition to those required in the subsections | |||
| subsections below, if the field would have been sent in a 200 (OK) | below, if the field would have been sent in a 200 (OK) response to | |||
| response to the same request: Date, Cache-Control, ETag, Expires, | the same request: Date, Cache-Control, ETag, Expires, | |||
| Content-Location, and Vary. | Content-Location, and Vary. | |||
| A Content-Length header field present in a 206 response indicates the | A Content-Length header field present in a 206 response indicates the | |||
| number of octets in the content of this message, which is usually not | number of octets in the content of this message, which is usually not | |||
| the complete length of the selected representation. Each | the complete length of the selected representation. Each | |||
| Content-Range header field includes information about the selected | Content-Range header field includes information about the selected | |||
| representation's complete length. | representation's complete length. | |||
| If a 206 is generated in response to a request with an If-Range | A sender that generates a 206 response with an If-Range header field | |||
| header field, the sender SHOULD NOT generate other representation | SHOULD NOT generate other representation header fields beyond those | |||
| header fields beyond those required, because the client is understood | required, because the client already has a prior response containing | |||
| to already have a prior response containing those header fields. | those header fields. Otherwise, a sender MUST generate all of the | |||
| Otherwise, the sender MUST generate all of the representation header | representation header fields that would have been sent in a 200 (OK) | |||
| fields that would have been sent in a 200 (OK) response to the same | response to the same request. | |||
| request. | ||||
| A 206 response is heuristically cacheable; i.e., unless otherwise | A 206 response is heuristically cacheable; i.e., unless otherwise | |||
| indicated by explicit cache controls (see Section 4.2.2 of | indicated by explicit cache controls (see Section 4.2.2 of | |||
| [Caching]). | [Caching]). | |||
| 15.3.7.1. Single Part | 15.3.7.1. Single Part | |||
| If a single part is being transferred, the server generating the 206 | If a single part is being transferred, the server generating the 206 | |||
| response MUST generate a Content-Range header field, describing what | response MUST generate a Content-Range header field, describing what | |||
| range of the selected representation is enclosed, and a content | range of the selected representation is enclosed, and a content | |||
| consisting of the range. For example: | consisting of the range. For example: | |||
| HTTP/1.1 206 Partial Content | HTTP/1.1 206 Partial Content | |||
| Date: Wed, 15 Nov 1995 06:25:24 GMT | Date: Wed, 15 Nov 1995 06:25:24 GMT | |||
| Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT | Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT | |||
| Content-Range: bytes 21010-47021/47022 | Content-Range: bytes 21010-47021/47022 | |||
| Content-Length: 26012 | Content-Length: 26012 | |||
| Content-Type: image/gif | Content-Type: image/gif | |||
| ... 26012 bytes of partial image data ... | ... 26012 bytes of partial image data ... | |||
| 15.3.7.2. Multiple Parts | 15.3.7.2. Multiple Parts | |||
| If multiple parts are being transferred, the server generating the | If multiple parts are being transferred, the server generating the | |||
| 206 response MUST generate "multipart/byteranges" content, as defined | 206 response MUST generate "multipart/byteranges" content, as defined | |||
| in Section 14.6, and a Content-Type header field containing the | in Section 14.6, and a Content-Type header field containing the | |||
| multipart/byteranges media type and its required boundary parameter. | multipart/byteranges media type and its required boundary parameter. | |||
| To avoid confusion with single-part responses, a server MUST NOT | To avoid confusion with single-part responses, a server MUST NOT | |||
| generate a Content-Range header field in the HTTP header section of a | generate a Content-Range header field in the HTTP header section of a | |||
| multiple part response (this field will be sent in each part | multiple part response (this field will be sent in each part | |||
| instead). | instead). | |||
| Within the header area of each body part in the multipart content, | Within the header area of each body part in the multipart content, | |||
| the server MUST generate a Content-Range header field corresponding | the server MUST generate a Content-Range header field corresponding | |||
| to the range being enclosed in that body part. If the selected | to the range being enclosed in that body part. If the selected | |||
| representation would have had a Content-Type header field in a 200 | representation would have had a Content-Type header field in a 200 | |||
| (OK) response, the server SHOULD generate that same Content-Type | (OK) response, the server SHOULD generate that same Content-Type | |||
| header field in the header area of each body part. For example: | header field in the header area of each body part. For example: | |||
| HTTP/1.1 206 Partial Content | HTTP/1.1 206 Partial Content | |||
| Date: Wed, 15 Nov 1995 06:25:24 GMT | Date: Wed, 15 Nov 1995 06:25:24 GMT | |||
| Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT | Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT | |||
| Content-Length: 1741 | Content-Length: 1741 | |||
| Content-Type: multipart/byteranges; boundary=THIS_STRING_SEPARATES | Content-Type: multipart/byteranges; boundary=THIS_STRING_SEPARATES | |||
| --THIS_STRING_SEPARATES | --THIS_STRING_SEPARATES | |||
| Content-Type: application/pdf | Content-Type: application/pdf | |||
| Content-Range: bytes 500-999/8000 | Content-Range: bytes 500-999/8000 | |||
| ...the first range... | ...the first range... | |||
| --THIS_STRING_SEPARATES | --THIS_STRING_SEPARATES | |||
| Content-Type: application/pdf | Content-Type: application/pdf | |||
| Content-Range: bytes 7000-7999/8000 | Content-Range: bytes 7000-7999/8000 | |||
| ...the second range | ...the second range | |||
| --THIS_STRING_SEPARATES-- | --THIS_STRING_SEPARATES-- | |||
| When multiple ranges are requested, a server MAY coalesce any of the | When multiple ranges are requested, a server MAY coalesce any of the | |||
| ranges that overlap, or that are separated by a gap that is smaller | ranges that overlap, or that are separated by a gap that is smaller | |||
| than the overhead of sending multiple parts, regardless of the order | than the overhead of sending multiple parts, regardless of the order | |||
| in which the corresponding range-spec appeared in the received Range | in which the corresponding range-spec appeared in the received Range | |||
| header field. Since the typical overhead between each part of a | header field. Since the typical overhead between each part of a | |||
| multipart/byteranges is around 80 bytes, depending on the selected | multipart/byteranges is around 80 bytes, depending on the selected | |||
| representation's media type and the chosen boundary parameter length, | representation's media type and the chosen boundary parameter length, | |||
| it can be less efficient to transfer many small disjoint parts than | it can be less efficient to transfer many small disjoint parts than | |||
| it is to transfer the entire selected representation. | it is to transfer the entire selected representation. | |||
| A server MUST NOT generate a multipart response to a request for a | A server MUST NOT generate a multipart response to a request for a | |||
| single range, since a client that does not request multiple parts | single range, since a client that does not request multiple parts | |||
| might not support multipart responses. However, a server MAY | might not support multipart responses. However, a server MAY | |||
| generate a multipart/byteranges response with only a single body part | generate a multipart/byteranges response with only a single body part | |||
| if multiple ranges were requested and only one range was found to be | if multiple ranges were requested and only one range was found to be | |||
| satisfiable or only one range remained after coalescing. A client | satisfiable or only one range remained after coalescing. A client | |||
| that cannot process a multipart/byteranges response MUST NOT generate | that cannot process a multipart/byteranges response MUST NOT generate | |||
| a request that asks for multiple ranges. | a request that asks for multiple ranges. | |||
| When a multipart response is generated, the server SHOULD send the | A server that generates a multipart response SHOULD send the parts in | |||
| parts in the same order that the corresponding range-spec appeared in | the same order that the corresponding range-spec appeared in the | |||
| the received Range header field, excluding those ranges that were | received Range header field, excluding those ranges that were deemed | |||
| deemed unsatisfiable or that were coalesced into other ranges. A | unsatisfiable or that were coalesced into other ranges. A client | |||
| client that receives a multipart response MUST inspect the | that receives a multipart response MUST inspect the Content-Range | |||
| Content-Range header field present in each body part in order to | header field present in each body part in order to determine which | |||
| determine which range is contained in that body part; a client cannot | range is contained in that body part; a client cannot rely on | |||
| rely on receiving the same ranges that it requested, nor the same | receiving the same ranges that it requested, nor the same order that | |||
| order that it requested. | it requested. | |||
| 15.3.7.3. Combining Parts | 15.3.7.3. Combining Parts | |||
| A response might transfer only a subrange of a representation if the | A response might transfer only a subrange of a representation if the | |||
| connection closed prematurely or if the request used one or more | connection closed prematurely or if the request used one or more | |||
| Range specifications. After several such transfers, a client might | Range specifications. After several such transfers, a client might | |||
| have received several ranges of the same representation. These | have received several ranges of the same representation. These | |||
| ranges can only be safely combined if they all have in common the | ranges can only be safely combined if they all have in common the | |||
| same strong validator (Section 8.8.1). | same strong validator (Section 8.8.1). | |||
| skipping to change at page 162, line 17 ¶ | skipping to change at page 163, line 31 ¶ | |||
| The _411 (Length Required)_ status code indicates that the server | The _411 (Length Required)_ status code indicates that the server | |||
| refuses to accept the request without a defined Content-Length | refuses to accept the request without a defined Content-Length | |||
| (Section 8.6). The client MAY repeat the request if it adds a valid | (Section 8.6). The client MAY repeat the request if it adds a valid | |||
| Content-Length header field containing the length of the request | Content-Length header field containing the length of the request | |||
| content. | content. | |||
| 15.5.13. 412 Precondition Failed | 15.5.13. 412 Precondition Failed | |||
| The _412 (Precondition Failed)_ status code indicates that one or | The _412 (Precondition Failed)_ status code indicates that one or | |||
| more conditions given in the request header fields evaluated to false | more conditions given in the request header fields evaluated to false | |||
| when tested on the server. This response status code allows the | when tested on the server (Section 13). This response status code | |||
| client to place preconditions on the current resource state (its | allows the client to place preconditions on the current resource | |||
| current representations and metadata) and, thus, prevent the request | state (its current representations and metadata) and, thus, prevent | |||
| method from being applied if the target resource is in an unexpected | the request method from being applied if the target resource is in an | |||
| state. | unexpected state. | |||
| 15.5.14. 413 Content Too Large | 15.5.14. 413 Content Too Large | |||
| The _413 (Content Too Large)_ status code indicates that the server | The _413 (Content Too Large)_ status code indicates that the server | |||
| is refusing to process a request because the request content is | is refusing to process a request because the request content is | |||
| larger than the server is willing or able to process. The server MAY | larger than the server is willing or able to process. The server MAY | |||
| terminate the request, if the protocol version in use allows it; | terminate the request, if the protocol version in use allows it; | |||
| otherwise, the server MAY close the connection. | otherwise, the server MAY close the connection. | |||
| If the condition is temporary, the server SHOULD generate a | If the condition is temporary, the server SHOULD generate a | |||
| skipping to change at page 163, line 36 ¶ | skipping to change at page 165, line 5 ¶ | |||
| The _416 (Range Not Satisfiable)_ status code indicates that the set | The _416 (Range Not Satisfiable)_ status code indicates that the set | |||
| of ranges in the request's Range header field (Section 14.2) has been | of ranges in the request's Range header field (Section 14.2) has been | |||
| rejected either because none of the requested ranges are satisfiable | rejected either because none of the requested ranges are satisfiable | |||
| or because the client has requested an excessive number of small or | or because the client has requested an excessive number of small or | |||
| overlapping ranges (a potential denial of service attack). | overlapping ranges (a potential denial of service attack). | |||
| Each range unit defines what is required for its own range sets to be | Each range unit defines what is required for its own range sets to be | |||
| satisfiable. For example, Section 14.1.2 defines what makes a bytes | satisfiable. For example, Section 14.1.2 defines what makes a bytes | |||
| range set satisfiable. | range set satisfiable. | |||
| When this status code is generated in response to a byte-range | A server that generates a 416 response to a byte-range request SHOULD | |||
| request, the sender SHOULD generate a Content-Range header field | generate a Content-Range header field specifying the current length | |||
| specifying the current length of the selected representation | of the selected representation (Section 14.4). | |||
| (Section 14.4). | ||||
| 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 respond with the entire selected | | implementations will 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 | |||
| | most clients are prepared to receive a 200 (OK) to complete the | | most clients are prepared to receive a 200 (OK) to complete the | |||
| | task (albeit less efficiently) and partly because clients might | | task (albeit less efficiently) and partly because clients might | |||
| | not stop making an invalid range request until they have | | not stop making an invalid range request until they have | |||
| | received a complete representation. Thus, clients cannot | | received a complete representation. Thus, clients cannot | |||
| | depend on receiving a 416 (Range Not Satisfiable) response even | | depend on receiving a 416 (Range Not Satisfiable) response even | |||
| | when it is most appropriate. | | when it is most appropriate. | |||
| skipping to change at page 164, line 33 ¶ | skipping to change at page 166, line 9 ¶ | |||
| Therefore, the 418 status code is reserved in the IANA HTTP Status | Therefore, the 418 status code is reserved in the IANA HTTP Status | |||
| Code Registry. This indicates that the status code cannot be | Code Registry. This indicates that the status code cannot be | |||
| assigned to other applications currently. If future circumstances | assigned to other applications currently. If future circumstances | |||
| require its use (e.g., exhaustion of 4NN status codes), it can be re- | require its use (e.g., exhaustion of 4NN status codes), it can be re- | |||
| assigned to another use. | assigned to another use. | |||
| 15.5.20. 421 Misdirected Request | 15.5.20. 421 Misdirected Request | |||
| The 421 (Misdirected Request) status code indicates that the request | The 421 (Misdirected Request) status code indicates that the request | |||
| was directed at a server that is unable or unwilling to produce an | was directed at a server that is unable or unwilling to produce an | |||
| authoritative response for the target URI. A 421 is sent when an | authoritative response for the target URI. An origin server (or | |||
| origin server (or gateway acting on behalf of the origin server) | gateway acting on behalf of the origin server) sends 421 to reject a | |||
| rejects a target URI that does not match an origin for which the | target URI that does not match an origin for which the server has | |||
| server has been configured (Section 4.3.1) or does not match the | been configured (Section 4.3.1) or does not match the connection | |||
| connection context over which the request was received (Section 7.4). | context over which the request was received (Section 7.4). | |||
| A client that receives a 421 (Misdirected Request) response MAY retry | A client that receives a 421 (Misdirected Request) response MAY retry | |||
| the request, whether or not the request method is idempotent, over a | the request, whether or not the request method is idempotent, over a | |||
| different connection, such as a fresh connection specific to the | different connection, such as a fresh connection specific to the | |||
| target resource's origin, or via an alternative service [RFC7838]. | target resource's origin, or via an alternative service [RFC7838]. | |||
| A proxy MUST NOT generate a 421 response. | A proxy MUST NOT generate a 421 response. | |||
| 15.5.21. 422 Unprocessable Content | 15.5.21. 422 Unprocessable Content | |||
| skipping to change at page 165, line 25 ¶ | skipping to change at page 166, line 42 ¶ | |||
| 15.5.22. 426 Upgrade Required | 15.5.22. 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 7.8). | response to indicate the required protocol(s) (Section 7.8). | |||
| 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 | |||
| This service requires use of the HTTP/3.0 protocol. | This service requires use of the HTTP/3.0 protocol. | |||
| 15.6. Server Error 5xx | 15.6. Server Error 5xx | |||
| The _5xx (Server Error)_ class of status code indicates that the | The _5xx (Server Error)_ class of status code indicates that the | |||
| server is aware that it has erred or is incapable of performing the | server is aware that it has erred or is incapable of performing the | |||
| requested method. Except when responding to a HEAD request, the | requested method. Except when responding to a HEAD request, the | |||
| server SHOULD send a representation containing an explanation of the | server SHOULD send a representation containing an explanation of the | |||
| error situation, and whether it is a temporary or permanent | error situation, and whether it is a temporary or permanent | |||
| condition. A user agent SHOULD display any included representation | condition. A user agent SHOULD display any included representation | |||
| to the user. These response codes are applicable to any request | to the user. These response codes are applicable to any request | |||
| skipping to change at page 167, line 47 ¶ | skipping to change at page 169, line 19 ¶ | |||
| 16.1. Method Extensibility | 16.1. Method Extensibility | |||
| 16.1.1. Method Registry | 16.1.1. Method Registry | |||
| The "Hypertext Transfer Protocol (HTTP) Method Registry", maintained | The "Hypertext Transfer Protocol (HTTP) Method Registry", maintained | |||
| by IANA at <https://www.iana.org/assignments/http-methods>, registers | by IANA at <https://www.iana.org/assignments/http-methods>, registers | |||
| method names. | method names. | |||
| HTTP method registrations MUST include the following fields: | HTTP method registrations MUST include the following fields: | |||
| o Method Name (see Section 9) | * Method Name (see Section 9) | |||
| o Safe ("yes" or "no", see Section 9.2.1) | * Safe ("yes" or "no", see Section 9.2.1) | |||
| o Idempotent ("yes" or "no", see Section 9.2.2) | * Idempotent ("yes" or "no", see Section 9.2.2) | |||
| o Pointer to specification text | ||||
| * Pointer to specification text | ||||
| Values to be added to this namespace require IETF Review (see | Values to be added to this namespace require IETF Review (see | |||
| [RFC8126], Section 4.8). | [RFC8126], Section 4.8). | |||
| 16.1.2. Considerations for New Methods | 16.1.2. Considerations for New Methods | |||
| Standardized methods are generic; that is, they are potentially | Standardized methods are generic; that is, they are potentially | |||
| applicable to any resource, not just one particular media type, kind | applicable to any resource, not just one particular media type, kind | |||
| of resource, or application. As such, it is preferred that new | of resource, or application. As such, it is preferred that new | |||
| methods be registered in a document that isn't specific to a single | methods be registered in a document that isn't specific to a single | |||
| application or data format, since orthogonal technologies deserve | application or data format, since orthogonal technologies deserve | |||
| orthogonal specification. | orthogonal specification. | |||
| Since message parsing (Section 6 of [Messaging]) needs to be | Since message parsing (Section 6) needs to be independent of method | |||
| independent of method semantics (aside from responses to HEAD), | semantics (aside from responses to HEAD), definitions of new methods | |||
| definitions of new methods cannot change the parsing algorithm or | cannot change the parsing algorithm or prohibit the presence of | |||
| prohibit the presence of content on either the request or the | content on either the request or the response message. Definitions | |||
| response message. Definitions of new methods can specify that only a | of new methods can specify that only a zero-length content is allowed | |||
| zero-length content is allowed by requiring a Content-Length header | by requiring a Content-Length header field with a value of "0". | |||
| field with a value of "0". | ||||
| Likewise, new methods cannot use the special host:port and asterisk | Likewise, new methods cannot use the special host:port and asterisk | |||
| forms of request target that are allowed for CONNECT and OPTIONS, | forms of request target that are allowed for CONNECT and OPTIONS, | |||
| respectively (Section 7.1). A full URI in absolute form is needed | respectively (Section 7.1). A full URI in absolute form is needed | |||
| for the target URI, which means either the request target needs to be | for the target URI, which means either the request target needs to be | |||
| sent in absolute form or the target URI will be reconstructed from | sent in absolute form or the target URI will be reconstructed from | |||
| the request context in the same way it is for other methods. | the request context in the same way it is for other methods. | |||
| A new method definition needs to indicate whether it is safe | A new method definition needs to indicate whether it is safe | |||
| (Section 9.2.1), idempotent (Section 9.2.2), cacheable | (Section 9.2.1), idempotent (Section 9.2.2), cacheable | |||
| skipping to change at page 169, line 4 ¶ | skipping to change at page 170, line 23 ¶ | |||
| (Section 13.1) and, if so, how a server responds when the condition | (Section 13.1) and, if so, how a server responds when the condition | |||
| is false. Likewise, if the new method might have some use for | is false. Likewise, if the new method might have some use for | |||
| partial response semantics (Section 14.2), it ought to document this, | partial response semantics (Section 14.2), it ought to document this, | |||
| too. | too. | |||
| | *Note:* Avoid defining a method name that starts with "M-", | | *Note:* Avoid defining a method name that starts with "M-", | |||
| | since that prefix might be misinterpreted as having the | | since that prefix might be misinterpreted as having the | |||
| | semantics assigned to it by [RFC2774]. | | semantics assigned to it by [RFC2774]. | |||
| 16.2. Status Code Extensibility | 16.2. Status Code Extensibility | |||
| 16.2.1. Status Code Registry | 16.2.1. Status Code Registry | |||
| The "Hypertext Transfer Protocol (HTTP) Status Code Registry", | The "Hypertext Transfer Protocol (HTTP) Status Code Registry", | |||
| maintained by IANA at <https://www.iana.org/assignments/http-status- | maintained by IANA at <https://www.iana.org/assignments/http-status- | |||
| codes>, registers status code numbers. | codes>, registers status code numbers. | |||
| A registration MUST include the following fields: | A registration MUST include the following fields: | |||
| o Status Code (3 digits) | * Status Code (3 digits) | |||
| o Short Description | * Short Description | |||
| o Pointer to specification text | * Pointer to specification text | |||
| Values to be added to the HTTP status code namespace require IETF | Values to be added to the HTTP status code namespace require IETF | |||
| Review (see [RFC8126], Section 4.8). | Review (see [RFC8126], Section 4.8). | |||
| 16.2.2. Considerations for New Status Codes | 16.2.2. Considerations for New Status Codes | |||
| When it is necessary to express semantics for a response that are not | When it is necessary to express semantics for a response that are not | |||
| defined by current status codes, a new status code can be registered. | defined by current status codes, a new status code can be registered. | |||
| Status codes are generic; they are potentially applicable to any | Status codes are generic; they are potentially applicable to any | |||
| resource, not just one particular media type, kind of resource, or | resource, not just one particular media type, kind of resource, or | |||
| skipping to change at page 171, line 5 ¶ | skipping to change at page 172, line 21 ¶ | |||
| in prior messages, or its use of a specific media type. Likewise, | in prior messages, or its use of a specific media type. Likewise, | |||
| direct inspection of support might be possible through an OPTIONS | direct inspection of support might be possible through an OPTIONS | |||
| request or by interacting with a defined well-known URI [RFC8615] if | request or by interacting with a defined well-known URI [RFC8615] if | |||
| such inspection is defined along with the field being introduced. | such inspection is defined along with the field being introduced. | |||
| 16.3.1. Field Name Registry | 16.3.1. Field Name Registry | |||
| The "Hypertext Transfer Protocol (HTTP) Field Name Registry" defines | The "Hypertext Transfer Protocol (HTTP) Field Name Registry" defines | |||
| the namespace for HTTP field names. | the namespace for HTTP field names. | |||
| Any party can request registration of a HTTP field. See | Any party can request registration of an HTTP field. See | |||
| Section 16.3.2 for considerations to take into account when creating | Section 16.3.2 for considerations to take into account when creating | |||
| a new HTTP field. | a new HTTP field. | |||
| The "Hypertext Transfer Protocol (HTTP) Field Name Registry" is | The "Hypertext Transfer Protocol (HTTP) Field Name Registry" is | |||
| located at <https://www.iana.org/assignments/http-fields/>. | located at <https://www.iana.org/assignments/http-fields/>. | |||
| Registration requests can be made by following the instructions | Registration requests can be made by following the instructions | |||
| located there or by sending an email to the "ietf-http-wg@ietf.org" | located there or by sending an email to the "ietf-http-wg@ietf.org" | |||
| mailing list. | mailing list. | |||
| Field names are registered on the advice of a Designated Expert | Field names are registered on the advice of a Designated Expert | |||
| skipping to change at page 172, line 21 ¶ | skipping to change at page 173, line 36 ¶ | |||
| HTTP header and trailer fields are a widely-used extension point for | HTTP header and trailer fields are a widely-used extension point for | |||
| the protocol. While they can be used in an ad hoc fashion, fields | the protocol. While they can be used in an ad hoc fashion, fields | |||
| that are intended for wider use need to be carefully documented to | that are intended for wider use need to be carefully documented to | |||
| ensure interoperability. | ensure interoperability. | |||
| In particular, authors of specifications defining new fields are | In particular, authors of specifications defining new fields are | |||
| advised to consider and, where appropriate, document the following | advised to consider and, where appropriate, document the following | |||
| aspects: | aspects: | |||
| o Under what conditions the field can be used; e.g., only in | * Under what conditions the field can be used; e.g., only in | |||
| responses or requests, in all messages, only on responses to a | responses or requests, in all messages, only on responses to a | |||
| particular request method, etc. | particular request method, etc. | |||
| o Whether the field semantics are further refined by their context, | * Whether the field semantics are further refined by their context, | |||
| such as their use with certain request methods or status codes. | such as their use with certain request methods or status codes. | |||
| o The scope of applicability for the information conveyed. By | * The scope of applicability for the information conveyed. By | |||
| default, fields apply only to the message they are associated | default, fields apply only to the message they are associated | |||
| with, but some response fields are designed to apply to all | with, but some response fields are designed to apply to all | |||
| representations of a resource, the resource itself, or an even | representations of a resource, the resource itself, or an even | |||
| broader scope. Specifications that expand the scope of a response | broader scope. Specifications that expand the scope of a response | |||
| field will need to carefully consider issues such as content | field will need to carefully consider issues such as content | |||
| negotiation, the time period of applicability, and (in some cases) | negotiation, the time period of applicability, and (in some cases) | |||
| multi-tenant server deployments. | multi-tenant server deployments. | |||
| o Under what conditions intermediaries are allowed to insert, | * Under what conditions intermediaries are allowed to insert, | |||
| delete, or modify the field's value. | delete, or modify the field's value. | |||
| o If the field is allowable in trailers; by default, it will not be | * If the field is allowable in trailers; by default, it will not be | |||
| (see Section 6.5.1). | (see Section 6.5.1). | |||
| o Whether it is appropriate to list the field name in the Connection | * Whether it is appropriate to list the field name in the Connection | |||
| header field (i.e., if the field is to be hop-by-hop; see | header field (i.e., if the field is to be hop-by-hop; see | |||
| Section 7.6.1). | Section 7.6.1). | |||
| o Whether the field introduces any additional security | * Whether the field introduces any additional security | |||
| considerations, such as disclosure of privacy-related data. | considerations, such as disclosure of privacy-related data. | |||
| Request header fields have additional considerations that need to be | Request header fields have additional considerations that need to be | |||
| documented if the default behaviour is not appropriate: | documented if the default behaviour is not appropriate: | |||
| o If it is appropriate to list the field name in a Vary response | * If it is appropriate to list the field name in a Vary response | |||
| header field (e.g., when the request header field is used by an | header field (e.g., when the request header field is used by an | |||
| origin server's content selection algorithm; see Section 12.5.5). | origin server's content selection algorithm; see Section 12.5.5). | |||
| o If the field is intended to be stored when received in a PUT | * If the field is intended to be stored when received in a PUT | |||
| request (see Section 9.3.4). | request (see Section 9.3.4). | |||
| o If the field ought to be removed when automatically redirecting a | * If the field ought to be removed when automatically redirecting a | |||
| request, due to security concerns (see Section 15.4). | request, due to security concerns (see Section 15.4). | |||
| 16.3.2.1. Considerations for New Field Names | 16.3.2.1. Considerations for New Field Names | |||
| Authors of specifications defining new fields are advised to choose a | Authors of specifications defining new fields are advised to choose a | |||
| short but descriptive field name. Short names avoid needless data | short but descriptive field name. Short names avoid needless data | |||
| transmission; descriptive names avoid confusion and "squatting" on | transmission; descriptive names avoid confusion and "squatting" on | |||
| names that might have broader uses. | names that might have broader uses. | |||
| To that end, limited-use fields (such as a header confined to a | To that end, limited-use fields (such as a header confined to a | |||
| skipping to change at page 173, line 51 ¶ | skipping to change at page 175, line 18 ¶ | |||
| do not trigger automatic processing. | do not trigger automatic processing. | |||
| 16.3.2.2. Considerations for New Field Values | 16.3.2.2. Considerations for New Field Values | |||
| A major task in the definition of a new HTTP field is the | A major task in the definition of a new HTTP field is the | |||
| specification of the field value syntax: what senders should | specification of the field value syntax: what senders should | |||
| generate, and how recipients should infer semantics from what is | generate, and how recipients should infer semantics from what is | |||
| received. | received. | |||
| Authors are encouraged (but not required) to use either the ABNF | Authors are encouraged (but not required) to use either the ABNF | |||
| rules in this specification or those in [RFCSTRF] to define the | rules in this specification or those in [RFC8941] to define the | |||
| syntax of new field values. | syntax of new field values. | |||
| Authors are advised to carefully consider how the combination of | Authors are advised to carefully consider how the combination of | |||
| multiple field lines will impact them (see Section 5.3). Because | multiple field lines will impact them (see Section 5.3). Because | |||
| senders might send erroneously send multiple values, and both | senders might send erroneously send multiple values, and both | |||
| intermediaries and HTTP libraries can perform combination | intermediaries and HTTP libraries can perform combination | |||
| automatically, this applies to all field values - even when only a | automatically, this applies to all field values - even when only a | |||
| single value is anticipated. | single value is anticipated. | |||
| Therefore, authors are advised to delimit or encode values that | Therefore, authors are advised to delimit or encode values that | |||
| contain commas (e.g., with the quoted-string rule of Section 5.6.4, | contain commas (e.g., with the quoted-string rule of Section 5.6.4, | |||
| the String data type of [RFCSTRF]), or a field-specific encoding). | the String data type of [RFC8941]), or a field-specific encoding). | |||
| This ensures that commas within field data are not confused with the | This ensures that commas within field data are not confused with the | |||
| commas that delimit a list value. | commas that delimit a list value. | |||
| For example, the Content-Type field value only allows commas inside | For example, the Content-Type field value only allows commas inside | |||
| quoted strings, which can be reliably parsed even when multiple | quoted strings, which can be reliably parsed even when multiple | |||
| values are present. The Location field value provides a counter- | values are present. The Location field value provides a counter- | |||
| example that should not be emulated: because URIs can include commas, | example that should not be emulated: because URIs can include commas, | |||
| it is not possible to reliably distinguish between a single value | it is not possible to reliably distinguish between a single value | |||
| that includes a comma from two values. | that includes a comma from two values. | |||
| skipping to change at page 174, line 31 ¶ | skipping to change at page 176, line 4 ¶ | |||
| example that should not be emulated: because URIs can include commas, | example that should not be emulated: because URIs can include commas, | |||
| it is not possible to reliably distinguish between a single value | it is not possible to reliably distinguish between a single value | |||
| that includes a comma from two values. | that includes a comma from two values. | |||
| Authors of fields with a singleton value (see Section 5.5) are | Authors of fields with a singleton value (see Section 5.5) are | |||
| additionally advised to document how to treat messages where the | additionally advised to document how to treat messages where the | |||
| multiple members are present (a sensible default would be to ignore | multiple members are present (a sensible default would be to ignore | |||
| the field, but this might not always be the right choice). | the field, but this might not always be the right choice). | |||
| 16.4. Authentication Scheme Extensibility | 16.4. Authentication Scheme Extensibility | |||
| 16.4.1. Authentication Scheme Registry | 16.4.1. Authentication Scheme Registry | |||
| The "Hypertext Transfer Protocol (HTTP) Authentication Scheme | The "Hypertext Transfer Protocol (HTTP) Authentication Scheme | |||
| Registry" defines the namespace for the authentication schemes in | Registry" defines the namespace for the authentication schemes in | |||
| challenges and credentials. It is maintained at | challenges and credentials. It is maintained at | |||
| <https://www.iana.org/assignments/http-authschemes>. | <https://www.iana.org/assignments/http-authschemes>. | |||
| Registrations MUST include the following fields: | Registrations MUST include the following fields: | |||
| o Authentication Scheme Name | * Authentication Scheme Name | |||
| o Pointer to specification text | * Pointer to specification text | |||
| o Notes (optional) | * Notes (optional) | |||
| Values to be added to this namespace require IETF Review (see | Values to be added to this namespace require IETF Review (see | |||
| [RFC8126], Section 4.8). | [RFC8126], Section 4.8). | |||
| 16.4.2. Considerations for New Authentication Schemes | 16.4.2. Considerations for New Authentication Schemes | |||
| There are certain aspects of the HTTP Authentication framework that | There are certain aspects of the HTTP Authentication framework that | |||
| put constraints on how new authentication schemes can work: | put constraints on how new authentication schemes can work: | |||
| o HTTP authentication is presumed to be stateless: all of the | * HTTP authentication is presumed to be stateless: all of the | |||
| information necessary to authenticate a request MUST be provided | information necessary to authenticate a request MUST be provided | |||
| in the request, rather than be dependent on the server remembering | in the request, rather than be dependent on the server remembering | |||
| prior requests. Authentication based on, or bound to, the | prior requests. Authentication based on, or bound to, the | |||
| underlying connection is outside the scope of this specification | underlying connection is outside the scope of this specification | |||
| and inherently flawed unless steps are taken to ensure that the | and inherently flawed unless steps are taken to ensure that the | |||
| connection cannot be used by any party other than the | connection cannot be used by any party other than the | |||
| authenticated user (see Section 3.7). | authenticated user (see Section 3.7). | |||
| o The authentication parameter "realm" is reserved for defining | * The authentication parameter "realm" is reserved for defining | |||
| protection spaces as described in Section 11.5. New schemes MUST | protection spaces as described in Section 11.5. New schemes MUST | |||
| NOT use it in a way incompatible with that definition. | NOT use it in a way incompatible with that definition. | |||
| o The "token68" notation was introduced for compatibility with | * The "token68" notation was introduced for compatibility with | |||
| existing authentication schemes and can only be used once per | existing authentication schemes and can only be used once per | |||
| challenge or credential. Thus, new schemes ought to use the auth- | challenge or credential. Thus, new schemes ought to use the auth- | |||
| param syntax instead, because otherwise future extensions will be | param syntax instead, because otherwise future extensions will be | |||
| impossible. | impossible. | |||
| o The parsing of challenges and credentials is defined by this | * The parsing of challenges and credentials is defined by this | |||
| specification and cannot be modified by new authentication | specification and cannot be modified by new authentication | |||
| schemes. When the auth-param syntax is used, all parameters ought | schemes. When the auth-param syntax is used, all parameters ought | |||
| to support both token and quoted-string syntax, and syntactical | to support both token and quoted-string syntax, and syntactical | |||
| constraints ought to be defined on the field value after parsing | constraints ought to be defined on the field value after parsing | |||
| (i.e., quoted-string processing). This is necessary so that | (i.e., quoted-string processing). This is necessary so that | |||
| recipients can use a generic parser that applies to all | recipients can use a generic parser that applies to all | |||
| authentication schemes. | authentication schemes. | |||
| *Note:* The fact that the value syntax for the "realm" parameter | *Note:* The fact that the value syntax for the "realm" parameter | |||
| is restricted to quoted-string was a bad design choice not to be | is restricted to quoted-string was a bad design choice not to be | |||
| repeated for new parameters. | repeated for new parameters. | |||
| o Definitions of new schemes ought to define the treatment of | * Definitions of new schemes ought to define the treatment of | |||
| unknown extension parameters. In general, a "must-ignore" rule is | unknown extension parameters. In general, a "must-ignore" rule is | |||
| preferable to a "must-understand" rule, because otherwise it will | preferable to a "must-understand" rule, because otherwise it will | |||
| be hard to introduce new parameters in the presence of legacy | be hard to introduce new parameters in the presence of legacy | |||
| recipients. Furthermore, it's good to describe the policy for | recipients. Furthermore, it's good to describe the policy for | |||
| defining new parameters (such as "update the specification" or | defining new parameters (such as "update the specification" or | |||
| "use this registry"). | "use this registry"). | |||
| o Authentication schemes need to document whether they are usable in | * Authentication schemes need to document whether they are usable in | |||
| origin-server authentication (i.e., using WWW-Authenticate), and/ | origin-server authentication (i.e., using WWW-Authenticate), and/ | |||
| or proxy authentication (i.e., using Proxy-Authenticate). | or proxy authentication (i.e., using Proxy-Authenticate). | |||
| o The credentials carried in an Authorization header field are | * The credentials carried in an Authorization header field are | |||
| specific to the user agent and, therefore, have the same effect on | specific to the user agent and, therefore, have the same effect on | |||
| HTTP caches as the "private" Cache-Control response directive | HTTP caches as the "private" Cache-Control response directive | |||
| (Section 5.2.2.7 of [Caching]), within the scope of the request in | (Section 5.2.2.7 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 Cache-Control response directives (e.g., | mandating the use of Cache-Control response directives (e.g., | |||
| "private"). | "private"). | |||
| o Schemes using Authentication-Info, Proxy-Authentication-Info, or | * Schemes using Authentication-Info, Proxy-Authentication-Info, or | |||
| any other authentication related response header field need to | any other authentication related response header field need to | |||
| consider and document the related security considerations (see | consider and document the related security considerations (see | |||
| Section 17.15.4). | Section 17.15.4). | |||
| 16.5. Range Unit Extensibility | 16.5. Range Unit Extensibility | |||
| 16.5.1. Range Unit Registry | 16.5.1. Range Unit Registry | |||
| The "HTTP Range Unit Registry" defines the namespace for the range | The "HTTP Range Unit Registry" defines the namespace for the range | |||
| unit names and refers to their corresponding specifications. It is | unit names and refers to their corresponding specifications. It is | |||
| maintained at <https://www.iana.org/assignments/http-parameters>. | maintained at <https://www.iana.org/assignments/http-parameters>. | |||
| Registration of an HTTP Range Unit MUST include the following fields: | Registration of an HTTP Range Unit MUST include the following fields: | |||
| o Name | * Name | |||
| o Description | * Description | |||
| o Pointer to specification text | * Pointer to specification text | |||
| Values to be added to this namespace require IETF Review (see | Values to be added to this namespace require IETF Review (see | |||
| [RFC8126], Section 4.8). | [RFC8126], Section 4.8). | |||
| 16.5.2. Considerations for New Range Units | 16.5.2. Considerations for New Range Units | |||
| Other range units, such as format-specific boundaries like pages, | Other range units, such as format-specific boundaries like pages, | |||
| sections, records, rows, or time, are potentially usable in HTTP for | sections, records, rows, or time, are potentially usable in HTTP for | |||
| application-specific purposes, but are not commonly used in practice. | application-specific purposes, but are not commonly used in practice. | |||
| Implementors of alternative range units ought to consider how they | Implementors of alternative range units ought to consider how they | |||
| skipping to change at page 177, line 4 ¶ | skipping to change at page 178, line 30 ¶ | |||
| 16.5.2. Considerations for New Range Units | 16.5.2. Considerations for New Range Units | |||
| Other range units, such as format-specific boundaries like pages, | Other range units, such as format-specific boundaries like pages, | |||
| sections, records, rows, or time, are potentially usable in HTTP for | sections, records, rows, or time, are potentially usable in HTTP for | |||
| application-specific purposes, but are not commonly used in practice. | application-specific purposes, but are not commonly used in practice. | |||
| Implementors of alternative range units ought to consider how they | Implementors of alternative range units ought to consider how they | |||
| would work with content codings and general-purpose intermediaries. | would work with content codings and general-purpose intermediaries. | |||
| 16.6. Content Coding Extensibility | 16.6. Content Coding Extensibility | |||
| 16.6.1. Content Coding Registry | 16.6.1. Content Coding Registry | |||
| The "HTTP Content Coding Registry", maintained by IANA at | The "HTTP Content Coding Registry", maintained by IANA at | |||
| <https://www.iana.org/assignments/http-parameters/>, registers | <https://www.iana.org/assignments/http-parameters/>, registers | |||
| content-coding names. | content-coding names. | |||
| Content coding registrations MUST include the following fields: | Content coding registrations MUST include the following fields: | |||
| o Name | * Name | |||
| o Description | * Description | |||
| o Pointer to specification text | * Pointer to specification text | |||
| Names of content codings MUST NOT overlap with names of transfer | Names of content codings MUST NOT overlap with names of transfer | |||
| codings (Section 7 of [Messaging]), unless the encoding | codings (as per the "HTTP Transfer Coding registry", located at | |||
| transformation is identical (as is the case for the compression | <https://www.iana.org/assignments/http-parameters/>), unless the | |||
| codings defined in Section 8.4.1). | encoding transformation is identical (as is the case for the | |||
| compression codings defined in Section 8.4.1). | ||||
| Values to be added to this namespace require IETF Review (see | Values to be added to this namespace require IETF Review (see | |||
| Section 4.8 of [RFC8126]) and MUST conform to the purpose of content | Section 4.8 of [RFC8126]) and MUST conform to the purpose of content | |||
| coding defined in Section 8.4.1. | coding defined in Section 8.4.1. | |||
| 16.6.2. Considerations for New Content Codings | 16.6.2. Considerations for New Content Codings | |||
| New content codings ought to be self-descriptive whenever possible, | New content codings ought to be self-descriptive whenever possible, | |||
| with optional parameters discoverable within the coding format | with optional parameters discoverable within the coding format | |||
| itself, rather than rely on external metadata that might be lost | itself, rather than rely on external metadata that might be lost | |||
| skipping to change at page 182, line 23 ¶ | skipping to change at page 184, line 6 ¶ | |||
| Some attacks on encrypted protocols use the differences in size | Some attacks on encrypted protocols use the differences in size | |||
| created by dynamic compression to reveal confidential information; | created by dynamic compression to reveal confidential information; | |||
| for example, [BREACH]. These attacks rely on creating a redundancy | for example, [BREACH]. These attacks rely on creating a redundancy | |||
| between attacker-controlled content and the confidential information, | between attacker-controlled content and the confidential information, | |||
| such that a dynamic compression algorithm using the same dictionary | such that a dynamic compression algorithm using the same dictionary | |||
| for both content will compress more efficiently when the attacker- | for both content will compress more efficiently when the attacker- | |||
| controlled content matches parts of the confidential content. | controlled content matches parts of the confidential content. | |||
| HTTP messages can be compressed in a number of ways, including using | HTTP messages can be compressed in a number of ways, including using | |||
| TLS compression, content-codings, transfer-codings, and other | TLS compression, content codings, transfer codings, and other | |||
| extension or version-specific mechanisms. | extension or version-specific mechanisms. | |||
| The most effective mitigation for this risk is to disable compression | The most effective mitigation for this risk is to disable compression | |||
| on sensitive data, or to strictly separate sensitive data from | on sensitive data, or to strictly separate sensitive data from | |||
| attacker-controlled data so that they cannot share the same | attacker-controlled data so that they cannot share the same | |||
| compression dictionary. With careful design, a compression scheme | compression dictionary. With careful design, a compression scheme | |||
| can be designed in a way that is not considered exploitable in | can be designed in a way that is not considered exploitable in | |||
| limited use cases, such as HPACK ([RFC7541]). | limited use cases, such as HPACK ([RFC7541]). | |||
| 17.7. Disclosure of Personal Information | 17.7. Disclosure of Personal Information | |||
| skipping to change at page 185, line 28 ¶ | skipping to change at page 187, line 11 ¶ | |||
| of unique information that is least expected by users is proactive | of unique information that is least expected by users is proactive | |||
| negotiation (Section 12.1), including the Accept, Accept-Charset, | negotiation (Section 12.1), including the Accept, Accept-Charset, | |||
| Accept-Encoding, and Accept-Language header fields. | Accept-Encoding, and Accept-Language header fields. | |||
| In addition to the fingerprinting concern, detailed use of the | In addition to the fingerprinting concern, detailed use of the | |||
| Accept-Language header field can reveal information the user might | Accept-Language header field can reveal information the user might | |||
| consider to be of a private nature. For example, understanding a | consider to be of a private nature. For example, understanding a | |||
| given language set might be strongly correlated to membership in a | given language set might be strongly correlated to membership in a | |||
| particular ethnic group. An approach that limits such loss of | particular ethnic group. An approach that limits such loss of | |||
| privacy would be for a user agent to omit the sending of Accept- | privacy would be for a user agent to omit the sending of Accept- | |||
| Language except for sites that have been whitelisted, perhaps via | Language except for sites that have been explicitly permitted, | |||
| interaction after detecting a Vary header field that indicates | perhaps via interaction after detecting a Vary header field that | |||
| language negotiation might be useful. | indicates language negotiation might be useful. | |||
| In environments where proxies are used to enhance privacy, user | In environments where proxies are used to enhance privacy, user | |||
| agents ought to be conservative in sending proactive negotiation | agents ought to be conservative in sending proactive negotiation | |||
| header fields. General-purpose user agents that provide a high | header fields. General-purpose user agents that provide a high | |||
| degree of header field configurability ought to inform users about | degree of header field configurability ought to inform users about | |||
| the loss of privacy that might result if too much detail is provided. | the loss of privacy that might result if too much detail is provided. | |||
| As an extreme privacy measure, proxies could filter the proactive | As an extreme privacy measure, proxies could filter the proactive | |||
| negotiation header fields in relayed requests. | negotiation header fields in relayed requests. | |||
| 17.13. Validator Retention | 17.13. Validator Retention | |||
| skipping to change at page 187, line 24 ¶ | skipping to change at page 189, line 8 ¶ | |||
| information indefinitely. HTTP does not provide a mechanism for the | information indefinitely. HTTP does not provide a mechanism for the | |||
| origin server to direct clients to discard these cached credentials, | origin server to direct clients to discard these cached credentials, | |||
| since the protocol has no awareness of how credentials are obtained | since the protocol has no awareness of how credentials are obtained | |||
| or managed by the user agent. The mechanisms for expiring or | or managed by the user agent. The mechanisms for expiring or | |||
| revoking credentials can be specified as part of an authentication | revoking credentials can be specified as part of an authentication | |||
| scheme definition. | scheme definition. | |||
| Circumstances under which credential caching can interfere with the | Circumstances under which credential caching can interfere with the | |||
| application's security model include but are not limited to: | application's security model include but are not limited to: | |||
| o Clients that have been idle for an extended period, following | * Clients that have been idle for an extended period, following | |||
| which the server might wish to cause the client to re-prompt the | which the server might wish to cause the client to re-prompt the | |||
| user for credentials. | user for credentials. | |||
| o Applications that include a session termination indication (such | * Applications that include a session termination indication (such | |||
| as a "logout" or "commit" button on a page) after which the server | as a "logout" or "commit" button on a page) after which the server | |||
| side of the application "knows" that there is no further reason | side of the application "knows" that there is no further reason | |||
| for the client to retain the credentials. | for the client to retain the credentials. | |||
| User agents that cache credentials are encouraged to provide a | User agents that cache credentials are encouraged to provide a | |||
| readily accessible mechanism for discarding cached credentials under | readily accessible mechanism for discarding cached credentials under | |||
| user control. | user control. | |||
| 17.15.3. Protection Spaces | 17.15.3. Protection Spaces | |||
| skipping to change at page 189, line 5 ¶ | skipping to change at page 190, line 18 ¶ | |||
| <https://www.iana.org/assignments/uri-schemes/> with the permanent | <https://www.iana.org/assignments/uri-schemes/> with the permanent | |||
| schemes listed in the table in Section 4.2. | schemes listed in the table in Section 4.2. | |||
| 18.2. Method Registration | 18.2. Method Registration | |||
| Please update the "Hypertext Transfer Protocol (HTTP) Method | Please update the "Hypertext Transfer Protocol (HTTP) Method | |||
| Registry" at <https://www.iana.org/assignments/http-methods> with the | Registry" at <https://www.iana.org/assignments/http-methods> with the | |||
| registration procedure of Section 16.1.1 and the method names | registration procedure of Section 16.1.1 and the method names | |||
| summarized in the following table. | summarized in the following table. | |||
| --------- ------ ------------ ------- | +=========+======+============+=======+ | |||
| Method Safe Idempotent Ref. | | Method | Safe | Idempotent | Ref. | | |||
| --------- ------ ------------ ------- | +=========+======+============+=======+ | |||
| CONNECT no no 9.3.6 | | CONNECT | no | no | 9.3.6 | | |||
| DELETE no yes 9.3.5 | +---------+------+------------+-------+ | |||
| GET yes yes 9.3.1 | | DELETE | no | yes | 9.3.5 | | |||
| HEAD yes yes 9.3.2 | +---------+------+------------+-------+ | |||
| OPTIONS yes yes 9.3.7 | | GET | yes | yes | 9.3.1 | | |||
| POST no no 9.3.3 | +---------+------+------------+-------+ | |||
| PUT no yes 9.3.4 | | HEAD | yes | yes | 9.3.2 | | |||
| TRACE yes yes 9.3.8 | +---------+------+------------+-------+ | |||
| * no no 18.2 | | OPTIONS | yes | yes | 9.3.7 | | |||
| --------- ------ ------------ ------- | +---------+------+------------+-------+ | |||
| | POST | no | no | 9.3.3 | | ||||
| +---------+------+------------+-------+ | ||||
| | PUT | no | yes | 9.3.4 | | ||||
| +---------+------+------------+-------+ | ||||
| | TRACE | yes | yes | 9.3.8 | | ||||
| +---------+------+------------+-------+ | ||||
| | * | no | no | 18.2 | | ||||
| +---------+------+------------+-------+ | ||||
| Table 7 | Table 7 | |||
| The method name "*" is reserved, since using that name as HTTP method | The method name "*" is reserved, since using "*" as a method name | |||
| name might conflict with special semantics in fields such as "Access- | would conflict with its usage as a wildcard in some fields (e.g., | |||
| Control-Request-Method". | "Access-Control-Request-Method"). | |||
| 18.3. Status Code Registration | 18.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 16.2.1 and the status code | with the registration procedure of Section 16.2.1 and the status code | |||
| values summarized in the following table. | values summarized in the following table. | |||
| ------- ------------------------------- --------- | +=======+===============================+=========+ | |||
| Value Description Ref. | | Value | Description | Ref. | | |||
| ------- ------------------------------- --------- | +=======+===============================+=========+ | |||
| 100 Continue 15.2.1 | | 100 | Continue | 15.2.1 | | |||
| 101 Switching Protocols 15.2.2 | +-------+-------------------------------+---------+ | |||
| 200 OK 15.3.1 | | 101 | Switching Protocols | 15.2.2 | | |||
| 201 Created 15.3.2 | +-------+-------------------------------+---------+ | |||
| 202 Accepted 15.3.3 | | 200 | OK | 15.3.1 | | |||
| 203 Non-Authoritative Information 15.3.4 | +-------+-------------------------------+---------+ | |||
| 204 No Content 15.3.5 | | 201 | Created | 15.3.2 | | |||
| 205 Reset Content 15.3.6 | +-------+-------------------------------+---------+ | |||
| 206 Partial Content 15.3.7 | | 202 | Accepted | 15.3.3 | | |||
| 300 Multiple Choices 15.4.1 | +-------+-------------------------------+---------+ | |||
| 301 Moved Permanently 15.4.2 | | 203 | Non-Authoritative Information | 15.3.4 | | |||
| 302 Found 15.4.3 | +-------+-------------------------------+---------+ | |||
| 303 See Other 15.4.4 | | 204 | No Content | 15.3.5 | | |||
| 304 Not Modified 15.4.5 | +-------+-------------------------------+---------+ | |||
| 305 Use Proxy 15.4.6 | | 205 | Reset Content | 15.3.6 | | |||
| 306 (Unused) 15.4.7 | +-------+-------------------------------+---------+ | |||
| 307 Temporary Redirect 15.4.8 | | 206 | Partial Content | 15.3.7 | | |||
| 308 Permanent Redirect 15.4.9 | +-------+-------------------------------+---------+ | |||
| 400 Bad Request 15.5.1 | | 300 | Multiple Choices | 15.4.1 | | |||
| 401 Unauthorized 15.5.2 | +-------+-------------------------------+---------+ | |||
| 402 Payment Required 15.5.3 | | 301 | Moved Permanently | 15.4.2 | | |||
| 403 Forbidden 15.5.4 | +-------+-------------------------------+---------+ | |||
| 404 Not Found 15.5.5 | | 302 | Found | 15.4.3 | | |||
| 405 Method Not Allowed 15.5.6 | +-------+-------------------------------+---------+ | |||
| 406 Not Acceptable 15.5.7 | | 303 | See Other | 15.4.4 | | |||
| 407 Proxy Authentication Required 15.5.8 | +-------+-------------------------------+---------+ | |||
| 408 Request Timeout 15.5.9 | | 304 | Not Modified | 15.4.5 | | |||
| 409 Conflict 15.5.10 | +-------+-------------------------------+---------+ | |||
| 410 Gone 15.5.11 | | 305 | Use Proxy | 15.4.6 | | |||
| 411 Length Required 15.5.12 | +-------+-------------------------------+---------+ | |||
| 412 Precondition Failed 15.5.13 | | 306 | (Unused) | 15.4.7 | | |||
| 413 Content Too Large 15.5.14 | +-------+-------------------------------+---------+ | |||
| 414 URI Too Long 15.5.15 | | 307 | Temporary Redirect | 15.4.8 | | |||
| 415 Unsupported Media Type 15.5.16 | +-------+-------------------------------+---------+ | |||
| 416 Range Not Satisfiable 15.5.17 | | 308 | Permanent Redirect | 15.4.9 | | |||
| 417 Expectation Failed 15.5.18 | +-------+-------------------------------+---------+ | |||
| 418 (Unused) 15.5.19 | | 400 | Bad Request | 15.5.1 | | |||
| 421 Misdirected Request 15.5.20 | +-------+-------------------------------+---------+ | |||
| 422 Unprocessable Content 15.5.21 | | 401 | Unauthorized | 15.5.2 | | |||
| 426 Upgrade Required 15.5.22 | +-------+-------------------------------+---------+ | |||
| 500 Internal Server Error 15.6.1 | | 402 | Payment Required | 15.5.3 | | |||
| 501 Not Implemented 15.6.2 | +-------+-------------------------------+---------+ | |||
| 502 Bad Gateway 15.6.3 | | 403 | Forbidden | 15.5.4 | | |||
| 503 Service Unavailable 15.6.4 | +-------+-------------------------------+---------+ | |||
| 504 Gateway Timeout 15.6.5 | | 404 | Not Found | 15.5.5 | | |||
| 505 HTTP Version Not Supported 15.6.6 | +-------+-------------------------------+---------+ | |||
| ------- ------------------------------- --------- | | 405 | Method Not Allowed | 15.5.6 | | |||
| +-------+-------------------------------+---------+ | ||||
| | 406 | Not Acceptable | 15.5.7 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 407 | Proxy Authentication Required | 15.5.8 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 408 | Request Timeout | 15.5.9 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 409 | Conflict | 15.5.10 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 410 | Gone | 15.5.11 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 411 | Length Required | 15.5.12 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 412 | Precondition Failed | 15.5.13 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 413 | Content Too Large | 15.5.14 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 414 | URI Too Long | 15.5.15 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 415 | Unsupported Media Type | 15.5.16 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 416 | Range Not Satisfiable | 15.5.17 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 417 | Expectation Failed | 15.5.18 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 418 | (Unused) | 15.5.19 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 421 | Misdirected Request | 15.5.20 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 422 | Unprocessable Content | 15.5.21 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 426 | Upgrade Required | 15.5.22 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 500 | Internal Server Error | 15.6.1 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 501 | Not Implemented | 15.6.2 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 502 | Bad Gateway | 15.6.3 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 503 | Service Unavailable | 15.6.4 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 504 | Gateway Timeout | 15.6.5 | | ||||
| +-------+-------------------------------+---------+ | ||||
| | 505 | HTTP Version Not Supported | 15.6.6 | | ||||
| +-------+-------------------------------+---------+ | ||||
| Table 8 | Table 8 | |||
| 18.4. Field Name Registration | 18.4. Field Name Registration | |||
| This specification updates the HTTP related aspects of the existing | This specification updates the HTTP related aspects of the existing | |||
| registration procedures for message header fields defined in | registration procedures for message header fields defined in | |||
| [RFC3864]. It defines both a new registration procedure and moves | [RFC3864]. It defines both a new registration procedure and moves | |||
| HTTP field definitions into a separate registry. | HTTP field definitions into a separate registry. | |||
| Please create a new registry as outlined in Section 16.3.1. | Please create a new registry as outlined in Section 16.3.1. | |||
| skipping to change at page 191, line 23 ¶ | skipping to change at page 193, line 39 ¶ | |||
| 'provisional'. The Expert(s) can choose to update their status | 'provisional'. The Expert(s) can choose to update their status | |||
| if there is evidence that another is more appropriate. | if there is evidence that another is more appropriate. | |||
| Please annotate the Permanent and Provisional Message Header | Please annotate the Permanent and Provisional Message Header | |||
| registries to indicate that HTTP field name registrations have moved, | registries to indicate that HTTP field name registrations have moved, | |||
| with an appropriate link. | with an appropriate link. | |||
| After that is complete, please update the new registry with the field | After that is complete, please update the new registry with the field | |||
| names listed in the following table. | names listed in the following table. | |||
| --------------------------- ------------ -------- ------------ | +===========================+============+========+============+ | |||
| Field Name Status Ref. Comments | | Field Name | Status | Ref. | Comments | | |||
| --------------------------- ------------ -------- ------------ | +===========================+============+========+============+ | |||
| Accept standard 12.5.1 | | Accept | standard | 12.5.1 | | | |||
| Accept-Charset deprecated 12.5.2 | +---------------------------+------------+--------+------------+ | |||
| Accept-Encoding standard 12.5.3 | | Accept-Charset | deprecated | 12.5.2 | | | |||
| Accept-Language standard 12.5.4 | +---------------------------+------------+--------+------------+ | |||
| Accept-Ranges standard 14.3 | | Accept-Encoding | standard | 12.5.3 | | | |||
| Allow standard 10.2.1 | +---------------------------+------------+--------+------------+ | |||
| Authentication-Info standard 11.6.3 | | Accept-Language | standard | 12.5.4 | | | |||
| Authorization standard 11.6.2 | +---------------------------+------------+--------+------------+ | |||
| Connection standard 7.6.1 | | Accept-Ranges | standard | 14.3 | | | |||
| Content-Encoding standard 8.4 | +---------------------------+------------+--------+------------+ | |||
| Content-Language standard 8.5 | | Allow | standard | 10.2.1 | | | |||
| Content-Length standard 8.6 | +---------------------------+------------+--------+------------+ | |||
| Content-Location standard 8.7 | | Authentication-Info | standard | 11.6.3 | | | |||
| Content-Range standard 14.4 | +---------------------------+------------+--------+------------+ | |||
| Content-Type standard 8.3 | | Authorization | standard | 11.6.2 | | | |||
| Date standard 10.2.2 | +---------------------------+------------+--------+------------+ | |||
| ETag standard 8.8.3 | | Connection | standard | 7.6.1 | | | |||
| Expect standard 10.1.1 | +---------------------------+------------+--------+------------+ | |||
| From standard 10.1.2 | | Content-Encoding | standard | 8.4 | | | |||
| Host standard 7.2 | +---------------------------+------------+--------+------------+ | |||
| If-Match standard 13.1.1 | | Content-Language | standard | 8.5 | | | |||
| If-Modified-Since standard 13.1.3 | +---------------------------+------------+--------+------------+ | |||
| If-None-Match standard 13.1.2 | | Content-Length | standard | 8.6 | | | |||
| If-Range standard 13.1.5 | +---------------------------+------------+--------+------------+ | |||
| If-Unmodified-Since standard 13.1.4 | | Content-Location | standard | 8.7 | | | |||
| Last-Modified standard 8.8.2 | +---------------------------+------------+--------+------------+ | |||
| Location standard 10.2.3 | | Content-Range | standard | 14.4 | | | |||
| Max-Forwards standard 7.6.2 | +---------------------------+------------+--------+------------+ | |||
| Proxy-Authenticate standard 11.7.1 | | Content-Type | standard | 8.3 | | | |||
| Proxy-Authentication-Info standard 11.7.3 | +---------------------------+------------+--------+------------+ | |||
| Proxy-Authorization standard 11.7.2 | | Date | standard | 10.2.2 | | | |||
| Range standard 14.2 | +---------------------------+------------+--------+------------+ | |||
| Referer standard 10.1.3 | | ETag | standard | 8.8.3 | | | |||
| Retry-After standard 10.2.4 | +---------------------------+------------+--------+------------+ | |||
| Server standard 10.2.5 | | Expect | standard | 10.1.1 | | | |||
| TE standard 10.1.4 | +---------------------------+------------+--------+------------+ | |||
| Trailer standard 10.1.5 | | From | standard | 10.1.2 | | | |||
| Upgrade standard 7.8 | +---------------------------+------------+--------+------------+ | |||
| User-Agent standard 10.1.6 | | Host | standard | 7.2 | | | |||
| Vary standard 12.5.5 | +---------------------------+------------+--------+------------+ | |||
| Via standard 7.6.3 | | If-Match | standard | 13.1.1 | | | |||
| WWW-Authenticate standard 11.6.1 | +---------------------------+------------+--------+------------+ | |||
| * standard 12.5.5 (reserved) | | If-Modified-Since | standard | 13.1.3 | | | |||
| --------------------------- ------------ -------- ------------ | +---------------------------+------------+--------+------------+ | |||
| | If-None-Match | standard | 13.1.2 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | If-Range | standard | 13.1.5 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | If-Unmodified-Since | standard | 13.1.4 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Last-Modified | standard | 8.8.2 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Location | standard | 10.2.3 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Max-Forwards | standard | 7.6.2 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Proxy-Authenticate | standard | 11.7.1 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Proxy-Authentication-Info | standard | 11.7.3 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Proxy-Authorization | standard | 11.7.2 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Range | standard | 14.2 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Referer | standard | 10.1.3 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Retry-After | standard | 10.2.4 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Server | standard | 10.2.5 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | TE | standard | 10.1.4 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Trailer | standard | 10.1.5 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Upgrade | standard | 7.8 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | User-Agent | standard | 10.1.6 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Vary | standard | 12.5.5 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | Via | standard | 7.6.3 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | WWW-Authenticate | standard | 11.6.1 | | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| | * | standard | 12.5.5 | (reserved) | | ||||
| +---------------------------+------------+--------+------------+ | ||||
| Table 9 | Table 9 | |||
| The field name "*" is reserved, since using that name as an HTTP | The field name "*" is reserved, since using that name as an HTTP | |||
| header field might conflict with its special semantics in the Vary | header field might conflict with its special semantics in the Vary | |||
| header field (Section 12.5.5). | header field (Section 12.5.5). | |||
| Finally, please update the "Content-MD5" entry in the new registry to | Finally, please update the "Content-MD5" entry in the new registry to | |||
| have a status of 'obsoleted' with references to Section 14.15 of | have a status of 'obsoleted' with references to Section 14.15 of | |||
| [RFC2616] (for the definition of the header field) and Appendix B of | [RFC2616] (for the definition of the header field) and Appendix B of | |||
| skipping to change at page 193, line 5 ¶ | skipping to change at page 196, line 12 ¶ | |||
| authschemes> with the registration procedure of Section 16.4.1. No | authschemes> with the registration procedure of Section 16.4.1. No | |||
| authentication schemes are defined in this document. | authentication schemes are defined in this document. | |||
| 18.6. Content Coding Registration | 18.6. Content Coding Registration | |||
| Please update the "HTTP Content Coding Registry" at | Please update the "HTTP Content Coding Registry" at | |||
| <https://www.iana.org/assignments/http-parameters/> with the | <https://www.iana.org/assignments/http-parameters/> with the | |||
| registration procedure of Section 16.6.1 and the content coding names | registration procedure of Section 16.6.1 and the content coding names | |||
| summarized in the table below. | summarized in the table below. | |||
| ------------ ------------------------------------------- --------- | +============+===========================================+=========+ | |||
| Name Description Ref. | | Name | Description | Ref. | | |||
| ------------ ------------------------------------------- --------- | +============+===========================================+=========+ | |||
| compress UNIX "compress" data format [Welch] 8.4.1.1 | | compress | UNIX "compress" data format [Welch] | 8.4.1.1 | | |||
| deflate "deflate" compressed data ([RFC1951]) 8.4.1.2 | +------------+-------------------------------------------+---------+ | |||
| inside the "zlib" data format ([RFC1950]) | | deflate | "deflate" compressed data ([RFC1951]) | 8.4.1.2 | | |||
| gzip GZIP file format [RFC1952] 8.4.1.3 | | | inside the "zlib" data format ([RFC1950]) | | | |||
| identity Reserved 12.5.3 | +------------+-------------------------------------------+---------+ | |||
| x-compress Deprecated (alias for compress) 8.4.1.1 | | gzip | GZIP file format [RFC1952] | 8.4.1.3 | | |||
| x-gzip Deprecated (alias for gzip) 8.4.1.3 | +------------+-------------------------------------------+---------+ | |||
| ------------ ------------------------------------------- --------- | | identity | Reserved | 12.5.3 | | |||
| +------------+-------------------------------------------+---------+ | ||||
| | x-compress | Deprecated (alias for compress) | 8.4.1.1 | | ||||
| +------------+-------------------------------------------+---------+ | ||||
| | x-gzip | Deprecated (alias for gzip) | 8.4.1.3 | | ||||
| +------------+-------------------------------------------+---------+ | ||||
| Table 10 | Table 10 | |||
| 18.7. Range Unit Registration | 18.7. Range Unit Registration | |||
| Please update the "HTTP Range Unit Registry" at | Please update the "HTTP Range Unit Registry" at | |||
| <https://www.iana.org/assignments/http-parameters/> with the | <https://www.iana.org/assignments/http-parameters/> with the | |||
| registration procedure of Section 16.5.1 and the range unit names | registration procedure of Section 16.5.1 and the range unit names | |||
| summarized in the table below. | summarized in the table below. | |||
| ----------------- ---------------------------------- -------- | +=================+==================================+========+ | |||
| Range Unit Name Description Ref. | | Range Unit Name | Description | Ref. | | |||
| ----------------- ---------------------------------- -------- | +=================+==================================+========+ | |||
| bytes a range of octets 14.1.2 | | bytes | a range of octets | 14.1.2 | | |||
| none reserved as keyword to indicate 14.3 | +-----------------+----------------------------------+--------+ | |||
| range requests are not supported | | none | reserved as keyword to indicate | 14.3 | | |||
| ----------------- ---------------------------------- -------- | | | range requests are not supported | | | |||
| +-----------------+----------------------------------+--------+ | ||||
| Table 11 | Table 11 | |||
| 18.8. Media Type Registration | 18.8. Media Type Registration | |||
| 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 14.6 for the media type "multipart/ | information in Section 14.6 for the media type "multipart/ | |||
| byteranges". | byteranges". | |||
| skipping to change at page 194, line 4 ¶ | skipping to change at page 197, line 20 ¶ | |||
| byteranges". | byteranges". | |||
| 18.9. Port Registration | 18.9. Port Registration | |||
| Please update the "Service Name and Transport Protocol Port Number" | Please update the "Service Name and Transport Protocol Port Number" | |||
| registry at <https://www.iana.org/assignments/service-names-port- | registry at <https://www.iana.org/assignments/service-names-port- | |||
| numbers/> for the services on ports 80 and 443 that use UDP or TCP | numbers/> for the services on ports 80 and 443 that use UDP or TCP | |||
| to: | to: | |||
| 1. use this document as "Reference", and | 1. use this document as "Reference", and | |||
| 2. when currently unspecified, set "Assignee" to "IESG" and | 2. when currently unspecified, set "Assignee" to "IESG" and | |||
| "Contact" to "IETF_Chair". | "Contact" to "IETF_Chair". | |||
| 18.10. Upgrade Token Registration | 18.10. Upgrade Token Registration | |||
| Please update the "Hypertext Transfer Protocol (HTTP) Upgrade Token | Please update the "Hypertext Transfer Protocol (HTTP) Upgrade Token | |||
| Registry" at <https://www.iana.org/assignments/http-upgrade-tokens> | Registry" at <https://www.iana.org/assignments/http-upgrade-tokens> | |||
| with the registration procedure of Section 16.7 and the upgrade token | with the registration procedure of Section 16.7 and the upgrade token | |||
| names summarized in the following table. | names summarized in the following table. | |||
| ------ ------------------- ------------------------- ------ | +======+===================+=========================+======+ | |||
| Name Description Expected Version Tokens Ref. | | Name | Description | Expected Version Tokens | Ref. | | |||
| ------ ------------------- ------------------------- ------ | +======+===================+=========================+======+ | |||
| HTTP Hypertext any DIGIT.DIGIT (e.g, 2.5 | | HTTP | Hypertext | any DIGIT.DIGIT (e.g, | 2.5 | | |||
| Transfer Protocol "2.0") | | | Transfer Protocol | "2.0") | | | |||
| ------ ------------------- ------------------------- ------ | +------+-------------------+-------------------------+------+ | |||
| Table 12 | Table 12 | |||
| 19. References | 19. References | |||
| 19.1. Normative References | 19.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", Work in Progress, Internet-Draft, | Ed., "HTTP Caching", Work in Progress, Internet-Draft, | |||
| draft-ietf-httpbis-cache-14, January 13, 2021, | draft-ietf-httpbis-cache-15, 30 March 2021, | |||
| <https://tools.ietf.org/html/draft-ietf-httpbis-cache-14>. | <https://tools.ietf.org/html/draft-ietf-httpbis-cache-15>. | |||
| [Messaging] | ||||
| Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | ||||
| Ed., "HTTP/1.1", Work in Progress, Internet-Draft, draft- | ||||
| ietf-httpbis-messaging-14, January 13, 2021, | ||||
| <https://tools.ietf.org/html/draft-ietf-httpbis-messaging- | ||||
| 14>. | ||||
| [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.P. and J-L. Gailly, "ZLIB Compressed Data | [RFC1950] Deutsch, L.P. and J-L. Gailly, "ZLIB Compressed Data | |||
| Format Specification version 3.3", RFC 1950, | Format 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>. | |||
| [RFC1951] Deutsch, P., "DEFLATE Compressed Data Format Specification | [RFC1951] Deutsch, P., "DEFLATE Compressed Data Format Specification | |||
| version 1.3", RFC 1951, DOI 10.17487/RFC1951, May 1996, | version 1.3", RFC 1951, DOI 10.17487/RFC1951, May 1996, | |||
| <https://www.rfc-editor.org/info/rfc1951>. | <https://www.rfc-editor.org/info/rfc1951>. | |||
| [RFC1952] Deutsch, P., Gailly, J-L., Adler, M., Deutsch, L.P., and | [RFC1952] Deutsch, P., Gailly, J-L., Adler, M., Deutsch, L.P., and | |||
| G. Randers-Pehrson, "GZIP file format specification | G. Randers-Pehrson, "GZIP file format specification | |||
| version 4.3", RFC 1952, DOI 10.17487/RFC1952, May 1996, | version 4.3", RFC 1952, DOI 10.17487/RFC1952, May 1996, | |||
| <https://www.rfc-editor.org/info/rfc1952>. | <https://www.rfc-editor.org/info/rfc1952>. | |||
| [RFC2045] Freed, N. and N.S. Borenstein, "Multipurpose Internet Mail | ||||
| Extensions (MIME) Part One: Format of Internet Message | ||||
| Bodies", RFC 2045, DOI 10.17487/RFC2045, November 1996, | ||||
| <https://www.rfc-editor.org/info/rfc2045>. | ||||
| [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | |||
| Extensions (MIME) Part Two: Media Types", RFC 2046, | Extensions (MIME) Part Two: Media Types", RFC 2046, | |||
| DOI 10.17487/RFC2046, November 1996, | DOI 10.17487/RFC2046, November 1996, | |||
| <https://www.rfc-editor.org/info/rfc2046>. | <https://www.rfc-editor.org/info/rfc2046>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| skipping to change at page 195, line 43 ¶ | skipping to change at page 198, line 47 ¶ | |||
| [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | |||
| Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | |||
| <https://www.rfc-editor.org/info/rfc4648>. | <https://www.rfc-editor.org/info/rfc4648>. | |||
| [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", STD 68, RFC 5234, | Specifications: ABNF", STD 68, RFC 5234, | |||
| DOI 10.17487/RFC5234, January 2008, | DOI 10.17487/RFC5234, January 2008, | |||
| <https://www.rfc-editor.org/info/rfc5234>. | <https://www.rfc-editor.org/info/rfc5234>. | |||
| [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | ||||
| Housley, R., and W. Polk, "Internet X.509 Public Key | ||||
| Infrastructure Certificate and Certificate Revocation List | ||||
| (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | ||||
| <https://www.rfc-editor.org/info/rfc5280>. | ||||
| [RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying | [RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying | |||
| Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646, | Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646, | |||
| September 2009, <https://www.rfc-editor.org/info/rfc5646>. | September 2009, <https://www.rfc-editor.org/info/rfc5646>. | |||
| [RFC6125] Saint-Andre, P. and J. Hodges, "Representation and | [RFC6125] Saint-Andre, P. and J. Hodges, "Representation and | |||
| Verification of Domain-Based Application Service Identity | Verification of Domain-Based Application Service Identity | |||
| within Internet Public Key Infrastructure Using X.509 | within Internet Public Key Infrastructure Using X.509 | |||
| (PKIX) Certificates in the Context of Transport Layer | (PKIX) Certificates in the Context of Transport Layer | |||
| Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, March | Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, March | |||
| 2011, <https://www.rfc-editor.org/info/rfc6125>. | 2011, <https://www.rfc-editor.org/info/rfc6125>. | |||
| skipping to change at page 197, line 28 ¶ | skipping to change at page 200, line 38 ¶ | |||
| [Georgiev] Georgiev, M., Iyengar, S., Jana, S., Anubhai, R., Boneh, | [Georgiev] 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", DOI 10.1145/2382196.2382204, In Proceedings of | Software", DOI 10.1145/2382196.2382204, In Proceedings of | |||
| the 2012 ACM Conference on Computer and Communications | the 2012 ACM Conference on Computer and Communications | |||
| Security (CCS '12), pp. 38-49, October 2012, | Security (CCS '12), pp. 38-49, October 2012, | |||
| <https://doi.org/10.1145/2382196.2382204>. | <https://doi.org/10.1145/2382196.2382204>. | |||
| [HTTP3] Bishop, M., "Hypertext Transfer Protocol Version 3 | [HTTP3] Bishop, M., "Hypertext Transfer Protocol Version 3 | |||
| (HTTP/3)", Work in Progress, Internet-Draft, draft-ietf- | (HTTP/3)", Work in Progress, Internet-Draft, draft-ietf- | |||
| quic-http-33, December 15, 2020, | quic-http-34, 2 February 2021, | |||
| <https://tools.ietf.org/html/draft-ietf-quic-http-33>. | <https://tools.ietf.org/html/draft-ietf-quic-http-34>. | |||
| [ISO-8859-1] | [ISO-8859-1] | |||
| International Organization for Standardization, | International Organization for Standardization, | |||
| "Information technology -- 8-bit single-byte coded graphic | "Information technology -- 8-bit single-byte coded graphic | |||
| character sets -- Part 1: Latin alphabet No. 1", ISO/ | character sets -- Part 1: Latin alphabet No. 1", ISO/ | |||
| IEC 8859-1:1998, 1998. | IEC 8859-1:1998, 1998. | |||
| [Kri2001] Kristol, D., "HTTP Cookies: Standards, Privacy, and | [Kri2001] Kristol, D., "HTTP Cookies: Standards, Privacy, and | |||
| Politics", ACM Transactions on Internet Technology 1(2), | Politics", ACM Transactions on Internet Technology 1(2), | |||
| November 2001, <http://arxiv.org/abs/cs.SE/0105018>. | November 2001, <http://arxiv.org/abs/cs.SE/0105018>. | |||
| [Messaging] | ||||
| Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | ||||
| Ed., "HTTP/1.1", Work in Progress, Internet-Draft, draft- | ||||
| ietf-httpbis-messaging-15, 30 March 2021, | ||||
| <https://tools.ietf.org/html/draft-ietf-httpbis-messaging- | ||||
| 15>. | ||||
| [OWASP] van der Stock, A., Ed., "A Guide to Building Secure Web | [OWASP] van der Stock, A., Ed., "A Guide to Building Secure Web | |||
| Applications and Web Services", The Open Web Application | Applications and Web Services", The Open Web Application | |||
| Security Project (OWASP) 2.0.1, July 27, 2005, | Security Project (OWASP) 2.0.1, 27 July 2005, | |||
| <https://www.owasp.org/>. | <https://www.owasp.org/>. | |||
| [REST] Fielding, R.T., "Architectural Styles and the Design of | [REST] Fielding, R.T., "Architectural Styles and the Design of | |||
| Network-based Software Architectures", | Network-based Software Architectures", | |||
| Doctoral Dissertation, University of California, Irvine, | Doctoral Dissertation, University of California, Irvine, | |||
| September 2000, | September 2000, | |||
| <https://roy.gbiv.com/pubs/dissertation/top.htm>. | <https://roy.gbiv.com/pubs/dissertation/top.htm>. | |||
| [RFC1919] Chatel, M., "Classical versus Transparent IP Proxies", | [RFC1919] Chatel, M., "Classical versus Transparent IP Proxies", | |||
| RFC 1919, DOI 10.17487/RFC1919, March 1996, | RFC 1919, DOI 10.17487/RFC1919, March 1996, | |||
| skipping to change at page 198, line 34 ¶ | skipping to change at page 202, line 6 ¶ | |||
| [RFC2145] Mogul, J.C., Fielding, R.T., Gettys, J., and H.F. Nielsen, | [RFC2145] Mogul, J.C., Fielding, R.T., Gettys, J., and H.F. Nielsen, | |||
| "Use and Interpretation of HTTP Version Numbers", | "Use and Interpretation of HTTP Version Numbers", | |||
| RFC 2145, DOI 10.17487/RFC2145, May 1997, | RFC 2145, 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.H. Mutz, "Transparent Content | [RFC2295] Holtman, K. and A.H. Mutz, "Transparent Content | |||
| Negotiation in HTTP", RFC 2295, DOI 10.17487/RFC2295, | Negotiation in HTTP", RFC 2295, DOI 10.17487/RFC2295, | |||
| March 1998, <https://www.rfc-editor.org/info/rfc2295>. | March 1998, <https://www.rfc-editor.org/info/rfc2295>. | |||
| [RFC2324] Masinter, L., "Hyper Text Coffee Pot Control Protocol | [RFC2324] Masinter, L., "Hyper Text Coffee Pot Control Protocol | |||
| (HTCPCP/1.0)", RFC 2324, DOI 10.17487/RFC2324, April 1, | (HTCPCP/1.0)", RFC 2324, DOI 10.17487/RFC2324, 1 April | |||
| 1998, <https://www.rfc-editor.org/info/rfc2324>. | 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, | |||
| skipping to change at page 202, line 21 ¶ | skipping to change at page 205, line 40 ¶ | |||
| <https://www.rfc-editor.org/info/rfc8288>. | <https://www.rfc-editor.org/info/rfc8288>. | |||
| [RFC8336] Nottingham, M. and E. Nygren, "The ORIGIN HTTP/2 Frame", | [RFC8336] Nottingham, M. and E. Nygren, "The ORIGIN HTTP/2 Frame", | |||
| RFC 8336, DOI 10.17487/RFC8336, March 2018, | RFC 8336, DOI 10.17487/RFC8336, March 2018, | |||
| <https://www.rfc-editor.org/info/rfc8336>. | <https://www.rfc-editor.org/info/rfc8336>. | |||
| [RFC8615] Nottingham, M., "Well-Known Uniform Resource Identifiers | [RFC8615] Nottingham, M., "Well-Known Uniform Resource Identifiers | |||
| (URIs)", RFC 8615, DOI 10.17487/RFC8615, May 2019, | (URIs)", RFC 8615, DOI 10.17487/RFC8615, May 2019, | |||
| <https://www.rfc-editor.org/info/rfc8615>. | <https://www.rfc-editor.org/info/rfc8615>. | |||
| [RFCSTRF] Nottingham, M. and P-H. Kamp, "Structured Field Values for | [RFC8941] Nottingham, M. and P-H. Kamp, "Structured Field Values for | |||
| HTTP", Work in Progress, Internet-Draft, draft-ietf- | HTTP", RFC 8941, DOI 10.17487/RFC8941, February 2021, | |||
| httpbis-header-structure-19, June 2020, | <https://www.rfc-editor.org/info/rfc8941>. | |||
| <https://tools.ietf.org/html/draft-ietf-httpbis-header- | ||||
| structure-19>. | ||||
| [Sniffing] WHATWG, "MIME Sniffing", | [Sniffing] WHATWG, "MIME Sniffing", | |||
| <https://mimesniff.spec.whatwg.org>. | <https://mimesniff.spec.whatwg.org>. | |||
| Appendix A. Collected ABNF | Appendix A. Collected ABNF | |||
| In the collected ABNF below, list rules are expanded as per | In the collected ABNF below, list rules are expanded as per | |||
| Section 5.6.1.1. | Section 5.6.1.1. | |||
| Accept = [ ( media-range [ weight ] ) *( OWS "," OWS ( media-range [ | Accept = [ ( media-range [ weight ] ) *( OWS "," OWS ( media-range [ | |||
| weight ] ) ) ] | weight ] ) ) ] | |||
| Accept-Charset = [ ( ( charset / "*" ) [ weight ] ) *( OWS "," OWS ( | Accept-Charset = [ ( ( token / "*" ) [ weight ] ) *( OWS "," OWS ( ( | |||
| ( charset / "*" ) [ weight ] ) ) ] | token / "*" ) [ weight ] ) ) ] | |||
| Accept-Encoding = [ ( codings [ weight ] ) *( OWS "," OWS ( codings [ | Accept-Encoding = [ ( codings [ weight ] ) *( OWS "," OWS ( codings [ | |||
| weight ] ) ) ] | weight ] ) ) ] | |||
| Accept-Language = [ ( language-range [ weight ] ) *( OWS "," OWS ( | Accept-Language = [ ( language-range [ weight ] ) *( OWS "," OWS ( | |||
| language-range [ weight ] ) ) ] | 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 ) ] | Authentication-Info = [ auth-param *( OWS "," OWS auth-param ) ] | |||
| Authorization = credentials | Authorization = credentials | |||
| BWS = OWS | BWS = OWS | |||
| skipping to change at page 204, line 26 ¶ | skipping to change at page 207, line 43 ¶ | |||
| absolute-path = 1*( "/" segment ) | absolute-path = 1*( "/" segment ) | |||
| acceptable-ranges = ( range-unit *( OWS "," OWS range-unit ) ) / | acceptable-ranges = ( range-unit *( OWS "," OWS range-unit ) ) / | |||
| "none" | "none" | |||
| asctime-date = day-name SP date3 SP time-of-day SP year | asctime-date = day-name SP date3 SP time-of-day SP year | |||
| auth-param = token BWS "=" BWS ( token / quoted-string ) | auth-param = token BWS "=" BWS ( token / quoted-string ) | |||
| auth-scheme = token | auth-scheme = token | |||
| authority = <authority, see [RFC3986], Section 3.2> | authority = <authority, see [RFC3986], Section 3.2> | |||
| challenge = auth-scheme [ 1*SP ( token68 / [ auth-param *( OWS "," | challenge = auth-scheme [ 1*SP ( token68 / [ auth-param *( OWS "," | |||
| OWS auth-param ) ] ) ] | OWS auth-param ) ] ) ] | |||
| charset = token | ||||
| codings = content-coding / "identity" / "*" | codings = content-coding / "identity" / "*" | |||
| comment = "(" *( ctext / quoted-pair / comment ) ")" | comment = "(" *( ctext / quoted-pair / comment ) ")" | |||
| complete-length = 1*DIGIT | complete-length = 1*DIGIT | |||
| connection-option = token | connection-option = token | |||
| content-coding = token | content-coding = token | |||
| credentials = auth-scheme [ 1*SP ( token68 / [ auth-param *( OWS "," | credentials = auth-scheme [ 1*SP ( token68 / [ auth-param *( OWS "," | |||
| OWS auth-param ) ] ) ] | OWS auth-param ) ] ) ] | |||
| ctext = HTAB / SP / %x21-27 ; '!'-''' | ctext = HTAB / SP / %x21-27 ; '!'-''' | |||
| / %x2A-5B ; '*'-'[' | / %x2A-5B ; '*'-'[' | |||
| / %x5D-7E ; ']'-'~' | / %x5D-7E ; ']'-'~' | |||
| skipping to change at page 207, line 31 ¶ | skipping to change at page 210, line 47 ¶ | |||
| Appendix B. Changes from previous RFCs | Appendix B. Changes from previous RFCs | |||
| B.1. Changes from RFC 2818 | B.1. Changes from RFC 2818 | |||
| None. | None. | |||
| B.2. Changes from RFC 7230 | B.2. Changes from RFC 7230 | |||
| The sections introducing HTTP's design goals, history, architecture, | The sections introducing HTTP's design goals, history, architecture, | |||
| conformance criteria, protocol versioning, URIs, message routing, and | conformance criteria, protocol versioning, URIs, message routing, and | |||
| header fields have been moved here (without substantive change). | header fields have been moved here. | |||
| The requirement on semantic conformance has been replaced with | ||||
| permission to ignore/workaround implementation-specific failures. | ||||
| (Section 2.2) | ||||
| The description of an origin and authoritative access to origin | The description of an origin and authoritative access to origin | |||
| servers has been extended for both "http" and "https" URIs to account | servers has been extended for both "http" and "https" URIs to account | |||
| for alternative services and secured connections that are not | for alternative services and secured connections that are not | |||
| necessarily based on TCP. (Section 4.2.1, Section 4.2.2, | necessarily based on TCP. (Section 4.2.1, Section 4.2.2, | |||
| Section 4.3.1, Section 7.3.3) | Section 4.3.1, Section 7.3.3) | |||
| Parameters in media type, media range, and expectation can be empty | ||||
| via one or more trailing semicolons. (Section 5.6.6) | ||||
| "Field value" now refers to the value after multiple field lines are | "Field value" now refers to the value after multiple field lines are | |||
| combined with commas - by far the most common use. To refer to a | combined with commas - by far the most common use. To refer to a | |||
| single header line's value, use "field line value". (Section 6.3) | single header line's value, use "field line value". (Section 6.3) | |||
| Parameters in media type, media range, and expectation can be empty | ||||
| via one or more trailing semicolons. (Section 5.6.6) | ||||
| Trailer field semantics now transcend the specifics of chunked | Trailer field semantics now transcend the specifics of chunked | |||
| encoding. Use of trailer fields has been further limited to only | encoding. Use of trailer fields has been further limited to only | |||
| allow generation as a trailer field when the sender knows the field | allow generation as a trailer field when the sender knows the field | |||
| defines that usage and to only allow merging into the header section | defines that usage and to only allow merging into the header section | |||
| if the recipient knows the corresponding field definition permits and | if the recipient knows the corresponding field definition permits and | |||
| defines how to merge. In all other cases, implementations are | defines how to merge. In all other cases, implementations are | |||
| encouraged to either store the trailer fields separately or discard | encouraged to either store the trailer fields separately or discard | |||
| them instead of merging. (Section 6.5.1) | them instead of merging. (Section 6.5.1) | |||
| Trailer fields can now potentially appear as multiple trailer | ||||
| sections, if allowed by the HTTP version and framing in use, with | ||||
| processing described as being iterative as each section is received. | ||||
| (Section 6.5.2) | ||||
| Made the priority of the absolute form of the request URI over the | Made the priority of the absolute form of the request URI over the | |||
| Host header by origin servers explicit, to align with proxy handling. | Host header by origin servers explicit, to align with proxy handling. | |||
| (Section 7.2) | (Section 7.2) | |||
| The grammar definition for the Via field's "received-by" was expanded | The grammar definition for the Via field's "received-by" was expanded | |||
| in 7230 due to changes in the URI grammar for host [RFC3986] that are | in 7230 due to changes in the URI grammar for host [RFC3986] that are | |||
| not desirable for Via. For simplicity, we have removed uri-host from | not desirable for Via. For simplicity, we have removed uri-host from | |||
| the received-by production because it can be encompassed by the | the received-by production because it can be encompassed by the | |||
| existing grammar for pseudonym. In particular, this change removed | existing grammar for pseudonym. In particular, this change removed | |||
| comma from the allowed set of charaters for a host name in received- | comma from the allowed set of charaters for a host name in received- | |||
| by. (Section 7.6.3) | by. (Section 7.6.3) | |||
| B.3. Changes from RFC 7231 | B.3. Changes from RFC 7231 | |||
| Minimum URI lengths to be supported by implementations are now | Minimum URI lengths to be supported by implementations are now | |||
| recommended. (Section 3.1) | recommended. (Section 3.1) | |||
| Clarify that control characters in field values are to be rejected or | Clarified that CR and NUL in field values are to be rejected or | |||
| mapped to SP. (Section 5.5) | mapped to SP and that leading and trailing whitespace need to be | |||
| stripped from field values before they are consumed. (Section 5.5) | ||||
| Parameters in media type, media range, and expectation can be empty | Parameters in media type, media range, and expectation can be empty | |||
| via one or more trailing semicolons. (Section 5.6.6) | via one or more trailing semicolons. (Section 5.6.6) | |||
| An abstract data type for HTTP messages has been introduced to define | An abstract data type for HTTP messages has been introduced to define | |||
| the components of a message and their semantics as an abstraction | the components of a message and their semantics as an abstraction | |||
| across multiple HTTP versions, rather than in terms of the specific | across multiple HTTP versions, rather than in terms of the specific | |||
| syntax form of HTTP/1.1 in [Messaging], and reflect the contents | syntax form of HTTP/1.1 in [Messaging], and reflect the contents | |||
| after the message is parsed. This makes it easier to distinguish | after the message is parsed. This makes it easier to distinguish | |||
| between requirements on the content (what is conveyed) versus | between requirements on the content (what is conveyed) versus | |||
| requirements on the messaging syntax (how it is conveyed) and avoids | requirements on the messaging syntax (how it is conveyed) and avoids | |||
| baking limitations of early protocol versions into the future of | baking limitations of early protocol versions into the future of | |||
| HTTP. (Section 6) | HTTP. (Section 6) | |||
| The terms "payload" and "payload body" have been replaced with | ||||
| "content", to better align with its usage elsewhere (e.g., in field | ||||
| names) and to avoid confusion with frame payloads in HTTP/2 and | ||||
| HTTP/3. (Section 6.4) | ||||
| The term "effective request URI" has been replaced with "target URI". | The term "effective request URI" has been replaced with "target URI". | |||
| (Section 7.1) | (Section 7.1) | |||
| Restrictions on client retries have been loosened, to reflect | Restrictions on client retries have been loosened, to reflect | |||
| implementation behavior. (Section 9.2.2) | implementation behavior. (Section 9.2.2) | |||
| Clarified that request bodies on GET and DELETE are not | Clarified that request bodies on GET and DELETE are not | |||
| interoperable. (Section 9.3.1, Section 9.3.5) | interoperable. (Section 9.3.1, Section 9.3.5) | |||
| Allowed use of the Content-Range header field (Section 14.4) as a | ||||
| request modifier on PUT. (Section 9.3.4) | ||||
| Removed a superfluous requirement about setting Content-Length from | Removed a superfluous requirement about setting Content-Length from | |||
| the description of the OPTIONS method. (Section 9.3.7) | the description of the OPTIONS method. (Section 9.3.7) | |||
| Removed normative requirement to use the "message/http" media type in | ||||
| TRACE responses. (Section 9.3.8) | ||||
| Restore list-based grammar for Expect for compatibility with RFC | Restore list-based grammar for Expect for compatibility with RFC | |||
| 2616. (Section 10.1.1) | 2616. (Section 10.1.1) | |||
| Allow Accept and Accept-Encoding in response messages; the latter was | Allow Accept and Accept-Encoding in response messages; the latter was | |||
| introduced by [RFC7694]. (Section 12.3) | introduced by [RFC7694]. (Section 12.3) | |||
| "Accept Parameters" (accept-params) have been removed from the | "Accept Parameters" (accept-params) have been removed from the | |||
| definition of the Accept field. (Section 12.5.1) | definition of the Accept field. (Section 12.5.1) | |||
| The semantics of "*" in the Vary header field when other values are | The semantics of "*" in the Vary header field when other values are | |||
| skipping to change at page 209, line 30 ¶ | skipping to change at page 213, line 4 ¶ | |||
| introduced by [RFC7694]. (Section 12.3) | introduced by [RFC7694]. (Section 12.3) | |||
| "Accept Parameters" (accept-params) have been removed from the | "Accept Parameters" (accept-params) have been removed from the | |||
| definition of the Accept field. (Section 12.5.1) | definition of the Accept field. (Section 12.5.1) | |||
| The semantics of "*" in the Vary header field when other values are | The semantics of "*" in the Vary header field when other values are | |||
| present was clarified. (Section 12.5.5) | present was clarified. (Section 12.5.5) | |||
| Range units are compared in a case insensitive fashion. | Range units are compared in a case insensitive fashion. | |||
| (Section 14.1) | (Section 14.1) | |||
| The process of creating a redirected request has been clarified. | The process of creating a redirected request has been clarified. | |||
| (Section 15.4) | (Section 15.4) | |||
| Added status code 308 (previously defined in [RFC7538]) so that it's | Added status code 308 (previously defined in [RFC7538]) so that it's | |||
| defined closer to status codes 301, 302, and 307. (Section 15.4.9) | defined closer to status codes 301, 302, and 307. (Section 15.4.9) | |||
| Added status code 421 (previously defined in Section 9.1.2 of | Added status code 421 (previously defined in Section 9.1.2 of | |||
| [RFC7540]) because of its general applicability. 421 is no longer | [RFC7540]) because of its general applicability. 421 is no longer | |||
| defined as heuristically cacheable, since the response is specific to | defined as heuristically cacheable, since the response is specific to | |||
| the connection (not the target resource). (Section 15.5.20) | the connection (not the target resource). (Section 15.5.20) | |||
| Added status code 422 (previously defined in Section 11.2 of | Added status code 422 (previously defined in Section 11.2 of | |||
| [RFC4918]) because of its general applicability. (Section 15.5.21) | [RFC4918]) because of its general applicability. (Section 15.5.21) | |||
| Allowed use of the Content-Range header field (Section 14.4) as a | ||||
| request modifier on PUT. (Section 9.3.4) | ||||
| B.4. Changes from RFC 7232 | B.4. Changes from RFC 7232 | |||
| Previous revisions of HTTP imposed an arbitrary 60-second limit on | Previous revisions of HTTP imposed an arbitrary 60-second limit on | |||
| the determination of whether Last-Modified was a strong validator to | the determination of whether Last-Modified was a strong validator to | |||
| guard against the possibility that the Date and Last-Modified values | guard against the possibility that the Date and Last-Modified values | |||
| are generated from different clocks or at somewhat different times | are generated from different clocks or at somewhat different times | |||
| during the preparation of the response. This specification has | during the preparation of the response. This specification has | |||
| relaxed that to allow reasonable discretion. (Section 8.8.2.2) | relaxed that to allow reasonable discretion. (Section 8.8.2.2) | |||
| Removed edge case requirement on If-Match and If-Unmodified-Since | Removed edge case requirement on If-Match and If-Unmodified-Since | |||
| skipping to change at page 211, line 22 ¶ | skipping to change at page 214, line 36 ¶ | |||
| leaves out examples and deployment considerations. | leaves out examples and deployment considerations. | |||
| Appendix C. Change Log | Appendix C. Change Log | |||
| This section is to be removed before publishing as an RFC. | This section is to be removed before publishing as an RFC. | |||
| C.1. Between RFC723x and draft 00 | C.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, | * 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 | * 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. | * Adjust historical notes. | |||
| o Update links to sibling specifications. | * Update links to sibling specifications. | |||
| o Replace sections listing changes from RFC 2616 by new empty | * 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. | * Remove acknowledgements specific to RFC 723x. | |||
| o Move "Acknowledgements" to the very end and make them unnumbered. | * Move "Acknowledgements" to the very end and make them unnumbered. | |||
| C.2. Since draft-ietf-httpbis-semantics-00 | C.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 | * 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, | * Rearranged architecture to extract conformance, http(s) schemes, | |||
| and protocol versioning into a separate major section. | and protocol versioning into a separate major section. | |||
| o Moved discussion of MIME differences to [Messaging] since that is | * Moved discussion of MIME differences to [Messaging] since that is | |||
| primarily concerned with transforming 1.1 messages. | primarily concerned with transforming 1.1 messages. | |||
| o Merged entire content of RFC 7232 (Conditional Requests). | * Merged entire content of RFC 7232 (Conditional Requests). | |||
| o Merged entire content of RFC 7233 (Range Requests). | * Merged entire content of RFC 7233 (Range Requests). | |||
| o Merged entire content of RFC 7235 (Auth Framework). | * Merged entire content of RFC 7235 (Auth Framework). | |||
| o Moved all extensibility tips, registration procedures, and | * 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. | |||
| C.3. Since draft-ietf-httpbis-semantics-01 | C.3. Since draft-ietf-httpbis-semantics-01 | |||
| o Improve [Welch] citation (<https://github.com/httpwg/http-core/ | * Improve [Welch] citation (<https://github.com/httpwg/http-core/ | |||
| issues/63>) | issues/63>) | |||
| o Remove HTTP/1.1-ism about Range Requests | * 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/ | * Cite RFC 8126 instead of RFC 5226 (<https://github.com/httpwg/ | |||
| http-core/issues/75>) | http-core/issues/75>) | |||
| o Cite RFC 7538 instead of RFC 7238 (<https://github.com/httpwg/ | * Cite RFC 7538 instead of RFC 7238 (<https://github.com/httpwg/ | |||
| http-core/issues/76>) | http-core/issues/76>) | |||
| o Cite RFC 8288 instead of RFC 5988 (<https://github.com/httpwg/ | * Cite RFC 8288 instead of RFC 5988 (<https://github.com/httpwg/ | |||
| http-core/issues/77>) | http-core/issues/77>) | |||
| o Cite RFC 8187 instead of RFC 5987 (<https://github.com/httpwg/ | * Cite RFC 8187 instead of RFC 5987 (<https://github.com/httpwg/ | |||
| http-core/issues/78>) | http-core/issues/78>) | |||
| o Cite RFC 7578 instead of RFC 2388 (<https://github.com/httpwg/ | * Cite RFC 7578 instead of RFC 2388 (<https://github.com/httpwg/ | |||
| http-core/issues/79>) | http-core/issues/79>) | |||
| o Cite RFC 7595 instead of RFC 4395 (<https://github.com/httpwg/ | * Cite RFC 7595 instead of RFC 4395 (<https://github.com/httpwg/ | |||
| http-core/issues/80>) | http-core/issues/80>) | |||
| o improve ABNF readability for qdtext (<https://github.com/httpwg/ | * improve ABNF readability for qdtext (<https://github.com/httpwg/ | |||
| http-core/issues/81>, <https://www.rfc-editor.org/errata/eid4891>) | http-core/issues/81>, <https://www.rfc-editor.org/errata/eid4891>) | |||
| o Clarify "resource" vs "representation" in definition of status | * Clarify "resource" vs "representation" in definition of status | |||
| code 416 (<https://github.com/httpwg/http-core/issues/83>, | code 416 (<https://github.com/httpwg/http-core/issues/83>, | |||
| <https://www.rfc-editor.org/errata/eid4664>) | <https://www.rfc-editor.org/errata/eid4664>) | |||
| o Resolved erratum 4072, no change needed here | * Resolved erratum 4072, no change needed here | |||
| (<https://github.com/httpwg/http-core/issues/84>, | (<https://github.com/httpwg/http-core/issues/84>, | |||
| <https://www.rfc-editor.org/errata/eid4072>) | <https://www.rfc-editor.org/errata/eid4072>) | |||
| o Clarify DELETE status code suggestions | * Clarify DELETE status code suggestions | |||
| (<https://github.com/httpwg/http-core/issues/85>, | (<https://github.com/httpwg/http-core/issues/85>, | |||
| <https://www.rfc-editor.org/errata/eid4436>) | <https://www.rfc-editor.org/errata/eid4436>) | |||
| o In Section 14.4, fix ABNF for "other-range-resp" to use VCHAR | * In Section 14.4, fix ABNF for "other-range-resp" to use VCHAR | |||
| instead of CHAR (<https://github.com/httpwg/http-core/issues/86>, | instead of CHAR (<https://github.com/httpwg/http-core/issues/86>, | |||
| <https://www.rfc-editor.org/errata/eid4707>) | <https://www.rfc-editor.org/errata/eid4707>) | |||
| o Resolved erratum 5162, no change needed here | * Resolved erratum 5162, no change needed here | |||
| (<https://github.com/httpwg/http-core/issues/89>, | (<https://github.com/httpwg/http-core/issues/89>, | |||
| <https://www.rfc-editor.org/errata/eid5162>) | <https://www.rfc-editor.org/errata/eid5162>) | |||
| o Replace "response code" with "response status code" and "status- | * Replace "response code" with "response status code" and "status- | |||
| code" (the ABNF production name from the HTTP/1.1 message format) | code" (the ABNF production name from the HTTP/1.1 message format) | |||
| by "status code" (<https://github.com/httpwg/http-core/issues/94>, | by "status code" (<https://github.com/httpwg/http-core/issues/94>, | |||
| <https://www.rfc-editor.org/errata/eid4050>) | <https://www.rfc-editor.org/errata/eid4050>) | |||
| o Added a missing word in Section 15.4 (<https://github.com/httpwg/ | * Added a missing word in Section 15.4 (<https://github.com/httpwg/ | |||
| http-core/issues/98>, <https://www.rfc-editor.org/errata/eid4452>) | http-core/issues/98>, <https://www.rfc-editor.org/errata/eid4452>) | |||
| o In Section 5.6.1, fixed an example that had trailing whitespace | * In Section 5.6.1, fixed an example that had trailing whitespace | |||
| where it shouldn't (<https://github.com/httpwg/http-core/ | where it shouldn't (<https://github.com/httpwg/http-core/ | |||
| issues/104>, <https://www.rfc-editor.org/errata/eid4169>) | issues/104>, <https://www.rfc-editor.org/errata/eid4169>) | |||
| o In Section 15.3.7, remove words that were potentially misleading | * In Section 15.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>) | |||
| C.4. Since draft-ietf-httpbis-semantics-02 | C.4. Since draft-ietf-httpbis-semantics-02 | |||
| o Included (Proxy-)Auth-Info header field definition from RFC 7615 | * Included (Proxy-)Auth-Info header field definition from RFC 7615 | |||
| (<https://github.com/httpwg/http-core/issues/9>) | (<https://github.com/httpwg/http-core/issues/9>) | |||
| o In Section 9.3.3, clarify POST caching | * In Section 9.3.3, clarify POST caching | |||
| (<https://github.com/httpwg/http-core/issues/17>) | (<https://github.com/httpwg/http-core/issues/17>) | |||
| o Add Section 15.5.19 to reserve the 418 status code | * Add Section 15.5.19 to reserve the 418 status code | |||
| (<https://github.com/httpwg/http-core/issues/43>) | (<https://github.com/httpwg/http-core/issues/43>) | |||
| o In Section 3.4 and Section 10.1.1, clarified when a response can | * In Section 3.4 and Section 10.1.1, clarified when a response can | |||
| be sent (<https://github.com/httpwg/http-core/issues/82>) | be sent (<https://github.com/httpwg/http-core/issues/82>) | |||
| o In Section 8.3.2, explain the difference between the "token" | * In Section 8.3.2, explain the difference between the "token" | |||
| production, the RFC 2978 ABNF for charset names, and the actual | production, the RFC 2978 ABNF for charset names, and the actual | |||
| registration practice (<https://github.com/httpwg/http-core/ | registration practice (<https://github.com/httpwg/http-core/ | |||
| issues/100>, <https://www.rfc-editor.org/errata/eid4689>) | issues/100>, <https://www.rfc-editor.org/errata/eid4689>) | |||
| o In Section 3.1, removed the fragment component in the URI scheme | * In Section 3.1, removed the fragment component in the URI scheme | |||
| definitions as per Section 4.3 of [RFC3986], furthermore moved | definitions as per Section 4.3 of [RFC3986], furthermore moved | |||
| fragment discussion into a separate section | fragment discussion into a separate section | |||
| (<https://github.com/httpwg/http-core/issues/103>, | (<https://github.com/httpwg/http-core/issues/103>, | |||
| <https://www.rfc-editor.org/errata/eid4251>, <https://www.rfc- | <https://www.rfc-editor.org/errata/eid4251>, <https://www.rfc- | |||
| editor.org/errata/eid4252>) | editor.org/errata/eid4252>) | |||
| o In Section 2.5, add language about minor HTTP version number | * In Section 2.5, add language about minor HTTP version number | |||
| defaulting (<https://github.com/httpwg/http-core/issues/115>) | defaulting (<https://github.com/httpwg/http-core/issues/115>) | |||
| o Added Section 15.5.21 for status code 422, previously defined in | * Added Section 15.5.21 for status code 422, previously defined in | |||
| Section 11.2 of [RFC4918] (<https://github.com/httpwg/http-core/ | Section 11.2 of [RFC4918] (<https://github.com/httpwg/http-core/ | |||
| issues/123>) | issues/123>) | |||
| o In Section 15.5.17, fixed prose about byte range comparison | * In Section 15.5.17, fixed prose about byte range comparison | |||
| (<https://github.com/httpwg/http-core/issues/135>, | (<https://github.com/httpwg/http-core/issues/135>, | |||
| <https://www.rfc-editor.org/errata/eid5474>) | <https://www.rfc-editor.org/errata/eid5474>) | |||
| o In Section 3.4, explain that request/response correlation is | * In Section 3.4, explain that request/response correlation is | |||
| version specific (<https://github.com/httpwg/http-core/ | version specific (<https://github.com/httpwg/http-core/ | |||
| issues/145>) | issues/145>) | |||
| C.5. Since draft-ietf-httpbis-semantics-03 | C.5. Since draft-ietf-httpbis-semantics-03 | |||
| o In Section 15.4.9, include status code 308 from RFC 7538 | * In Section 15.4.9, include status code 308 from RFC 7538 | |||
| (<https://github.com/httpwg/http-core/issues/3>) | (<https://github.com/httpwg/http-core/issues/3>) | |||
| o In Section 8.3.1, clarify that the charset parameter value is | * In Section 8.3.1, clarify that the charset parameter value is | |||
| case-insensitive due to the definition in RFC 2046 | case-insensitive due to the definition in RFC 2046 | |||
| (<https://github.com/httpwg/http-core/issues/13>) | (<https://github.com/httpwg/http-core/issues/13>) | |||
| o Define a separate registry for HTTP header field names | * Define a separate registry for HTTP header field names | |||
| (<https://github.com/httpwg/http-core/issues/42>) | (<https://github.com/httpwg/http-core/issues/42>) | |||
| o In Section 12.1, refactor and clarify description of wildcard | * In Section 12.1, refactor and clarify description of wildcard | |||
| ("*") handling (<https://github.com/httpwg/http-core/issues/46>) | ("*") handling (<https://github.com/httpwg/http-core/issues/46>) | |||
| o Deprecate Accept-Charset (<https://github.com/httpwg/http-core/ | * Deprecate Accept-Charset (<https://github.com/httpwg/http-core/ | |||
| issues/61>) | issues/61>) | |||
| o In Section 13.2, mention Cache-Control: immutable | * In Section 13.2, mention Cache-Control: immutable | |||
| (<https://github.com/httpwg/http-core/issues/69>) | (<https://github.com/httpwg/http-core/issues/69>) | |||
| o In Section 5.3, clarify when header field combination is allowed | * In Section 5.3, clarify when header field combination is allowed | |||
| (<https://github.com/httpwg/http-core/issues/74>) | (<https://github.com/httpwg/http-core/issues/74>) | |||
| o In Section 18.4, instruct IANA to mark Content-MD5 as obsolete | * In Section 18.4, instruct IANA to mark Content-MD5 as obsolete | |||
| (<https://github.com/httpwg/http-core/issues/93>) | (<https://github.com/httpwg/http-core/issues/93>) | |||
| o Use RFC 7405 ABNF notation for case-sensitive string constants | * Use RFC 7405 ABNF notation for case-sensitive string constants | |||
| (<https://github.com/httpwg/http-core/issues/133>) | (<https://github.com/httpwg/http-core/issues/133>) | |||
| o Rework Section 3.4 to be more version-independent | * Rework Section 3.4 to be more version-independent | |||
| (<https://github.com/httpwg/http-core/issues/142>) | (<https://github.com/httpwg/http-core/issues/142>) | |||
| o In Section 9.3.5, clarify that DELETE needs to be successful to | * In Section 9.3.5, clarify that DELETE needs to be successful to | |||
| invalidate cache (<https://github.com/httpwg/http-core/ | invalidate cache (<https://github.com/httpwg/http-core/ | |||
| issues/167>, <https://www.rfc-editor.org/errata/eid5541>) | issues/167>, <https://www.rfc-editor.org/errata/eid5541>) | |||
| C.6. Since draft-ietf-httpbis-semantics-04 | C.6. Since draft-ietf-httpbis-semantics-04 | |||
| o In Section 5.5, fix field-content ABNF | * In Section 5.5, fix field-content ABNF | |||
| (<https://github.com/httpwg/http-core/issues/19>, | (<https://github.com/httpwg/http-core/issues/19>, | |||
| <https://www.rfc-editor.org/errata/eid4189>) | <https://www.rfc-editor.org/errata/eid4189>) | |||
| o Move Section 5.6.6 into its own section | * Move Section 5.6.6 into its own section | |||
| (<https://github.com/httpwg/http-core/issues/45>) | (<https://github.com/httpwg/http-core/issues/45>) | |||
| o In Section 8.3, reference MIME Sniffing | * In Section 8.3, reference MIME Sniffing | |||
| (<https://github.com/httpwg/http-core/issues/51>) | (<https://github.com/httpwg/http-core/issues/51>) | |||
| o In Section 5.6.1, simplify the #rule mapping for recipients | * In Section 5.6.1, simplify the #rule mapping for recipients | |||
| (<https://github.com/httpwg/http-core/issues/164>, | (<https://github.com/httpwg/http-core/issues/164>, | |||
| <https://www.rfc-editor.org/errata/eid5257>) | <https://www.rfc-editor.org/errata/eid5257>) | |||
| o In Section 9.3.7, remove misleading text about "extension" of HTTP | * In Section 9.3.7, remove misleading text about "extension" of HTTP | |||
| is needed to define method content (<https://github.com/httpwg/ | is needed to define method content (<https://github.com/httpwg/ | |||
| http-core/issues/204>) | http-core/issues/204>) | |||
| o Fix editorial issue in Section 3.2 (<https://github.com/httpwg/ | * Fix editorial issue in Section 3.2 (<https://github.com/httpwg/ | |||
| http-core/issues/223>) | http-core/issues/223>) | |||
| o In Section 15.5.21, rephrase language not to use "entity" anymore, | * In Section 15.5.21, rephrase language not to use "entity" anymore, | |||
| and also avoid lowercase "may" (<https://github.com/httpwg/http- | and also avoid lowercase "may" (<https://github.com/httpwg/http- | |||
| core/issues/224>) | core/issues/224>) | |||
| o Move discussion of retries from [Messaging] into Section 9.2.2 | * Move discussion of retries from [Messaging] into Section 9.2.2 | |||
| (<https://github.com/httpwg/http-core/issues/230>) | (<https://github.com/httpwg/http-core/issues/230>) | |||
| C.7. Since draft-ietf-httpbis-semantics-05 | C.7. Since draft-ietf-httpbis-semantics-05 | |||
| o Moved transport-independent part of the description of trailers | * Moved transport-independent part of the description of trailers | |||
| into Section 6.5 (<https://github.com/httpwg/http-core/issues/16>) | into Section 6.5 (<https://github.com/httpwg/http-core/issues/16>) | |||
| o Loosen requirements on retries based upon implementation behavior | * Loosen requirements on retries based upon implementation behavior | |||
| (<https://github.com/httpwg/http-core/issues/27>) | (<https://github.com/httpwg/http-core/issues/27>) | |||
| o In Section 18.9, update IANA port registry for TCP/UDP on ports 80 | * In Section 18.9, update IANA port registry for TCP/UDP on ports 80 | |||
| and 443 (<https://github.com/httpwg/http-core/issues/36>) | and 443 (<https://github.com/httpwg/http-core/issues/36>) | |||
| o In Section 16.3.2.2, revise guidelines for new header field names | * In Section 16.3.2.2, revise guidelines for new header field names | |||
| (<https://github.com/httpwg/http-core/issues/47>) | (<https://github.com/httpwg/http-core/issues/47>) | |||
| o In Section 9.2.3, remove concept of "cacheable methods" in favor | * In Section 9.2.3, remove concept of "cacheable methods" in favor | |||
| of prose (<https://github.com/httpwg/http-core/issues/54>, | of prose (<https://github.com/httpwg/http-core/issues/54>, | |||
| <https://www.rfc-editor.org/errata/eid5300>) | <https://www.rfc-editor.org/errata/eid5300>) | |||
| o In Section 17.1, mention that the concept of authority can be | * In Section 17.1, mention that the concept of authority can be | |||
| modified by protocol extensions (<https://github.com/httpwg/http- | modified by protocol extensions (<https://github.com/httpwg/http- | |||
| core/issues/143>) | core/issues/143>) | |||
| o Create new subsection on content in Section 6.4, taken from | * Create new subsection on content in Section 6.4, taken from | |||
| portions of message body (<https://github.com/httpwg/http-core/ | portions of message body (<https://github.com/httpwg/http-core/ | |||
| issues/159>) | issues/159>) | |||
| o Moved definition of "Whitespace" into new container "Generic | * Moved definition of "Whitespace" into new container "Generic | |||
| Syntax" (<https://github.com/httpwg/http-core/issues/162>) | Syntax" (<https://github.com/httpwg/http-core/issues/162>) | |||
| o In Section 3.1, recommend minimum URI size support for | * In Section 3.1, recommend minimum URI size support for | |||
| implementations (<https://github.com/httpwg/http-core/issues/169>) | implementations (<https://github.com/httpwg/http-core/issues/169>) | |||
| o In Section 14.1, refactored the range-unit and ranges-specifier | * In Section 14.1, refactored the range-unit and ranges-specifier | |||
| grammars (<https://github.com/httpwg/http-core/issues/196>, | grammars (<https://github.com/httpwg/http-core/issues/196>, | |||
| <https://www.rfc-editor.org/errata/eid5620>) | <https://www.rfc-editor.org/errata/eid5620>) | |||
| o In Section 9.3.1, caution against a request content more strongly | * In Section 9.3.1, caution against a request content more strongly | |||
| (<https://github.com/httpwg/http-core/issues/202>) | (<https://github.com/httpwg/http-core/issues/202>) | |||
| o Reorganized text in Section 16.3.2.2 (<https://github.com/httpwg/ | * Reorganized text in Section 16.3.2.2 (<https://github.com/httpwg/ | |||
| http-core/issues/214>) | http-core/issues/214>) | |||
| o In Section 15.5.4, replace "authorize" with "fulfill" | * In Section 15.5.4, replace "authorize" with "fulfill" | |||
| (<https://github.com/httpwg/http-core/issues/218>) | (<https://github.com/httpwg/http-core/issues/218>) | |||
| o In Section 9.3.7, removed a misleading statement about Content- | * In Section 9.3.7, removed a misleading statement about Content- | |||
| Length (<https://github.com/httpwg/http-core/issues/235>, | Length (<https://github.com/httpwg/http-core/issues/235>, | |||
| <https://www.rfc-editor.org/errata/eid5806>) | <https://www.rfc-editor.org/errata/eid5806>) | |||
| o In Section 17.1, add text from RFC 2818 | * In Section 17.1, add text from RFC 2818 | |||
| (<https://github.com/httpwg/http-core/issues/236>) | (<https://github.com/httpwg/http-core/issues/236>) | |||
| o Changed "cacheable by default" to "heuristically cacheable" | * Changed "cacheable by default" to "heuristically cacheable" | |||
| throughout (<https://github.com/httpwg/http-core/issues/242>) | throughout (<https://github.com/httpwg/http-core/issues/242>) | |||
| C.8. Since draft-ietf-httpbis-semantics-06 | C.8. Since draft-ietf-httpbis-semantics-06 | |||
| o In Section 7.6.3, simplify received-by grammar (and disallow comma | * In Section 7.6.3, simplify received-by grammar (and disallow comma | |||
| character) (<https://github.com/httpwg/http-core/issues/24>) | character) (<https://github.com/httpwg/http-core/issues/24>) | |||
| o In Section 5.1, give guidance on interoperable field names | * In Section 5.1, give guidance on interoperable field names | |||
| (<https://github.com/httpwg/http-core/issues/30>) | (<https://github.com/httpwg/http-core/issues/30>) | |||
| o In Section 5.6.3, define the semantics and possible replacement of | * In Section 5.6.3, define the semantics and possible replacement of | |||
| whitespace when it is known to occur (<https://github.com/httpwg/ | whitespace when it is known to occur (<https://github.com/httpwg/ | |||
| http-core/issues/53>, <https://www.rfc-editor.org/errata/eid5163>) | http-core/issues/53>, <https://www.rfc-editor.org/errata/eid5163>) | |||
| o In Section 6.3, introduce field terminology and distinguish | * In Section 6.3, introduce field terminology and distinguish | |||
| between field line values and field values; use terminology | between field line values and field values; use terminology | |||
| consistently throughout (<https://github.com/httpwg/http-core/ | consistently throughout (<https://github.com/httpwg/http-core/ | |||
| issues/111>) | issues/111>) | |||
| o Moved #rule definition into Section 5.5 and whitespace into | * Moved #rule definition into Section 5.5 and whitespace into | |||
| Section 2.1 (<https://github.com/httpwg/http-core/issues/162>) | Section 2.1 (<https://github.com/httpwg/http-core/issues/162>) | |||
| o In Section 14.1, explicitly call out range unit names as case- | * In Section 14.1, explicitly call out range unit names as case- | |||
| insensitive, and encourage registration | insensitive, and encourage registration | |||
| (<https://github.com/httpwg/http-core/issues/179>) | (<https://github.com/httpwg/http-core/issues/179>) | |||
| o In Section 8.4.1, explicitly call out content codings as case- | * In Section 8.4.1, explicitly call out content codings as case- | |||
| insensitive, and encourage registration | insensitive, and encourage registration | |||
| (<https://github.com/httpwg/http-core/issues/179>) | (<https://github.com/httpwg/http-core/issues/179>) | |||
| o In Section 5.1, explicitly call out field names as case- | * In Section 5.1, explicitly call out field names as case- | |||
| insensitive (<https://github.com/httpwg/http-core/issues/179>) | insensitive (<https://github.com/httpwg/http-core/issues/179>) | |||
| o In Section 17.12, cite [Bujlow] (<https://github.com/httpwg/http- | * In Section 17.12, cite [Bujlow] (<https://github.com/httpwg/http- | |||
| core/issues/185>) | core/issues/185>) | |||
| o In Section 15, formally define "final" and "interim" status codes | * In Section 15, formally define "final" and "interim" status codes | |||
| (<https://github.com/httpwg/http-core/issues/245>) | (<https://github.com/httpwg/http-core/issues/245>) | |||
| o In Section 9.3.5, caution against a request content more strongly | * In Section 9.3.5, caution against a request content more strongly | |||
| (<https://github.com/httpwg/http-core/issues/258>) | (<https://github.com/httpwg/http-core/issues/258>) | |||
| o In Section 8.8.3, note that Etag can be used in trailers | * In Section 8.8.3, note that Etag can be used in trailers | |||
| (<https://github.com/httpwg/http-core/issues/262>) | (<https://github.com/httpwg/http-core/issues/262>) | |||
| o In Section 18.4, consider reserved fields as well | * In Section 18.4, consider reserved fields as well | |||
| (<https://github.com/httpwg/http-core/issues/273>) | (<https://github.com/httpwg/http-core/issues/273>) | |||
| o In Section 4.2.4, be more correct about what was deprecated by RFC | * In Section 4.2.4, be more correct about what was deprecated by RFC | |||
| 3986 (<https://github.com/httpwg/http-core/issues/278>, | 3986 (<https://github.com/httpwg/http-core/issues/278>, | |||
| <https://www.rfc-editor.org/errata/eid5964>) | <https://www.rfc-editor.org/errata/eid5964>) | |||
| o In Section 5.3, recommend comma SP when combining field lines | * In Section 5.3, recommend comma SP when combining field lines | |||
| (<https://github.com/httpwg/http-core/issues/148>) | (<https://github.com/httpwg/http-core/issues/148>) | |||
| o In Section 7.2, make explicit requirements on origin server to use | * In Section 7.2, make explicit requirements on origin server to use | |||
| authority from absolute-form when available | authority from absolute-form when available | |||
| (<https://github.com/httpwg/http-core/issues/191>) | (<https://github.com/httpwg/http-core/issues/191>) | |||
| o In Section 4.2.1, Section 4.2.2, Section 4.3.1, and Section 7.3.3, | * In Section 4.2.1, Section 4.2.2, Section 4.3.1, and Section 7.3.3, | |||
| refactored schemes to define origin and authoritative access to an | refactored schemes to define origin and authoritative access to an | |||
| origin server for both "http" and "https" URIs to account for | origin server for both "http" and "https" URIs to account for | |||
| alternative services and secured connections that are not | alternative services and secured connections that are not | |||
| necessarily based on TCP (<https://github.com/httpwg/http-core/ | necessarily based on TCP (<https://github.com/httpwg/http-core/ | |||
| issues/237>) | issues/237>) | |||
| o In Section 2.2, reference RFC 8174 as well | * In Section 2.2, reference RFC 8174 as well | |||
| (<https://github.com/httpwg/http-core/issues/303>) | (<https://github.com/httpwg/http-core/issues/303>) | |||
| C.9. Since draft-ietf-httpbis-semantics-07 | C.9. Since draft-ietf-httpbis-semantics-07 | |||
| o In Section 14.2, explicitly reference the definition of | * In Section 14.2, explicitly reference the definition of | |||
| representation data as including any content codings | representation data as including any content codings | |||
| (<https://github.com/httpwg/http-core/issues/11>) | (<https://github.com/httpwg/http-core/issues/11>) | |||
| o Move TE: trailers from [Messaging] into Section 6.5.1 | * Move TE: trailers from [Messaging] into Section 6.5.1 | |||
| (<https://github.com/httpwg/http-core/issues/18>) | (<https://github.com/httpwg/http-core/issues/18>) | |||
| o In Section 8.6, adjust requirements for handling multiple content- | * In Section 8.6, adjust requirements for handling multiple content- | |||
| length values (<https://github.com/httpwg/http-core/issues/59>) | length values (<https://github.com/httpwg/http-core/issues/59>) | |||
| o In Section 13.1.1 and Section 13.1.2, clarified condition | * In Section 13.1.1 and Section 13.1.2, clarified condition | |||
| evaluation (<https://github.com/httpwg/http-core/issues/72>) | evaluation (<https://github.com/httpwg/http-core/issues/72>) | |||
| o In Section 5.5, remove concept of obs-fold, as that is | * In Section 5.5, remove concept of obs-fold, as that is | |||
| HTTP/1-specific (<https://github.com/httpwg/http-core/issues/116>) | HTTP/1-specific (<https://github.com/httpwg/http-core/issues/116>) | |||
| o In Section 12, introduce the concept of request content | * In Section 12, introduce the concept of request content | |||
| negotiation (Section 12.3) and define for Accept-Encoding | negotiation (Section 12.3) and define for Accept-Encoding | |||
| (<https://github.com/httpwg/http-core/issues/119>) | (<https://github.com/httpwg/http-core/issues/119>) | |||
| o In Section 15.3.6, Section 15.5.9, and Section 15.5.14, remove | * In Section 15.3.6, Section 15.5.9, and Section 15.5.14, remove | |||
| HTTP/1-specific, connection-related requirements | HTTP/1-specific, connection-related requirements | |||
| (<https://github.com/httpwg/http-core/issues/144>) | (<https://github.com/httpwg/http-core/issues/144>) | |||
| o In Section 9.3.6, correct language about what is forwarded | * In Section 9.3.6, correct language about what is forwarded | |||
| (<https://github.com/httpwg/http-core/issues/170>) | (<https://github.com/httpwg/http-core/issues/170>) | |||
| o Throughout, replace "effective request URI", "request-target" and | * Throughout, replace "effective request URI", "request-target" and | |||
| similar with "target URI" (<https://github.com/httpwg/http-core/ | similar with "target URI" (<https://github.com/httpwg/http-core/ | |||
| issues/259>) | issues/259>) | |||
| o In Section 16.3.2.2 and Section 16.2.2, describe how extensions | * In Section 16.3.2.2 and Section 16.2.2, describe how extensions | |||
| should consider scope of applicability | should consider scope of applicability | |||
| (<https://github.com/httpwg/http-core/issues/265>) | (<https://github.com/httpwg/http-core/issues/265>) | |||
| o In Section 3.4, don't rely on the HTTP/1.1 Messaging specification | * In Section 3.4, don't rely on the HTTP/1.1 Messaging specification | |||
| to define "message" (<https://github.com/httpwg/http-core/ | to define "message" (<https://github.com/httpwg/http-core/ | |||
| issues/311>) | issues/311>) | |||
| o In Section 8.7 and Section 10.1.3, note that URL resolution is | * In Section 8.7 and Section 10.1.3, note that URL resolution is | |||
| necessary (<https://github.com/httpwg/http-core/issues/321>) | necessary (<https://github.com/httpwg/http-core/issues/321>) | |||
| o In Section 3.2, explicitly reference 206 as one of the status | * In Section 3.2, explicitly reference 206 as one of the status | |||
| codes that provide representation data | codes that provide representation data | |||
| (<https://github.com/httpwg/http-core/issues/325>) | (<https://github.com/httpwg/http-core/issues/325>) | |||
| o In Section 13.1.4, refine requirements so that they don't apply to | * In Section 13.1.4, refine requirements so that they don't apply to | |||
| resources without a concept of modification time | resources without a concept of modification time | |||
| (<https://github.com/httpwg/http-core/issues/326>) | (<https://github.com/httpwg/http-core/issues/326>) | |||
| o In Section 11.7.1, specify the scope as a request, not a target | * In Section 11.7.1, specify the scope as a request, not a target | |||
| resource (<https://github.com/httpwg/http-core/issues/331>) | resource (<https://github.com/httpwg/http-core/issues/331>) | |||
| o In Section 3.4, introduce concept of "complete" messages | * In Section 3.4, introduce concept of "complete" messages | |||
| (<https://github.com/httpwg/http-core/issues/334>) | (<https://github.com/httpwg/http-core/issues/334>) | |||
| o In Section 7.1, Section 9.3.6, and Section 9.3.7, refine use of | * In Section 7.1, Section 9.3.6, and Section 9.3.7, refine use of | |||
| "request target" (<https://github.com/httpwg/http-core/ | "request target" (<https://github.com/httpwg/http-core/ | |||
| issues/340>) | issues/340>) | |||
| o Throughout, remove "status-line" and "request-line", as these are | * Throughout, remove "status-line" and "request-line", as these are | |||
| HTTP/1.1-specific (<https://github.com/httpwg/http-core/ | HTTP/1.1-specific (<https://github.com/httpwg/http-core/ | |||
| issues/361>) | issues/361>) | |||
| C.10. Since draft-ietf-httpbis-semantics-08 | C.10. Since draft-ietf-httpbis-semantics-08 | |||
| o In Section 15.5.17, remove duplicate definition of what makes a | * In Section 15.5.17, remove duplicate definition of what makes a | |||
| range satisfiable and refer instead to each range unit's | range satisfiable and refer instead to each range unit's | |||
| definition (<https://github.com/httpwg/http-core/issues/12>) | definition (<https://github.com/httpwg/http-core/issues/12>) | |||
| o In Section 14.1.2 and Section 14.2, clarify that a selected | * In Section 14.1.2 and Section 14.2, clarify that a selected | |||
| representation of zero length can only be satisfiable as a suffix | representation of zero length can only be satisfiable as a suffix | |||
| range and that a server can still ignore Range for that case | range and that a server can still ignore Range for that case | |||
| (<https://github.com/httpwg/http-core/issues/12>) | (<https://github.com/httpwg/http-core/issues/12>) | |||
| o In Section 12.5.1 and Section 15.5.16, allow "Accept" as response | * In Section 12.5.1 and Section 15.5.16, allow "Accept" as response | |||
| field (<https://github.com/httpwg/http-core/issues/48>) | field (<https://github.com/httpwg/http-core/issues/48>) | |||
| o Appendix A now uses the sender variant of the "#" list expansion | * Appendix A now uses the sender variant of the "#" list expansion | |||
| (<https://github.com/httpwg/http-core/issues/192>) | (<https://github.com/httpwg/http-core/issues/192>) | |||
| o In Section 12.5.5, make the field list-based even when "*" is | * In Section 12.5.5, make the field list-based even when "*" is | |||
| present (<https://github.com/httpwg/http-core/issues/272>) | present (<https://github.com/httpwg/http-core/issues/272>) | |||
| o In Section 16.3.1, add optional "Comments" entry | * In Section 16.3.1, add optional "Comments" entry | |||
| (<https://github.com/httpwg/http-core/issues/273>) | (<https://github.com/httpwg/http-core/issues/273>) | |||
| o In Section 18.4, reserve "*" as field name | * In Section 18.4, reserve "*" as field name | |||
| (<https://github.com/httpwg/http-core/issues/274>) | (<https://github.com/httpwg/http-core/issues/274>) | |||
| o In Section 18.2, reserve "*" as method name | * In Section 18.2, reserve "*" as method name | |||
| (<https://github.com/httpwg/http-core/issues/274>) | (<https://github.com/httpwg/http-core/issues/274>) | |||
| o In Section 13.1.1 and Section 13.1.2, state that multiple "*" is | * In Section 13.1.1 and Section 13.1.2, state that multiple "*" is | |||
| unlikely to be interoperable (<https://github.com/httpwg/http- | unlikely to be interoperable (<https://github.com/httpwg/http- | |||
| core/issues/305>) | core/issues/305>) | |||
| o In Section 12.5.1, avoid use of obsolete media type parameter on | * In Section 12.5.1, avoid use of obsolete media type parameter on | |||
| text/html (<https://github.com/httpwg/http-core/issues/375>, | text/html (<https://github.com/httpwg/http-core/issues/375>, | |||
| <https://www.rfc-editor.org/errata/eid6149>) | <https://www.rfc-editor.org/errata/eid6149>) | |||
| o Rephrase prose in Section 3.4 to become version-agnostic | * Rephrase prose in Section 3.4 to become version-agnostic | |||
| (<https://github.com/httpwg/http-core/issues/372>) | (<https://github.com/httpwg/http-core/issues/372>) | |||
| o In Section 5.5, instruct recipients how to deal with control | * In Section 5.5, instruct recipients how to deal with control | |||
| characters in field values (<https://github.com/httpwg/http-core/ | characters in field values (<https://github.com/httpwg/http-core/ | |||
| issues/377>) | issues/377>) | |||
| o In Section 5.5, update note about field ABNF | * In Section 5.5, update note about field ABNF | |||
| (<https://github.com/httpwg/http-core/issues/380>) | (<https://github.com/httpwg/http-core/issues/380>) | |||
| o Add Section 16 about Extending and Versioning HTTP | * Add Section 16 about Extending and Versioning HTTP | |||
| (<https://github.com/httpwg/http-core/issues/384>) | (<https://github.com/httpwg/http-core/issues/384>) | |||
| o In Section 15.1, include status 308 in list of heuristically | * In Section 15.1, include status 308 in list of heuristically | |||
| cacheable status codes (<https://github.com/httpwg/http-core/ | cacheable status codes (<https://github.com/httpwg/http-core/ | |||
| issues/385>) | issues/385>) | |||
| o In Section 8.4, make it clearer that "identity" is not to be | * In Section 8.4, make it clearer that "identity" is not to be | |||
| included (<https://github.com/httpwg/http-core/issues/388>) | included (<https://github.com/httpwg/http-core/issues/388>) | |||
| C.11. Since draft-ietf-httpbis-semantics-09 | C.11. Since draft-ietf-httpbis-semantics-09 | |||
| o Switch to xml2rfc v3 mode for draft generation | * Switch to xml2rfc v3 mode for draft generation | |||
| (<https://github.com/httpwg/http-core/issues/394>) | (<https://github.com/httpwg/http-core/issues/394>) | |||
| C.12. Since draft-ietf-httpbis-semantics-10 | C.12. Since draft-ietf-httpbis-semantics-10 | |||
| o In Section 17.6, mention compression attacks | * In Section 17.6, mention compression attacks | |||
| (<https://github.com/httpwg/http-core/issues/6>) | (<https://github.com/httpwg/http-core/issues/6>) | |||
| o In Section 16.6.1, advise to make new content codings self- | * In Section 16.6.1, advise to make new content codings self- | |||
| descriptive (<https://github.com/httpwg/http-core/issues/21>) | descriptive (<https://github.com/httpwg/http-core/issues/21>) | |||
| o In Section 5.6.6, introduced the "parameters" ABNF rule, allowing | * In Section 5.6.6, introduced the "parameters" ABNF rule, allowing | |||
| empty parameters and trailing semicolons within media type, media | empty parameters and trailing semicolons within media type, media | |||
| range, and expectation (<https://github.com/httpwg/http-core/ | range, and expectation (<https://github.com/httpwg/http-core/ | |||
| issues/33>) | issues/33>) | |||
| o In Section 15.4, explain how to create a redirected request | * In Section 15.4, explain how to create a redirected request | |||
| (<https://github.com/httpwg/http-core/issues/38>) | (<https://github.com/httpwg/http-core/issues/38>) | |||
| o In Section 8.3, defined error handling for multiple members | * In Section 8.3, defined error handling for multiple members | |||
| (<https://github.com/httpwg/http-core/issues/39>) | (<https://github.com/httpwg/http-core/issues/39>) | |||
| o In Section 1, revise the introduction and introduce HTTP/2 and | * In Section 1, revise the introduction and introduce HTTP/2 and | |||
| HTTP/3 (<https://github.com/httpwg/http-core/issues/64>) | HTTP/3 (<https://github.com/httpwg/http-core/issues/64>) | |||
| o In Section 8.6, added a definition for Content-Length that | * In Section 8.6, added a definition for Content-Length that | |||
| encompasses its various roles in describing message content or | encompasses its various roles in describing message content or | |||
| selected representation length; in Section 15.3.7, noted that | selected representation length; in Section 15.3.7, noted that | |||
| Content-Length counts only the message content (not the selected | Content-Length counts only the message content (not the selected | |||
| representation) and that the representation length is in each | representation) and that the representation length is in each | |||
| Content-Range (<https://github.com/httpwg/http-core/issues/118>) | Content-Range (<https://github.com/httpwg/http-core/issues/118>) | |||
| o Noted that "WWW-Authenticate" with more than one value on a line | * Noted that "WWW-Authenticate" with more than one value on a line | |||
| is sometimes not interoperable [Messaging] | is sometimes not interoperable [Messaging] | |||
| (<https://github.com/httpwg/http-core/issues/136>) | (<https://github.com/httpwg/http-core/issues/136>) | |||
| o In Section 13.1.1 and Section 13.1.4, removed requirement that a | * In Section 13.1.1 and Section 13.1.4, removed requirement that a | |||
| validator not be sent in a 2xx response when validation fails and | validator not be sent in a 2xx response when validation fails and | |||
| the server decides that the same change request has already been | the server decides that the same change request has already been | |||
| applied (<https://github.com/httpwg/http-core/issues/166>) | applied (<https://github.com/httpwg/http-core/issues/166>) | |||
| o Moved requirements specific to HTTP/1.1 from Section 7.2 to | * Moved requirements specific to HTTP/1.1 from Section 7.2 to | |||
| [Messaging] (<https://github.com/httpwg/http-core/issues/182>) | [Messaging] (<https://github.com/httpwg/http-core/issues/182>) | |||
| o In Section 5.5, introduce the terms "singleton field" and "list- | * In Section 5.5, introduce the terms "singleton field" and "list- | |||
| based field" (also - in various places - discuss what to do when a | based field" (also - in various places - discuss what to do when a | |||
| singleton field is received as a list) | singleton field is received as a list) | |||
| (<https://github.com/httpwg/http-core/issues/193>) | (<https://github.com/httpwg/http-core/issues/193>) | |||
| o In Section 10.1.1, change the ABNF back to be a list of | * In Section 10.1.1, change the ABNF back to be a list of | |||
| expectations, as defined in RFC 2616 (<https://github.com/httpwg/ | expectations, as defined in RFC 2616 (<https://github.com/httpwg/ | |||
| http-core/issues/203>) | http-core/issues/203>) | |||
| o In Section 10.1.5 (Trailer), Section 7.6.3 (Via), Section 7.8 | * In Section 10.1.5 (Trailer), Section 7.6.3 (Via), Section 7.8 | |||
| (Upgrade), Section 7.6.1 (Connection), Section 8.4 | (Upgrade), Section 7.6.1 (Connection), Section 8.4 | |||
| (Content-Encoding), Section 8.5 (Content-Language), Section 10.1.1 | (Content-Encoding), Section 8.5 (Content-Language), Section 10.1.1 | |||
| (Expect), Section 13.1.1 (If-Match), Section 13.1.2 | (Expect), Section 13.1.1 (If-Match), Section 13.1.2 | |||
| (If-None-Match), Section 12.5.2 (Accept-Charset), Section 12.5.4 | (If-None-Match), Section 12.5.2 (Accept-Charset), Section 12.5.4 | |||
| (Accept-Language), Section 12.5.5 (Vary), Section 11.6.1 | (Accept-Language), Section 12.5.5 (Vary), Section 11.6.1 | |||
| (WWW-Authenticate), and Section 11.7.1 (Proxy-Authenticate), | (WWW-Authenticate), and Section 11.7.1 (Proxy-Authenticate), | |||
| adjust ABNF to allow empty lists (<https://github.com/httpwg/http- | adjust ABNF to allow empty lists (<https://github.com/httpwg/http- | |||
| core/issues/210>) | core/issues/210>) | |||
| o In Section 9.3.1 and Section 17.9, provide a more nuanced | * In Section 9.3.1 and Section 17.9, provide a more nuanced | |||
| explanation of sensitive data in GET-based forms and describe | explanation of sensitive data in GET-based forms and describe | |||
| workarounds (<https://github.com/httpwg/http-core/issues/277>) | workarounds (<https://github.com/httpwg/http-core/issues/277>) | |||
| o In Section 13.2, allow preconditions to be evaluated before the | * In Section 13.2, allow preconditions to be evaluated before the | |||
| request content (if any) is processed (<https://github.com/httpwg/ | request content (if any) is processed (<https://github.com/httpwg/ | |||
| http-core/issues/261>) | http-core/issues/261>) | |||
| o In Section 6.3 and Section 6.5.2, allow for trailer fields in | * In Section 6.3 and Section 6.5.2, allow for trailer fields in | |||
| multiple trailer sections, depending on the HTTP version and | multiple trailer sections, depending on the HTTP version and | |||
| framing in use, with processing being iterative as each section is | framing in use, with processing being iterative as each section is | |||
| received (<https://github.com/httpwg/http-core/issues/313>) | received (<https://github.com/httpwg/http-core/issues/313>) | |||
| o Moved definitions of "TE" and "Upgrade" from [Messaging] | * Moved definitions of "TE" and "Upgrade" from [Messaging] | |||
| (<https://github.com/httpwg/http-core/issues/392>) | (<https://github.com/httpwg/http-core/issues/392>) | |||
| o Moved 1.1-specific discussion of TLS to Messaging and rewrote | * Moved 1.1-specific discussion of TLS to Messaging and rewrote | |||
| Section 4.3.4 to refer to RFC6125 (<https://github.com/httpwg/ | Section 4.3.4 to refer to RFC6125 (<https://github.com/httpwg/ | |||
| http-core/issues/404>) | http-core/issues/404>) | |||
| o Moved definition of "Connection" from [Messaging] | * Moved definition of "Connection" from [Messaging] | |||
| (<https://github.com/httpwg/http-core/issues/407>) | (<https://github.com/httpwg/http-core/issues/407>) | |||
| C.13. Since draft-ietf-httpbis-semantics-11 | C.13. Since draft-ietf-httpbis-semantics-11 | |||
| o The entire document has been reorganized, with no changes to | * The entire document has been reorganized, with no changes to | |||
| content except editorial for the reorganization | content except editorial for the reorganization | |||
| (<https://github.com/httpwg/http-core/issues/368>) | (<https://github.com/httpwg/http-core/issues/368>) | |||
| o Move IANA Upgrade Token Registry instructions from [Messaging] | * Move IANA Upgrade Token Registry instructions from [Messaging] | |||
| (<https://github.com/httpwg/http-core/issues/450>) | (<https://github.com/httpwg/http-core/issues/450>) | |||
| C.14. Since draft-ietf-httpbis-semantics-12 | C.14. Since draft-ietf-httpbis-semantics-12 | |||
| o In Appendix "Acknowledgments" (Appendix D), added acks for the | * In Appendix "Acknowledgments" (Appendix D), added acks for the | |||
| work since 2014 (<https://github.com/httpwg/http-core/issues/442>) | work since 2014 (<https://github.com/httpwg/http-core/issues/442>) | |||
| o In Section 15.3.7, specifically require that a client check the | * In Section 15.3.7, specifically require that a client check the | |||
| 206 response header fields to determine what ranges are enclosed, | 206 response header fields to determine what ranges are enclosed, | |||
| since it cannot assume they exactly match those requested | since it cannot assume they exactly match those requested | |||
| (<https://github.com/httpwg/http-core/issues/445>) | (<https://github.com/httpwg/http-core/issues/445>) | |||
| o In Section 16.3, explain why new fields need to be backwards- | * In Section 16.3, explain why new fields need to be backwards- | |||
| compatible (<https://github.com/httpwg/http-core/issues/448>) | compatible (<https://github.com/httpwg/http-core/issues/448>) | |||
| o In Section 5.3, constrain field combination to be within a section | * In Section 5.3, constrain field combination to be within a section | |||
| (<https://github.com/httpwg/http-core/issues/454>) | (<https://github.com/httpwg/http-core/issues/454>) | |||
| o In Section 5.6.7, mention that caching relaxes date sensitivity | * In Section 5.6.7, mention that caching relaxes date sensitivity | |||
| (<https://github.com/httpwg/http-core/issues/473>) | (<https://github.com/httpwg/http-core/issues/473>) | |||
| o In Section 18.4, moved "*" field registration into main table | * In Section 18.4, moved "*" field registration into main table | |||
| (<https://github.com/httpwg/http-core/issues/476>) | (<https://github.com/httpwg/http-core/issues/476>) | |||
| o In Section 1.2, reference HTTP/0.9 (<https://github.com/httpwg/ | * In Section 1.2, reference HTTP/0.9 (<https://github.com/httpwg/ | |||
| http-core/issues/497>) | http-core/issues/497>) | |||
| o In Section 9.3.4, clarify handling of unrecognized fields | * In Section 9.3.4, clarify handling of unrecognized fields | |||
| (<https://github.com/httpwg/http-core/issues/502>) | (<https://github.com/httpwg/http-core/issues/502>) | |||
| o In Section 15.2, align language about bodies and trailers with 204 | * In Section 15.2, align language about bodies and trailers with 204 | |||
| and 304 (<https://github.com/httpwg/http-core/issues/503>) | and 304 (<https://github.com/httpwg/http-core/issues/503>) | |||
| o Moved table of content codings into Section 18.6, moved table of | * Moved table of content codings into Section 18.6, moved table of | |||
| range units into Section 18.7 (<https://github.com/httpwg/http- | range units into Section 18.7 (<https://github.com/httpwg/http- | |||
| core/issues/506>) | core/issues/506>) | |||
| o In Section 6, add an abstract data type for message to help define | * In Section 6, add an abstract data type for message to help define | |||
| semantics without being dependent on the specific structure of | semantics without being dependent on the specific structure of | |||
| HTTP/1.1 (<https://github.com/httpwg/http-core/issues/557>) | HTTP/1.1 (<https://github.com/httpwg/http-core/issues/557>) | |||
| o In Section 8.8.2.2, relax arbitrary 60-second comparison limit | * In Section 8.8.2.2, relax arbitrary 60-second comparison limit | |||
| (<https://github.com/httpwg/http-core/issues/510>) | (<https://github.com/httpwg/http-core/issues/510>) | |||
| o In Section 7.2, add ":authority" pseudo-header to Host discussion | * In Section 7.2, add ":authority" pseudo-header to Host discussion | |||
| and make section applicable to both (<https://github.com/httpwg/ | and make section applicable to both (<https://github.com/httpwg/ | |||
| http-core/issues/511>) | http-core/issues/511>) | |||
| o In Section 18.4, note that this document updates [RFC3864] | * In Section 18.4, note that this document updates [RFC3864] | |||
| (<https://github.com/httpwg/http-core/issues/515>) | (<https://github.com/httpwg/http-core/issues/515>) | |||
| o Moved transfer-coding ABNF from [Messaging] to Section 10.1.4 and | * Moved transfer-coding ABNF from [Messaging] to Section 10.1.4 and | |||
| replaced "t-ranking" ABNF by equivalent "weight" | replaced "t-ranking" ABNF by equivalent "weight" | |||
| (<https://github.com/httpwg/http-core/issues/531>) | (<https://github.com/httpwg/http-core/issues/531>) | |||
| o In Section 11.5, replace "canonical root URI" by "origin" | * In Section 11.5, replace "canonical root URI" by "origin" | |||
| (<https://github.com/httpwg/http-core/issues/542>) | (<https://github.com/httpwg/http-core/issues/542>) | |||
| o In Section 10.1.1, remove obsolete note about a change in RFC 723x | * In Section 10.1.1, remove obsolete note about a change in RFC 723x | |||
| (<https://github.com/httpwg/http-core/issues/547>) | (<https://github.com/httpwg/http-core/issues/547>) | |||
| o Changed to using "payload" when defining requirements about the | * Changed to using "payload" when defining requirements about the | |||
| data being conveyed within a message, instead of the terms | data being conveyed within a message, instead of the terms | |||
| "payload body" or "response body" or "representation body", since | "payload body" or "response body" or "representation body", since | |||
| they often get confused with the HTTP/1.1 message body (which | they often get confused with the HTTP/1.1 message body (which | |||
| includes transfer coding) (<https://github.com/httpwg/http-core/ | includes transfer coding) (<https://github.com/httpwg/http-core/ | |||
| issues/553>) | issues/553>) | |||
| o Rewrite definition of HEAD method (<https://github.com/httpwg/ | * Rewrite definition of HEAD method (<https://github.com/httpwg/ | |||
| http-core/issues/559>) | http-core/issues/559>) | |||
| o In Section 13.1.5, fix an off-by-one bug about how many chars to | * In Section 13.1.5, fix an off-by-one bug about how many chars to | |||
| consider when checking for etags (<https://github.com/httpwg/http- | consider when checking for etags (<https://github.com/httpwg/http- | |||
| core/issues/570>) | core/issues/570>) | |||
| o In Section 15.1, clarify that "no reason phrase" is fine as well | * In Section 15.1, clarify that "no reason phrase" is fine as well | |||
| (<https://github.com/httpwg/http-core/issues/571>) | (<https://github.com/httpwg/http-core/issues/571>) | |||
| o In Section 15.3.4, remove an obsolete reference to the Warning | * In Section 15.3.4, remove an obsolete reference to the Warning | |||
| response header field (<https://github.com/httpwg/http-core/ | response header field (<https://github.com/httpwg/http-core/ | |||
| issues/573>) | issues/573>) | |||
| o In Section 15.5.9, rephrase prose about connection re-use | * In Section 15.5.9, rephrase prose about connection re-use | |||
| (<https://github.com/httpwg/http-core/issues/579>) | (<https://github.com/httpwg/http-core/issues/579>) | |||
| o In Section 14.2, potentially allow Range handling on methods other | * In Section 14.2, potentially allow Range handling on methods other | |||
| than GET (<https://github.com/httpwg/http-core/issues/581>) | than GET (<https://github.com/httpwg/http-core/issues/581>) | |||
| o In Section 18.3, remove redundant text about status code 418 | * In Section 18.3, remove redundant text about status code 418 | |||
| (<https://github.com/httpwg/http-core/issues/583>) | (<https://github.com/httpwg/http-core/issues/583>) | |||
| o In Section 17.15.1, rewrite requirement to refer to "secured | * In Section 17.15.1, rewrite requirement to refer to "secured | |||
| connection" (<https://github.com/httpwg/http-core/issues/587>) | connection" (<https://github.com/httpwg/http-core/issues/587>) | |||
| o Make reference to [RFC8446] normative (<https://github.com/httpwg/ | * Make reference to [RFC8446] normative (<https://github.com/httpwg/ | |||
| http-core/issues/589>) | http-core/issues/589>) | |||
| C.15. Since draft-ietf-httpbis-semantics-13 | C.15. Since draft-ietf-httpbis-semantics-13 | |||
| o In Section 12.5.1, remove the unused "accept parameters" | * In Section 12.5.1, remove the unused "accept parameters" | |||
| (<https://github.com/httpwg/http-core/issues/568>) | (<https://github.com/httpwg/http-core/issues/568>) | |||
| o In Section 1.2, mention that RFC 1945 describes HTTP/0.9 as well | * In Section 1.2, mention that RFC 1945 describes HTTP/0.9 as well | |||
| (<https://github.com/httpwg/http-core/issues/614>) | (<https://github.com/httpwg/http-core/issues/614>) | |||
| o In Section 14.5, describe non-standard use of the Content-Range | * In Section 14.5, describe non-standard use of the Content-Range | |||
| header field (Section 14.4) as a request modifier to perform a | header field (Section 14.4) as a request modifier to perform a | |||
| partial PUT (<https://github.com/httpwg/http-core/issues/618>) | partial PUT (<https://github.com/httpwg/http-core/issues/618>) | |||
| o In Section 15.5.20, import the 421 (Misdirected Request) status | * In Section 15.5.20, import the 421 (Misdirected Request) status | |||
| code from [RFC7540] (<https://github.com/httpwg/http-core/ | code from [RFC7540] (<https://github.com/httpwg/http-core/ | |||
| issues/622>) | issues/622>) | |||
| o In Section 2.3, rephrase the actual recipient parsing requirements | * In Section 2.3, rephrase the actual recipient parsing requirements | |||
| (<https://github.com/httpwg/http-core/issues/634>) | (<https://github.com/httpwg/http-core/issues/634>) | |||
| o In Section 16.1.2, mention request target forms in considerations | * In Section 16.1.2, mention request target forms in considerations | |||
| for new methods (<https://github.com/httpwg/http-core/issues/636>) | for new methods (<https://github.com/httpwg/http-core/issues/636>) | |||
| o Changed to using "content" instead of "payload" or "payload data" | * Changed to using "content" instead of "payload" or "payload data" | |||
| to avoid confusion with the payload of version-specific messaging | to avoid confusion with the payload of version-specific messaging | |||
| frames (<https://github.com/httpwg/http-core/issues/654>) | frames (<https://github.com/httpwg/http-core/issues/654>) | |||
| o In Section 13.1.3, Section 13.1.4, and Section 13.1.5, specify | * In Section 13.1.3, Section 13.1.4, and Section 13.1.5, specify | |||
| evaluation in a way similar to other conditional header fields | evaluation in a way similar to other conditional header fields | |||
| (<https://github.com/httpwg/http-core/issues/665>) | (<https://github.com/httpwg/http-core/issues/665>) | |||
| o In Section 10.2.2, specify that recipients can replace an invalid | * In Section 10.2.2, specify that recipients can replace an invalid | |||
| Date header field value with the time received | Date header field value with the time received | |||
| (<https://github.com/httpwg/http-core/issues/669>) | (<https://github.com/httpwg/http-core/issues/669>) | |||
| C.16. Since draft-ietf-httpbis-semantics-14 | ||||
| * In Section 5.5, relax prohibition of characters in field values to | ||||
| CR and NUL (<https://github.com/httpwg/http-core/issues/683>) | ||||
| * In Section 15, clarify that status code values outside the range | ||||
| 100..599 are invalid, and recommend error handling | ||||
| (<https://github.com/httpwg/http-core/issues/684>) | ||||
| * In Section 2.2, replaced requirement on semantic conformance with | ||||
| permission to ignore/workaround implementation-specific failures | ||||
| (<https://github.com/httpwg/http-core/issues/687>) | ||||
| * Avoid the term "whitelist" (<https://github.com/httpwg/http-core/ | ||||
| issues/688>) | ||||
| * In Section 9.3.8, remove the normative requirement to use the | ||||
| message/http media type (<https://github.com/httpwg/http-core/ | ||||
| issues/690>) | ||||
| * In Section 7.6, discuss extensibility (<https://github.com/httpwg/ | ||||
| http-core/issues/692>) | ||||
| * In Section 5.5, tighten the recommendation for characters in newly | ||||
| defined fields, making it consistent with obs-text | ||||
| (<https://github.com/httpwg/http-core/issues/696>) | ||||
| * In Section 5.5, leading/trailing whitespace removal is at time of | ||||
| use, not parsing (<https://github.com/httpwg/http-core/ | ||||
| issues/697>) | ||||
| * In Section 6, clarify that HTTP self-descriptive messages have an | ||||
| exception in that the request must be understood in order to parse | ||||
| and interpret the response (<https://github.com/httpwg/http-core/ | ||||
| issues/700>) | ||||
| * Remove "Canonicalization and Text Defaults" | ||||
| (<https://github.com/httpwg/http-core/issues/703>) | ||||
| * In Section 10.1.3, refine what can be sent in Referer, and when | ||||
| (<https://github.com/httpwg/http-core/issues/709>) | ||||
| * In Section 11.5, explain that the protection space is not defined | ||||
| without additional information (<https://github.com/httpwg/http- | ||||
| core/issues/710>) | ||||
| * Simplify description of reactive content negotiation in | ||||
| Section 12.2 (<https://github.com/httpwg/http-core/issues/712>) | ||||
| * In Section 8.3.2, remove the "charset" ABNF production, and | ||||
| clarify where charsets appear (<https://github.com/httpwg/http- | ||||
| core/issues/713>) | ||||
| * In Section 12.5.3, clarify that selection _between_ multiple | ||||
| acceptable codings is only relevant when they have the same | ||||
| purpose (<https://github.com/httpwg/http-core/issues/714>) | ||||
| * In Section 13, rewrite introduction, mentioning extensibility | ||||
| (<https://github.com/httpwg/http-core/issues/715>) | ||||
| * Throughout, be consistent about 'content coding' vs 'content- | ||||
| coding' (<https://github.com/httpwg/http-core/issues/719>) | ||||
| * In Section 9.3.6, clarify that the port is mandatory in a CONNECT | ||||
| request target (<https://github.com/httpwg/http-core/issues/736>) | ||||
| and that the tunnel begins after the header section | ||||
| (<https://github.com/httpwg/http-core/issues/737>) | ||||
| * In Section 6.5, remove mid-stream trailers | ||||
| (<https://github.com/httpwg/http-core/issues/740>) | ||||
| * In Section 3.3, clarify duplexing semantics | ||||
| (<https://github.com/httpwg/http-core/issues/741>) | ||||
| * In Section 3.3, explain the implications of statelessness more | ||||
| clearly (<https://github.com/httpwg/http-core/issues/743>) | ||||
| * In Section 8.6, be more explicit about invalid and incorrect | ||||
| values (<https://github.com/httpwg/http-core/issues/748> and | ||||
| <https://github.com/httpwg/http-core/issues/749>) | ||||
| * Move discussion of statelessness from Section 3.7 to Section 3.3 | ||||
| (<https://github.com/httpwg/http-core/issues/753>) | ||||
| * In Section 15.2.2, clarify that the upgraded protocol is in effect | ||||
| after the 101 response (<https://github.com/httpwg/http-core/ | ||||
| issues/776>) | ||||
| * In Section 9.3.6, state that data received after the headers of a | ||||
| CONNECT message is version-specific (<https://github.com/httpwg/ | ||||
| http-core/issues/780>) | ||||
| * In Section 4.2.3, clarify how normalization works, and align with | ||||
| RF3986 (<https://github.com/httpwg/http-core/issues/788>) | ||||
| * In Section 10.1.5, note that the Trailer field can be used to | ||||
| discover deleted trailers (<https://github.com/httpwg/http-core/ | ||||
| issues/793>) | ||||
| * Throughout, remove unneeded normative references to [Messaging] | ||||
| (<https://github.com/httpwg/http-core/issues/795>) | ||||
| * In Section 10.1.4, explicitly require listing in Connection | ||||
| (<https://github.com/httpwg/http-core/issues/809>) | ||||
| 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, RFC 2616, | contributions that went into RFC 1945, RFC 2068, RFC 2145, RFC 2616, | |||
| and RFC 2818, including substantial contributions made by the | and RFC 2818, including substantial contributions made by the current | |||
| previous authors, editors, and Working Group Chairs: Tim Berners-Lee, | and previous editors of HTTP: Tim Berners-Lee, Jean-François Groff, | |||
| Jean-François Groff, Ari Luotonen, Roy T. Fielding, Henrik Frystyk | Ari Luotonen, Henrik Frystyk Nielsen, Jim Gettys, Jeffrey C. Mogul, | |||
| Nielsen, Jim Gettys, Jeffrey C. Mogul, Larry Masinter, Paul J. | Larry Masinter, Paul J. Leach, Eric Rescorla, and Yves Lafon. | |||
| Leach, Eric Rescorla, and Yves Lafon. | ||||
| In addition, this document has reincorporated the HTTP Authentication | In addition, this document has reincorporated the HTTP Authentication | |||
| Framework, previously defined in RFC 7235 and RFC 2617. We thank | Framework, previously defined in RFC 7235 and RFC 2617. We thank | |||
| John Franks, Phillip M. Hallam-Baker, Jeffery L. Hostetler, Scott | John Franks, Phillip M. Hallam-Baker, Jeffery L. Hostetler, Scott | |||
| D. Lawrence, Paul J. Leach, Ari Luotonen, and Lawrence C. Stewart | D. Lawrence, Paul J. Leach, Ari Luotonen, and Lawrence C. Stewart | |||
| for their work on that specification. See Section 6 of [RFC2617] for | for their work on that specification. See Section 6 of [RFC2617] for | |||
| further acknowledgements. | further acknowledgements. | |||
| Since 2014, the following contributors have helped improve the HTTP | Since 2014, the following contributors have helped improve the HTTP | |||
| specification by reporting bugs, asking smart questions, drafting or | specification by reporting bugs, asking smart questions, drafting or | |||
| skipping to change at page 226, line 26 ¶ | skipping to change at page 231, line 45 ¶ | |||
| Alan Egerton, Alex Rousskov, Amichai Rothman, Amos Jeffries, Anders | Alan Egerton, Alex Rousskov, Amichai Rothman, Amos Jeffries, Anders | |||
| Kaseorg, Andreas Gebhardt, Anne van Kesteren, Armin Abfalterer, Aron | Kaseorg, Andreas Gebhardt, Anne van Kesteren, Armin Abfalterer, Aron | |||
| Duby, Asanka Herath, Asbjørn Ulsberg, Attila Gulyas, Austin Wright, | Duby, Asanka Herath, Asbjørn Ulsberg, Attila Gulyas, Austin Wright, | |||
| Barry Pollard, Ben Burkert, Björn Höhrmann, Brad Fitzpatrick, Chris | Barry Pollard, Ben Burkert, Björn Höhrmann, Brad Fitzpatrick, Chris | |||
| Pacejo, Colin Bendell, Cory Benfield, Cory Nelson, Daisuke Miyakawa, | Pacejo, Colin Bendell, Cory Benfield, Cory Nelson, Daisuke Miyakawa, | |||
| Daniel Stenberg, Danil Suits, David Benjamin, David Matson, David | Daniel Stenberg, Danil Suits, David Benjamin, David Matson, David | |||
| Schinazi, Дилян Палаузов (Dilyan Palauzov), Eric Anderson, Eric | Schinazi, Дилян Палаузов (Dilyan Palauzov), Eric Anderson, Eric | |||
| Rescorla, Erwin Pe, Etan Kissling, Evert Pot, Evgeny Vrublevsky, | Rescorla, Erwin Pe, Etan Kissling, Evert Pot, Evgeny Vrublevsky, | |||
| Florian Best, Igor Lubashev, James Callahan, James Peach, Jeffrey | Florian Best, Igor Lubashev, James Callahan, James Peach, Jeffrey | |||
| Yasskin, Kalin Gyokov, Kannan Goundan, 奥 一穂 (Kazuho Oku), Ken | Yasskin, Kalin Gyokov, Kannan Goundan, 奥 一穂 (Kazuho Oku), Ken | |||
| Murchison, Lucas Pardue, Martin Dürst, Martin Thomson, Martynas | Murchison, Krzysztof Maczyński, Lucas Pardue, Martin Dürst, Martin | |||
| Jusevičius, Matt Menke, Matthias Pigulla, Michael Osipov, Mike | Thomson, Martynas Jusevičius, Matt Menke, Matthias Pigulla, Michael | |||
| Bishop, Mike Pennisi, Mike West, Nicholas Hurley, Nikita Piskunov, | Osipov, Mike Bishop, Mike Pennisi, Mike Taylor, Mike West, Nathaniel | |||
| Patrick McManus, Piotr Sikora, Poul-Henning Kamp, Rick van Rein, | J. Smith, Nicholas Hurley, Nikita Piskunov, Patrick McManus, Piotr | |||
| Roberto Polli, Semyon Kholodnov, Simon Pieters, Simon Schüppel, Todd | Sikora, Poul-Henning Kamp, Rick van Rein, Roberto Polli, Semyon | |||
| Greer, Tommy Pauly, Vasiliy Faronov, Vladimir Lashchev, Wenbo Zhu, | Kholodnov, Simon Pieters, Simon Schüppel, Todd Greer, Tommy Pauly, | |||
| William A. Rowe Jr., Willy Tarreau, Xingwei Liu, and Yishuai Li. | Vasiliy Faronov, Vladimir Lashchev, Wenbo Zhu, William A. Rowe Jr., | |||
| Willy Tarreau, Xingwei Liu, and Yishuai Li. | ||||
| See Section 10 of [RFC7230] for further acknowledgements from prior | See Section 10 of [RFC7230] for further acknowledgements from prior | |||
| revisions. | revisions. | |||
| Authors' Addresses | Authors' Addresses | |||
| Roy T. Fielding (editor) | Roy T. Fielding (editor) | |||
| Adobe | Adobe | |||
| 345 Park Ave | 345 Park Ave | |||
| San Jose, CA 95110 | San Jose, CA 95110 | |||
| End of changes. 544 change blocks. | ||||
| 1481 lines changed or deleted | 1799 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||