| draft-ietf-httpbis-semantics-17.txt | draft-ietf-httpbis-semantics-18.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: 27 January 2022 26 July 2021 | Expires: 19 February 2022 18 August 2021 | |||
| HTTP Semantics | HTTP Semantics | |||
| draft-ietf-httpbis-semantics-17 | draft-ietf-httpbis-semantics-18 | |||
| 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 40 ¶ | skipping to change at page 1, line 40 ¶ | |||
| 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.18. | The changes in this draft are summarized in Appendix C.19. | |||
| 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 27 January 2022. | This Internet-Draft will expire on 19 February 2022. | |||
| 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 49 ¶ | skipping to change at page 2, line 49 ¶ | |||
| 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 . . . . . . . . . . . . . . . . . . 10 | |||
| 1.3. Core Semantics . . . . . . . . . . . . . . . . . . . . . 11 | 1.3. Core Semantics . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 1.4. Specifications Obsoleted by this Document . . . . . . . . 12 | 1.4. Specifications Obsoleted by this Document . . . . . . . . 11 | |||
| 2. Conformance . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 2. Conformance . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 2.1. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 12 | 2.1. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 2.2. Requirements Notation . . . . . . . . . . . . . . . . . . 13 | 2.2. Requirements Notation . . . . . . . . . . . . . . . . . . 13 | |||
| 2.3. Length Requirements . . . . . . . . . . . . . . . . . . . 14 | 2.3. Length Requirements . . . . . . . . . . . . . . . . . . . 14 | |||
| 2.4. Error Handling . . . . . . . . . . . . . . . . . . . . . 15 | 2.4. Error Handling . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 2.5. Protocol Version . . . . . . . . . . . . . . . . . . . . 15 | 2.5. Protocol Version . . . . . . . . . . . . . . . . . . . . 15 | |||
| 3. Terminology and Core Concepts . . . . . . . . . . . . . . . . 16 | 3. Terminology and Core Concepts . . . . . . . . . . . . . . . . 16 | |||
| 3.1. Resources . . . . . . . . . . . . . . . . . . . . . . . . 16 | 3.1. Resources . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 3.2. Representations . . . . . . . . . . . . . . . . . . . . . 17 | 3.2. Representations . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 3.3. Connections, Clients and Servers . . . . . . . . . . . . 17 | 3.3. Connections, Clients and Servers . . . . . . . . . . . . 17 | |||
| skipping to change at page 3, line 31 ¶ | skipping to change at page 3, line 31 ¶ | |||
| 4.2.2. https URI Scheme . . . . . . . . . . . . . . . . . . 25 | 4.2.2. https URI Scheme . . . . . . . . . . . . . . . . . . 25 | |||
| 4.2.3. http(s) Normalization and Comparison . . . . . . . . 26 | 4.2.3. http(s) Normalization and Comparison . . . . . . . . 26 | |||
| 4.2.4. Deprecation of userinfo in http(s) URIs . . . . . . . 27 | 4.2.4. Deprecation of userinfo in http(s) URIs . . . . . . . 27 | |||
| 4.2.5. http(s) References with Fragment Identifiers . . . . 28 | 4.2.5. http(s) References with Fragment Identifiers . . . . 28 | |||
| 4.3. Authoritative Access . . . . . . . . . . . . . . . . . . 28 | 4.3. Authoritative Access . . . . . . . . . . . . . . . . . . 28 | |||
| 4.3.1. URI Origin . . . . . . . . . . . . . . . . . . . . . 28 | 4.3.1. URI Origin . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 4.3.2. http origins . . . . . . . . . . . . . . . . . . . . 29 | 4.3.2. http origins . . . . . . . . . . . . . . . . . . . . 29 | |||
| 4.3.3. https origins . . . . . . . . . . . . . . . . . . . . 30 | 4.3.3. https origins . . . . . . . . . . . . . . . . . . . . 30 | |||
| 4.3.4. https certificate verification . . . . . . . . . . . 31 | 4.3.4. https certificate verification . . . . . . . . . . . 31 | |||
| 4.3.5. IP-ID reference identity . . . . . . . . . . . . . . 32 | 4.3.5. IP-ID reference identity . . . . . . . . . . . . . . 32 | |||
| 5. Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 | 5. Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 5.1. Field Names . . . . . . . . . . . . . . . . . . . . . . . 33 | 5.1. Field Names . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 5.2. Field Lines and Combined Field Value . . . . . . . . . . 34 | 5.2. Field Lines and Combined Field Value . . . . . . . . . . 33 | |||
| 5.3. Field Order . . . . . . . . . . . . . . . . . . . . . . . 34 | 5.3. Field Order . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
| 5.4. Field Limits . . . . . . . . . . . . . . . . . . . . . . 35 | 5.4. Field Limits . . . . . . . . . . . . . . . . . . . . . . 35 | |||
| 5.5. Field Values . . . . . . . . . . . . . . . . . . . . . . 35 | 5.5. Field Values . . . . . . . . . . . . . . . . . . . . . . 35 | |||
| 5.6. Common Rules for Defining Field Values . . . . . . . . . 37 | 5.6. Common Rules for Defining Field Values . . . . . . . . . 37 | |||
| 5.6.1. Lists (#rule ABNF Extension) . . . . . . . . . . . . 37 | 5.6.1. Lists (#rule ABNF Extension) . . . . . . . . . . . . 37 | |||
| 5.6.1.1. Sender Requirements . . . . . . . . . . . . . . . 38 | 5.6.1.1. Sender Requirements . . . . . . . . . . . . . . . 37 | |||
| 5.6.1.2. Recipient Requirements . . . . . . . . . . . . . 38 | 5.6.1.2. Recipient Requirements . . . . . . . . . . . . . 38 | |||
| 5.6.2. Tokens . . . . . . . . . . . . . . . . . . . . . . . 39 | 5.6.2. Tokens . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 5.6.3. Whitespace . . . . . . . . . . . . . . . . . . . . . 39 | 5.6.3. Whitespace . . . . . . . . . . . . . . . . . . . . . 39 | |||
| 5.6.4. Quoted Strings . . . . . . . . . . . . . . . . . . . 40 | 5.6.4. Quoted Strings . . . . . . . . . . . . . . . . . . . 39 | |||
| 5.6.5. Comments . . . . . . . . . . . . . . . . . . . . . . 40 | 5.6.5. Comments . . . . . . . . . . . . . . . . . . . . . . 40 | |||
| 5.6.6. Parameters . . . . . . . . . . . . . . . . . . . . . 41 | 5.6.6. Parameters . . . . . . . . . . . . . . . . . . . . . 40 | |||
| 5.6.7. Date/Time Formats . . . . . . . . . . . . . . . . . . 41 | 5.6.7. Date/Time Formats . . . . . . . . . . . . . . . . . . 41 | |||
| 6. Message Abstraction . . . . . . . . . . . . . . . . . . . . . 43 | 6. Message Abstraction . . . . . . . . . . . . . . . . . . . . . 43 | |||
| 6.1. Framing and Completeness . . . . . . . . . . . . . . . . 44 | 6.1. Framing and Completeness . . . . . . . . . . . . . . . . 44 | |||
| 6.2. Control Data . . . . . . . . . . . . . . . . . . . . . . 45 | 6.2. Control Data . . . . . . . . . . . . . . . . . . . . . . 45 | |||
| 6.3. Header Fields . . . . . . . . . . . . . . . . . . . . . . 46 | 6.3. Header Fields . . . . . . . . . . . . . . . . . . . . . . 46 | |||
| 6.4. Content . . . . . . . . . . . . . . . . . . . . . . . . . 46 | 6.4. Content . . . . . . . . . . . . . . . . . . . . . . . . . 46 | |||
| 6.4.1. Content Semantics . . . . . . . . . . . . . . . . . . 47 | 6.4.1. Content Semantics . . . . . . . . . . . . . . . . . . 46 | |||
| 6.4.2. Identifying Content . . . . . . . . . . . . . . . . . 48 | 6.4.2. Identifying Content . . . . . . . . . . . . . . . . . 47 | |||
| 6.5. Trailer Fields . . . . . . . . . . . . . . . . . . . . . 49 | 6.5. Trailer Fields . . . . . . . . . . . . . . . . . . . . . 49 | |||
| 6.5.1. Limitations on use of Trailers . . . . . . . . . . . 49 | 6.5.1. Limitations on use of Trailers . . . . . . . . . . . 49 | |||
| 6.5.2. Processing Trailer Fields . . . . . . . . . . . . . . 50 | 6.5.2. Processing Trailer Fields . . . . . . . . . . . . . . 50 | |||
| 7. Routing HTTP Messages . . . . . . . . . . . . . . . . . . . . 51 | 6.6. Message Metadata . . . . . . . . . . . . . . . . . . . . 50 | |||
| 7.1. Determining the Target Resource . . . . . . . . . . . . . 51 | 6.6.1. Date . . . . . . . . . . . . . . . . . . . . . . . . 51 | |||
| 7.2. Host and :authority . . . . . . . . . . . . . . . . . . . 52 | 6.6.2. Trailer . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
| 7.3. Routing Inbound Requests . . . . . . . . . . . . . . . . 52 | 7. Routing HTTP Messages . . . . . . . . . . . . . . . . . . . . 52 | |||
| 7.3.1. To a Cache . . . . . . . . . . . . . . . . . . . . . 52 | 7.1. Determining the Target Resource . . . . . . . . . . . . . 52 | |||
| 7.3.2. To a Proxy . . . . . . . . . . . . . . . . . . . . . 53 | 7.2. Host and :authority . . . . . . . . . . . . . . . . . . . 53 | |||
| 7.3.3. To the Origin . . . . . . . . . . . . . . . . . . . . 53 | 7.3. Routing Inbound Requests . . . . . . . . . . . . . . . . 54 | |||
| 7.4. Rejecting Misdirected Requests . . . . . . . . . . . . . 53 | 7.3.1. To a Cache . . . . . . . . . . . . . . . . . . . . . 54 | |||
| 7.5. Response Correlation . . . . . . . . . . . . . . . . . . 54 | 7.3.2. To a Proxy . . . . . . . . . . . . . . . . . . . . . 54 | |||
| 7.6. Message Forwarding . . . . . . . . . . . . . . . . . . . 54 | 7.3.3. To the Origin . . . . . . . . . . . . . . . . . . . . 54 | |||
| 7.6.1. Connection . . . . . . . . . . . . . . . . . . . . . 55 | 7.4. Rejecting Misdirected Requests . . . . . . . . . . . . . 55 | |||
| 7.6.2. Max-Forwards . . . . . . . . . . . . . . . . . . . . 56 | 7.5. Response Correlation . . . . . . . . . . . . . . . . . . 55 | |||
| 7.6.3. Via . . . . . . . . . . . . . . . . . . . . . . . . . 57 | 7.6. Message Forwarding . . . . . . . . . . . . . . . . . . . 56 | |||
| 7.7. Message Transformations . . . . . . . . . . . . . . . . . 59 | 7.6.1. Connection . . . . . . . . . . . . . . . . . . . . . 56 | |||
| 7.8. Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . 60 | 7.6.2. Max-Forwards . . . . . . . . . . . . . . . . . . . . 58 | |||
| 8. Representation Data and Metadata . . . . . . . . . . . . . . 62 | 7.6.3. Via . . . . . . . . . . . . . . . . . . . . . . . . . 59 | |||
| 8.1. Representation Data . . . . . . . . . . . . . . . . . . . 62 | 7.7. Message Transformations . . . . . . . . . . . . . . . . . 60 | |||
| 8.2. Representation Metadata . . . . . . . . . . . . . . . . . 62 | 7.8. Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . 61 | |||
| 8.3. Content-Type . . . . . . . . . . . . . . . . . . . . . . 63 | 8. Representation Data and Metadata . . . . . . . . . . . . . . 64 | |||
| 8.3.1. Media Type . . . . . . . . . . . . . . . . . . . . . 64 | 8.1. Representation Data . . . . . . . . . . . . . . . . . . . 64 | |||
| 8.3.2. Charset . . . . . . . . . . . . . . . . . . . . . . . 64 | 8.2. Representation Metadata . . . . . . . . . . . . . . . . . 64 | |||
| 8.3.3. Multipart Types . . . . . . . . . . . . . . . . . . . 65 | 8.3. Content-Type . . . . . . . . . . . . . . . . . . . . . . 64 | |||
| 8.4. Content-Encoding . . . . . . . . . . . . . . . . . . . . 65 | 8.3.1. Media Type . . . . . . . . . . . . . . . . . . . . . 65 | |||
| 8.4.1. Content Codings . . . . . . . . . . . . . . . . . . . 66 | 8.3.2. Charset . . . . . . . . . . . . . . . . . . . . . . . 66 | |||
| 8.4.1.1. Compress Coding . . . . . . . . . . . . . . . . . 67 | 8.3.3. Multipart Types . . . . . . . . . . . . . . . . . . . 66 | |||
| 8.4.1.2. Deflate Coding . . . . . . . . . . . . . . . . . 67 | 8.4. Content-Encoding . . . . . . . . . . . . . . . . . . . . 67 | |||
| 8.4.1.3. Gzip Coding . . . . . . . . . . . . . . . . . . . 67 | 8.4.1. Content Codings . . . . . . . . . . . . . . . . . . . 68 | |||
| 8.5. Content-Language . . . . . . . . . . . . . . . . . . . . 67 | 8.4.1.1. Compress Coding . . . . . . . . . . . . . . . . . 68 | |||
| 8.5.1. Language Tags . . . . . . . . . . . . . . . . . . . . 68 | 8.4.1.2. Deflate Coding . . . . . . . . . . . . . . . . . 68 | |||
| 8.6. Content-Length . . . . . . . . . . . . . . . . . . . . . 69 | 8.4.1.3. Gzip Coding . . . . . . . . . . . . . . . . . . . 69 | |||
| 8.7. Content-Location . . . . . . . . . . . . . . . . . . . . 70 | 8.5. Content-Language . . . . . . . . . . . . . . . . . . . . 69 | |||
| 8.8. Validator Fields . . . . . . . . . . . . . . . . . . . . 72 | 8.5.1. Language Tags . . . . . . . . . . . . . . . . . . . . 70 | |||
| 8.8.1. Weak versus Strong . . . . . . . . . . . . . . . . . 73 | 8.6. Content-Length . . . . . . . . . . . . . . . . . . . . . 70 | |||
| 8.8.2. Last-Modified . . . . . . . . . . . . . . . . . . . . 74 | 8.7. Content-Location . . . . . . . . . . . . . . . . . . . . 72 | |||
| 8.8.2.1. Generation . . . . . . . . . . . . . . . . . . . 75 | 8.8. Validator Fields . . . . . . . . . . . . . . . . . . . . 74 | |||
| 8.8.2.2. Comparison . . . . . . . . . . . . . . . . . . . 75 | 8.8.1. Weak versus Strong . . . . . . . . . . . . . . . . . 74 | |||
| 8.8.3. ETag . . . . . . . . . . . . . . . . . . . . . . . . 76 | 8.8.2. Last-Modified . . . . . . . . . . . . . . . . . . . . 76 | |||
| 8.8.3.1. Generation . . . . . . . . . . . . . . . . . . . 77 | 8.8.2.1. Generation . . . . . . . . . . . . . . . . . . . 76 | |||
| 8.8.3.2. Comparison . . . . . . . . . . . . . . . . . . . 78 | 8.8.2.2. Comparison . . . . . . . . . . . . . . . . . . . 77 | |||
| 8.8.3. ETag . . . . . . . . . . . . . . . . . . . . . . . . 78 | ||||
| 8.8.3.1. Generation . . . . . . . . . . . . . . . . . . . 79 | ||||
| 8.8.3.2. Comparison . . . . . . . . . . . . . . . . . . . 80 | ||||
| 8.8.3.3. Example: Entity-Tags Varying on Content-Negotiated | 8.8.3.3. Example: Entity-Tags Varying on Content-Negotiated | |||
| Resources . . . . . . . . . . . . . . . . . . . . . 78 | Resources . . . . . . . . . . . . . . . . . . . . . 80 | |||
| 8.8.4. When to Use Entity-Tags and Last-Modified Dates . . . 79 | 9. Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 | |||
| 9. Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 | 9.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 81 | |||
| 9.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 80 | 9.2. Common Method Properties . . . . . . . . . . . . . . . . 84 | |||
| 9.2. Common Method Properties . . . . . . . . . . . . . . . . 83 | 9.2.1. Safe Methods . . . . . . . . . . . . . . . . . . . . 84 | |||
| 9.2.1. Safe Methods . . . . . . . . . . . . . . . . . . . . 83 | 9.2.2. Idempotent Methods . . . . . . . . . . . . . . . . . 85 | |||
| 9.2.2. Idempotent Methods . . . . . . . . . . . . . . . . . 84 | 9.2.3. Methods and Caching . . . . . . . . . . . . . . . . . 86 | |||
| 9.2.3. Methods and Caching . . . . . . . . . . . . . . . . . 85 | 9.3. Method Definitions . . . . . . . . . . . . . . . . . . . 86 | |||
| 9.3. Method Definitions . . . . . . . . . . . . . . . . . . . 85 | 9.3.1. GET . . . . . . . . . . . . . . . . . . . . . . . . . 86 | |||
| 9.3.1. GET . . . . . . . . . . . . . . . . . . . . . . . . . 85 | 9.3.2. HEAD . . . . . . . . . . . . . . . . . . . . . . . . 87 | |||
| 9.3.2. HEAD . . . . . . . . . . . . . . . . . . . . . . . . 86 | 9.3.3. POST . . . . . . . . . . . . . . . . . . . . . . . . 88 | |||
| 9.3.3. POST . . . . . . . . . . . . . . . . . . . . . . . . 87 | 9.3.4. PUT . . . . . . . . . . . . . . . . . . . . . . . . . 89 | |||
| 9.3.4. PUT . . . . . . . . . . . . . . . . . . . . . . . . . 88 | 9.3.5. DELETE . . . . . . . . . . . . . . . . . . . . . . . 92 | |||
| 9.3.5. DELETE . . . . . . . . . . . . . . . . . . . . . . . 91 | 9.3.6. CONNECT . . . . . . . . . . . . . . . . . . . . . . . 94 | |||
| 9.3.6. CONNECT . . . . . . . . . . . . . . . . . . . . . . . 93 | 9.3.7. OPTIONS . . . . . . . . . . . . . . . . . . . . . . . 95 | |||
| 9.3.7. OPTIONS . . . . . . . . . . . . . . . . . . . . . . . 94 | 9.3.8. TRACE . . . . . . . . . . . . . . . . . . . . . . . . 96 | |||
| 9.3.8. TRACE . . . . . . . . . . . . . . . . . . . . . . . . 95 | 10. Message Context . . . . . . . . . . . . . . . . . . . . . . . 97 | |||
| 10. Message Context . . . . . . . . . . . . . . . . . . . . . . . 96 | 10.1. Request Context Fields . . . . . . . . . . . . . . . . . 97 | |||
| 10.1. Request Context Fields . . . . . . . . . . . . . . . . . 96 | 10.1.1. Expect . . . . . . . . . . . . . . . . . . . . . . . 97 | |||
| 10.1.1. Expect . . . . . . . . . . . . . . . . . . . . . . . 96 | 10.1.2. From . . . . . . . . . . . . . . . . . . . . . . . . 99 | |||
| 10.1.2. From . . . . . . . . . . . . . . . . . . . . . . . . 98 | 10.1.3. Referer . . . . . . . . . . . . . . . . . . . . . . 100 | |||
| 10.1.3. Referer . . . . . . . . . . . . . . . . . . . . . . 99 | 10.1.4. TE . . . . . . . . . . . . . . . . . . . . . . . . . 101 | |||
| 10.1.4. TE . . . . . . . . . . . . . . . . . . . . . . . . . 100 | 10.1.5. User-Agent . . . . . . . . . . . . . . . . . . . . . 102 | |||
| 10.1.5. Trailer . . . . . . . . . . . . . . . . . . . . . . 101 | 10.2. Response Context Fields . . . . . . . . . . . . . . . . 103 | |||
| 10.1.6. User-Agent . . . . . . . . . . . . . . . . . . . . . 101 | 10.2.1. Allow . . . . . . . . . . . . . . . . . . . . . . . 103 | |||
| 10.2. Response Context Fields . . . . . . . . . . . . . . . . 102 | 10.2.2. Location . . . . . . . . . . . . . . . . . . . . . . 104 | |||
| 10.2.1. Allow . . . . . . . . . . . . . . . . . . . . . . . 102 | 10.2.3. Retry-After . . . . . . . . . . . . . . . . . . . . 105 | |||
| 10.2.2. Date . . . . . . . . . . . . . . . . . . . . . . . . 103 | 10.2.4. Server . . . . . . . . . . . . . . . . . . . . . . . 106 | |||
| 10.2.3. Location . . . . . . . . . . . . . . . . . . . . . . 104 | ||||
| 10.2.4. Retry-After . . . . . . . . . . . . . . . . . . . . 105 | ||||
| 10.2.5. Server . . . . . . . . . . . . . . . . . . . . . . . 106 | ||||
| 11. HTTP Authentication . . . . . . . . . . . . . . . . . . . . . 106 | 11. HTTP Authentication . . . . . . . . . . . . . . . . . . . . . 106 | |||
| 11.1. Authentication Scheme . . . . . . . . . . . . . . . . . 106 | 11.1. Authentication Scheme . . . . . . . . . . . . . . . . . 106 | |||
| 11.2. Authentication Parameters . . . . . . . . . . . . . . . 107 | 11.2. Authentication Parameters . . . . . . . . . . . . . . . 107 | |||
| 11.3. Challenge and Response . . . . . . . . . . . . . . . . . 107 | 11.3. Challenge and Response . . . . . . . . . . . . . . . . . 107 | |||
| 11.4. Credentials . . . . . . . . . . . . . . . . . . . . . . 108 | 11.4. Credentials . . . . . . . . . . . . . . . . . . . . . . 108 | |||
| 11.5. Establishing a Protection Space (Realm) . . . . . . . . 109 | 11.5. Establishing a Protection Space (Realm) . . . . . . . . 109 | |||
| 11.6. Authenticating Users to Origin Servers . . . . . . . . . 110 | 11.6. Authenticating Users to Origin Servers . . . . . . . . . 110 | |||
| 11.6.1. WWW-Authenticate . . . . . . . . . . . . . . . . . . 110 | 11.6.1. WWW-Authenticate . . . . . . . . . . . . . . . . . . 110 | |||
| 11.6.2. Authorization . . . . . . . . . . . . . . . . . . . 111 | 11.6.2. Authorization . . . . . . . . . . . . . . . . . . . 111 | |||
| 11.6.3. Authentication-Info . . . . . . . . . . . . . . . . 111 | 11.6.3. Authentication-Info . . . . . . . . . . . . . . . . 111 | |||
| 11.7. Authenticating Clients to Proxies . . . . . . . . . . . 112 | 11.7. Authenticating Clients to Proxies . . . . . . . . . . . 112 | |||
| 11.7.1. Proxy-Authenticate . . . . . . . . . . . . . . . . . 112 | 11.7.1. Proxy-Authenticate . . . . . . . . . . . . . . . . . 112 | |||
| 11.7.2. Proxy-Authorization . . . . . . . . . . . . . . . . 112 | 11.7.2. Proxy-Authorization . . . . . . . . . . . . . . . . 112 | |||
| 11.7.3. Proxy-Authentication-Info . . . . . . . . . . . . . 113 | 11.7.3. Proxy-Authentication-Info . . . . . . . . . . . . . 113 | |||
| 12. Content Negotiation . . . . . . . . . . . . . . . . . . . . . 113 | 12. Content Negotiation . . . . . . . . . . . . . . . . . . . . . 113 | |||
| 12.1. Proactive Negotiation . . . . . . . . . . . . . . . . . 114 | 12.1. Proactive Negotiation . . . . . . . . . . . . . . . . . 114 | |||
| 12.2. Reactive Negotiation . . . . . . . . . . . . . . . . . . 115 | 12.2. Reactive Negotiation . . . . . . . . . . . . . . . . . . 115 | |||
| 12.3. Request Content Negotiation . . . . . . . . . . . . . . 116 | 12.3. Request Content Negotiation . . . . . . . . . . . . . . 116 | |||
| 12.4. Content Negotiation Field Features . . . . . . . . . . . 116 | 12.4. Content Negotiation Field Features . . . . . . . . . . . 116 | |||
| 12.4.1. Absence . . . . . . . . . . . . . . . . . . . . . . 117 | 12.4.1. Absence . . . . . . . . . . . . . . . . . . . . . . 116 | |||
| 12.4.2. Quality Values . . . . . . . . . . . . . . . . . . . 117 | 12.4.2. Quality Values . . . . . . . . . . . . . . . . . . . 117 | |||
| 12.4.3. Wildcard Values . . . . . . . . . . . . . . . . . . 118 | 12.4.3. Wildcard Values . . . . . . . . . . . . . . . . . . 117 | |||
| 12.5. Content Negotiation Fields . . . . . . . . . . . . . . . 118 | 12.5. Content Negotiation Fields . . . . . . . . . . . . . . . 118 | |||
| 12.5.1. Accept . . . . . . . . . . . . . . . . . . . . . . . 118 | 12.5.1. Accept . . . . . . . . . . . . . . . . . . . . . . . 118 | |||
| 12.5.2. Accept-Charset . . . . . . . . . . . . . . . . . . . 120 | 12.5.2. Accept-Charset . . . . . . . . . . . . . . . . . . . 120 | |||
| 12.5.3. Accept-Encoding . . . . . . . . . . . . . . . . . . 121 | 12.5.3. Accept-Encoding . . . . . . . . . . . . . . . . . . 121 | |||
| 12.5.4. Accept-Language . . . . . . . . . . . . . . . . . . 123 | 12.5.4. Accept-Language . . . . . . . . . . . . . . . . . . 123 | |||
| 12.5.5. Vary . . . . . . . . . . . . . . . . . . . . . . . . 124 | 12.5.5. Vary . . . . . . . . . . . . . . . . . . . . . . . . 124 | |||
| 13. Conditional Requests . . . . . . . . . . . . . . . . . . . . 125 | 13. Conditional Requests . . . . . . . . . . . . . . . . . . . . 125 | |||
| 13.1. Preconditions . . . . . . . . . . . . . . . . . . . . . 126 | 13.1. Preconditions . . . . . . . . . . . . . . . . . . . . . 125 | |||
| 13.1.1. If-Match . . . . . . . . . . . . . . . . . . . . . . 126 | 13.1.1. If-Match . . . . . . . . . . . . . . . . . . . . . . 126 | |||
| 13.1.2. If-None-Match . . . . . . . . . . . . . . . . . . . 128 | 13.1.2. If-None-Match . . . . . . . . . . . . . . . . . . . 128 | |||
| 13.1.3. If-Modified-Since . . . . . . . . . . . . . . . . . 130 | 13.1.3. If-Modified-Since . . . . . . . . . . . . . . . . . 130 | |||
| 13.1.4. If-Unmodified-Since . . . . . . . . . . . . . . . . 131 | 13.1.4. If-Unmodified-Since . . . . . . . . . . . . . . . . 132 | |||
| 13.1.5. If-Range . . . . . . . . . . . . . . . . . . . . . . 133 | 13.1.5. If-Range . . . . . . . . . . . . . . . . . . . . . . 133 | |||
| 13.2. Evaluation of Preconditions . . . . . . . . . . . . . . 134 | 13.2. Evaluation of Preconditions . . . . . . . . . . . . . . 135 | |||
| 13.2.1. When to Evaluate . . . . . . . . . . . . . . . . . . 134 | 13.2.1. When to Evaluate . . . . . . . . . . . . . . . . . . 135 | |||
| 13.2.2. Precedence of Preconditions . . . . . . . . . . . . 135 | 13.2.2. Precedence of Preconditions . . . . . . . . . . . . 136 | |||
| 14. Range Requests . . . . . . . . . . . . . . . . . . . . . . . 137 | 14. Range Requests . . . . . . . . . . . . . . . . . . . . . . . 137 | |||
| 14.1. Range Units . . . . . . . . . . . . . . . . . . . . . . 137 | 14.1. Range Units . . . . . . . . . . . . . . . . . . . . . . 138 | |||
| 14.1.1. Range Specifiers . . . . . . . . . . . . . . . . . . 138 | 14.1.1. Range Specifiers . . . . . . . . . . . . . . . . . . 138 | |||
| 14.1.2. Byte Ranges . . . . . . . . . . . . . . . . . . . . 139 | 14.1.2. Byte Ranges . . . . . . . . . . . . . . . . . . . . 139 | |||
| 14.2. Range . . . . . . . . . . . . . . . . . . . . . . . . . 140 | 14.2. Range . . . . . . . . . . . . . . . . . . . . . . . . . 141 | |||
| 14.3. Accept-Ranges . . . . . . . . . . . . . . . . . . . . . 142 | 14.3. Accept-Ranges . . . . . . . . . . . . . . . . . . . . . 142 | |||
| 14.4. Content-Range . . . . . . . . . . . . . . . . . . . . . 143 | 14.4. Content-Range . . . . . . . . . . . . . . . . . . . . . 143 | |||
| 14.5. Partial PUT . . . . . . . . . . . . . . . . . . . . . . 145 | 14.5. Partial PUT . . . . . . . . . . . . . . . . . . . . . . 145 | |||
| 14.6. Media Type multipart/byteranges . . . . . . . . . . . . 145 | 14.6. Media Type multipart/byteranges . . . . . . . . . . . . 146 | |||
| 15. Status Codes . . . . . . . . . . . . . . . . . . . . . . . . 147 | 15. Status Codes . . . . . . . . . . . . . . . . . . . . . . . . 148 | |||
| 15.1. Overview of Status Codes . . . . . . . . . . . . . . . . 148 | 15.1. Overview of Status Codes . . . . . . . . . . . . . . . . 149 | |||
| 15.2. Informational 1xx . . . . . . . . . . . . . . . . . . . 149 | 15.2. Informational 1xx . . . . . . . . . . . . . . . . . . . 149 | |||
| 15.2.1. 100 Continue . . . . . . . . . . . . . . . . . . . . 149 | 15.2.1. 100 Continue . . . . . . . . . . . . . . . . . . . . 150 | |||
| 15.2.2. 101 Switching Protocols . . . . . . . . . . . . . . 149 | 15.2.2. 101 Switching Protocols . . . . . . . . . . . . . . 150 | |||
| 15.3. Successful 2xx . . . . . . . . . . . . . . . . . . . . . 150 | 15.3. Successful 2xx . . . . . . . . . . . . . . . . . . . . . 150 | |||
| 15.3.1. 200 OK . . . . . . . . . . . . . . . . . . . . . . . 150 | 15.3.1. 200 OK . . . . . . . . . . . . . . . . . . . . . . . 150 | |||
| 15.3.2. 201 Created . . . . . . . . . . . . . . . . . . . . 151 | 15.3.2. 201 Created . . . . . . . . . . . . . . . . . . . . 152 | |||
| 15.3.3. 202 Accepted . . . . . . . . . . . . . . . . . . . . 151 | 15.3.3. 202 Accepted . . . . . . . . . . . . . . . . . . . . 152 | |||
| 15.3.4. 203 Non-Authoritative Information . . . . . . . . . 151 | 15.3.4. 203 Non-Authoritative Information . . . . . . . . . 152 | |||
| 15.3.5. 204 No Content . . . . . . . . . . . . . . . . . . . 152 | 15.3.5. 204 No Content . . . . . . . . . . . . . . . . . . . 153 | |||
| 15.3.6. 205 Reset Content . . . . . . . . . . . . . . . . . 152 | 15.3.6. 205 Reset Content . . . . . . . . . . . . . . . . . 153 | |||
| 15.3.7. 206 Partial Content . . . . . . . . . . . . . . . . 153 | 15.3.7. 206 Partial Content . . . . . . . . . . . . . . . . 154 | |||
| 15.3.7.1. Single Part . . . . . . . . . . . . . . . . . . 154 | 15.3.7.1. Single Part . . . . . . . . . . . . . . . . . . 155 | |||
| 15.3.7.2. Multiple Parts . . . . . . . . . . . . . . . . . 154 | 15.3.7.2. Multiple Parts . . . . . . . . . . . . . . . . . 155 | |||
| 15.3.7.3. Combining Parts . . . . . . . . . . . . . . . . 156 | 15.3.7.3. Combining Parts . . . . . . . . . . . . . . . . 157 | |||
| 15.4. Redirection 3xx . . . . . . . . . . . . . . . . . . . . 156 | 15.4. Redirection 3xx . . . . . . . . . . . . . . . . . . . . 157 | |||
| 15.4.1. 300 Multiple Choices . . . . . . . . . . . . . . . . 159 | 15.4.1. 300 Multiple Choices . . . . . . . . . . . . . . . . 159 | |||
| 15.4.2. 301 Moved Permanently . . . . . . . . . . . . . . . 160 | 15.4.2. 301 Moved Permanently . . . . . . . . . . . . . . . 160 | |||
| 15.4.3. 302 Found . . . . . . . . . . . . . . . . . . . . . 160 | 15.4.3. 302 Found . . . . . . . . . . . . . . . . . . . . . 161 | |||
| 15.4.4. 303 See Other . . . . . . . . . . . . . . . . . . . 161 | 15.4.4. 303 See Other . . . . . . . . . . . . . . . . . . . 161 | |||
| 15.4.5. 304 Not Modified . . . . . . . . . . . . . . . . . . 161 | 15.4.5. 304 Not Modified . . . . . . . . . . . . . . . . . . 162 | |||
| 15.4.6. 305 Use Proxy . . . . . . . . . . . . . . . . . . . 162 | 15.4.6. 305 Use Proxy . . . . . . . . . . . . . . . . . . . 163 | |||
| 15.4.7. 306 (Unused) . . . . . . . . . . . . . . . . . . . . 162 | 15.4.7. 306 (Unused) . . . . . . . . . . . . . . . . . . . . 163 | |||
| 15.4.8. 307 Temporary Redirect . . . . . . . . . . . . . . . 162 | 15.4.8. 307 Temporary Redirect . . . . . . . . . . . . . . . 163 | |||
| 15.4.9. 308 Permanent Redirect . . . . . . . . . . . . . . . 163 | 15.4.9. 308 Permanent Redirect . . . . . . . . . . . . . . . 163 | |||
| 15.5. Client Error 4xx . . . . . . . . . . . . . . . . . . . . 163 | 15.5. Client Error 4xx . . . . . . . . . . . . . . . . . . . . 164 | |||
| 15.5.1. 400 Bad Request . . . . . . . . . . . . . . . . . . 163 | 15.5.1. 400 Bad Request . . . . . . . . . . . . . . . . . . 164 | |||
| 15.5.2. 401 Unauthorized . . . . . . . . . . . . . . . . . . 163 | 15.5.2. 401 Unauthorized . . . . . . . . . . . . . . . . . . 164 | |||
| 15.5.3. 402 Payment Required . . . . . . . . . . . . . . . . 164 | 15.5.3. 402 Payment Required . . . . . . . . . . . . . . . . 164 | |||
| 15.5.4. 403 Forbidden . . . . . . . . . . . . . . . . . . . 164 | 15.5.4. 403 Forbidden . . . . . . . . . . . . . . . . . . . 164 | |||
| 15.5.5. 404 Not Found . . . . . . . . . . . . . . . . . . . 164 | 15.5.5. 404 Not Found . . . . . . . . . . . . . . . . . . . 165 | |||
| 15.5.6. 405 Method Not Allowed . . . . . . . . . . . . . . . 165 | 15.5.6. 405 Method Not Allowed . . . . . . . . . . . . . . . 165 | |||
| 15.5.7. 406 Not Acceptable . . . . . . . . . . . . . . . . . 165 | 15.5.7. 406 Not Acceptable . . . . . . . . . . . . . . . . . 165 | |||
| 15.5.8. 407 Proxy Authentication Required . . . . . . . . . 165 | 15.5.8. 407 Proxy Authentication Required . . . . . . . . . 166 | |||
| 15.5.9. 408 Request Timeout . . . . . . . . . . . . . . . . 165 | 15.5.9. 408 Request Timeout . . . . . . . . . . . . . . . . 166 | |||
| 15.5.10. 409 Conflict . . . . . . . . . . . . . . . . . . . . 166 | 15.5.10. 409 Conflict . . . . . . . . . . . . . . . . . . . . 166 | |||
| 15.5.11. 410 Gone . . . . . . . . . . . . . . . . . . . . . . 166 | 15.5.11. 410 Gone . . . . . . . . . . . . . . . . . . . . . . 167 | |||
| 15.5.12. 411 Length Required . . . . . . . . . . . . . . . . 166 | 15.5.12. 411 Length Required . . . . . . . . . . . . . . . . 167 | |||
| 15.5.13. 412 Precondition Failed . . . . . . . . . . . . . . 167 | 15.5.13. 412 Precondition Failed . . . . . . . . . . . . . . 167 | |||
| 15.5.14. 413 Content Too Large . . . . . . . . . . . . . . . 167 | 15.5.14. 413 Content Too Large . . . . . . . . . . . . . . . 167 | |||
| 15.5.15. 414 URI Too Long . . . . . . . . . . . . . . . . . . 167 | 15.5.15. 414 URI Too Long . . . . . . . . . . . . . . . . . . 168 | |||
| 15.5.16. 415 Unsupported Media Type . . . . . . . . . . . . . 167 | 15.5.16. 415 Unsupported Media Type . . . . . . . . . . . . . 168 | |||
| 15.5.17. 416 Range Not Satisfiable . . . . . . . . . . . . . 168 | 15.5.17. 416 Range Not Satisfiable . . . . . . . . . . . . . 168 | |||
| 15.5.18. 417 Expectation Failed . . . . . . . . . . . . . . . 168 | 15.5.18. 417 Expectation Failed . . . . . . . . . . . . . . . 169 | |||
| 15.5.19. 418 (Unused) . . . . . . . . . . . . . . . . . . . . 169 | 15.5.19. 418 (Unused) . . . . . . . . . . . . . . . . . . . . 169 | |||
| 15.5.20. 421 Misdirected Request . . . . . . . . . . . . . . 169 | 15.5.20. 421 Misdirected Request . . . . . . . . . . . . . . 170 | |||
| 15.5.21. 422 Unprocessable Content . . . . . . . . . . . . . 169 | 15.5.21. 422 Unprocessable Content . . . . . . . . . . . . . 170 | |||
| 15.5.22. 426 Upgrade Required . . . . . . . . . . . . . . . . 169 | 15.5.22. 426 Upgrade Required . . . . . . . . . . . . . . . . 170 | |||
| 15.6. Server Error 5xx . . . . . . . . . . . . . . . . . . . . 170 | 15.6. Server Error 5xx . . . . . . . . . . . . . . . . . . . . 171 | |||
| 15.6.1. 500 Internal Server Error . . . . . . . . . . . . . 170 | 15.6.1. 500 Internal Server Error . . . . . . . . . . . . . 171 | |||
| 15.6.2. 501 Not Implemented . . . . . . . . . . . . . . . . 170 | 15.6.2. 501 Not Implemented . . . . . . . . . . . . . . . . 171 | |||
| 15.6.3. 502 Bad Gateway . . . . . . . . . . . . . . . . . . 170 | 15.6.3. 502 Bad Gateway . . . . . . . . . . . . . . . . . . 171 | |||
| 15.6.4. 503 Service Unavailable . . . . . . . . . . . . . . 171 | 15.6.4. 503 Service Unavailable . . . . . . . . . . . . . . 171 | |||
| 15.6.5. 504 Gateway Timeout . . . . . . . . . . . . . . . . 171 | 15.6.5. 504 Gateway Timeout . . . . . . . . . . . . . . . . 172 | |||
| 15.6.6. 505 HTTP Version Not Supported . . . . . . . . . . . 171 | 15.6.6. 505 HTTP Version Not Supported . . . . . . . . . . . 172 | |||
| 16. Extending HTTP . . . . . . . . . . . . . . . . . . . . . . . 171 | 16. Extending HTTP . . . . . . . . . . . . . . . . . . . . . . . 172 | |||
| 16.1. Method Extensibility . . . . . . . . . . . . . . . . . . 172 | 16.1. Method Extensibility . . . . . . . . . . . . . . . . . . 173 | |||
| 16.1.1. Method Registry . . . . . . . . . . . . . . . . . . 172 | 16.1.1. Method Registry . . . . . . . . . . . . . . . . . . 173 | |||
| 16.1.2. Considerations for New Methods . . . . . . . . . . . 172 | 16.1.2. Considerations for New Methods . . . . . . . . . . . 173 | |||
| 16.2. Status Code Extensibility . . . . . . . . . . . . . . . 173 | 16.2. Status Code Extensibility . . . . . . . . . . . . . . . 174 | |||
| 16.2.1. Status Code Registry . . . . . . . . . . . . . . . . 173 | 16.2.1. Status Code Registry . . . . . . . . . . . . . . . . 174 | |||
| 16.2.2. Considerations for New Status Codes . . . . . . . . 174 | 16.2.2. Considerations for New Status Codes . . . . . . . . 174 | |||
| 16.3. Field Extensibility . . . . . . . . . . . . . . . . . . 175 | 16.3. Field Extensibility . . . . . . . . . . . . . . . . . . 175 | |||
| 16.3.1. Field Name Registry . . . . . . . . . . . . . . . . 175 | 16.3.1. Field Name Registry . . . . . . . . . . . . . . . . 176 | |||
| 16.3.2. Considerations for New Fields . . . . . . . . . . . 176 | 16.3.2. Considerations for New Fields . . . . . . . . . . . 177 | |||
| 16.3.2.1. Considerations for New Field Names . . . . . . . 177 | 16.3.2.1. Considerations for New Field Names . . . . . . . 178 | |||
| 16.3.2.2. Considerations for New Field Values . . . . . . 178 | 16.3.2.2. Considerations for New Field Values . . . . . . 179 | |||
| 16.4. Authentication Scheme Extensibility . . . . . . . . . . 179 | ||||
| 16.4.1. Authentication Scheme Registry . . . . . . . . . . . 179 | 16.4. Authentication Scheme Extensibility . . . . . . . . . . 180 | |||
| 16.4.2. Considerations for New Authentication Schemes . . . 179 | 16.4.1. Authentication Scheme Registry . . . . . . . . . . . 180 | |||
| 16.4.2. Considerations for New Authentication Schemes . . . 180 | ||||
| 16.5. Range Unit Extensibility . . . . . . . . . . . . . . . . 181 | 16.5. Range Unit Extensibility . . . . . . . . . . . . . . . . 181 | |||
| 16.5.1. Range Unit Registry . . . . . . . . . . . . . . . . 181 | 16.5.1. Range Unit Registry . . . . . . . . . . . . . . . . 182 | |||
| 16.5.2. Considerations for New Range Units . . . . . . . . . 181 | 16.5.2. Considerations for New Range Units . . . . . . . . . 182 | |||
| 16.6. Content Coding Extensibility . . . . . . . . . . . . . . 181 | 16.6. Content Coding Extensibility . . . . . . . . . . . . . . 182 | |||
| 16.6.1. Content Coding Registry . . . . . . . . . . . . . . 181 | 16.6.1. Content Coding Registry . . . . . . . . . . . . . . 182 | |||
| 16.6.2. Considerations for New Content Codings . . . . . . . 182 | 16.6.2. Considerations for New Content Codings . . . . . . . 183 | |||
| 16.7. Upgrade Token Registry . . . . . . . . . . . . . . . . . 182 | 16.7. Upgrade Token Registry . . . . . . . . . . . . . . . . . 183 | |||
| 17. Security Considerations . . . . . . . . . . . . . . . . . . . 183 | 17. Security Considerations . . . . . . . . . . . . . . . . . . . 184 | |||
| 17.1. Establishing Authority . . . . . . . . . . . . . . . . . 183 | 17.1. Establishing Authority . . . . . . . . . . . . . . . . . 184 | |||
| 17.2. Risks of Intermediaries . . . . . . . . . . . . . . . . 184 | 17.2. Risks of Intermediaries . . . . . . . . . . . . . . . . 185 | |||
| 17.3. Attacks Based on File and Path Names . . . . . . . . . . 185 | 17.3. Attacks Based on File and Path Names . . . . . . . . . . 186 | |||
| 17.4. Attacks Based on Command, Code, or Query Injection . . . 185 | 17.4. Attacks Based on Command, Code, or Query Injection . . . 186 | |||
| 17.5. Attacks via Protocol Element Length . . . . . . . . . . 186 | 17.5. Attacks via Protocol Element Length . . . . . . . . . . 187 | |||
| 17.6. Attacks using Shared-dictionary Compression . . . . . . 187 | 17.6. Attacks using Shared-dictionary Compression . . . . . . 187 | |||
| 17.7. Disclosure of Personal Information . . . . . . . . . . . 187 | 17.7. Disclosure of Personal Information . . . . . . . . . . . 188 | |||
| 17.8. Privacy of Server Log Information . . . . . . . . . . . 187 | 17.8. Privacy of Server Log Information . . . . . . . . . . . 188 | |||
| 17.9. Disclosure of Sensitive Information in URIs . . . . . . 188 | 17.9. Disclosure of Sensitive Information in URIs . . . . . . 189 | |||
| 17.10. Application Handling of Field Names . . . . . . . . . . 188 | 17.10. Application Handling of Field Names . . . . . . . . . . 189 | |||
| 17.11. Disclosure of Fragment after Redirects . . . . . . . . . 189 | 17.11. Disclosure of Fragment after Redirects . . . . . . . . . 190 | |||
| 17.12. Disclosure of Product Information . . . . . . . . . . . 190 | 17.12. Disclosure of Product Information . . . . . . . . . . . 191 | |||
| 17.13. Browser Fingerprinting . . . . . . . . . . . . . . . . . 190 | 17.13. Browser Fingerprinting . . . . . . . . . . . . . . . . . 191 | |||
| 17.14. Validator Retention . . . . . . . . . . . . . . . . . . 191 | 17.14. Validator Retention . . . . . . . . . . . . . . . . . . 192 | |||
| 17.15. Denial-of-Service Attacks Using Range . . . . . . . . . 191 | 17.15. Denial-of-Service Attacks Using Range . . . . . . . . . 192 | |||
| 17.16. Authentication Considerations . . . . . . . . . . . . . 192 | 17.16. Authentication Considerations . . . . . . . . . . . . . 193 | |||
| 17.16.1. Confidentiality of Credentials . . . . . . . . . . 192 | 17.16.1. Confidentiality of Credentials . . . . . . . . . . 193 | |||
| 17.16.2. Credentials and Idle Clients . . . . . . . . . . . 192 | 17.16.2. Credentials and Idle Clients . . . . . . . . . . . 193 | |||
| 17.16.3. Protection Spaces . . . . . . . . . . . . . . . . . 193 | 17.16.3. Protection Spaces . . . . . . . . . . . . . . . . . 194 | |||
| 17.16.4. Additional Response Fields . . . . . . . . . . . . 193 | 17.16.4. Additional Response Fields . . . . . . . . . . . . 194 | |||
| 18. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 193 | 18. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 194 | |||
| 18.1. URI Scheme Registration . . . . . . . . . . . . . . . . 194 | 18.1. URI Scheme Registration . . . . . . . . . . . . . . . . 195 | |||
| 18.2. Method Registration . . . . . . . . . . . . . . . . . . 194 | 18.2. Method Registration . . . . . . . . . . . . . . . . . . 195 | |||
| 18.3. Status Code Registration . . . . . . . . . . . . . . . . 194 | 18.3. Status Code Registration . . . . . . . . . . . . . . . . 195 | |||
| 18.4. Field Name Registration . . . . . . . . . . . . . . . . 197 | 18.4. Field Name Registration . . . . . . . . . . . . . . . . 198 | |||
| 18.5. Authentication Scheme Registration . . . . . . . . . . . 199 | 18.5. Authentication Scheme Registration . . . . . . . . . . . 200 | |||
| 18.6. Content Coding Registration . . . . . . . . . . . . . . 200 | 18.6. Content Coding Registration . . . . . . . . . . . . . . 201 | |||
| 18.7. Range Unit Registration . . . . . . . . . . . . . . . . 200 | 18.7. Range Unit Registration . . . . . . . . . . . . . . . . 201 | |||
| 18.8. Media Type Registration . . . . . . . . . . . . . . . . 201 | 18.8. Media Type Registration . . . . . . . . . . . . . . . . 202 | |||
| 18.9. Port Registration . . . . . . . . . . . . . . . . . . . 201 | 18.9. Port Registration . . . . . . . . . . . . . . . . . . . 202 | |||
| 18.10. Upgrade Token Registration . . . . . . . . . . . . . . . 201 | 18.10. Upgrade Token Registration . . . . . . . . . . . . . . . 202 | |||
| 19. References . . . . . . . . . . . . . . . . . . . . . . . . . 201 | 19. References . . . . . . . . . . . . . . . . . . . . . . . . . 202 | |||
| 19.1. Normative References . . . . . . . . . . . . . . . . . . 201 | 19.1. Normative References . . . . . . . . . . . . . . . . . . 202 | |||
| 19.2. Informative References . . . . . . . . . . . . . . . . . 203 | 19.2. Informative References . . . . . . . . . . . . . . . . . 204 | |||
| Appendix A. Collected ABNF . . . . . . . . . . . . . . . . . . . 210 | Appendix A. Collected ABNF . . . . . . . . . . . . . . . . . . . 211 | |||
| Appendix B. Changes from previous RFCs . . . . . . . . . . . . . 214 | Appendix B. Changes from previous RFCs . . . . . . . . . . . . . 215 | |||
| B.1. Changes from RFC 2818 . . . . . . . . . . . . . . . . . . 214 | B.1. Changes from RFC 2818 . . . . . . . . . . . . . . . . . . 215 | |||
| B.2. Changes from RFC 7230 . . . . . . . . . . . . . . . . . . 214 | B.2. Changes from RFC 7230 . . . . . . . . . . . . . . . . . . 215 | |||
| B.3. Changes from RFC 7231 . . . . . . . . . . . . . . . . . . 215 | B.3. Changes from RFC 7231 . . . . . . . . . . . . . . . . . . 216 | |||
| B.4. Changes from RFC 7232 . . . . . . . . . . . . . . . . . . 217 | B.4. Changes from RFC 7232 . . . . . . . . . . . . . . . . . . 218 | |||
| B.5. Changes from RFC 7233 . . . . . . . . . . . . . . . . . . 218 | B.5. Changes from RFC 7233 . . . . . . . . . . . . . . . . . . 219 | |||
| B.6. Changes from RFC 7235 . . . . . . . . . . . . . . . . . . 218 | B.6. Changes from RFC 7235 . . . . . . . . . . . . . . . . . . 219 | |||
| B.7. Changes from RFC 7538 . . . . . . . . . . . . . . . . . . 218 | B.7. Changes from RFC 7538 . . . . . . . . . . . . . . . . . . 219 | |||
| B.8. Changes from RFC 7615 . . . . . . . . . . . . . . . . . . 218 | B.8. Changes from RFC 7615 . . . . . . . . . . . . . . . . . . 219 | |||
| B.9. Changes from RFC 7694 . . . . . . . . . . . . . . . . . . 218 | B.9. Changes from RFC 7694 . . . . . . . . . . . . . . . . . . 219 | |||
| Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 218 | Appendix C. Change Log . . . . . . . . . . . . . . . . . . . . . 219 | |||
| C.1. Between RFC723x and draft 00 . . . . . . . . . . . . . . 218 | C.1. Between RFC723x and draft 00 . . . . . . . . . . . . . . 219 | |||
| C.2. Since draft-ietf-httpbis-semantics-00 . . . . . . . . . . 219 | C.2. Since draft-ietf-httpbis-semantics-00 . . . . . . . . . . 220 | |||
| C.3. Since draft-ietf-httpbis-semantics-01 . . . . . . . . . . 219 | C.3. Since draft-ietf-httpbis-semantics-01 . . . . . . . . . . 220 | |||
| C.4. Since draft-ietf-httpbis-semantics-02 . . . . . . . . . . 221 | C.4. Since draft-ietf-httpbis-semantics-02 . . . . . . . . . . 222 | |||
| C.5. Since draft-ietf-httpbis-semantics-03 . . . . . . . . . . 222 | C.5. Since draft-ietf-httpbis-semantics-03 . . . . . . . . . . 223 | |||
| C.6. Since draft-ietf-httpbis-semantics-04 . . . . . . . . . . 222 | C.6. Since draft-ietf-httpbis-semantics-04 . . . . . . . . . . 223 | |||
| C.7. Since draft-ietf-httpbis-semantics-05 . . . . . . . . . . 223 | C.7. Since draft-ietf-httpbis-semantics-05 . . . . . . . . . . 224 | |||
| C.8. Since draft-ietf-httpbis-semantics-06 . . . . . . . . . . 224 | C.8. Since draft-ietf-httpbis-semantics-06 . . . . . . . . . . 225 | |||
| C.9. Since draft-ietf-httpbis-semantics-07 . . . . . . . . . . 226 | C.9. Since draft-ietf-httpbis-semantics-07 . . . . . . . . . . 227 | |||
| C.10. Since draft-ietf-httpbis-semantics-08 . . . . . . . . . . 227 | C.10. Since draft-ietf-httpbis-semantics-08 . . . . . . . . . . 228 | |||
| C.11. Since draft-ietf-httpbis-semantics-09 . . . . . . . . . . 228 | C.11. Since draft-ietf-httpbis-semantics-09 . . . . . . . . . . 229 | |||
| C.12. Since draft-ietf-httpbis-semantics-10 . . . . . . . . . . 228 | C.12. Since draft-ietf-httpbis-semantics-10 . . . . . . . . . . 229 | |||
| C.13. Since draft-ietf-httpbis-semantics-11 . . . . . . . . . . 230 | C.13. Since draft-ietf-httpbis-semantics-11 . . . . . . . . . . 231 | |||
| C.14. Since draft-ietf-httpbis-semantics-12 . . . . . . . . . . 230 | C.14. Since draft-ietf-httpbis-semantics-12 . . . . . . . . . . 231 | |||
| C.15. Since draft-ietf-httpbis-semantics-13 . . . . . . . . . . 232 | C.15. Since draft-ietf-httpbis-semantics-13 . . . . . . . . . . 233 | |||
| C.16. Since draft-ietf-httpbis-semantics-14 . . . . . . . . . . 233 | C.16. Since draft-ietf-httpbis-semantics-14 . . . . . . . . . . 234 | |||
| C.17. Since draft-ietf-httpbis-semantics-15 . . . . . . . . . . 235 | C.17. Since draft-ietf-httpbis-semantics-15 . . . . . . . . . . 236 | |||
| C.18. Since draft-ietf-httpbis-semantics-16 . . . . . . . . . . 236 | C.18. Since draft-ietf-httpbis-semantics-16 . . . . . . . . . . 237 | |||
| Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 236 | C.19. Since draft-ietf-httpbis-semantics-17 . . . . . . . . . . 237 | |||
| Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 | Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 239 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 248 | Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 251 | ||||
| 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 29, line 43 ¶ | skipping to change at page 29, line 43 ¶ | |||
| If the host identifier is provided as an IP address, the origin | If the host identifier is provided as an IP address, the origin | |||
| server is the listener (if any) on the indicated TCP port at that IP | server is the listener (if any) on the indicated TCP port at that IP | |||
| address. If host is a registered name, the registered name is an | address. If host is a registered name, the registered name is an | |||
| indirect identifier for use with a name resolution service, such as | indirect identifier for use with a name resolution service, such as | |||
| DNS, to find an address for an appropriate origin server. | DNS, to find an address for an appropriate origin server. | |||
| When an "http" URI is used within a context that calls for access to | When an "http" URI is used within a context that calls for access to | |||
| the indicated resource, a client MAY attempt access by resolving the | the indicated resource, a client MAY attempt access by resolving the | |||
| host identifier to an IP address, establishing a TCP connection to | host identifier to an IP address, establishing a TCP connection to | |||
| that address on the indicated port, and sending an HTTP request | that address on the indicated port, and sending over that connection | |||
| message to the server containing the URI's identifying data. | an HTTP request message containing a request target that matches the | |||
| client's target URI (Section 7.1). | ||||
| If the server responds to such a request with a non-interim HTTP | If the server responds to such a request with a non-interim HTTP | |||
| response message, as described in Section 15, then that response is | response message, as described in Section 15, then that response is | |||
| considered an authoritative answer to the client's request. | considered an authoritative answer to the client's request. | |||
| Note, however, that the above is not the only means for obtaining an | Note, however, that the above is not the only means for obtaining an | |||
| authoritative response, nor does it imply that an authoritative | authoritative response, nor does it imply that an authoritative | |||
| response is always necessary (see [CACHING]). For example, the Alt- | response is always necessary (see [CACHING]). For example, the Alt- | |||
| Svc header field [ALTSVC] allows an origin server to identify other | Svc header field [ALTSVC] allows an origin server to identify other | |||
| services that are also authoritative for that origin. Access to | services that are also authoritative for that origin. Access to | |||
| skipping to change at page 31, line 28 ¶ | skipping to change at page 31, line 21 ¶ | |||
| secured communication and thus cannot be trusted as definitive. | secured communication and thus cannot be trusted as definitive. | |||
| Hence, the HTTP communication might take place over any channel that | Hence, the HTTP communication might take place over any channel that | |||
| has been secured, as defined in Section 4.2.2, including protocols | has been secured, as defined in Section 4.2.2, including protocols | |||
| that don't use TCP. | that don't use TCP. | |||
| When an "https" URI is used within a context that calls for access to | When an "https" URI is used within a context that calls for access to | |||
| the indicated resource, a client MAY attempt access by resolving the | the indicated resource, a client MAY attempt access by resolving the | |||
| host identifier to an IP address, establishing a TCP connection to | host identifier to an IP address, establishing a TCP connection to | |||
| that address on the indicated port, securing the connection end-to- | that address on the indicated port, securing the connection end-to- | |||
| end by successfully initiating TLS over TCP with confidentiality and | end by successfully initiating TLS over TCP with confidentiality and | |||
| integrity protection, and sending an HTTP request message over that | integrity protection, and sending over that connection an HTTP | |||
| connection containing the URI's identifying data. | request message containing a request target that matches the client's | |||
| target URI (Section 7.1). | ||||
| If the server responds to such a request with a non-interim HTTP | If the server responds to such a request with a non-interim HTTP | |||
| response message, as described in Section 15, then that response is | response message, as described in Section 15, then that response is | |||
| considered an authoritative answer to the client's request. | considered an authoritative answer to the client's request. | |||
| Note, however, that the above is not the only means for obtaining an | Note, however, that the above is not the only means for obtaining an | |||
| authoritative response, nor does it imply that an authoritative | authoritative response, nor does it imply that an authoritative | |||
| response is always necessary (see [CACHING]). | response is always necessary (see [CACHING]). | |||
| 4.3.4. https certificate verification | 4.3.4. https certificate verification | |||
| skipping to change at page 33, line 20 ¶ | skipping to change at page 33, line 9 ¶ | |||
| 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 | |||
| semantics defined by that name. For example, the Date header field | semantics defined by that name. For example, the Date header field | |||
| is defined in Section 10.2.2 as containing the origination timestamp | is defined in Section 6.6.1 as containing the origination timestamp | |||
| for the message in which it appears. | for the message in which it appears. | |||
| field-name = token | field-name = token | |||
| Field names are case-insensitive and ought to be registered within | Field names are case-insensitive and ought to be registered within | |||
| the "Hypertext Transfer Protocol (HTTP) Field Name Registry"; see | the "Hypertext Transfer Protocol (HTTP) Field Name Registry"; see | |||
| Section 16.3.1. | Section 16.3.1. | |||
| The interpretation of a field does not change between minor versions | The interpretation of a field does not change between minor versions | |||
| of the same major HTTP version, though the default behavior of a | of the same major HTTP version, though the default behavior of a | |||
| skipping to change at page 36, line 9 ¶ | skipping to change at page 35, line 40 ¶ | |||
| 5.5. Field Values | 5.5. Field Values | |||
| HTTP field values consist of a sequence of characters in a format | HTTP field values consist of a sequence of characters in a format | |||
| defined by the field's grammar. Each field's grammar is usually | defined by the field's grammar. Each field's grammar is usually | |||
| defined using ABNF ([RFC5234]). | defined using ABNF ([RFC5234]). | |||
| 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 | |||
| obs-text = %x80-FF | ||||
| A field value does not include leading or trailing whitespace. When | A field value does not include leading or trailing whitespace. When | |||
| a specific version of HTTP allows such whitespace to appear in a | a specific version of HTTP allows such whitespace to appear in a | |||
| message, a field parsing implementation MUST exclude such whitespace | message, a field parsing implementation MUST exclude such whitespace | |||
| prior to evaluating the field value. | prior to evaluating the field value. | |||
| Field values are usually constrained to the range of US-ASCII | Field values are usually constrained to the range of US-ASCII | |||
| characters [USASCII]. Fields needing a greater range of characters | characters [USASCII]. Fields needing a greater range of characters | |||
| can use an encoding, such as the one defined in [RFC8187]. | 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. Specifications for newly defined fields SHOULD | [RFC2047] encoding. Specifications for newly defined fields SHOULD | |||
| limit their values to visible US-ASCII octets (VCHAR), SP, and HTAB. | limit their values to visible US-ASCII octets (VCHAR), SP, and HTAB. | |||
| A recipient SHOULD treat other octets in field content (obs-text) as | A recipient SHOULD treat other allowed octets in field content (i.e., | |||
| opaque data. | obs-text) as opaque data. | |||
| Field values containing CR or NUL characters are invalid and | Field values containing CR, LF, or NUL characters are invalid and | |||
| dangerous, due to the varying ways that implementations might parse | dangerous, due to the varying ways that implementations might parse | |||
| and interpret those characters; a recipient of CR or NUL within a | and interpret those characters; a recipient of CR, LF, or NUL within | |||
| field value MUST either reject the message or replace each of those | a field value MUST either reject the message or replace each of those | |||
| characters with SP before further processing or forwarding of that | characters with SP before further processing or forwarding of that | |||
| message. Field values containing other CTL characters are also | message. Field values containing other CTL characters are also | |||
| invalid; however, recipients MAY retain such characters for the sake | invalid; however, recipients MAY retain such characters for the sake | |||
| of robustness if they only appear within safe field value contexts | of robustness when they appear within a safe context (e.g., an | |||
| (e.g., opaque data). | application-specific quoted string that will not be processed by any | |||
| downstream HTTP parser). | ||||
| Fields that only anticipate a single member as the field value are | Fields that only anticipate a single member as the field value are | |||
| referred to as _singleton fields_. | referred to as _singleton fields_. | |||
| Fields that allow multiple members as the field value are referred to | Fields that allow multiple members as the field value are referred to | |||
| as _list-based fields_. The list operator extension of Section 5.6.1 | as _list-based fields_. The list operator extension of Section 5.6.1 | |||
| is used as a common notation for defining field values that can | is used as a common notation for defining field values that can | |||
| contain multiple members. | contain multiple members. | |||
| Because commas (",") are used as the delimiter between members, they | Because commas (",") are used as the delimiter between members, they | |||
| skipping to change at page 37, line 20 ¶ | skipping to change at page 37, line 4 ¶ | |||
| "http://without-a-comma.example.com/" | "http://without-a-comma.example.com/" | |||
| Example-Dates: "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 are almost always used with the | |||
| quoted-string production (Section 5.6.4); using a different syntax | quoted-string production (Section 5.6.4); using a different syntax | |||
| inside double-quotes will likely cause unnecessary confusion. | inside double-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 | ||||
| by preceding each extra line with at least one space or horizontal | ||||
| tab (obs-fold). This document assumes that any such obsolete line | ||||
| folding has been removed prior to interpreting the field value (e.g., | ||||
| as described in Section 5.2 of [HTTP/1.1]). | ||||
| | *Note:* For defining field value syntax, this specification | | *Note:* For defining field value syntax, this specification | |||
| | uses an ABNF rule named after the field name to define the | | uses an ABNF rule named after the field name to define the | |||
| | allowed grammar for that field's value (after said value has | | allowed grammar for that field's value (after said value has | |||
| | been extracted from the underlying messaging syntax and | | been extracted from the underlying messaging syntax and | |||
| | multiple instances combined into a list). | | multiple instances combined into a list). | |||
| 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) | |||
| skipping to change at page 38, line 8 ¶ | skipping to change at page 37, line 32 ¶ | |||
| 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" | |||
| indicating at least <n> and at most <m> elements, each separated by a | indicating at least <n> and at most <m> elements, each separated by a | |||
| single comma (",") and optional whitespace (OWS, defined in | single comma (",") and optional whitespace (OWS, defined in | |||
| Section 5.6.3). | Section 5.6.3). | |||
| 5.6.1.1. Sender Requirements | 5.6.1.1. Sender Requirements | |||
| In any production that uses the list construct, a sender MUST NOT | In any production that uses the list construct, a sender MUST NOT | |||
| generate empty list elements. In other words, a sender MUST generate | generate empty list elements. In other words, a sender has to | |||
| lists that satisfy the following syntax: | generate lists that satisfy the following syntax: | |||
| 1#element => element *( OWS "," OWS element ) | 1#element => element *( OWS "," OWS element ) | |||
| and: | and: | |||
| #element => [ 1#element ] | #element => [ 1#element ] | |||
| and for n >= 1 and m > 1: | and for n >= 1 and m > 1: | |||
| <n>#<m>element => element <n-1>*<m-1>( OWS "," OWS element ) | <n>#<m>element => element <n-1>*<m-1>( OWS "," OWS element ) | |||
| skipping to change at page 40, line 27 ¶ | skipping to change at page 40, line 4 ¶ | |||
| BWS = OWS | BWS = OWS | |||
| ; "bad" whitespace | ; "bad" whitespace | |||
| 5.6.4. Quoted Strings | 5.6.4. Quoted Strings | |||
| A string of text is parsed as a single value if it is quoted using | A string of text is parsed as a single value if it is quoted using | |||
| double-quote marks. | double-quote marks. | |||
| quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE | quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE | |||
| qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text | qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text | |||
| obs-text = %x80-FF | ||||
| The backslash octet ("\") can be used as a single-octet quoting | The backslash octet ("\") can be used as a single-octet quoting | |||
| mechanism within quoted-string and comment constructs. Recipients | mechanism within quoted-string and comment constructs. Recipients | |||
| that process the value of a quoted-string MUST handle a quoted-pair | that process the value of a quoted-string MUST handle a quoted-pair | |||
| as if it were replaced by the octet following the backslash. | as if it were replaced by the octet following the backslash. | |||
| quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) | quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) | |||
| A sender SHOULD NOT generate a quoted-pair in a quoted-string except | A sender SHOULD NOT generate a quoted-pair in a quoted-string except | |||
| where necessary to quote DQUOTE and backslash octets occurring within | where necessary to quote DQUOTE and backslash octets occurring within | |||
| skipping to change at page 42, line 9 ¶ | skipping to change at page 41, line 33 ¶ | |||
| A recipient that parses a timestamp value in an HTTP field MUST | A recipient that parses a timestamp value in an HTTP field MUST | |||
| accept all three HTTP-date formats. When a sender generates a field | accept all three HTTP-date formats. When a sender generates a field | |||
| that contains one or more timestamps defined as HTTP-date, the sender | that contains one or more timestamps defined as HTTP-date, the sender | |||
| MUST generate those timestamps in the IMF-fixdate format. | MUST generate those timestamps in the IMF-fixdate format. | |||
| An HTTP-date value represents time as an instance of Coordinated | An HTTP-date value represents time as an instance of Coordinated | |||
| Universal Time (UTC). The first two formats indicate UTC by the | Universal Time (UTC). The first two formats indicate UTC by the | |||
| three-letter abbreviation for Greenwich Mean Time, "GMT", a | three-letter abbreviation for Greenwich Mean Time, "GMT", a | |||
| predecessor of the UTC name; values in the asctime format are assumed | predecessor of the UTC name; values in the asctime format are assumed | |||
| to be in UTC. A sender that generates HTTP-date values from a local | to be in UTC. | |||
| clock ought to use NTP ([RFC5905]) or some similar protocol to | ||||
| synchronize its clock to UTC. | A _clock_ is an implementation capable of providing a reasonable | |||
| approximation of the current instant in UTC. A clock implementation | ||||
| ought to use NTP ([RFC5905]), or some similar protocol, to | ||||
| synchronize with UTC. | ||||
| Preferred format: | Preferred format: | |||
| IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT | IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT | |||
| ; fixed length/zone/capitalization subset of the format | ; fixed length/zone/capitalization subset of the format | |||
| ; see Section 3.3 of [RFC5322] | ; see Section 3.3 of [RFC5322] | |||
| day-name = %s"Mon" / %s"Tue" / %s"Wed" | day-name = %s"Mon" / %s"Tue" / %s"Wed" | |||
| / %s"Thu" / %s"Fri" / %s"Sat" / %s"Sun" | / %s"Thu" / %s"Fri" / %s"Sat" / %s"Sun" | |||
| skipping to change at page 47, line 22 ¶ | skipping to change at page 47, line 11 ¶ | |||
| The purpose of content in a request is defined by the method | The purpose of content in a request is defined by the method | |||
| semantics (Section 9). | semantics (Section 9). | |||
| For example, a representation in the content of a PUT request | For example, a representation in the content of a PUT request | |||
| (Section 9.3.4) represents the desired state of the target resource | (Section 9.3.4) represents the desired state of the target resource | |||
| after the request is successfully applied, whereas a representation | after the request is successfully applied, whereas a representation | |||
| in the content of a POST request (Section 9.3.3) represents | in the content of a POST request (Section 9.3.3) represents | |||
| information to be processed by the target resource. | information to be processed by the target resource. | |||
| In a response, the content's purpose is defined by both the request | In a response, the content's purpose is defined by the request | |||
| method and the response status code (Section 15). For example, the | method, response status code (Section 15), and response fields | |||
| content of a 200 (OK) response to GET (Section 9.3.1) represents the | describing that content. For example, the content of a 200 (OK) | |||
| current state of the target resource, as observed at the time of the | response to GET (Section 9.3.1) represents the current state of the | |||
| message origination date (Section 10.2.2), whereas the content of the | target resource, as observed at the time of the message origination | |||
| same status code in a response to POST might represent either the | date (Section 6.6.1), whereas the content of the same status code in | |||
| processing result or the new state of the target resource after | a response to POST might represent either the processing result or | |||
| applying the processing. | the new state of the target resource after applying the processing. | |||
| The content of a 206 (Partial Content) response to GET contains | The content of a 206 (Partial Content) response to GET contains | |||
| either a single part of the selected representation or a multipart | either a single part of the selected representation or a multipart | |||
| message body containing multiple parts of that representation, as | message body containing multiple parts of that representation, as | |||
| described in Section 15.3.7. | described in Section 15.3.7. | |||
| Response messages with an error status code usually contain content | Response messages with an error status code usually contain content | |||
| that represents the error condition, such that the content describes | that represents the error condition, such that the content describes | |||
| the error state and what steps are suggested for resolving it. | the error state and what steps are suggested for resolving it. | |||
| skipping to change at page 48, line 40 ¶ | skipping to change at page 48, line 27 ¶ | |||
| specific identifier might be supplied within the content itself. | specific identifier might be supplied within the content itself. | |||
| 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 target resource | |||
| by the target URI (Section 7.1). | (Section 7.1). | |||
| 3. If the request method is GET and the response status code is 203 | 3. If the request method is GET and the response status code is 203 | |||
| (Non-Authoritative Information), the content is a potentially | (Non-Authoritative Information), the content is a potentially | |||
| modified or enhanced representation of the target resource as | modified or enhanced representation of the target resource as | |||
| provided by an intermediary. | provided by an intermediary. | |||
| 4. If the request method is GET and the response status code is 206 | 4. If the request method is GET and the response status code is 206 | |||
| (Partial Content), the content is one or more parts of a | (Partial Content), the content is one or more parts of a | |||
| representation of the resource identified by the target URI | representation of the target resource. | |||
| (Section 7.1). | ||||
| 5. If the response has a Content-Location header field and its field | 5. If the response has a Content-Location header field and its field | |||
| value is a reference to the same URI as the target URI, the | value is a reference to the same URI as the target URI, the | |||
| content is a representation of the target resource. | content is a representation of the target resource. | |||
| 6. If the response has a Content-Location header field and its field | 6. If the response has a Content-Location header field and its field | |||
| 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 | |||
| skipping to change at page 50, line 27 ¶ | skipping to change at page 50, line 21 ¶ | |||
| mean that the client(s) will process any particular trailer field in | mean that the client(s) will process any particular trailer field in | |||
| the response; only that the trailer section(s) will not be dropped by | the response; only that the trailer section(s) will not be dropped by | |||
| any 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 | The "Trailer" header field (Section 6.6.2) can be sent to indicate | |||
| fields likely to be sent in the trailer section, which allows | fields likely to be sent in the trailer section, which allows | |||
| recipients to prepare for their receipt before processing the | recipients to prepare for their receipt before processing the | |||
| content. For example, this could be useful if a field name indicates | content. For example, this could be useful if a field name indicates | |||
| that a dynamic checksum should be calculated as the content is | that a dynamic checksum should be calculated as the content is | |||
| received and then immediately checked upon receipt of the trailer | received and then immediately checked upon receipt of the trailer | |||
| field value. | 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. Trailer fields that might be generated more | as a list of members. Trailer fields that might be generated more | |||
| than once during a message MUST be defined as a list-based field even | than once during a message MUST be defined as a list-based field even | |||
| if each member value is only processed once per field line received. | if each member value is only processed once per field line received. | |||
| At the end of a message, a recipient MAY treat the set of received | At the end of a message, a recipient MAY treat the set of received | |||
| trailer fields as a data structure of key/value pairs, similar to | trailer fields as a data structure of key/value pairs, similar to | |||
| (but separate from) the header fields. Additional processing | (but separate from) the header fields. Additional processing | |||
| expectations, if any, can be defined within the field specification | expectations, if any, can be defined within the field specification | |||
| for a field intended for use in trailers. | for a field intended for use in trailers. | |||
| 6.6. Message Metadata | ||||
| Fields that describe the message itself, such as when and how the | ||||
| message has been generated, can appear in both requests and | ||||
| responses. | ||||
| 6.6.1. Date | ||||
| The "Date" header field represents the date and time at which the | ||||
| message was originated, having the same semantics as the Origination | ||||
| 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. | ||||
| Date = HTTP-date | ||||
| An example is | ||||
| Date: Tue, 15 Nov 1994 08:12:31 GMT | ||||
| A sender that generates a Date header field SHOULD generate its field | ||||
| value as the best available approximation of the date and time of | ||||
| message generation. In theory, the date ought to represent the | ||||
| moment just before generating the message content. In practice, a | ||||
| sender can generate the date value at any time during message | ||||
| origination. | ||||
| An origin server with a clock (as defined in Section 5.6.7) MUST | ||||
| generate a Date header field in all 2xx (Successful), 3xx | ||||
| (Redirection), and 4xx (Client Error) responses, and MAY generate a | ||||
| Date header field in 1xx (Informational) and 5xx (Server Error) | ||||
| responses. | ||||
| An origin server without a clock MUST NOT generate a Date header | ||||
| field. | ||||
| 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 | ||||
| corresponding Date header field to the message's header section if it | ||||
| is cached or forwarded downstream. | ||||
| A recipient with a clock that receives a response with an invalid | ||||
| Date header field value MAY replace that value with the time that | ||||
| response was received. | ||||
| A user agent MAY send a Date header field in a request, though | ||||
| generally will not do so unless it is believed to convey useful | ||||
| information to the server. For example, custom applications of HTTP | ||||
| might convey a Date if the server is expected to adjust its | ||||
| interpretation of the user's request based on differences between the | ||||
| user agent and server clocks. | ||||
| 6.6.2. Trailer | ||||
| The "Trailer" header field provides a list of field names that the | ||||
| sender anticipates sending as trailer fields within that message. | ||||
| This allows a recipient to prepare for receipt of the indicated | ||||
| metadata before it starts processing the content. | ||||
| Trailer = #field-name | ||||
| For example, a sender might indicate that a signature will be | ||||
| computed as the content is being streamed and provide the final | ||||
| signature as a trailer field. This allows a recipient to perform the | ||||
| same check on the fly as it receives the content. | ||||
| A sender that intends to generate one or more trailer fields in a | ||||
| message SHOULD generate a Trailer header field in the header section | ||||
| of that message to indicate which fields might be present in the | ||||
| trailers. | ||||
| If an intermediary discards the trailer section in transit, the | ||||
| Trailer field could provide a hint of what metadata was lost, though | ||||
| there is no guarantee that a sender of Trailer will always follow | ||||
| through by sending the named fields. | ||||
| 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 53, line 12 ¶ | skipping to change at page 54, line 35 ¶ | |||
| If the client has a cache [CACHING] and the request can be satisfied | If the client has a cache [CACHING] and the request can be satisfied | |||
| by it, then the request is usually directed there first. | by it, then the request is usually directed there first. | |||
| 7.3.2. To a Proxy | 7.3.2. To a Proxy | |||
| If the request is not satisfied by a cache, then a typical client | If the request is not satisfied by a cache, then a typical client | |||
| will check its configuration to determine whether a proxy is to be | will check its configuration to determine whether a proxy is to be | |||
| used to satisfy the request. Proxy configuration is implementation- | used to satisfy the request. Proxy configuration is implementation- | |||
| dependent, but is often based on URI prefix matching, selective | dependent, but is often based on URI prefix matching, selective | |||
| authority matching, or both, and the proxy itself is usually | authority matching, or both, and the proxy itself is usually | |||
| identified by an "http" or "https" URI. If a proxy is applicable, | identified by an "http" or "https" URI. | |||
| the client connects inbound by establishing (or reusing) a connection | ||||
| to that proxy. | If an "http" or "https" proxy is applicable, the client connects | |||
| inbound by establishing (or reusing) a connection to that proxy and | ||||
| then sending it an HTTP request message containing a request target | ||||
| that matches the client's target URI. | ||||
| 7.3.3. To the Origin | 7.3.3. To the Origin | |||
| If no proxy is applicable, a typical client will invoke a handler | If no proxy is applicable, a typical client will invoke a handler | |||
| routine, usually specific to the target URI's scheme, to connect | routine (specific to the target URI's scheme) to obtain access to the | |||
| directly to an origin for the target resource. How that is | identified resource. How that is accomplished is dependent on the | |||
| accomplished is dependent on the target URI scheme and defined by its | target URI scheme and defined by its associated specification. | |||
| associated specification. | ||||
| Section 4.3.2 defines how to obtain access to an "http" resource by | ||||
| establishing (or reusing) an inbound connection to the identified | ||||
| origin server and then sending it an HTTP request message containing | ||||
| a request target that matches the client's target URI. | ||||
| Section 4.3.3 defines how to obtain access to an "https" resource by | ||||
| establishing (or reusing) an inbound secured connection to an origin | ||||
| server that is authoritative for the identified origin and then | ||||
| sending it an HTTP request message containing a request target that | ||||
| matches the client's target URI. | ||||
| 7.4. Rejecting Misdirected Requests | 7.4. Rejecting Misdirected Requests | |||
| Once a request is received by a server and parsed sufficiently to | Once a request is received by a server and parsed sufficiently to | |||
| determine its target URI, the server decides whether to process the | determine its target URI, the server decides whether to process the | |||
| request itself, forward the request to another server, redirect the | request itself, forward the request to another server, redirect the | |||
| client to a different resource, respond with an error, or drop the | client to a different resource, respond with an error, or drop the | |||
| connection. This decision can be influenced by anything about the | connection. This decision can be influenced by anything about the | |||
| request or connection context, but is specifically directed at | request or connection context, but is specifically directed at | |||
| whether the server has been configured to process requests for that | whether the server has been configured to process requests for that | |||
| skipping to change at page 59, line 35 ¶ | skipping to change at page 61, line 23 ¶ | |||
| format transcoder, or a privacy filter. Such transformations are | format transcoder, or a privacy filter. Such transformations are | |||
| presumed to be desired by whichever client (or client organization) | presumed to be desired by whichever client (or client organization) | |||
| chose the proxy. | chose the proxy. | |||
| If a proxy receives a target URI with a host name that is not a fully | If a proxy receives a target URI with a host name that is not a fully | |||
| qualified domain name, it MAY add its own domain to the host name it | qualified domain name, it MAY add its own domain to the host name it | |||
| received when forwarding the request. A proxy MUST NOT change the | received when forwarding the request. A proxy MUST NOT change the | |||
| host name if the target URI contains a fully qualified domain name. | host name if the target URI contains a fully qualified domain name. | |||
| A proxy MUST NOT modify the "absolute-path" and "query" parts of the | A proxy MUST NOT modify the "absolute-path" and "query" parts of the | |||
| received target URI when forwarding it to the next inbound server, | received target URI when forwarding it to the next inbound server | |||
| except as noted above to replace an empty path with "/" or "*". | except as required by that forwarding protocol. For example, a proxy | |||
| forwarding a request to an origin server via HTTP/1.1 will replace an | ||||
| empty path with "/" (Section 3.2.1 of [HTTP/1.1]) or "*" | ||||
| (Section 3.2.4 of [HTTP/1.1]), depending on the request method. | ||||
| A proxy MUST NOT transform the content (Section 6.4) of a message | A proxy MUST NOT transform the content (Section 6.4) of a message | |||
| that contains a no-transform cache-control response directive | that contains a no-transform cache-control response directive | |||
| (Section 5.2 of [CACHING]). Note that this does not include changes | (Section 5.2 of [CACHING]). Note that this does not include changes | |||
| to the message body that do not affect the content, such as transfer | to the message body that do not affect the content, such as transfer | |||
| codings (Section 7 of [HTTP/1.1]). | codings (Section 7 of [HTTP/1.1]). | |||
| A proxy MAY transform the content of a message that does not contain | A proxy MAY transform the content of a message that does not contain | |||
| a no-transform cache-control directive. A proxy that transforms the | a no-transform cache-control directive. A proxy that transforms the | |||
| content of a 200 (OK) response can inform downstream recipients that | content of a 200 (OK) response can inform downstream recipients that | |||
| skipping to change at page 63, line 34 ¶ | skipping to change at page 65, line 17 ¶ | |||
| 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 | |||
| representation. Some user agents examine the content and, in certain | representation. Some user agents examine the content and, in certain | |||
| cases, override the received type (for example, see [Sniffing]). | cases, override the received type (for example, see [Sniffing]). | |||
| This "MIME sniffing" risks drawing incorrect conclusions about the | This "MIME sniffing" risks drawing incorrect conclusions about the | |||
| data, which might expose the user to additional security risks (e.g., | data, which might expose the user to additional security risks (e.g., | |||
| "privilege escalation"). Furthermore, it is impossible to determine | "privilege escalation"). Furthermore, distinct media types often | |||
| the sender's intended processing model by examining the data format: | share a common data format, differing only in how the data is | |||
| many data formats match multiple media types that differ only in | intended to be processed, which is impossible to distinguish by | |||
| processing semantics. Implementers are encouraged to provide a means | inspecting the data alone. When sniffing is implemented, | |||
| to disable such sniffing. | implementers are encouraged to provide a means for the user to | |||
| disable it. | ||||
| Furthermore, although Content-Type is defined as a singleton field, | Although Content-Type is defined as a singleton field, it is | |||
| it is sometimes incorrectly generated multiple times, resulting in a | sometimes incorrectly generated multiple times, resulting in a | |||
| combined field value that appears to be a list. Recipients often | combined field value that appears to be a list. Recipients often | |||
| attempt to handle this error by using the last syntactically valid | attempt to handle this error by using the last syntactically valid | |||
| member of the list, but note that some implementations might have | member of the list, leading to potential interoperability and | |||
| different error handling behaviors, leading to interoperability and/ | security issues if different implementations have different error | |||
| or security issues. | handling behaviors. | |||
| 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 the message context. | in accordance with the message context. | |||
| media-type = type "/" subtype parameters | media-type = type "/" subtype parameters | |||
| skipping to change at page 72, line 24 ¶ | skipping to change at page 74, line 7 ¶ | |||
| and the origin server accepts that PUT (without redirection), then | and the origin server accepts that PUT (without redirection), then | |||
| the new state of that resource is expected to be consistent with the | the new state of that resource is expected to be consistent with the | |||
| one representation supplied in that PUT; the Content-Location cannot | one representation supplied in that PUT; the Content-Location cannot | |||
| be used as a form of reverse content selection identifier to update | be used as a form of reverse content selection identifier to update | |||
| only one of the negotiated representations. If the user agent had | only one of the negotiated representations. If the user agent had | |||
| wanted the latter semantics, it would have applied the PUT directly | wanted the latter semantics, it would have applied the PUT directly | |||
| to the Content-Location URI. | to the Content-Location URI. | |||
| 8.8. Validator Fields | 8.8. Validator Fields | |||
| Validator fields convey metadata about the selected representation | Resource metadata is referred to as a _validator_ if it can be used | |||
| (Section 3.2). In responses to safe requests, validator fields | within a precondition (Section 13.1) to make a conditional request | |||
| describe the selected representation chosen by the origin server | (Section 13). Validator fields convey a current validator for the | |||
| while handling the response. Note that, depending on the status code | selected representation (Section 3.2). | |||
| In responses to safe requests, validator fields describe the selected | ||||
| representation chosen by the origin server while handling the | ||||
| response. Note that, depending on the method and status code | ||||
| semantics, the selected representation for a given response is not | semantics, the selected representation for a given response is not | |||
| 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 the entity-tag can be used as a validator in later conditional | |||
| "lost update" problem (Section 13.1). | requests to prevent the "lost update" problem. | |||
| 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], that are beyond the | Distributed Authoring and Versioning [WEBDAV], that are beyond the | |||
| scope of this specification. A resource metadata value is referred | scope of this specification. | |||
| to as a _validator_ when it is used within a precondition. | ||||
| 8.8.1. Weak versus Strong | 8.8.1. Weak versus Strong | |||
| Validators come in two flavors: strong or weak. Weak validators are | Validators come in two flavors: strong or weak. Weak validators are | |||
| easy to generate but are far less useful for comparisons. Strong | easy to generate but are far less useful for comparisons. Strong | |||
| validators are ideal for comparisons but can be very difficult (and | validators are ideal for comparisons but can be very difficult (and | |||
| occasionally impossible) to generate efficiently. Rather than impose | occasionally impossible) to generate efficiently. Rather than impose | |||
| that all forms of resource adhere to the same strength of validator, | that all forms of resource adhere to the same strength of validator, | |||
| HTTP exposes the type of validator in use and imposes restrictions on | HTTP exposes the type of validator in use and imposes restrictions on | |||
| when weak validators can be used as preconditions. | when weak validators can be used as preconditions. | |||
| skipping to change at page 73, line 52 ¶ | skipping to change at page 75, line 34 ¶ | |||
| prior to the response header fields being sent and the digest does | prior to the response header fields being sent and the digest does | |||
| not need to be recalculated every time a validation request is | not need to be recalculated every time a validation request is | |||
| received. However, if a resource has distinct representations that | received. However, if a resource has distinct representations that | |||
| differ only in their metadata, such as might occur with content | differ only in their metadata, such as might occur with content | |||
| negotiation over media types that happen to share the same data | negotiation over media types that happen to share the same data | |||
| format, then the origin server needs to incorporate additional | format, then the origin server needs to incorporate additional | |||
| information in the validator to distinguish those representations. | information in the validator to distinguish those representations. | |||
| In contrast, a _weak validator_ is representation metadata that might | In contrast, a _weak validator_ is representation metadata that might | |||
| not change for every change to the representation data. This | not change for every change to the representation data. This | |||
| weakness might be due to limitations in how the value is calculated, | weakness might be due to limitations in how the value is calculated | |||
| such as clock resolution, an inability to ensure uniqueness for all | (e.g., clock resolution), an inability to ensure uniqueness for all | |||
| possible representations of the resource, or a desire of the resource | possible representations of the resource, or a desire of the resource | |||
| owner to group representations by some self-determined set of | owner to group representations by some self-determined set of | |||
| equivalency rather than unique sequences of data. An origin server | equivalency rather than unique sequences of data. | |||
| SHOULD change a weak entity-tag whenever it considers prior | ||||
| representations to be unacceptable as a substitute for the current | An origin server SHOULD change a weak entity-tag whenever it | |||
| representation. In other words, a weak entity-tag ought to change | considers prior representations to be unacceptable as a substitute | |||
| whenever the origin server wants caches to invalidate old responses. | for the current representation. In other words, a weak entity-tag | |||
| ought to change whenever the origin server wants caches to invalidate | ||||
| old responses. | ||||
| For example, the representation of a weather report that changes in | For example, the representation of a weather report that changes in | |||
| content every second, based on dynamic measurements, might be grouped | content every second, based on dynamic measurements, might be grouped | |||
| into sets of equivalent representations (from the origin server's | into sets of equivalent representations (from the origin server's | |||
| perspective) with the same weak validator in order to allow cached | perspective) with the same weak validator in order to allow cached | |||
| representations to be valid for a reasonable period of time (perhaps | representations to be valid for a reasonable period of time (perhaps | |||
| adjusted dynamically based on server load or weather quality). | adjusted dynamically based on server load or weather quality). | |||
| Likewise, a representation's modification time, if defined with only | Likewise, a representation's modification time, if defined with only | |||
| one-second resolution, might be a weak validator if it is possible | one-second resolution, might be a weak validator if it is possible | |||
| for the representation to be modified twice during a single second | for the representation to be modified twice during a single second | |||
| and retrieved between those modifications. | and retrieved between those modifications. | |||
| Likewise, a validator is weak if it is shared by two or more | Likewise, a validator is weak if it is shared by two or more | |||
| representations of a given resource at the same time, unless those | representations of a given resource at the same time, unless those | |||
| representations have identical representation data. For example, if | representations have identical representation data. For example, if | |||
| the origin server sends the same validator for a representation with | the origin server sends the same validator for a representation with | |||
| a gzip content coding applied as it does for a representation with no | a gzip content coding applied as it does for a representation with no | |||
| skipping to change at page 75, line 28 ¶ | skipping to change at page 77, line 18 ¶ | |||
| 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. | the scope of this specification. | |||
| 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 (as defined in Section 5.6.7) MUST NOT | |||
| is later than the server's time of message origination (Date). If | generate a Last-Modified date that is later than the server's time of | |||
| the last modification time is derived from implementation-specific | message origination (Date, Section 6.6.1). If the last modification | |||
| metadata that evaluates to some time in the future, according to the | time is derived from implementation-specific metadata that evaluates | |||
| origin server's clock, then the origin server MUST replace that value | to some time in the future, according to the origin server's clock, | |||
| with the message origination date. This prevents a future | then the origin server MUST replace that value with the message | |||
| modification date from having an adverse impact on cache validation. | origination date. This prevents a future modification date from | |||
| having an adverse impact on cache validation. | ||||
| An origin server without a clock MUST NOT assign Last-Modified values | An origin server without a clock MUST NOT generate a Last-Modified | |||
| to a response unless these values were associated with the resource | date for a response unless that date value was assigned to the | |||
| by some other system or user with a reliable clock. | resource by some other system (presumably one with a 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: | |||
| * 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, | |||
| skipping to change at page 79, line 45 ¶ | skipping to change at page 81, line 41 ¶ | |||
| ...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 [HTTP/1.1]) apply only during message | | codings (Section 7 of [HTTP/1.1]) 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 | ||||
| In 200 (OK) responses to GET or HEAD, an origin server: | ||||
| * SHOULD send an entity-tag validator unless it is not feasible to | ||||
| generate one. | ||||
| * MAY send a weak entity-tag instead of a strong entity-tag, if | ||||
| performance considerations support the use of weak entity-tags, or | ||||
| if it is unfeasible to send a strong entity-tag. | ||||
| * 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 | ||||
| send both a strong entity-tag and a Last-Modified value in successful | ||||
| responses to a retrieval request. | ||||
| A client: | ||||
| * 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 | ||||
| the origin server. | ||||
| * SHOULD send the Last-Modified value in non-subrange cache | ||||
| validation requests (using If-Modified-Since) if only a Last- | ||||
| Modified value has been provided by the origin server. | ||||
| * MAY send the Last-Modified value in subrange cache validation | ||||
| requests (using If-Unmodified-Since) if only a Last-Modified value | ||||
| 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 send both validators in cache validation requests if both | ||||
| 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 | ||||
| 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 | |||
| skipping to change at page 88, line 18 ¶ | skipping to change at page 89, line 18 ¶ | |||
| 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 | |||
| SHOULD send a 201 (Created) response containing a Location header | SHOULD send a 201 (Created) response containing a Location header | |||
| field that provides an identifier for the primary resource created | field that provides an identifier for the primary resource created | |||
| (Section 10.2.3) and a representation that describes the status of | (Section 10.2.2) and a representation that describes the status of | |||
| the request while referring to the new resource(s). | the request while referring to the new resource(s). | |||
| Responses to POST requests are only cacheable when they include | Responses to POST requests are only cacheable when they include | |||
| explicit freshness information (see Section 4.2.1 of [CACHING]) and a | explicit freshness information (see Section 4.2.1 of [CACHING]) and a | |||
| Content-Location header field that has the same value as the POST's | Content-Location header field that has the same value as the POST's | |||
| target URI (Section 8.7). A cached POST response can be reused to | target URI (Section 8.7). A cached POST response can be reused to | |||
| satisfy a later GET or HEAD request, but not a POST request, since | satisfy a later GET or HEAD request, but not a POST request, since | |||
| POST is required to be written through to the origin server, because | POST is required to be written through to the origin server, because | |||
| it is unsafe; see Section 4 of [CACHING]. | it is unsafe; see Section 4 of [CACHING]. | |||
| skipping to change at page 100, line 43 ¶ | skipping to change at page 101, line 43 ¶ | |||
| A TE field with a "trailers" member sent in a request indicates that | A TE field with a "trailers" member sent in a request indicates that | |||
| the client will not discard trailer fields, as described in | the client will not discard trailer fields, as described in | |||
| Section 6.5. | Section 6.5. | |||
| TE is also used within HTTP/1.1 to advise servers about what transfer | TE is also used within HTTP/1.1 to advise servers about what transfer | |||
| codings the client is able to accept in a response. As of | codings the client is able to accept in a response. As of | |||
| publication, only HTTP/1.1 uses transfer codings (see Section 7 of | publication, only HTTP/1.1 uses transfer codings (see Section 7 of | |||
| [HTTP/1.1]). | [HTTP/1.1]). | |||
| The TE field value consists of a list of tokens, each allowing for | The TE field value is a list of members, with each member (aside from | |||
| optional parameters (except for the special case "trailers"). | "trailers") consisting of a transfer coding name token with an | |||
| optional weight indicating the client's relative preference for that | ||||
| transfer coding (Section 12.4.2) and optional parameters for that | ||||
| transfer coding. | ||||
| 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 | A sender of TE MUST also send a "TE" connection option within the | |||
| Connection header field (Section 7.6.1) to inform intermediaries not | Connection header field (Section 7.6.1) to inform intermediaries not | |||
| to forward this field. | to forward this field. | |||
| 10.1.5. Trailer | 10.1.5. User-Agent | |||
| The "Trailer" header field provides a list of field names that the | ||||
| sender anticipates sending as trailer fields within that message. | ||||
| This allows a recipient to prepare for receipt of the indicated | ||||
| metadata before it starts processing the content. | ||||
| Trailer = #field-name | ||||
| For example, a sender might indicate that a message integrity check | ||||
| will be computed as the content is being streamed and provide the | ||||
| final signature as a trailer field. This allows a recipient to | ||||
| 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 | ||||
| message SHOULD generate a Trailer header field in the header section | ||||
| of that message to indicate which fields might be present in the | ||||
| trailers. | ||||
| 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 | |||
| identify the scope of reported interoperability problems, to work | identify the scope of reported interoperability problems, to work | |||
| around or tailor responses to avoid particular user agent | around or tailor responses to avoid particular user agent | |||
| limitations, and for analytics regarding browser or operating system | limitations, and for analytics regarding browser or operating system | |||
| use. A user agent SHOULD send a User-Agent header field in each | use. A user agent SHOULD send a User-Agent header field in each | |||
| request unless specifically configured not to do so. | request unless specifically configured not to do so. | |||
| User-Agent = product *( RWS ( product / comment ) ) | User-Agent = product *( RWS ( product / comment ) ) | |||
| skipping to change at page 103, line 15 ¶ | skipping to change at page 104, line 5 ¶ | |||
| 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 | |||
| according to the generic message handling rules. | according to the generic message handling rules. | |||
| 10.2.2. Date | 10.2.2. Location | |||
| The "Date" header field represents the date and time at which the | ||||
| message was originated, having the same semantics as the Origination | ||||
| 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. | ||||
| Date = HTTP-date | ||||
| An example is | ||||
| Date: Tue, 15 Nov 1994 08:12:31 GMT | ||||
| A sender that generates a Date header field SHOULD generate its field | ||||
| value as the best available approximation of the date and time of | ||||
| message generation. In theory, the date ought to represent the | ||||
| moment just before generating the message content. In practice, a | ||||
| 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 | ||||
| have a clock capable of providing a reasonable approximation of the | ||||
| current instant in Coordinated Universal Time. An origin server MAY | ||||
| send a Date header field if the response is in the 1xx | ||||
| (Informational) or 5xx (Server Error) class of status codes. An | ||||
| origin server MUST send a Date header field in all other cases. | ||||
| 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 | ||||
| corresponding Date header field to the message's header section if it | ||||
| is cached or forwarded downstream. | ||||
| A recipient with a clock that receives a response with an invalid | ||||
| Date header field value MAY replace that value with the time that | ||||
| response was received. | ||||
| A user agent MAY send a Date header field in a request, though | ||||
| generally will not do so unless it is believed to convey useful | ||||
| information to the server. For example, custom applications of HTTP | ||||
| might convey a Date if the server is expected to adjust its | ||||
| interpretation of the user's request based on differences between the | ||||
| user agent and server clocks. | ||||
| 10.2.3. Location | ||||
| The "Location" header field is used in some responses to refer to a | The "Location" header field is used in some responses to refer to a | |||
| specific resource in relation to the response. The type of | specific resource in relation to the response. The type of | |||
| relationship is defined by the combination of request method and | relationship is defined by the combination of request method and | |||
| status code semantics. | status code semantics. | |||
| Location = URI-reference | Location = URI-reference | |||
| The field value consists of a single URI-reference. When it has the | The field value consists of a single URI-reference. When it has the | |||
| form of a relative reference ([URI], Section 4.2), the final value is | form of a relative reference ([URI], Section 4.2), the final value is | |||
| skipping to change at page 105, line 30 ¶ | skipping to change at page 105, line 22 ¶ | |||
| | along the path might combine those field lines into one value. | | along the path might combine those field lines into one value. | |||
| | Recovery of a valid Location field value from that situation is | | Recovery of a valid Location field value from that situation is | |||
| | difficult and not interoperable across implementations. | | difficult and not interoperable across implementations. | |||
| | *Note:* The Content-Location header field (Section 8.7) differs | | *Note:* The Content-Location header field (Section 8.7) differs | |||
| | from Location in that the Content-Location refers to the most | | from Location in that the Content-Location refers to the most | |||
| | specific resource corresponding to the enclosed representation. | | specific resource corresponding to the enclosed representation. | |||
| | It is therefore possible for a response to contain both the | | It is therefore possible for a response to contain both the | |||
| | Location and Content-Location header fields. | | Location and Content-Location header fields. | |||
| 10.2.4. Retry-After | 10.2.3. Retry-After | |||
| 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 | |||
| skipping to change at page 106, line 4 ¶ | skipping to change at page 105, line 43 ¶ | |||
| seconds to delay after receiving the response. | 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.4. 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 | |||
| system use. An origin server MAY generate a Server header field in | system use. An origin server MAY generate a Server header field in | |||
| its responses. | its responses. | |||
| Server = product *( RWS ( product / comment ) ) | Server = product *( RWS ( product / comment ) ) | |||
| 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.5. | |||
| 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 | |||
| skipping to change at page 113, line 36 ¶ | skipping to change at page 113, line 36 ¶ | |||
| chain. This is because only the client that chose a given proxy is | chain. This is because only the client that chose a given proxy is | |||
| likely to have the credentials necessary for authentication. | likely to have the credentials necessary for authentication. | |||
| However, when multiple proxies are used within the same | However, when multiple proxies are used within the same | |||
| administrative domain, such as office and regional caching proxies | administrative domain, such as office and regional caching proxies | |||
| within a large corporate network, it is common for credentials to be | within a large corporate network, it is common for credentials to be | |||
| generated by the user agent and passed through the hierarchy until | generated by the user agent and passed through the hierarchy until | |||
| consumed. Hence, in such a configuration, it will appear as if | consumed. Hence, in such a configuration, it will appear as if | |||
| Proxy-Authentication-Info is being forwarded because each proxy will | Proxy-Authentication-Info is being forwarded because each proxy will | |||
| send the same field value. | send the same field value. | |||
| Proxy-Authentication-Info can be sent as a trailer field | ||||
| (Section 6.5) when the authentication scheme explicitly allows this. | ||||
| 12. Content Negotiation | 12. Content Negotiation | |||
| When responses convey content, whether indicating a success or an | When responses convey content, whether indicating a success or an | |||
| error, the origin server often has different ways of representing | error, the origin server often has different ways of representing | |||
| that information; for example, in different formats, languages, or | that information; for example, in different formats, languages, or | |||
| encodings. Likewise, different users or user agents might have | encodings. Likewise, different users or user agents might have | |||
| differing capabilities, characteristics, or preferences that could | differing capabilities, characteristics, or preferences that could | |||
| influence which representation, among those available, would be best | influence which representation, among those available, would be best | |||
| to deliver. For this reason, HTTP provides mechanisms for content | to deliver. For this reason, HTTP provides mechanisms for content | |||
| negotiation. | negotiation. | |||
| skipping to change at page 121, line 40 ¶ | skipping to change at page 121, line 26 ¶ | |||
| When sent by a server in a response, Accept-Encoding provides | When sent by a server in a response, Accept-Encoding provides | |||
| information about what content codings are preferred in the content | information about what content codings are preferred in the content | |||
| of a subsequent request to the same resource. | of a subsequent request to the same resource. | |||
| 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 (weight) | |||
| 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, | Examples: | |||
| 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 content | 1. If no Accept-Encoding header field is in the request, any 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". | |||
| skipping to change at page 123, line 14 ¶ | skipping to change at page 123, line 5 ¶ | |||
| The most common use of Accept-Encoding is in responses with a 415 | The most common use of Accept-Encoding is in responses with a 415 | |||
| (Unsupported Media Type) status code, in response to optimistic use | (Unsupported Media Type) status code, in response to optimistic use | |||
| of a content coding by clients. However, the header field can also | of a content coding by clients. However, the header field can also | |||
| be used to indicate to clients that content codings are supported, to | be used to indicate to clients that content codings are supported, to | |||
| optimize future interactions. For example, a resource might include | optimize future interactions. For example, a resource might include | |||
| it in a 2xx (Successful) response when the request content was big | it in a 2xx (Successful) response when the request content was big | |||
| enough to justify use of a compression coding but the client failed | enough to justify use of a compression coding but the client failed | |||
| do so. | do so. | |||
| | *Note:* Most HTTP/1.0 applications do not recognize or obey | ||||
| | qvalues associated with content-codings. This means that | ||||
| | qvalues might not work and are not permitted with x-gzip or | ||||
| | x-compress. | ||||
| 12.5.4. Accept-Language | 12.5.4. Accept-Language | |||
| The "Accept-Language" header field can be used by user agents to | The "Accept-Language" header field can be used by user agents to | |||
| indicate the set of natural languages that are preferred in the | indicate the set of natural languages that are preferred in the | |||
| 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> | |||
| skipping to change at page 124, line 27 ¶ | skipping to change at page 124, line 12 ¶ | |||
| | setting a preference, since users are rarely familiar with the | | setting a preference, since users are rarely familiar with the | |||
| | details of language matching as described above. For example, | | details of language matching as described above. For example, | |||
| | users might assume that on selecting "en-gb", they will be | | users might assume that on selecting "en-gb", they will be | |||
| | served any kind of English document if British English is not | | served any kind of English document if British English is not | |||
| | available. A user agent might suggest, in such a case, to add | | available. A user agent might suggest, in such a case, to add | |||
| | "en" to the list for better matching behavior. | | "en" to the list for better matching behavior. | |||
| 12.5.5. Vary | 12.5.5. Vary | |||
| The "Vary" header field in a response describes what parts of a | The "Vary" header field in a response describes what parts of a | |||
| request message, aside from the method and target URI, might | request message, aside from the method and target URI, might have | |||
| influence the origin server's process for selecting and representing | influenced the origin server's process for selecting the content of | |||
| this response. | this response. | |||
| Vary = #( "*" / field-name ) | Vary = #( "*" / field-name ) | |||
| A Vary field value is a list of request field names, known as the | A Vary field value is either the wildcard member "*" or a list of | |||
| selecting header fields, that might have a role in selecting the | request field names, known as the selecting header fields, that might | |||
| representation for this response. Potential selecting header fields | have had a role in selecting the representation for this response. | |||
| are not limited to those defined by this specification. | Potential selecting header fields are not limited to fields defined | |||
| by this specification. | ||||
| If the list contains "*", it signals that other aspects of the | A list containing the member "*" signals that other aspects of the | |||
| request might play a role in selecting the response representation, | request might have played a role in selecting the response | |||
| possibly including elements outside the message syntax (e.g., the | representation, possibly including aspects outside the message syntax | |||
| client's network address). A recipient will not be able to determine | (e.g., the client's network address). A recipient will not be able | |||
| whether this response is appropriate for a later request without | to determine whether this response is appropriate for a later request | |||
| forwarding the request to the origin server. A proxy MUST NOT | without forwarding the request to the origin server. A proxy MUST | |||
| generate "*" in a Vary field value. | NOT 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 | A Vary field containing a list of field names has 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 | |||
| values for the listed header fields as the original request | values for the listed header fields as the original request | |||
| (Section 4.1 of [CACHING]). In other words, Vary expands the | (Section 4.1 of [CACHING]) or reuse of the response has been | |||
| validated by the origin server. In other words, Vary expands the | ||||
| cache key required to match a new request to the stored cache | cache key required to match a new request to the stored cache | |||
| entry. | entry. | |||
| 2. To inform user agent recipients that this response is subject to | 2. To inform user agent recipients that this response was subject to | |||
| content negotiation (Section 12) and that a different | content negotiation (Section 12) and a different representation | |||
| representation might be sent in a subsequent request if | might be sent in a subsequent request if other values are | |||
| additional parameters are provided in the listed header fields | provided in the listed header fields (proactive negotiation). | |||
| (proactive negotiation). | ||||
| An origin server SHOULD send a Vary header field when its algorithm | An origin server SHOULD generate a Vary header field on a cacheable | |||
| for selecting a representation varies based on aspects of the request | response when it wishes that response to be selectively reused for | |||
| message other than the method and target URI, unless the variance | subsequent requests. Generally, that is the case when the response | |||
| cannot be crossed or the origin server has been deliberately | content has been tailored to better fit the preferences expressed by | |||
| configured to prevent cache transparency. For example, there is no | those selecting header fields, such as when an origin server has | |||
| need to send the Authorization field name in Vary because reuse | selected the response's language based on the request's | |||
| across users is constrained by the field definition (Section 11.6.2). | Accept-Language header field. | |||
| Likewise, an origin server might use Cache-Control response | ||||
| directives (Section 5.2 of [CACHING]) to supplant Vary if it | Vary might be elided when an origin server considers variance in | |||
| considers the variance less significant than the performance cost of | content selection to be less significant than Vary's performance | |||
| Vary's impact on caching. | impact on caching, particularly when reuse is already limited by | |||
| Cache-Control response directives (Section 5.2 of [CACHING]). | ||||
| There is no need to send the Authorization field name in Vary because | ||||
| reuse of that response for a different user is prohibited by the | ||||
| field definition (Section 11.6.2). Likewise, if the response content | ||||
| has been selected or influenced by network region but the origin | ||||
| server wants the cached response to be reused even if recipients move | ||||
| from one region to another, then there is no need for the origin | ||||
| server to indicate such variance in Vary. | ||||
| 13. Conditional Requests | 13. Conditional Requests | |||
| A conditional request is an HTTP request with one or more request | A conditional request is an HTTP request with one or more request | |||
| header fields that indicate a precondition to be tested before | header fields that indicate a precondition to be tested before | |||
| 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 | |||
| skipping to change at page 127, line 21 ¶ | skipping to change at page 127, line 12 ¶ | |||
| 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). In general, it can be used with | |||
| method to abort a request if the selected representation does not | any method that involves the selection or modification of a | |||
| match one that the client has already stored (or partially stored) | representation to abort the request if the selected representation's | |||
| from a prior request. | current entity-tag is not a member within the If-Match field value. | |||
| An origin server that receives an If-Match header field MUST evaluate | When an origin server receives a request that selects a | |||
| the condition as per Section 13.2 prior to performing the method. | representation and that request includes an If-Match header field, | |||
| the origin server MUST evaluate the If-Match condition as per | ||||
| Section 13.2 prior to performing the method. | ||||
| To evaluate a received If-Match header field: | To evaluate a received If-Match header field: | |||
| 1. If the field value is "*", the condition is true if the origin | 1. If the field value is "*", the condition is true if the origin | |||
| server has a current representation for the target resource. | server has a current representation for the target resource. | |||
| 2. If the field value is a list of entity-tags, the condition is | 2. If the field value is a list of entity-tags, the condition is | |||
| true if any of the listed tags match the entity-tag of the | true if any of the listed tags match the entity-tag of the | |||
| selected representation. | selected representation. | |||
| 3. Otherwise, the condition is false. | 3. Otherwise, the condition is false. | |||
| An origin server MUST NOT perform the requested method if a received | An origin server that evaluates an If-Match condition MUST NOT | |||
| If-Match condition evaluates to false. Instead, the origin server | perform the requested method if the condition evaluates to false. | |||
| MAY indicate that the conditional request failed by responding with a | Instead, the origin server MAY indicate that the conditional request | |||
| 412 (Precondition Failed) status code. Alternatively, if the request | failed by responding with a 412 (Precondition Failed) status code. | |||
| is a state-changing operation that appears to have already been | Alternatively, if the request is a state-changing operation that | |||
| applied to the selected representation, the origin server MAY respond | appears to have already been applied to the selected representation, | |||
| with a 2xx (Successful) status code (i.e., the change requested by | the origin server MAY respond with a 2xx (Successful) status code | |||
| the user agent has already succeeded, but the user agent might not be | (i.e., the change requested by the user agent has already succeeded, | |||
| aware of it, perhaps because the prior response was lost or an | but the user agent might not be aware of it, perhaps because the | |||
| equivalent change was made by some other user agent). | prior response was lost or an equivalent change was made by some | |||
| other user agent). | ||||
| Allowing an origin server to send a success response when a change | Allowing an origin server to send a success response when a change | |||
| request appears to have already been applied is more efficient for | request appears to have already been applied is more efficient for | |||
| many authoring use cases, but comes with some risk if multiple user | many authoring use cases, but comes with some risk if multiple user | |||
| agents are making change requests that are very similar but not | agents are making change requests that are very similar but not | |||
| cooperative. For example, multiple user agents writing to a common | cooperative. For example, multiple user agents writing to a common | |||
| resource as a semaphore (e.g., a non-atomic increment) are likely to | resource as a semaphore (e.g., a non-atomic increment) are likely to | |||
| collide and potentially lose important state transitions. For those | collide and potentially lose important state transitions. For those | |||
| kinds of resources, an origin server is better off being stringent in | kinds of resources, an origin server is better off being stringent in | |||
| sending 412 for every failed precondition on an unsafe method. In | sending 412 for every failed precondition on an unsafe method. In | |||
| other cases, excluding the ETag field from a success response might | other cases, excluding the ETag field from a success response might | |||
| encourage the user agent to perform a GET as its next request to | encourage the user agent to perform a GET as its next request to | |||
| eliminate confusion about the resource's current state. | eliminate confusion about the resource's current state. | |||
| The If-Match header field can be ignored by caches and intermediaries | A client MAY send an If-Match header field in a GET request to | |||
| because it is not applicable to a stored response. | indicate that it would prefer a 412 (Precondition Failed) response if | |||
| the selected representation does not match. However, this is only | ||||
| useful in range requests (Section 14), for completing a previously | ||||
| received partial representation, when there is no desire for a new | ||||
| representation. If-Range (Section 13.1.5) is better suited for range | ||||
| requests when the client prefers to receive a new representation. | ||||
| A cache or intermediary MAY ignore If-Match because its | ||||
| interoperability features are only necessary for an origin server. | ||||
| Note that an If-Match header field with a list value containing "*" | Note that an If-Match header field with a list value containing "*" | |||
| and other values (including other instances of "*") is syntactically | and other values (including other instances of "*") is syntactically | |||
| invalid (therefore not allowed to be generated) and furthermore is | invalid (therefore not allowed to be generated) and furthermore is | |||
| unlikely to be interoperable. | unlikely to be interoperable. | |||
| 13.1.2. If-None-Match | 13.1.2. If-None-Match | |||
| The "If-None-Match" header field makes the request method conditional | The "If-None-Match" header field makes the request method conditional | |||
| on a recipient cache or origin server either not having any current | on a recipient cache or origin server either not having any current | |||
| skipping to change at page 129, line 17 ¶ | skipping to change at page 129, line 17 ¶ | |||
| responses matches the selected representation. | responses matches the selected representation. | |||
| If-None-Match can also be used with a value of "*" to prevent an | If-None-Match can also be used with a value of "*" to prevent an | |||
| unsafe request method (e.g., PUT) from inadvertently modifying an | unsafe request method (e.g., PUT) from inadvertently modifying an | |||
| existing representation of the target resource when the client | existing representation of the target resource when the client | |||
| believes that the resource does not have a current representation | believes that the resource does not have a current representation | |||
| (Section 9.2.1). This is a variation on the "lost update" problem | (Section 9.2.1). This is a variation on the "lost update" problem | |||
| that might arise if more than one client attempts to create an | that might arise if more than one client attempts to create an | |||
| initial representation for the target resource. | initial representation for the target resource. | |||
| An origin server that receives an If-None-Match header field MUST | When an origin server receives a request that selects a | |||
| evaluate the condition as per Section 13.2 prior to performing the | representation and that request includes an If-None-Match header | |||
| method. | field, the origin server MUST evaluate the If-None-Match condition as | |||
| per Section 13.2 prior to performing the method. | ||||
| To evaluate a received If-None-Match header field: | To evaluate a received If-None-Match header field: | |||
| 1. If the field value is "*", the condition is false if the origin | 1. If the field value is "*", the condition is false if the origin | |||
| server has a current representation for the target resource. | server has a current representation for the target resource. | |||
| 2. If the field value is a list of entity-tags, the condition is | 2. If the field value is a list of entity-tags, the condition is | |||
| false if one of the listed tags matches the entity-tag of the | false if one of the listed tags matches the entity-tag of the | |||
| selected representation. | selected representation. | |||
| 3. Otherwise, the condition is true. | 3. Otherwise, the condition is true. | |||
| An origin server MUST NOT perform the requested method if a received | An origin server that evaluates an If-None-Match condition MUST NOT | |||
| If-None-Match condition evaluates to false; instead, the origin | perform the requested method if the condition evaluates to false; | |||
| server MUST respond with either a) the 304 (Not Modified) status code | instead, the origin server MUST respond with either a) the 304 (Not | |||
| if the request method is GET or HEAD or b) the 412 (Precondition | Modified) status code if the request method is GET or HEAD or b) the | |||
| Failed) status code for all other request methods. | 412 (Precondition Failed) status code for all other request methods. | |||
| Requirements on cache handling of a received If-None-Match header | Requirements on cache handling of a received If-None-Match header | |||
| field are defined in Section 4.3.2 of [CACHING]. | field are defined in Section 4.3.2 of [CACHING]. | |||
| Note that an If-None-Match header field with a list value containing | Note that an If-None-Match header field with a list value containing | |||
| "*" and other values (including other instances of "*") is | "*" and other values (including other instances of "*") is | |||
| syntactically invalid (therefore not allowed to be generated) and | syntactically invalid (therefore not allowed to be generated) and | |||
| furthermore is unlikely to be interoperable. | furthermore is unlikely to be interoperable. | |||
| 13.1.3. If-Modified-Since | 13.1.3. If-Modified-Since | |||
| skipping to change at page 130, line 31 ¶ | skipping to change at page 130, line 31 ¶ | |||
| 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 | |||
| more than one member, or if the request method is neither GET nor | more than one member, or if the request method is neither GET nor | |||
| HEAD. | HEAD. | |||
| A recipient MUST ignore the If-Modified-Since header field if the | ||||
| resource does not have a modification date available. | ||||
| A recipient MUST interpret an If-Modified-Since field value's | A recipient MUST interpret an If-Modified-Since field value's | |||
| timestamp in terms of the origin server's clock. | timestamp in terms of the origin server's clock. | |||
| If-Modified-Since is typically used for two distinct purposes: 1) to | If-Modified-Since is typically used for two distinct purposes: 1) to | |||
| allow efficient updates of a cached representation that does not have | allow efficient updates of a cached representation that does not have | |||
| an entity-tag and 2) to limit the scope of a web traversal to | an entity-tag and 2) to limit the scope of a web traversal to | |||
| resources that have recently changed. | resources that have recently changed. | |||
| When used for cache updates, a cache will typically use the value of | When used for cache updates, a cache will typically use the value of | |||
| the cached message's Last-Modified header field to generate the field | the cached message's Last-Modified header field to generate the field | |||
| value of If-Modified-Since. This behavior is most interoperable for | value of If-Modified-Since. This behavior is most interoperable for | |||
| cases where clocks are poorly synchronized or when the server has | cases where clocks are poorly synchronized or when the server has | |||
| chosen to only honor exact timestamp matches (due to a problem with | chosen to only honor exact timestamp matches (due to a problem with | |||
| Last-Modified dates that appear to go "back in time" when the origin | Last-Modified dates that appear to go "back in time" when the origin | |||
| server's clock is corrected or a representation is restored from an | server's clock is corrected or a representation is restored from an | |||
| archived backup). However, caches occasionally generate the field | archived backup). However, caches occasionally generate the field | |||
| value based on other data, such as the Date header field of the | value based on other data, such as the Date header field of the | |||
| cached message or the local clock time that the message was received, | cached message or the clock time at which the message was received, | |||
| particularly when the cached message does not contain a Last-Modified | particularly when the cached message does not contain a Last-Modified | |||
| header field. | header field. | |||
| When used for limiting the scope of retrieval to a recent time | When used for limiting the scope of retrieval to a recent time | |||
| window, a user agent will generate an If-Modified-Since field value | window, a user agent will generate an If-Modified-Since field value | |||
| based on either its own local clock or a Date header field received | based on either its own clock or a Date header field received from | |||
| from the server in a prior response. Origin servers that choose an | the server in a prior response. Origin servers that choose an exact | |||
| exact timestamp match based on the selected representation's | timestamp match based on the selected representation's Last-Modified | |||
| Last-Modified header field will not be able to help the user agent | header field will not be able to help the user agent limit its data | |||
| limit its data transfers to only those changed during the specified | transfers to only those changed during the specified window. | |||
| window. | ||||
| An origin server that receives an If-Modified-Since header field | When an origin server receives a request that selects a | |||
| SHOULD evaluate the condition as per Section 13.2 prior to performing | representation and that request includes an If-Modified-Since header | |||
| the method. | field without an If-None-Match header field, the origin server SHOULD | |||
| evaluate the If-Modified-Since condition as per Section 13.2 prior to | ||||
| performing the method. | ||||
| To evaluate a received If-Modified-Since header field: | To evaluate a received If-Modified-Since header field: | |||
| 1. If the selected representation's last modification date is | 1. If the selected representation's last modification date is | |||
| earlier or equal to the date provided in the field value, the | earlier or equal to the date provided in the field value, the | |||
| condition is false. | condition is false. | |||
| 2. Otherwise, the condition is true. | 2. Otherwise, the condition is true. | |||
| An origin server SHOULD NOT perform the requested method if a | An origin server that evaluates an If-Modified-Since condition SHOULD | |||
| received If-Modified-Since condition evaluates to false; instead, the | NOT perform the requested method if the condition evaluates to false; | |||
| origin server SHOULD generate a 304 (Not Modified) response, | instead, the origin server SHOULD generate a 304 (Not Modified) | |||
| including only those metadata that are useful for identifying or | response, including only those metadata that are useful for | |||
| updating a previously cached response. | identifying or updating a previously cached response. | |||
| Requirements on cache handling of a received If-Modified-Since header | Requirements on cache handling of a received If-Modified-Since header | |||
| field are defined in Section 4.3.2 of [CACHING]. | field are defined in Section 4.3.2 of [CACHING]. | |||
| 13.1.4. If-Unmodified-Since | 13.1.4. If-Unmodified-Since | |||
| 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 | |||
| skipping to change at page 132, line 14 ¶ | skipping to change at page 132, line 29 ¶ | |||
| 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). | |||
| A recipient MUST ignore the If-Unmodified-Since header field if the | ||||
| resource does not have a modification date available. | ||||
| A recipient MUST interpret an If-Unmodified-Since field value's | A recipient MUST interpret an If-Unmodified-Since field value's | |||
| timestamp in terms of the origin server's clock. | timestamp in terms of the origin server's clock. | |||
| If-Unmodified-Since is most often used with state-changing methods | If-Unmodified-Since is most often used with state-changing methods | |||
| (e.g., POST, PUT, DELETE) to prevent accidental overwrites when | (e.g., POST, PUT, DELETE) to prevent accidental overwrites when | |||
| multiple user agents might be acting in parallel on a resource that | multiple user agents might be acting in parallel on a resource that | |||
| does not supply entity-tags with its representations (i.e., to | does not supply entity-tags with its representations (i.e., to | |||
| prevent the "lost update" problem). It can also be used with any | prevent the "lost update" problem). In general, it can be used with | |||
| method to abort a request if the selected representation does not | any method that involves the selection or modification of a | |||
| match one that the client already stored (or partially stored) from a | representation to abort the request if the selected representation's | |||
| prior request. | last modification date has changed since the date provided in the If- | |||
| Unmodified-Since field value. | ||||
| An origin server that receives an If-Unmodified-Since header field | When an origin server receives a request that selects a | |||
| without an If-Match header field MUST evaluate the condition as per | representation and that request includes an If-Unmodified-Since | |||
| Section 13.2 prior to performing the method. | header field without an If-Match header field, the origin server MUST | |||
| evaluate the If-Unmodified-Since condition as per Section 13.2 prior | ||||
| to performing the method. | ||||
| To evaluate a received If-Unmodified-Since header field: | To evaluate a received If-Unmodified-Since header field: | |||
| 1. If the selected representation's last modification date is | 1. If the selected representation's last modification date is | |||
| earlier than or equal to the date provided in the field value, | earlier than or equal to the date provided in the field value, | |||
| the condition is true. | the condition is true. | |||
| 2. Otherwise, the condition is false. | 2. Otherwise, the condition is false. | |||
| An origin server MUST NOT perform the requested method if an If- | An origin server that evaluates an If-Unmodified-Since condition MUST | |||
| Unmodified-Since condition evaluates to false. Instead, the origin | NOT perform the requested method if the condition evaluates to false. | |||
| server MAY indicate that the conditional request failed by responding | Instead, the origin server MAY indicate that the conditional request | |||
| with a 412 (Precondition Failed) status code. Alternatively, if the | failed by responding with a 412 (Precondition Failed) status code. | |||
| request is a state-changing operation that appears to have already | Alternatively, if the request is a state-changing operation that | |||
| been applied to the selected representation, the origin server MAY | appears to have already been applied to the selected representation, | |||
| respond with a 2xx (Successful) status code (i.e., the change | the origin server MAY respond with a 2xx (Successful) status code | |||
| requested by the user agent has already succeeded, but the user agent | (i.e., the change requested by the user agent has already succeeded, | |||
| might not be aware of it, perhaps because the prior response was lost | but the user agent might not be aware of it, perhaps because the | |||
| or an equivalent change was made by some other user agent). | prior response was lost or an equivalent change was made by some | |||
| other user agent). | ||||
| Allowing an origin server to send a success response when a change | Allowing an origin server to send a success response when a change | |||
| request appears to have already been applied is more efficient for | request appears to have already been applied is more efficient for | |||
| many authoring use cases, but comes with some risk if multiple user | many authoring use cases, but comes with some risk if multiple user | |||
| agents are making change requests that are very similar but not | agents are making change requests that are very similar but not | |||
| cooperative. In those cases, an origin server is better off being | cooperative. In those cases, an origin server is better off being | |||
| stringent in sending 412 for every failed precondition on an unsafe | stringent in sending 412 for every failed precondition on an unsafe | |||
| method. | method. | |||
| The If-Unmodified-Since header field can be ignored by caches and | A client MAY send an If-Unmodified-Since header field in a GET | |||
| intermediaries because it is not applicable to a stored response. | request to indicate that it would prefer a 412 (Precondition Failed) | |||
| response if the selected representation has been modified. However, | ||||
| this is only useful in range requests (Section 14), for completing a | ||||
| previously received partial representation, when there is no desire | ||||
| for a new representation. If-Range (Section 13.1.5) is better suited | ||||
| for range requests when the client prefers to receive a new | ||||
| representation. | ||||
| A cache or intermediary MAY ignore If-Unmodified-Since because its | ||||
| interoperability features are only necessary for an origin server. | ||||
| 13.1.5. If-Range | 13.1.5. If-Range | |||
| The "If-Range" header field provides a special conditional request | The "If-Range" header field provides a special conditional request | |||
| mechanism that is similar to the If-Match and If-Unmodified-Since | mechanism that is similar to the If-Match and If-Unmodified-Since | |||
| header fields but that instructs the recipient to ignore the Range | header fields but that instructs the recipient to ignore the Range | |||
| header field if the validator doesn't match, resulting in transfer of | header field if the validator doesn't match, resulting in transfer of | |||
| the new selected representation instead of a 412 (Precondition | the new selected representation instead of a 412 (Precondition | |||
| Failed) response. | Failed) response. | |||
| skipping to change at page 136, line 35 ¶ | skipping to change at page 137, line 16 ¶ | |||
| If-Modified-Since is present, evaluate the If-Modified-Since | If-Modified-Since is present, evaluate the If-Modified-Since | |||
| precondition: | precondition: | |||
| * if true, continue to step 5 | * if true, continue to step 5 | |||
| * 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: | |||
| * if the validator matches and the Range specification is | * if true and the Range is applicable to the selected | |||
| applicable to the selected representation, respond 206 | representation, respond 206 (Partial Content) | |||
| (Partial Content) | ||||
| * otherwise, ignore the Range header field and respond 200 (OK) | ||||
| 6. Otherwise, | 6. Otherwise, | |||
| * all conditions are met, so perform the requested action and | * perform the requested method and respond according to its | |||
| respond according to its success or failure. | 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 the order for evaluating such fields in | header fields ought to define the order for evaluating such fields in | |||
| relation to those defined in this document and other conditionals | relation to those defined in this document and other conditionals | |||
| that might be found in practice. | 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 | |||
| canceled requests or dropped connections. When a client has stored a | canceled requests or dropped connections. When a client has stored a | |||
| skipping to change at page 151, line 9 ¶ | skipping to change at page 151, line 40 ¶ | |||
| request indicates a preference for no content upon success, the | request indicates a preference for no content upon success, the | |||
| origin server ought to send a _204 (No Content)_ response instead. | origin server ought to send a _204 (No Content)_ response instead. | |||
| For CONNECT, there is no content because the successful result is a | For CONNECT, there is no content because the successful result is a | |||
| tunnel, which begins immediately after the 200 response header | tunnel, which begins immediately after the 200 response header | |||
| section. | section. | |||
| A 200 response is heuristically cacheable; i.e., unless otherwise | A 200 response is heuristically cacheable; i.e., unless otherwise | |||
| indicated by the method definition or explicit cache controls (see | indicated by the method definition or explicit cache controls (see | |||
| Section 4.2.2 of [CACHING]). | Section 4.2.2 of [CACHING]). | |||
| In 200 responses to GET or HEAD, an origin server SHOULD send any | ||||
| available validator fields (Section 8.8) for the selected | ||||
| representation, with both a strong entity-tag and a Last-Modified | ||||
| date being preferred. | ||||
| In 200 responses to state-changing methods, any validator fields | ||||
| (Section 8.8) sent in the response convey the current validators for | ||||
| the new representation formed as a result of successfully applying | ||||
| the request semantics. Note that the PUT method (Section 9.3.4) has | ||||
| additional requirements that might preclude sending such validators. | ||||
| 15.3.2. 201 Created | 15.3.2. 201 Created | |||
| The _201 (Created)_ status code indicates that the request has been | The _201 (Created)_ status code indicates that the request has been | |||
| fulfilled and has resulted in one or more new resources being | fulfilled and has resulted in one or more new resources being | |||
| created. The primary resource created by the request is identified | created. The primary resource created by the request is identified | |||
| by either a Location header field in the response or, if no Location | by either a Location header field in the response or, if no Location | |||
| header field is received, by the target URI. | header field is received, by the target URI. | |||
| The 201 response content typically describes and links to the | The 201 response content typically describes and links to the | |||
| resource(s) created. See Section 8.8 for a discussion of the meaning | resource(s) created. Any validator fields (Section 8.8) sent in the | |||
| and purpose of validator fields, such as ETag and Last-Modified, in a | response convey the current validators for a new representation | |||
| 201 response. | created by the request. Note that the PUT method (Section 9.3.4) has | |||
| additional requirements that might preclude sending such validators. | ||||
| 15.3.3. 202 Accepted | 15.3.3. 202 Accepted | |||
| The _202 (Accepted)_ status code indicates that the request has been | The _202 (Accepted)_ status code indicates that the request has been | |||
| accepted for processing, but the processing has not been completed. | accepted for processing, but the processing has not been completed. | |||
| The request might or might not eventually be acted upon, as it might | The request might or might not eventually be acted upon, as it might | |||
| be disallowed when processing actually takes place. There is no | be disallowed when processing actually takes place. There is no | |||
| facility in HTTP for re-sending a status code from an asynchronous | facility in HTTP for re-sending a status code from an asynchronous | |||
| operation. | operation. | |||
| skipping to change at page 156, line 34 ¶ | skipping to change at page 157, line 34 ¶ | |||
| combined response header fields consist of the most recent 200 | combined response header fields consist of the most recent 200 | |||
| response's header fields. If all of the matching stored responses | response's header fields. If all of the matching stored responses | |||
| are 206 responses, then the stored response with the most recent | are 206 responses, then the stored response with the most recent | |||
| header fields is used as the source of header fields for the combined | header fields is used as the source of header fields for the combined | |||
| response, except that the client MUST use other header fields | response, except that the client MUST use other header fields | |||
| provided in the new response, aside from Content-Range, to replace | provided in the new response, aside from Content-Range, to replace | |||
| all instances of the corresponding header fields in the stored | all instances of the corresponding header fields in the stored | |||
| response. | response. | |||
| The combined response content consists of the union of partial | The combined response content consists of the union of partial | |||
| content ranges in the new response and each of the selected | content ranges within the new response and all of the matching stored | |||
| responses. If the union consists of the entire range of the | responses. If the union consists of the entire range of the | |||
| representation, then the client MUST process the combined response as | representation, then the client MUST process the combined response as | |||
| if it were a complete 200 (OK) response, including a Content-Length | if it were a complete 200 (OK) response, including a Content-Length | |||
| header field that reflects the complete length. Otherwise, the | header field that reflects the complete length. Otherwise, the | |||
| client MUST process the set of continuous ranges as one of the | client MUST process the set of continuous ranges as one of the | |||
| following: an incomplete 200 (OK) response if the combined response | following: an incomplete 200 (OK) response if the combined response | |||
| is a prefix of the representation, a single 206 (Partial Content) | is a prefix of the representation, a single 206 (Partial Content) | |||
| response containing multipart/byteranges content, or multiple 206 | response containing multipart/byteranges content, or multiple 206 | |||
| (Partial Content) responses, each with one continuous range that is | (Partial Content) responses, each with one continuous range that is | |||
| indicated by a Content-Range header field. | indicated by a Content-Range header field. | |||
| skipping to change at page 157, line 21 ¶ | skipping to change at page 158, line 21 ¶ | |||
| of representing this resource, as in the 300 (Multiple Choices) | of representing this resource, as in the 300 (Multiple Choices) | |||
| status code. | status code. | |||
| 3. Redirection to a different resource, identified by the Location | 3. Redirection to a different resource, identified by the Location | |||
| header field, that can represent an indirect response to the | header field, that can represent an indirect response to the | |||
| request, as in the 303 (See Other) status code. | request, as in the 303 (See Other) status code. | |||
| 4. Redirection to a previously stored result, as in the 304 (Not | 4. Redirection to a previously stored result, as in the 304 (Not | |||
| Modified) status code. | Modified) status code. | |||
| If a Location header field (Section 10.2.3) is provided, the user | | *Note:* In HTTP/1.0, the status codes 301 (Moved Permanently) | |||
| | and 302 (Found) were originally defined as method-preserving | ||||
| | ([HTTP/1.0], Section 9.3) to match their implementation at | ||||
| | CERN; 303 (See Other) was defined for a redirection that | ||||
| | changed its method to GET. However, early user agents split on | ||||
| | whether to redirect POST requests as POST (according to then- | ||||
| | current specification) or as GET (the safer alternative when | ||||
| | redirected to a different site). Prevailing practice | ||||
| | eventually converged on changing the method to GET. 307 | ||||
| | (Temporary Redirect) and 308 (Permanent Redirect) [RFC7538] | ||||
| | were later added to unambiguously indicate method-preserving | ||||
| | redirects, and 301/302 have been adjusted to allow a POST | ||||
| | request to be redirected as GET. | ||||
| If a Location header field (Section 10.2.2) is provided, the user | ||||
| agent MAY automatically redirect its request to the URI referenced by | agent MAY automatically redirect its request to the URI referenced by | |||
| the Location field value, even if the specific status code is not | the Location field value, even if the specific status code is not | |||
| understood. Automatic redirection needs to be done with care for | understood. Automatic redirection needs to be done with care for | |||
| methods not known to be safe, as defined in Section 9.2.1, since the | methods not known to be safe, as defined in Section 9.2.1, since the | |||
| user might not wish to redirect an unsafe request. | user might not wish to redirect an unsafe request. | |||
| When automatically following a redirected request, the user agent | When automatically following a redirected request, the user agent | |||
| SHOULD resend the original request message with the following | SHOULD resend the original request message with the following | |||
| modifications: | modifications: | |||
| skipping to change at page 158, line 20 ¶ | skipping to change at page 159, line 32 ¶ | |||
| request because they were added by the calling context) where | request because they were added by the calling context) where | |||
| there are security implications; this includes but is not limited | there are security implications; this includes but is not limited | |||
| to Authorization and Cookie. | to Authorization and Cookie. | |||
| 4. Change the request method according to the redirecting status | 4. Change the request method according to the redirecting status | |||
| code's semantics, if applicable. | code's semantics, if applicable. | |||
| 5. If the request method has been changed to GET or HEAD, remove | 5. If the request method has been changed to GET or HEAD, remove | |||
| content-specific header fields, including (but not limited to) | content-specific header fields, including (but not limited to) | |||
| Content-Encoding, Content-Language, Content-Location, | Content-Encoding, Content-Language, Content-Location, | |||
| Content-Type, Content-Length, Digest, ETag, Last-Modified. | Content-Type, Content-Length, Digest, Last-Modified. | |||
| | *Note:* In HTTP/1.0, the status codes 301 (Moved Permanently) | ||||
| | and 302 (Found) were defined for the first type of redirect | ||||
| | ([HTTP/1.0], Section 9.3). Early user agents split on whether | ||||
| | the method applied to the redirect target would be the same as | ||||
| | the original request or would be rewritten as GET. Although | ||||
| | HTTP originally defined the former semantics for 301 and 302 | ||||
| | (to match its original implementation at CERN), and defined 303 | ||||
| | (See Other) to match the latter semantics, prevailing practice | ||||
| | gradually converged on the latter semantics for 301 and 302 as | ||||
| | well. The first revision of HTTP/1.1 added 307 (Temporary | ||||
| | Redirect) to indicate the former semantics of 302 without being | ||||
| | impacted by divergent practice. For the same reason, 308 | ||||
| | (Permanent Redirect) was later on added in [RFC7538] to match | ||||
| | 301. Over 10 years later, most user agents still do method | ||||
| | rewriting for 301 and 302; therefore, [RFC7231] made that | ||||
| | behavior conformant when the original request is POST. | ||||
| A client SHOULD detect and intervene in cyclical redirections (i.e., | A client SHOULD detect and intervene in cyclical redirections (i.e., | |||
| "infinite" redirection loops). | "infinite" redirection loops). | |||
| | *Note:* An earlier version of this specification recommended a | | *Note:* An earlier version of this specification recommended a | |||
| | maximum of five redirections ([RFC2068], Section 10.3). | | maximum of five redirections ([RFC2068], Section 10.3). | |||
| | Content developers need to be aware that some clients might | | Content developers need to be aware that some clients might | |||
| | implement such a fixed limitation. | | implement such a fixed limitation. | |||
| 15.4.1. 300 Multiple Choices | 15.4.1. 300 Multiple Choices | |||
| skipping to change at page 161, line 19 ¶ | skipping to change at page 161, line 46 ¶ | |||
| URI in the Location header field, which is intended to provide an | URI in the Location header field, which is intended to provide an | |||
| indirect response to the original request. A user agent can perform | indirect response to the original request. A user agent can perform | |||
| a retrieval request targeting that URI (a GET or HEAD request if | a retrieval request targeting that URI (a GET or HEAD request if | |||
| using HTTP), which might also be redirected, and present the eventual | using HTTP), which might also be redirected, and present the eventual | |||
| result as an answer to the original request. Note that the new URI | result as an answer to the original request. Note that the new URI | |||
| in the Location header field is not considered equivalent to the | in the Location header field is not considered equivalent to the | |||
| target URI. | target URI. | |||
| This status code is applicable to any HTTP method. It is primarily | This status code is applicable to any HTTP method. It is primarily | |||
| used to allow the output of a POST action to redirect the user agent | used to allow the output of a POST action to redirect the user agent | |||
| to a selected resource, since doing so provides the information | to a different resource, since doing so provides the information | |||
| corresponding to the POST response in a form that can be separately | corresponding to the POST response as a resource that can be | |||
| identified, bookmarked, and cached, independent of the original | separately identified, bookmarked, and cached. | |||
| request. | ||||
| A 303 response to a GET request indicates that the origin server does | A 303 response to a GET request indicates that the origin server does | |||
| not have a representation of the target resource that can be | not have a representation of the target resource that can be | |||
| transferred by the server over HTTP. However, the Location field | transferred by the server over HTTP. However, the Location field | |||
| value refers to a resource that is descriptive of the target | value refers to a resource that is descriptive of the target | |||
| resource, such that making a retrieval request on that other resource | resource, such that making a retrieval request on that other resource | |||
| might result in a representation that is useful to recipients without | might result in a representation that is useful to recipients without | |||
| implying that it represents the original target resource. Note that | implying that it represents the original target resource. Note that | |||
| answers to the questions of what can be represented, what | answers to the questions of what can be represented, what | |||
| representations are adequate, and what might be a useful description | representations are adequate, and what might be a useful description | |||
| skipping to change at page 171, line 11 ¶ | skipping to change at page 171, line 46 ¶ | |||
| The _502 (Bad Gateway)_ status code indicates that the server, while | The _502 (Bad Gateway)_ status code indicates that the server, while | |||
| acting as a gateway or proxy, received an invalid response from an | acting as a gateway or proxy, received an invalid response from an | |||
| inbound server it accessed while attempting to fulfill the request. | inbound server it accessed while attempting to fulfill the request. | |||
| 15.6.4. 503 Service Unavailable | 15.6.4. 503 Service Unavailable | |||
| The _503 (Service Unavailable)_ status code indicates that the server | The _503 (Service Unavailable)_ status code indicates that the server | |||
| is currently unable to handle the request due to a temporary overload | is currently unable to handle the request due to a temporary overload | |||
| or scheduled maintenance, which will likely be alleviated after some | or scheduled maintenance, which will likely be alleviated after some | |||
| delay. The server MAY send a Retry-After header field | delay. The server MAY send a Retry-After header field | |||
| (Section 10.2.4) to suggest an appropriate amount of time for the | (Section 10.2.3) to suggest an appropriate amount of time for the | |||
| client to wait before retrying the request. | client to wait before retrying the request. | |||
| | *Note:* The existence of the 503 status code does not imply | | *Note:* The existence of the 503 status code does not imply | |||
| | that a server has to use it when becoming overloaded. Some | | that a server has to use it when becoming overloaded. Some | |||
| | servers might simply refuse the connection. | | servers might simply refuse the connection. | |||
| 15.6.5. 504 Gateway Timeout | 15.6.5. 504 Gateway Timeout | |||
| The _504 (Gateway Timeout)_ status code indicates that the server, | The _504 (Gateway Timeout)_ status code indicates that the server, | |||
| while acting as a gateway or proxy, did not receive a timely response | while acting as a gateway or proxy, did not receive a timely response | |||
| skipping to change at page 175, line 49 ¶ | skipping to change at page 176, line 40 ¶ | |||
| 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@w3.org" | located there or by sending an email to the "ietf-http-wg@w3.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 | |||
| (appointed by the IESG or their delegate). Fields with the status | (appointed by the IESG or their delegate). Fields with the status | |||
| 'permanent' are Specification Required ([RFC8126], Section 4.6). | 'permanent' are Specification Required ([RFC8126], Section 4.6). | |||
| Registration requests consist of at least the following information: | Registration requests consist of the following information: | |||
| Field name: | Field name: | |||
| The requested field name. It MUST conform to the field-name | The requested field name. It MUST conform to the field-name | |||
| syntax defined in Section 5.1, and SHOULD be restricted to just | syntax defined in Section 5.1, and SHOULD be restricted to just | |||
| letters, digits, and hyphen ('-') characters, with the first | letters, digits, and hyphen ('-') characters, with the first | |||
| character being a letter. | character being a letter. | |||
| Status: | Status: | |||
| "permanent" or "provisional". | "permanent" or "provisional". | |||
| Specification document(s): | Specification document(s): | |||
| Reference to the document that specifies the field, preferably | Reference to the document that specifies the field, preferably | |||
| including a URI that can be used to retrieve a copy of the | including a URI that can be used to retrieve a copy of the | |||
| document. An indication of the relevant section(s) can also be | document. Optional but encouraged for provisional registrations. | |||
| included, but is not required. | An indication of the relevant section(s) can also be included, but | |||
| is not required. | ||||
| And, optionally: | And, optionally: | |||
| Comments: Additional information, such as about reserved entries. | Comments: Additional information, such as about reserved entries. | |||
| The Expert(s) can define additional fields to be collected in the | The Expert(s) can define additional fields to be collected in the | |||
| registry, in consultation with the community. | registry, in consultation with the community. | |||
| Standards-defined names have a status of "permanent". Other names | Standards-defined names have a status of "permanent". Other names | |||
| can also be registered as permanent, if the Expert(s) find that they | can also be registered as permanent, if the Expert(s) find that they | |||
| skipping to change at page 189, line 48 ¶ | skipping to change at page 190, line 48 ¶ | |||
| being passed with a different prefix to distinguish it from other | being passed with a different prefix to distinguish it from other | |||
| fields. | fields. | |||
| 17.11. Disclosure of Fragment after Redirects | 17.11. Disclosure of Fragment after Redirects | |||
| Although fragment identifiers used within URI references are not sent | Although fragment identifiers used within URI references are not sent | |||
| in requests, implementers ought to be aware that they will be visible | in requests, implementers ought to be aware that they will be visible | |||
| to the user agent and any extensions or scripts running as a result | to the user agent and any extensions or scripts running as a result | |||
| of the response. In particular, when a redirect occurs and the | of the response. In particular, when a redirect occurs and the | |||
| original request's fragment identifier is inherited by the new | original request's fragment identifier is inherited by the new | |||
| reference in Location (Section 10.2.3), this might have the effect of | reference in Location (Section 10.2.2), this might have the effect of | |||
| disclosing one site's fragment to another site. If the first site | disclosing one site's fragment to another site. If the first site | |||
| uses personal information in fragments, it ought to ensure that | uses personal information in fragments, it ought to ensure that | |||
| redirects to other sites include a (possibly empty) fragment | redirects to other sites include a (possibly empty) fragment | |||
| component in order to block that inheritance. | component in order to block that inheritance. | |||
| 17.12. Disclosure of Product Information | 17.12. Disclosure of Product Information | |||
| The User-Agent (Section 10.1.6), Via (Section 7.6.3), and Server | The User-Agent (Section 10.1.5), Via (Section 7.6.3), and Server | |||
| (Section 10.2.5) header fields often reveal information about the | (Section 10.2.4) header fields often reveal information about the | |||
| respective sender's software systems. In theory, this can make it | respective sender's software systems. In theory, this can make it | |||
| easier for an attacker to exploit known security holes; in practice, | easier for an attacker to exploit known security holes; in practice, | |||
| attackers tend to try all potential holes regardless of the apparent | attackers tend to try all potential holes regardless of the apparent | |||
| software versions being used. | software versions being used. | |||
| Proxies that serve as a portal through a network firewall ought to | Proxies that serve as a portal through a network firewall ought to | |||
| take special precautions regarding the transfer of header information | take special precautions regarding the transfer of header information | |||
| that might identify hosts behind the firewall. The Via header field | that might identify hosts behind the firewall. The Via header field | |||
| allows intermediaries to replace sensitive machine names with | allows intermediaries to replace sensitive machine names with | |||
| pseudonyms. | pseudonyms. | |||
| skipping to change at page 198, line 24 ¶ | skipping to change at page 199, line 24 ¶ | |||
| | Content-Language | standard | 8.5 | | | | Content-Language | standard | 8.5 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Content-Length | standard | 8.6 | | | | Content-Length | standard | 8.6 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Content-Location | standard | 8.7 | | | | Content-Location | standard | 8.7 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Content-Range | standard | 14.4 | | | | Content-Range | standard | 14.4 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Content-Type | standard | 8.3 | | | | Content-Type | standard | 8.3 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Date | standard | 10.2.2 | | | | Date | standard | 6.6.1 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | ETag | standard | 8.8.3 | | | | ETag | standard | 8.8.3 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Expect | standard | 10.1.1 | | | | Expect | standard | 10.1.1 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | From | standard | 10.1.2 | | | | From | standard | 10.1.2 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Host | standard | 7.2 | | | | Host | standard | 7.2 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | If-Match | standard | 13.1.1 | | | | If-Match | standard | 13.1.1 | | | |||
| skipping to change at page 198, line 46 ¶ | skipping to change at page 199, line 46 ¶ | |||
| | If-Modified-Since | standard | 13.1.3 | | | | If-Modified-Since | standard | 13.1.3 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | If-None-Match | standard | 13.1.2 | | | | If-None-Match | standard | 13.1.2 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | If-Range | standard | 13.1.5 | | | | If-Range | standard | 13.1.5 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | If-Unmodified-Since | standard | 13.1.4 | | | | If-Unmodified-Since | standard | 13.1.4 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Last-Modified | standard | 8.8.2 | | | | Last-Modified | standard | 8.8.2 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Location | standard | 10.2.3 | | | | Location | standard | 10.2.2 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Max-Forwards | standard | 7.6.2 | | | | Max-Forwards | standard | 7.6.2 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Proxy-Authenticate | standard | 11.7.1 | | | | Proxy-Authenticate | standard | 11.7.1 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Proxy-Authentication-Info | standard | 11.7.3 | | | | Proxy-Authentication-Info | standard | 11.7.3 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Proxy-Authorization | standard | 11.7.2 | | | | Proxy-Authorization | standard | 11.7.2 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Range | standard | 14.2 | | | | Range | standard | 14.2 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Referer | standard | 10.1.3 | | | | Referer | standard | 10.1.3 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Retry-After | standard | 10.2.4 | | | | Retry-After | standard | 10.2.3 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Server | standard | 10.2.5 | | | | Server | standard | 10.2.4 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | TE | standard | 10.1.4 | | | | TE | standard | 10.1.4 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Trailer | standard | 10.1.5 | | | | Trailer | standard | 6.6.2 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Upgrade | standard | 7.8 | | | | Upgrade | standard | 7.8 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | User-Agent | standard | 10.1.6 | | | | User-Agent | standard | 10.1.5 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Vary | standard | 12.5.5 | | | | Vary | standard | 12.5.5 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | Via | standard | 7.6.3 | | | | Via | standard | 7.6.3 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | WWW-Authenticate | standard | 11.6.1 | | | | WWW-Authenticate | standard | 11.6.1 | | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| | * | standard | 12.5.5 | (reserved) | | | * | standard | 12.5.5 | (reserved) | | |||
| +---------------------------+------------+--------+------------+ | +---------------------------+------------+--------+------------+ | |||
| skipping to change at page 201, line 46 ¶ | skipping to change at page 202, line 46 ¶ | |||
| +------+-------------------+-------------------------+------+ | +------+-------------------+-------------------------+------+ | |||
| 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-17, 26 July 2021, | draft-ietf-httpbis-cache-18, 18 August 2021, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | |||
| cache-17>. | cache-18>. | |||
| [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>. | |||
| skipping to change at page 202, line 48 ¶ | skipping to change at page 203, line 48 ¶ | |||
| 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., | [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | |||
| Housley, R., and W. Polk, "Internet X.509 Public Key | Housley, R., and W. Polk, "Internet X.509 Public Key | |||
| Infrastructure Certificate and Certificate Revocation List | Infrastructure Certificate and Certificate Revocation List | |||
| (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | |||
| <https://www.rfc-editor.org/info/rfc5280>. | <https://www.rfc-editor.org/info/rfc5280>. | |||
| [RFC5322] Resnick, P., "Internet Message Format", RFC 5322, | ||||
| DOI 10.17487/RFC5322, October 2008, | ||||
| <https://www.rfc-editor.org/info/rfc5322>. | ||||
| [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 205, line 12 ¶ | skipping to change at page 206, line 16 ¶ | |||
| HTTP/2", RFC 7541, DOI 10.17487/RFC7541, May 2015, | HTTP/2", RFC 7541, DOI 10.17487/RFC7541, May 2015, | |||
| <https://www.rfc-editor.org/info/rfc7541>. | <https://www.rfc-editor.org/info/rfc7541>. | |||
| [HTTP/1.0] Berners-Lee, T., Fielding, R.T., and H.F. Nielsen, | [HTTP/1.0] Berners-Lee, T., Fielding, R.T., and H.F. Nielsen, | |||
| "Hypertext Transfer Protocol -- HTTP/1.0", RFC 1945, | "Hypertext Transfer Protocol -- HTTP/1.0", RFC 1945, | |||
| DOI 10.17487/RFC1945, May 1996, | DOI 10.17487/RFC1945, May 1996, | |||
| <https://www.rfc-editor.org/info/rfc1945>. | <https://www.rfc-editor.org/info/rfc1945>. | |||
| [HTTP/1.1] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [HTTP/1.1] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "HTTP/1.1", Work in Progress, Internet-Draft, draft- | Ed., "HTTP/1.1", Work in Progress, Internet-Draft, draft- | |||
| ietf-httpbis-messaging-17, 26 July 2021, | ietf-httpbis-messaging-18, 18 August 2021, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | |||
| messaging-17>. | messaging-18>. | |||
| [HTTP/2] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | [HTTP/2] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | |||
| Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | |||
| DOI 10.17487/RFC7540, May 2015, | DOI 10.17487/RFC7540, May 2015, | |||
| <https://www.rfc-editor.org/info/rfc7540>. | <https://www.rfc-editor.org/info/rfc7540>. | |||
| [HTTP/3] Bishop, M., "Hypertext Transfer Protocol Version 3 | [HTTP/3] 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-34, 2 February 2021, | quic-http-34, 2 February 2021, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-quic- | <https://datatracker.ietf.org/doc/html/draft-ietf-quic- | |||
| skipping to change at page 207, line 33 ¶ | skipping to change at page 208, line 37 ¶ | |||
| [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S. | [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S. | |||
| Rose, "DNS Security Introduction and Requirements", | Rose, "DNS Security Introduction and Requirements", | |||
| RFC 4033, DOI 10.17487/RFC4033, March 2005, | RFC 4033, DOI 10.17487/RFC4033, March 2005, | |||
| <https://www.rfc-editor.org/info/rfc4033>. | <https://www.rfc-editor.org/info/rfc4033>. | |||
| [RFC4559] Jaganathan, K., Zhu, L., and J. Brezak, "SPNEGO-based | [RFC4559] Jaganathan, K., Zhu, L., and J. Brezak, "SPNEGO-based | |||
| Kerberos and NTLM HTTP Authentication in Microsoft | Kerberos and NTLM HTTP Authentication in Microsoft | |||
| Windows", RFC 4559, DOI 10.17487/RFC4559, June 2006, | Windows", RFC 4559, DOI 10.17487/RFC4559, June 2006, | |||
| <https://www.rfc-editor.org/info/rfc4559>. | <https://www.rfc-editor.org/info/rfc4559>. | |||
| [RFC5322] Resnick, P., "Internet Message Format", RFC 5322, | ||||
| DOI 10.17487/RFC5322, October 2008, | ||||
| <https://www.rfc-editor.org/info/rfc5322>. | ||||
| [RFC5789] Dusseault, L. and J. Snell, "PATCH Method for HTTP", | [RFC5789] Dusseault, L. and J. Snell, "PATCH Method for HTTP", | |||
| RFC 5789, DOI 10.17487/RFC5789, March 2010, | RFC 5789, DOI 10.17487/RFC5789, March 2010, | |||
| <https://www.rfc-editor.org/info/rfc5789>. | <https://www.rfc-editor.org/info/rfc5789>. | |||
| [RFC5905] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch, | [RFC5905] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch, | |||
| "Network Time Protocol Version 4: Protocol and Algorithms | "Network Time Protocol Version 4: Protocol and Algorithms | |||
| Specification", RFC 5905, DOI 10.17487/RFC5905, June 2010, | Specification", RFC 5905, DOI 10.17487/RFC5905, June 2010, | |||
| <https://www.rfc-editor.org/info/rfc5905>. | <https://www.rfc-editor.org/info/rfc5905>. | |||
| [RFC6454] Barth, A., "The Web Origin Concept", RFC 6454, | [RFC6454] Barth, A., "The Web Origin Concept", RFC 6454, | |||
| skipping to change at page 229, line 47 ¶ | skipping to change at page 230, line 47 ¶ | |||
| * 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>) | |||
| * 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>) | |||
| * In Section 10.1.5 (Trailer), Section 7.6.3 (Via), Section 7.8 | * In Section 6.6.2 (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>) | |||
| * 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 | |||
| skipping to change at page 233, line 23 ¶ | skipping to change at page 234, line 23 ¶ | |||
| for new methods (<https://github.com/httpwg/http-core/issues/636>) | for new methods (<https://github.com/httpwg/http-core/issues/636>) | |||
| * 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>) | |||
| * 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>) | |||
| * In Section 10.2.2, specify that recipients can replace an invalid | * In Section 6.6.1, 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 | C.16. Since draft-ietf-httpbis-semantics-14 | |||
| * In Section 5.5, relax prohibition of characters in field values to | * In Section 5.5, relax prohibition of characters in field values to | |||
| CR and NUL (<https://github.com/httpwg/http-core/issues/683>) | CR and NUL (<https://github.com/httpwg/http-core/issues/683>) | |||
| * In Section 15, clarify that status code values outside the range | * In Section 15, clarify that status code values outside the range | |||
| 100..599 are invalid, and recommend error handling | 100..599 are invalid, and recommend error handling | |||
| skipping to change at page 235, line 26 ¶ | skipping to change at page 236, line 26 ¶ | |||
| after the 101 response (<https://github.com/httpwg/http-core/ | after the 101 response (<https://github.com/httpwg/http-core/ | |||
| issues/776>) | issues/776>) | |||
| * In Section 9.3.6, state that data received after the headers of a | * In Section 9.3.6, state that data received after the headers of a | |||
| CONNECT message is version-specific (<https://github.com/httpwg/ | CONNECT message is version-specific (<https://github.com/httpwg/ | |||
| http-core/issues/780>) | http-core/issues/780>) | |||
| * In Section 4.2.3, clarify how normalization works, and align with | * In Section 4.2.3, clarify how normalization works, and align with | |||
| RF3986 (<https://github.com/httpwg/http-core/issues/788>) | RF3986 (<https://github.com/httpwg/http-core/issues/788>) | |||
| * In Section 10.1.5, note that the Trailer field can be used to | * In Section 6.6.2, note that the Trailer field can be used to | |||
| discover deleted trailers (<https://github.com/httpwg/http-core/ | discover deleted trailers (<https://github.com/httpwg/http-core/ | |||
| issues/793>) | issues/793>) | |||
| * Throughout, remove unneeded normative references to [HTTP/1.1] | * Throughout, remove unneeded normative references to [HTTP/1.1] | |||
| (<https://github.com/httpwg/http-core/issues/795>) | (<https://github.com/httpwg/http-core/issues/795>) | |||
| * In Section 10.1.4, explicitly require listing in Connection | * In Section 10.1.4, explicitly require listing in Connection | |||
| (<https://github.com/httpwg/http-core/issues/809>) | (<https://github.com/httpwg/http-core/issues/809>) | |||
| C.17. Since draft-ietf-httpbis-semantics-15 | C.17. Since draft-ietf-httpbis-semantics-15 | |||
| skipping to change at page 236, line 45 ¶ | skipping to change at page 237, line 45 ¶ | |||
| * In Section 7.4, check all target URIs for scheme semantic | * In Section 7.4, check all target URIs for scheme semantic | |||
| mismatches (<https://github.com/httpwg/http-core/issues/896>) | mismatches (<https://github.com/httpwg/http-core/issues/896>) | |||
| * In Section 9.3.1, Section 9.3.2, and Section 9.3.5, clarify | * In Section 9.3.1, Section 9.3.2, and Section 9.3.5, clarify | |||
| (again) that sending content in a request for a method that does | (again) that sending content in a request for a method that does | |||
| not define such content will not interoperate without prior | not define such content will not interoperate without prior | |||
| agreement, even if it is parsed correctly, and cannot be relied | agreement, even if it is parsed correctly, and cannot be relied | |||
| upon by an origin server unless they control the entire request | upon by an origin server unless they control the entire request | |||
| chain (<https://github.com/httpwg/http-core/issues/904>) | chain (<https://github.com/httpwg/http-core/issues/904>) | |||
| C.19. Since draft-ietf-httpbis-semantics-17 | ||||
| * Move ABNF for obs-text into Section 5.5 | ||||
| (<https://github.com/httpwg/http-core/issues/914>) | ||||
| * In Section 6.4.1, note that response metadata can be relevant as | ||||
| well (<https://github.com/httpwg/http-core/issues/914>) | ||||
| * In Section 6.6.2, use the term "signature" througout and lower | ||||
| expectations on what Trailer indicates without a trailer section | ||||
| (<https://github.com/httpwg/http-core/issues/914>) | ||||
| * In Section 8.3, cleanup mime sniffing discussion | ||||
| (<https://github.com/httpwg/http-core/issues/914>) | ||||
| * In Section 10.1.4, add a forward reference to "weight" | ||||
| (<https://github.com/httpwg/http-core/issues/914>) | ||||
| * In Section 12.5.3, clarify that the examples contains multiple | ||||
| values; also remove obsolete HTTP/1.0 note about qvalues | ||||
| (<https://github.com/httpwg/http-core/issues/914>) | ||||
| * In Section 15.4, remove incorrect mention of Etag as request field | ||||
| (<https://github.com/httpwg/http-core/issues/914>) | ||||
| * Move text about obs-fold in message/http to [HTTP/1.1]; also note | ||||
| that LF is forbidden in field values just as CR and NUL | ||||
| (<https://github.com/httpwg/http-core/issues/923>) | ||||
| * In Section 7.7, properly refer to text that has moved to | ||||
| [HTTP/1.1] (<https://github.com/httpwg/http-core/issues/930>) | ||||
| * Rewrite description of validators and move cache-related aspects | ||||
| into [CACHING] (<https://github.com/httpwg/http-core/issues/933>) | ||||
| * In Section 12.5.5, rephrase description to be more explanatory | ||||
| (<https://github.com/httpwg/http-core/issues/938>) | ||||
| * In Section 13.2.2, clarify that a false If-Range means ignore the | ||||
| Range (<https://github.com/httpwg/http-core/issues/940>) | ||||
| * In Section 13.1.3 and Section 13.1.4, restore text about missing | ||||
| modification date (<https://github.com/httpwg/http-core/ | ||||
| issues/942>) | ||||
| * In Section 5.6.1.1, avoid duplicate normative requirement | ||||
| (<https://github.com/httpwg/http-core/issues/943>) | ||||
| * In Section 8.8.2.1, reference 'Date' more visibly | ||||
| (<https://github.com/httpwg/http-core/issues/945>) | ||||
| * In Section 11.7.3, state that Proxy-Authentication-Info can be | ||||
| used as trailer (<https://github.com/httpwg/http-core/issues/946>) | ||||
| * In Section 15.4, slightly clarify history of redirect status codes | ||||
| (<https://github.com/httpwg/http-core/issues/947>) | ||||
| * In Section 16.3.1, fix requirements for provisional registrations | ||||
| (<https://github.com/httpwg/http-core/issues/950>) | ||||
| * In Section 4.3, explicitly refer to how this spec defines access | ||||
| to http or https resources (<https://github.com/httpwg/http-core/ | ||||
| issues/951>) | ||||
| * In Section 6.6.1, make clock a defined term and use that | ||||
| definition throughout the spec (<https://github.com/httpwg/http- | ||||
| core/issues/953>) | ||||
| * In Section 13.1, make preconditions consistent on when they are | ||||
| required to be evaluated (<https://github.com/httpwg/http-core/ | ||||
| issues/954>) | ||||
| * Throughout, disambiguate "selected representation" and "selected | ||||
| response" (now "chosen response") (<https://github.com/httpwg/ | ||||
| http-core/issues/958>) | ||||
| Acknowledgements | Acknowledgements | |||
| Aside from the current editors, the following individuals deserve | Aside from the current editors, the following individuals deserve | |||
| special recognition for their contributions to early aspects of HTTP | special recognition for their contributions to early aspects of HTTP | |||
| and its core specifications: Marc Andreessen, Tim Berners-Lee, Robert | and its core specifications: Marc Andreessen, Tim Berners-Lee, Robert | |||
| Cailliau, Daniel W. Connolly, Bob Denny, John Franks, Jim Gettys, | Cailliau, Daniel W. Connolly, Bob Denny, John Franks, Jim Gettys, | |||
| Jean-François Groff, Phillip M. Hallam-Baker, Koen Holtman, Jeffery | Jean-François Groff, Phillip M. Hallam-Baker, Koen Holtman, Jeffery | |||
| L. Hostetler, Shel Kaphan, Dave Kristol, Yves Lafon, Scott | L. Hostetler, Shel Kaphan, Dave Kristol, Yves Lafon, Scott | |||
| D. Lawrence, Paul J. Leach, HÃ¥kon W. Lie, Ari Luotonen, Larry | D. Lawrence, Paul J. Leach, HÃ¥kon W. Lie, Ari Luotonen, Larry | |||
| Masinter, Rob McCool, Jeffrey C. Mogul, Lou Montulli, David Morris, | Masinter, Rob McCool, Jeffrey C. Mogul, Lou Montulli, David Morris, | |||
| skipping to change at page 239, line 47 ¶ | skipping to change at page 242, line 27 ¶ | |||
| Content-Encoding header field Section 8.4 | Content-Encoding header field Section 8.4 | |||
| Content-Language header field Section 8.5 | Content-Language header field Section 8.5 | |||
| Content-Length header field Section 8.6 | Content-Length header field Section 8.6 | |||
| Content-Location header field Section 8.7 | Content-Location header field Section 8.7 | |||
| Content-MD5 header field Section 18.4, Paragraph 9 | Content-MD5 header field Section 18.4, Paragraph 9 | |||
| Content-Range header field Section 14.4; Section 14.5 | Content-Range header field Section 14.4; Section 14.5 | |||
| Content-Type header field Section 8.3 | Content-Type header field Section 8.3 | |||
| cache Section 3.8 | cache Section 3.8 | |||
| cacheable Section 3.8, Paragraph 4 | cacheable Section 3.8, Paragraph 4 | |||
| client Section 3.3 | client Section 3.3 | |||
| clock Section 5.6.7 | ||||
| complete Section 6.1 | complete Section 6.1 | |||
| compress (Coding Format) Section 8.4.1.1 | compress (Coding Format) Section 8.4.1.1 | |||
| compress (content coding) Section 8.4.1 | compress (content coding) Section 8.4.1 | |||
| conditional request Section 13 | conditional request Section 13 | |||
| connection Section 3.3 | connection Section 3.3 | |||
| content Section 6.4 | content Section 6.4 | |||
| content coding Section 8.4.1 | content coding Section 8.4.1 | |||
| content negotiation Section 1.3, Paragraph 4 | content negotiation Section 1.3, Paragraph 4 | |||
| control data Section 6.2 | control data Section 6.2 | |||
| D | D | |||
| DELETE method Section 9.3.5 | DELETE method Section 9.3.5 | |||
| Date header field Section 10.2.2 | Date header field Section 6.6.1 | |||
| Delimiters Section 5.6.2, Paragraph 3 | Delimiters Section 5.6.2, Paragraph 3 | |||
| deflate (Coding Format) Section 8.4.1.2 | deflate (Coding Format) Section 8.4.1.2 | |||
| deflate (content coding) Section 8.4.1 | deflate (content coding) Section 8.4.1 | |||
| downstream Section 3.7, Paragraph 4 | downstream Section 3.7, Paragraph 4 | |||
| E | E | |||
| ETag field Section 8.8.3 | ETag field Section 8.8.3 | |||
| Expect header field Section 10.1.1 | Expect header field Section 10.1.1 | |||
| effective request URI Section 7.1, Paragraph 8.1 | effective request URI Section 7.1, Paragraph 8.1 | |||
| skipping to change at page 240, line 44 ¶ | skipping to change at page 243, line 25 ¶ | |||
| Authentication-Info Section 11.6.3 | Authentication-Info Section 11.6.3 | |||
| Authorization Section 11.6.2 | Authorization Section 11.6.2 | |||
| Connection Section 7.6.1 | Connection Section 7.6.1 | |||
| Content-Encoding Section 8.4 | Content-Encoding Section 8.4 | |||
| Content-Language Section 8.5 | Content-Language Section 8.5 | |||
| Content-Length Section 8.6 | Content-Length Section 8.6 | |||
| Content-Location Section 8.7 | Content-Location Section 8.7 | |||
| Content-MD5 Section 18.4, Paragraph 9 | Content-MD5 Section 18.4, Paragraph 9 | |||
| Content-Range Section 14.4; Section 14.5 | Content-Range Section 14.4; Section 14.5 | |||
| Content-Type Section 8.3 | Content-Type Section 8.3 | |||
| Date Section 10.2.2 | Date Section 6.6.1 | |||
| ETag Section 8.8.3 | ETag Section 8.8.3 | |||
| Expect Section 10.1.1 | Expect Section 10.1.1 | |||
| From Section 10.1.2 | From Section 10.1.2 | |||
| Host Section 7.2 | Host Section 7.2 | |||
| If-Match Section 13.1.1 | If-Match Section 13.1.1 | |||
| If-Modified-Since Section 13.1.3 | If-Modified-Since Section 13.1.3 | |||
| If-None-Match Section 13.1.2 | If-None-Match Section 13.1.2 | |||
| If-Range Section 13.1.5 | If-Range Section 13.1.5 | |||
| If-Unmodified-Since Section 13.1.4 | If-Unmodified-Since Section 13.1.4 | |||
| Last-Modified Section 8.8.2 | Last-Modified Section 8.8.2 | |||
| Location Section 10.2.3 | Location Section 10.2.2 | |||
| Max-Forwards Section 7.6.2 | Max-Forwards Section 7.6.2 | |||
| Proxy-Authenticate Section 11.7.1 | Proxy-Authenticate Section 11.7.1 | |||
| Proxy-Authentication-Info Section 11.7.3 | Proxy-Authentication-Info Section 11.7.3 | |||
| Proxy-Authorization Section 11.7.2 | Proxy-Authorization Section 11.7.2 | |||
| Range Section 14.2 | Range Section 14.2 | |||
| Referer Section 10.1.3 | Referer Section 10.1.3 | |||
| Retry-After Section 10.2.4 | Retry-After Section 10.2.3 | |||
| Server Section 10.2.5 | Server Section 10.2.4 | |||
| TE Section 10.1.4 | TE Section 10.1.4 | |||
| Trailer Section 10.1.5 | Trailer Section 6.6.2 | |||
| Upgrade Section 7.8 | Upgrade Section 7.8 | |||
| User-Agent Section 10.1.6 | User-Agent Section 10.1.5 | |||
| Vary Section 12.5.5 | Vary Section 12.5.5 | |||
| Via Section 7.6.3 | Via Section 7.6.3 | |||
| WWW-Authenticate Section 11.6.1 | WWW-Authenticate Section 11.6.1 | |||
| Fragment Identifiers Section 4.2.5 | Fragment Identifiers Section 4.2.5 | |||
| From header field Section 10.1.2 | From header field Section 10.1.2 | |||
| field Section 5; Section 6.3 | field Section 5; Section 6.3 | |||
| field line Section 5.2, Paragraph 1 | field line Section 5.2, Paragraph 1 | |||
| field line value Section 5.2, Paragraph 1 | field line value Section 5.2, Paragraph 1 | |||
| field name Section 5.2, Paragraph 1 | field name Section 5.2, Paragraph 1 | |||
| field value Section 5.2, Paragraph 2 | field value Section 5.2, Paragraph 2 | |||
| skipping to change at page 242, line 9 ¶ | skipping to change at page 244, line 37 ¶ | |||
| CTL Section 2.1 | CTL Section 2.1 | |||
| Connection Section 7.6.1 | Connection Section 7.6.1 | |||
| Content-Encoding Section 8.4 | Content-Encoding Section 8.4 | |||
| Content-Language Section 8.5 | Content-Language Section 8.5 | |||
| Content-Length Section 8.6 | Content-Length Section 8.6 | |||
| Content-Location Section 8.7 | Content-Location Section 8.7 | |||
| Content-Range Section 14.4 | Content-Range Section 14.4 | |||
| Content-Type Section 8.3 | Content-Type Section 8.3 | |||
| DIGIT Section 2.1 | DIGIT Section 2.1 | |||
| DQUOTE Section 2.1 | DQUOTE Section 2.1 | |||
| Date Section 10.2.2 | Date Section 6.6.1 | |||
| ETag Section 8.8.3 | ETag Section 8.8.3 | |||
| Expect Section 10.1.1 | Expect Section 10.1.1 | |||
| From Section 10.1.2 | From Section 10.1.2 | |||
| GMT Section 5.6.7 | GMT Section 5.6.7 | |||
| HEXDIG Section 2.1 | HEXDIG Section 2.1 | |||
| HTAB Section 2.1 | HTAB Section 2.1 | |||
| HTTP-date Section 5.6.7 | HTTP-date Section 5.6.7 | |||
| Host Section 7.2 | Host Section 7.2 | |||
| IMF-fixdate Section 5.6.7 | IMF-fixdate Section 5.6.7 | |||
| If-Match Section 13.1.1 | If-Match Section 13.1.1 | |||
| If-Modified-Since Section 13.1.3 | If-Modified-Since Section 13.1.3 | |||
| If-None-Match Section 13.1.2 | If-None-Match Section 13.1.2 | |||
| If-Range Section 13.1.5 | If-Range Section 13.1.5 | |||
| If-Unmodified-Since Section 13.1.4 | If-Unmodified-Since Section 13.1.4 | |||
| LF Section 2.1 | LF Section 2.1 | |||
| Last-Modified Section 8.8.2 | Last-Modified Section 8.8.2 | |||
| Location Section 10.2.3 | Location Section 10.2.2 | |||
| Max-Forwards Section 7.6.2 | Max-Forwards Section 7.6.2 | |||
| OCTET Section 2.1 | OCTET Section 2.1 | |||
| OWS Section 5.6.3 | OWS Section 5.6.3 | |||
| Proxy-Authenticate Section 11.7.1 | Proxy-Authenticate Section 11.7.1 | |||
| Proxy-Authentication-Info Section 11.7.3 | Proxy-Authentication-Info Section 11.7.3 | |||
| Proxy-Authorization Section 11.7.2 | Proxy-Authorization Section 11.7.2 | |||
| RWS Section 5.6.3 | RWS Section 5.6.3 | |||
| Range Section 14.2 | Range Section 14.2 | |||
| Referer Section 10.1.3 | Referer Section 10.1.3 | |||
| Retry-After Section 10.2.4 | Retry-After Section 10.2.3 | |||
| SP Section 2.1 | SP Section 2.1 | |||
| Server Section 10.2.5 | Server Section 10.2.4 | |||
| TE Section 10.1.4 | TE Section 10.1.4 | |||
| Trailer Section 10.1.5 | Trailer Section 6.6.2 | |||
| URI-reference Section 4.1 | URI-reference Section 4.1 | |||
| Upgrade Section 7.8 | Upgrade Section 7.8 | |||
| User-Agent Section 10.1.6 | User-Agent Section 10.1.5 | |||
| VCHAR Section 2.1 | VCHAR Section 2.1 | |||
| Vary Section 12.5.5 | Vary Section 12.5.5 | |||
| Via Section 7.6.3 | Via Section 7.6.3 | |||
| WWW-Authenticate Section 11.6.1 | WWW-Authenticate Section 11.6.1 | |||
| absolute-URI Section 4.1 | absolute-URI Section 4.1 | |||
| absolute-path Section 4.1 | absolute-path Section 4.1 | |||
| acceptable-ranges Section 14.3 | acceptable-ranges Section 14.3 | |||
| asctime-date Section 5.6.7 | asctime-date Section 5.6.7 | |||
| auth-param Section 11.2 | auth-param Section 11.2 | |||
| auth-scheme Section 11.1 | auth-scheme Section 11.1 | |||
| skipping to change at page 243, line 19 ¶ | skipping to change at page 245, line 47 ¶ | |||
| comment Section 5.6.5 | comment Section 5.6.5 | |||
| complete-length Section 14.4 | complete-length Section 14.4 | |||
| connection-option Section 7.6.1 | connection-option Section 7.6.1 | |||
| content-coding Section 8.4.1 | content-coding Section 8.4.1 | |||
| credentials Section 11.4 | credentials Section 11.4 | |||
| ctext Section 5.6.5 | ctext Section 5.6.5 | |||
| date1 Section 5.6.7 | date1 Section 5.6.7 | |||
| day Section 5.6.7 | day Section 5.6.7 | |||
| day-name Section 5.6.7 | day-name Section 5.6.7 | |||
| day-name-l Section 5.6.7 | day-name-l Section 5.6.7 | |||
| delay-seconds Section 10.2.4 | delay-seconds Section 10.2.3 | |||
| entity-tag Section 8.8.3 | entity-tag Section 8.8.3 | |||
| etagc Section 8.8.3 | etagc Section 8.8.3 | |||
| field-content Section 5.5 | field-content Section 5.5 | |||
| field-name Section 5.1; Section 10.1.5 | field-name Section 5.1; Section 6.6.2 | |||
| field-value Section 5.5 | field-value Section 5.5 | |||
| field-vchar Section 5.5 | field-vchar Section 5.5 | |||
| first-pos Section 14.1.1; Section 14.4 | first-pos Section 14.1.1; Section 14.4 | |||
| hour Section 5.6.7 | hour Section 5.6.7 | |||
| http-URI Section 4.2.1 | http-URI Section 4.2.1 | |||
| https-URI Section 4.2.2 | https-URI Section 4.2.2 | |||
| incl-range Section 14.4 | incl-range Section 14.4 | |||
| int-range Section 14.1.1 | int-range Section 14.1.1 | |||
| language-range Section 12.5.4 | language-range Section 12.5.4 | |||
| language-tag Section 8.5.1 | language-tag Section 8.5.1 | |||
| last-pos Section 14.1.1; Section 14.4 | last-pos Section 14.1.1; Section 14.4 | |||
| media-range Section 12.5.1 | media-range Section 12.5.1 | |||
| media-type Section 8.3.1 | media-type Section 8.3.1 | |||
| method Section 9.1 | method Section 9.1 | |||
| minute Section 5.6.7 | minute Section 5.6.7 | |||
| month Section 5.6.7 | month Section 5.6.7 | |||
| obs-date Section 5.6.7 | obs-date Section 5.6.7 | |||
| obs-text Section 5.6.4 | obs-text Section 5.5 | |||
| opaque-tag Section 8.8.3 | opaque-tag Section 8.8.3 | |||
| other-range Section 14.1.1 | other-range Section 14.1.1 | |||
| parameter Section 5.6.6 | parameter Section 5.6.6 | |||
| parameter-name Section 5.6.6 | parameter-name Section 5.6.6 | |||
| parameter-value Section 5.6.6 | parameter-value Section 5.6.6 | |||
| parameters Section 5.6.6 | parameters Section 5.6.6 | |||
| partial-URI Section 4.1 | partial-URI Section 4.1 | |||
| port Section 4.1 | port Section 4.1 | |||
| product Section 10.1.6 | product Section 10.1.5 | |||
| product-version Section 10.1.6 | product-version Section 10.1.5 | |||
| protocol-name Section 7.6.3 | protocol-name Section 7.6.3 | |||
| protocol-version Section 7.6.3 | protocol-version Section 7.6.3 | |||
| pseudonym Section 7.6.3 | pseudonym Section 7.6.3 | |||
| qdtext Section 5.6.4 | qdtext Section 5.6.4 | |||
| query Section 4.1 | query Section 4.1 | |||
| quoted-pair Section 5.6.4 | quoted-pair Section 5.6.4 | |||
| quoted-string Section 5.6.4 | quoted-string Section 5.6.4 | |||
| qvalue Section 12.4.2 | qvalue Section 12.4.2 | |||
| range-resp Section 14.4 | range-resp Section 14.4 | |||
| range-set Section 14.1.1 | range-set Section 14.1.1 | |||
| skipping to change at page 245, line 14 ¶ | skipping to change at page 247, line 42 ¶ | |||
| Authentication-Info Section 11.6.3 | Authentication-Info Section 11.6.3 | |||
| Authorization Section 11.6.2 | Authorization Section 11.6.2 | |||
| Connection Section 7.6.1 | Connection Section 7.6.1 | |||
| Content-Encoding Section 8.4 | Content-Encoding Section 8.4 | |||
| Content-Language Section 8.5 | Content-Language Section 8.5 | |||
| Content-Length Section 8.6 | Content-Length Section 8.6 | |||
| Content-Location Section 8.7 | Content-Location Section 8.7 | |||
| Content-MD5 Section 18.4, Paragraph 9 | Content-MD5 Section 18.4, Paragraph 9 | |||
| Content-Range Section 14.4; Section 14.5 | Content-Range Section 14.4; Section 14.5 | |||
| Content-Type Section 8.3 | Content-Type Section 8.3 | |||
| Date Section 10.2.2 | Date Section 6.6.1 | |||
| ETag Section 8.8.3 | ETag Section 8.8.3 | |||
| Expect Section 10.1.1 | Expect Section 10.1.1 | |||
| From Section 10.1.2 | From Section 10.1.2 | |||
| Host Section 7.2 | Host Section 7.2 | |||
| If-Match Section 13.1.1 | If-Match Section 13.1.1 | |||
| If-Modified-Since Section 13.1.3 | If-Modified-Since Section 13.1.3 | |||
| If-None-Match Section 13.1.2 | If-None-Match Section 13.1.2 | |||
| If-Range Section 13.1.5 | If-Range Section 13.1.5 | |||
| If-Unmodified-Since Section 13.1.4 | If-Unmodified-Since Section 13.1.4 | |||
| Last-Modified Section 8.8.2 | Last-Modified Section 8.8.2 | |||
| Location Section 10.2.3 | Location Section 10.2.2 | |||
| Max-Forwards Section 7.6.2 | Max-Forwards Section 7.6.2 | |||
| Proxy-Authenticate Section 11.7.1 | Proxy-Authenticate Section 11.7.1 | |||
| Proxy-Authentication-Info Section 11.7.3 | Proxy-Authentication-Info Section 11.7.3 | |||
| Proxy-Authorization Section 11.7.2 | Proxy-Authorization Section 11.7.2 | |||
| Range Section 14.2 | Range Section 14.2 | |||
| Referer Section 10.1.3 | Referer Section 10.1.3 | |||
| Retry-After Section 10.2.4 | Retry-After Section 10.2.3 | |||
| Server Section 10.2.5 | Server Section 10.2.4 | |||
| TE Section 10.1.4 | TE Section 10.1.4 | |||
| Trailer Section 10.1.5 | Trailer Section 6.6.2 | |||
| Upgrade Section 7.8 | Upgrade Section 7.8 | |||
| User-Agent Section 10.1.6 | User-Agent Section 10.1.5 | |||
| Vary Section 12.5.5 | Vary Section 12.5.5 | |||
| Via Section 7.6.3 | Via Section 7.6.3 | |||
| WWW-Authenticate Section 11.6.1 | WWW-Authenticate Section 11.6.1 | |||
| Host header field Section 7.2 | Host header field Section 7.2 | |||
| header section Section 6.3 | header section Section 6.3 | |||
| http URI scheme Section 4.2.1 | http URI scheme Section 4.2.1 | |||
| https URI scheme Section 4.2.2 | https URI scheme Section 4.2.2 | |||
| I | I | |||
| skipping to change at page 246, line 14 ¶ | skipping to change at page 248, line 42 ¶ | |||
| If-Unmodified-Since header field Section 13.1.4 | If-Unmodified-Since header field Section 13.1.4 | |||
| idempotent Section 9.2.2 | idempotent Section 9.2.2 | |||
| inbound Section 3.7, Paragraph 4 | inbound Section 3.7, Paragraph 4 | |||
| incomplete Section 6.1 | incomplete Section 6.1 | |||
| interception proxy Section 3.7, Paragraph 10 | interception proxy Section 3.7, Paragraph 10 | |||
| intermediary Section 3.7 | intermediary Section 3.7 | |||
| L | L | |||
| Last-Modified header field Section 8.8.2 | Last-Modified header field Section 8.8.2 | |||
| Location header field Section 10.2.3 | Location header field Section 10.2.2 | |||
| list-based field Section 5.5, Paragraph 7 | list-based field Section 5.5, Paragraph 7 | |||
| M | M | |||
| Max-Forwards header field Section 7.6.2 | Max-Forwards header field Section 7.6.2 | |||
| Media Type | Media Type | |||
| multipart/byteranges Section 14.6 | multipart/byteranges Section 14.6 | |||
| multipart/x-byteranges Section 14.6, Paragraph 4, Item 3 | multipart/x-byteranges Section 14.6, Paragraph 4, Item 3 | |||
| Method | Method | |||
| * Section 18.2, Paragraph 3 | * Section 18.2, Paragraph 3 | |||
| skipping to change at page 247, line 21 ¶ | skipping to change at page 249, line 49 ¶ | |||
| Proxy-Authentication-Info header field Section 11.7.3 | Proxy-Authentication-Info header field Section 11.7.3 | |||
| Proxy-Authorization header field Section 11.7.2 | Proxy-Authorization header field Section 11.7.2 | |||
| phishing Section 17.1 | phishing Section 17.1 | |||
| proxy Section 3.7, Paragraph 5 | proxy Section 3.7, Paragraph 5 | |||
| R | R | |||
| Range header field Section 14.2 | Range header field Section 14.2 | |||
| Realm Section 11.5 | Realm Section 11.5 | |||
| Referer header field Section 10.1.3 | Referer header field Section 10.1.3 | |||
| Retry-After header field Section 10.2.4 | Retry-After header field Section 10.2.3 | |||
| recipient Section 3.4 | recipient Section 3.4 | |||
| representation Section 3.2 | representation Section 3.2 | |||
| request Section 3.4 | request Section 3.4 | |||
| request target Section 7.1 | request target Section 7.1 | |||
| resource Section 3.1; Section 4 | resource Section 3.1; Section 4 | |||
| response Section 3.4 | response Section 3.4 | |||
| reverse proxy Section 3.7, Paragraph 6 | reverse proxy Section 3.7, Paragraph 6 | |||
| S | S | |||
| Server header field Section 10.2.5 | Server header field Section 10.2.4 | |||
| Status Code Section 15 | Status Code Section 15 | |||
| Status Codes | Status Codes | |||
| Final Section 15, Paragraph 7 | Final Section 15, Paragraph 7 | |||
| Informational Section 15, Paragraph 7 | Informational Section 15, Paragraph 7 | |||
| Interim Section 15, Paragraph 7 | Interim Section 15, Paragraph 7 | |||
| Status Codes Classes | Status Codes Classes | |||
| 1xx Informational Section 15.2 | 1xx Informational Section 15.2 | |||
| 2xx Successful Section 15.3 | 2xx Successful Section 15.3 | |||
| 3xx Redirection Section 15.4 | 3xx Redirection Section 15.4 | |||
| 4xx Client Error Section 15.5 | 4xx Client Error Section 15.5 | |||
| skipping to change at page 248, line 11 ¶ | skipping to change at page 250, line 40 ¶ | |||
| server Section 3.3 | server Section 3.3 | |||
| singleton field Section 5.5, Paragraph 6 | singleton field Section 5.5, Paragraph 6 | |||
| spider Section 3.5 | spider Section 3.5 | |||
| T | T | |||
| TE header field Section 10.1.4 | TE header field Section 10.1.4 | |||
| TRACE method Section 9.3.8 | TRACE method Section 9.3.8 | |||
| Trailer Fields | Trailer Fields | |||
| ETag Section 8.8.3 | ETag Section 8.8.3 | |||
| Trailer header field Section 10.1.5 | Trailer header field Section 6.6.2 | |||
| target URI Section 7.1 | target URI Section 7.1 | |||
| target resource Section 7.1 | target resource Section 7.1 | |||
| trailer fields Section 6.5 | trailer fields Section 6.5 | |||
| trailer section Section 6.5 | trailer section Section 6.5 | |||
| trailers Section 6.5 | trailers Section 6.5 | |||
| transforming proxy Section 7.7 | transforming proxy Section 7.7 | |||
| transparent proxy Section 3.7, Paragraph 10 | transparent proxy Section 3.7, Paragraph 10 | |||
| tunnel Section 3.7, Paragraph 8 | tunnel Section 3.7, Paragraph 8 | |||
| U | U | |||
| URI Section 4 | URI Section 4 | |||
| origin Section 4.3.1 | origin Section 4.3.1 | |||
| URI reference Section 4.1 | URI reference Section 4.1 | |||
| URI scheme | URI scheme | |||
| http Section 4.2.1 | http Section 4.2.1 | |||
| https Section 4.2.2 | https Section 4.2.2 | |||
| Upgrade header field Section 7.8 | Upgrade header field Section 7.8 | |||
| User-Agent header field Section 10.1.6 | User-Agent header field Section 10.1.5 | |||
| upstream Section 3.7, Paragraph 4 | upstream Section 3.7, Paragraph 4 | |||
| user agent Section 3.5 | user agent Section 3.5 | |||
| V | V | |||
| Vary header field Section 12.5.5 | Vary header field Section 12.5.5 | |||
| Via header field Section 7.6.3 | Via header field Section 7.6.3 | |||
| validator Section 8.8 | validator Section 8.8 | |||
| strong Section 8.8.1 | strong Section 8.8.1 | |||
| weak Section 8.8.1 | weak Section 8.8.1 | |||
| End of changes. 162 change blocks. | ||||
| 594 lines changed or deleted | 723 lines changed or added | |||
This html diff was produced by rfcdiff 1.46. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||