p2-semantics.unpg.txt | rfc7231.txt | |||
---|---|---|---|---|
HTTPbis Working Group R. Fielding, Ed. | Internet Engineering Task Force (IETF) R. Fielding, Ed. | |||
Internet-Draft Adobe | Request for Comments: 7231 Adobe | |||
Obsoletes: 2616 (if approved) J. Reschke, Ed. | Obsoletes: 2616 J. Reschke, Ed. | |||
Updates: 2817 (if approved) greenbytes | Updates: 2817 greenbytes | |||
Intended status: Standards Track June 6, 2014 | Category: Standards Track June 2014 | |||
Expires: December 8, 2014 | ISSN: 2070-1721 | |||
Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | |||
draft-ietf-httpbis-p2-semantics-latest | ||||
Abstract | Abstract | |||
The Hypertext Transfer Protocol (HTTP) is a stateless application- | The Hypertext Transfer Protocol (HTTP) is a stateless application- | |||
level protocol for distributed, collaborative, hypertext information | level protocol for distributed, collaborative, hypertext information | |||
systems. This document defines the semantics of HTTP/1.1 messages, | systems. This document defines the semantics of HTTP/1.1 messages, | |||
as expressed by request methods, request header fields, response | as expressed by request methods, request header fields, response | |||
status codes, and response header fields, along with the payload of | status codes, and response header fields, along with the payload of | |||
messages (metadata and body content) and mechanisms for content | messages (metadata and body content) and mechanisms for content | |||
negotiation. | negotiation. | |||
Editorial Note (To be removed by RFC Editor) | ||||
Discussion of this draft takes place on the HTTPBIS working group | ||||
mailing list (ietf-http-wg@w3.org), which is archived at | ||||
<http://lists.w3.org/Archives/Public/ietf-http-wg/>. | ||||
The current issues list is at | ||||
<http://tools.ietf.org/wg/httpbis/trac/report/3> and related | ||||
documents (including fancy diffs) can be found at | ||||
<http://tools.ietf.org/wg/httpbis/>. | ||||
_This is a temporary document for the purpose of tracking the | ||||
editorial changes made during the AUTH48 (RFC publication) phase._ | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at http://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 5741. | ||||
This Internet-Draft will expire on December 8, 2014. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
http://www.rfc-editor.org/info/rfc7231. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 37 | skipping to change at page 3, line 7 | |||
modifications of such material outside the IETF Standards Process. | modifications of such material outside the IETF Standards Process. | |||
Without obtaining an adequate license from the person(s) controlling | Without obtaining an adequate license from the person(s) controlling | |||
the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
than English. | than English. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 1. Introduction ....................................................6 | |||
1.1. Conformance and Error Handling . . . . . . . . . . . . . . 6 | 1.1. Conformance and Error Handling .............................6 | |||
1.2. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 6 | 1.2. Syntax Notation ............................................6 | |||
2. Resources . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2. Resources .......................................................7 | |||
3. Representations . . . . . . . . . . . . . . . . . . . . . . . 7 | 3. Representations .................................................7 | |||
3.1. Representation Metadata . . . . . . . . . . . . . . . . . 8 | 3.1. Representation Metadata ....................................8 | |||
3.1.1. Processing Representation Data . . . . . . . . . . . . 8 | 3.1.1. Processing Representation Data ......................8 | |||
3.1.2. Encoding for Compression or Integrity . . . . . . . . 11 | 3.1.2. Encoding for Compression or Integrity ..............11 | |||
3.1.3. Audience Language . . . . . . . . . . . . . . . . . . 13 | 3.1.3. Audience Language ..................................13 | |||
3.1.4. Identification . . . . . . . . . . . . . . . . . . . . 14 | 3.1.4. Identification .....................................14 | |||
3.2. Representation Data . . . . . . . . . . . . . . . . . . . 17 | 3.2. Representation Data .......................................17 | |||
3.3. Payload Semantics . . . . . . . . . . . . . . . . . . . . 17 | 3.3. Payload Semantics .........................................17 | |||
3.4. Content Negotiation . . . . . . . . . . . . . . . . . . . 18 | 3.4. Content Negotiation .......................................18 | |||
3.4.1. Proactive Negotiation . . . . . . . . . . . . . . . . 19 | 3.4.1. Proactive Negotiation ..............................19 | |||
3.4.2. Reactive Negotiation . . . . . . . . . . . . . . . . . 20 | 3.4.2. Reactive Negotiation ...............................20 | |||
4. Request Methods ................................................21 | ||||
4.1. Overview ..................................................21 | ||||
4.2. Common Method Properties ..................................22 | ||||
4.2.1. Safe Methods .......................................22 | ||||
4.2.2. Idempotent Methods .................................23 | ||||
4.2.3. Cacheable Methods ..................................24 | ||||
4.3. Method Definitions ........................................24 | ||||
4.3.1. GET ................................................24 | ||||
4.3.2. HEAD ...............................................25 | ||||
4.3.3. POST ...............................................25 | ||||
4.3.4. PUT ................................................26 | ||||
4.3.5. DELETE .............................................29 | ||||
4.3.6. CONNECT ............................................30 | ||||
4.3.7. OPTIONS ............................................31 | ||||
4.3.8. TRACE ..............................................32 | ||||
5. Request Header Fields ..........................................33 | ||||
5.1. Controls ..................................................33 | ||||
5.1.1. Expect .............................................34 | ||||
5.1.2. Max-Forwards .......................................36 | ||||
5.2. Conditionals ..............................................36 | ||||
5.3. Content Negotiation .......................................37 | ||||
5.3.1. Quality Values .....................................37 | ||||
5.3.2. Accept .............................................38 | ||||
5.3.3. Accept-Charset .....................................40 | ||||
5.3.4. Accept-Encoding ....................................41 | ||||
5.3.5. Accept-Language ....................................42 | ||||
5.4. Authentication Credentials ................................44 | ||||
5.5. Request Context ...........................................44 | ||||
5.5.1. From ...............................................44 | ||||
5.5.2. Referer ............................................45 | ||||
5.5.3. User-Agent .........................................46 | ||||
4. Request Methods . . . . . . . . . . . . . . . . . . . . . . . 21 | 6. Response Status Codes ..........................................47 | |||
4.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 6.1. Overview of Status Codes ..................................48 | |||
4.2. Common Method Properties . . . . . . . . . . . . . . . . . 22 | 6.2. Informational 1xx .........................................50 | |||
4.2.1. Safe Methods . . . . . . . . . . . . . . . . . . . . . 22 | 6.2.1. 100 Continue .......................................50 | |||
4.2.2. Idempotent Methods . . . . . . . . . . . . . . . . . . 23 | 6.2.2. 101 Switching Protocols ............................50 | |||
4.2.3. Cacheable Methods . . . . . . . . . . . . . . . . . . 24 | 6.3. Successful 2xx ............................................51 | |||
4.3. Method Definitions . . . . . . . . . . . . . . . . . . . . 24 | 6.3.1. 200 OK .............................................51 | |||
4.3.1. GET . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 6.3.2. 201 Created ........................................52 | |||
4.3.2. HEAD . . . . . . . . . . . . . . . . . . . . . . . . . 25 | 6.3.3. 202 Accepted .......................................52 | |||
4.3.3. POST . . . . . . . . . . . . . . . . . . . . . . . . . 25 | 6.3.4. 203 Non-Authoritative Information ..................52 | |||
4.3.4. PUT . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 6.3.5. 204 No Content .....................................53 | |||
4.3.5. DELETE . . . . . . . . . . . . . . . . . . . . . . . . 29 | 6.3.6. 205 Reset Content ..................................53 | |||
4.3.6. CONNECT . . . . . . . . . . . . . . . . . . . . . . . 30 | 6.4. Redirection 3xx ...........................................54 | |||
4.3.7. OPTIONS . . . . . . . . . . . . . . . . . . . . . . . 31 | 6.4.1. 300 Multiple Choices ...............................55 | |||
4.3.8. TRACE . . . . . . . . . . . . . . . . . . . . . . . . 32 | 6.4.2. 301 Moved Permanently ..............................56 | |||
5. Request Header Fields . . . . . . . . . . . . . . . . . . . . 33 | 6.4.3. 302 Found ..........................................56 | |||
5.1. Controls . . . . . . . . . . . . . . . . . . . . . . . . . 33 | 6.4.4. 303 See Other ......................................57 | |||
5.1.1. Expect . . . . . . . . . . . . . . . . . . . . . . . . 34 | 6.4.5. 305 Use Proxy ......................................58 | |||
5.1.2. Max-Forwards . . . . . . . . . . . . . . . . . . . . . 36 | 6.4.6. 306 (Unused) .......................................58 | |||
5.2. Conditionals . . . . . . . . . . . . . . . . . . . . . . . 36 | 6.4.7. 307 Temporary Redirect .............................58 | |||
5.3. Content Negotiation . . . . . . . . . . . . . . . . . . . 37 | 6.5. Client Error 4xx ..........................................58 | |||
5.3.1. Quality Values . . . . . . . . . . . . . . . . . . . . 37 | 6.5.1. 400 Bad Request ....................................58 | |||
5.3.2. Accept . . . . . . . . . . . . . . . . . . . . . . . . 38 | 6.5.2. 402 Payment Required ...............................59 | |||
5.3.3. Accept-Charset . . . . . . . . . . . . . . . . . . . . 40 | 6.5.3. 403 Forbidden ......................................59 | |||
5.3.4. Accept-Encoding . . . . . . . . . . . . . . . . . . . 41 | 6.5.4. 404 Not Found ......................................59 | |||
5.3.5. Accept-Language . . . . . . . . . . . . . . . . . . . 42 | 6.5.5. 405 Method Not Allowed .............................59 | |||
5.4. Authentication Credentials . . . . . . . . . . . . . . . . 43 | 6.5.6. 406 Not Acceptable .................................60 | |||
5.5. Request Context . . . . . . . . . . . . . . . . . . . . . 44 | 6.5.7. 408 Request Timeout ................................60 | |||
5.5.1. From . . . . . . . . . . . . . . . . . . . . . . . . . 44 | 6.5.8. 409 Conflict .......................................60 | |||
5.5.2. Referer . . . . . . . . . . . . . . . . . . . . . . . 45 | 6.5.9. 410 Gone ...........................................60 | |||
5.5.3. User-Agent . . . . . . . . . . . . . . . . . . . . . . 46 | 6.5.10. 411 Length Required ...............................61 | |||
6. Response Status Codes . . . . . . . . . . . . . . . . . . . . 47 | 6.5.11. 413 Payload Too Large .............................61 | |||
6.1. Overview of Status Codes . . . . . . . . . . . . . . . . . 48 | 6.5.12. 414 URI Too Long ..................................61 | |||
6.2. Informational 1xx . . . . . . . . . . . . . . . . . . . . 50 | 6.5.13. 415 Unsupported Media Type ........................62 | |||
6.2.1. 100 Continue . . . . . . . . . . . . . . . . . . . . . 50 | 6.5.14. 417 Expectation Failed ............................62 | |||
6.2.2. 101 Switching Protocols . . . . . . . . . . . . . . . 50 | 6.5.15. 426 Upgrade Required ..............................62 | |||
6.3. Successful 2xx . . . . . . . . . . . . . . . . . . . . . . 51 | 6.6. Server Error 5xx ..........................................62 | |||
6.3.1. 200 OK . . . . . . . . . . . . . . . . . . . . . . . . 51 | 6.6.1. 500 Internal Server Error ..........................63 | |||
6.3.2. 201 Created . . . . . . . . . . . . . . . . . . . . . 51 | 6.6.2. 501 Not Implemented ................................63 | |||
6.3.3. 202 Accepted . . . . . . . . . . . . . . . . . . . . . 52 | 6.6.3. 502 Bad Gateway ....................................63 | |||
6.3.4. 203 Non-Authoritative Information . . . . . . . . . . 52 | 6.6.4. 503 Service Unavailable ............................63 | |||
6.3.5. 204 No Content . . . . . . . . . . . . . . . . . . . . 53 | 6.6.5. 504 Gateway Timeout ................................63 | |||
6.3.6. 205 Reset Content . . . . . . . . . . . . . . . . . . 53 | 6.6.6. 505 HTTP Version Not Supported .....................64 | |||
6.4. Redirection 3xx . . . . . . . . . . . . . . . . . . . . . 54 | 7. Response Header Fields .........................................64 | |||
6.4.1. 300 Multiple Choices . . . . . . . . . . . . . . . . . 55 | 7.1. Control Data ..............................................64 | |||
6.4.2. 301 Moved Permanently . . . . . . . . . . . . . . . . 56 | 7.1.1. Origination Date ...................................65 | |||
6.4.3. 302 Found . . . . . . . . . . . . . . . . . . . . . . 56 | 7.1.2. Location ...........................................68 | |||
6.4.4. 303 See Other . . . . . . . . . . . . . . . . . . . . 57 | 7.1.3. Retry-After ........................................69 | |||
6.4.5. 305 Use Proxy . . . . . . . . . . . . . . . . . . . . 57 | 7.1.4. Vary ...............................................70 | |||
6.4.6. 306 (Unused) . . . . . . . . . . . . . . . . . . . . . 57 | 7.2. Validator Header Fields ...................................71 | |||
6.4.7. 307 Temporary Redirect . . . . . . . . . . . . . . . . 58 | 7.3. Authentication Challenges .................................72 | |||
6.5. Client Error 4xx . . . . . . . . . . . . . . . . . . . . . 58 | 7.4. Response Context ..........................................72 | |||
6.5.1. 400 Bad Request . . . . . . . . . . . . . . . . . . . 58 | 7.4.1. Allow ..............................................72 | |||
6.5.2. 402 Payment Required . . . . . . . . . . . . . . . . . 58 | 7.4.2. Server .............................................73 | |||
6.5.3. 403 Forbidden . . . . . . . . . . . . . . . . . . . . 58 | 8. IANA Considerations ............................................73 | |||
6.5.4. 404 Not Found . . . . . . . . . . . . . . . . . . . . 59 | 8.1. Method Registry ...........................................73 | |||
6.5.5. 405 Method Not Allowed . . . . . . . . . . . . . . . . 59 | 8.1.1. Procedure ..........................................74 | |||
6.5.6. 406 Not Acceptable . . . . . . . . . . . . . . . . . . 59 | 8.1.2. Considerations for New Methods .....................74 | |||
6.5.7. 408 Request Timeout . . . . . . . . . . . . . . . . . 60 | 8.1.3. Registrations ......................................75 | |||
6.5.8. 409 Conflict . . . . . . . . . . . . . . . . . . . . . 60 | 8.2. Status Code Registry ......................................75 | |||
6.5.9. 410 Gone . . . . . . . . . . . . . . . . . . . . . . . 60 | 8.2.1. Procedure ..........................................75 | |||
6.5.10. 411 Length Required . . . . . . . . . . . . . . . . . 61 | 8.2.2. Considerations for New Status Codes ................76 | |||
6.5.11. 413 Payload Too Large . . . . . . . . . . . . . . . . 61 | 8.2.3. Registrations ......................................76 | |||
6.5.12. 414 URI Too Long . . . . . . . . . . . . . . . . . . . 61 | 8.3. Header Field Registry .....................................77 | |||
6.5.13. 415 Unsupported Media Type . . . . . . . . . . . . . . 61 | 8.3.1. Considerations for New Header Fields ...............78 | |||
6.5.14. 417 Expectation Failed . . . . . . . . . . . . . . . . 62 | 8.3.2. Registrations ......................................80 | |||
6.5.15. 426 Upgrade Required . . . . . . . . . . . . . . . . . 62 | 8.4. Content Coding Registry ...................................81 | |||
6.6. Server Error 5xx . . . . . . . . . . . . . . . . . . . . . 62 | 8.4.1. Procedure ..........................................81 | |||
6.6.1. 500 Internal Server Error . . . . . . . . . . . . . . 62 | 8.4.2. Registrations ......................................81 | |||
6.6.2. 501 Not Implemented . . . . . . . . . . . . . . . . . 63 | 9. Security Considerations ........................................81 | |||
6.6.3. 502 Bad Gateway . . . . . . . . . . . . . . . . . . . 63 | 9.1. Attacks Based on File and Path Names ......................82 | |||
6.6.4. 503 Service Unavailable . . . . . . . . . . . . . . . 63 | 9.2. Attacks Based on Command, Code, or Query Injection ........82 | |||
6.6.5. 504 Gateway Timeout . . . . . . . . . . . . . . . . . 63 | 9.3. Disclosure of Personal Information ........................83 | |||
6.6.6. 505 HTTP Version Not Supported . . . . . . . . . . . . 63 | 9.4. Disclosure of Sensitive Information in URIs ...............83 | |||
7. Response Header Fields . . . . . . . . . . . . . . . . . . . . 64 | 9.5. Disclosure of Fragment after Redirects ....................84 | |||
7.1. Control Data . . . . . . . . . . . . . . . . . . . . . . . 64 | 9.6. Disclosure of Product Information .........................84 | |||
7.1.1. Origination Date . . . . . . . . . . . . . . . . . . . 64 | 9.7. Browser Fingerprinting ....................................84 | |||
7.1.2. Location . . . . . . . . . . . . . . . . . . . . . . . 68 | 10. Acknowledgments ...............................................85 | |||
7.1.3. Retry-After . . . . . . . . . . . . . . . . . . . . . 69 | 11. References ....................................................85 | |||
7.1.4. Vary . . . . . . . . . . . . . . . . . . . . . . . . . 70 | 11.1. Normative References .....................................85 | |||
7.2. Validator Header Fields . . . . . . . . . . . . . . . . . 71 | 11.2. Informative References ...................................86 | |||
7.3. Authentication Challenges . . . . . . . . . . . . . . . . 72 | Appendix A. Differences between HTTP and MIME .....................89 | |||
7.4. Response Context . . . . . . . . . . . . . . . . . . . . . 72 | A.1. MIME-Version ..............................................89 | |||
7.4.1. Allow . . . . . . . . . . . . . . . . . . . . . . . . 72 | A.2. Conversion to Canonical Form ..............................89 | |||
7.4.2. Server . . . . . . . . . . . . . . . . . . . . . . . . 73 | A.3. Conversion of Date Formats ................................90 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 73 | A.4. Conversion of Content-Encoding ..........................90 | |||
8.1. Method Registry . . . . . . . . . . . . . . . . . . . . . 74 | A.5. Conversion of Content-Transfer-Encoding .................90 | |||
8.1.1. Procedure . . . . . . . . . . . . . . . . . . . . . . 74 | A.6. MHTML and Line Length Limitations .........................90 | |||
8.1.2. Considerations for New Methods . . . . . . . . . . . . 74 | Appendix B. Changes from RFC 2616 .................................91 | |||
8.1.3. Registrations . . . . . . . . . . . . . . . . . . . . 75 | Appendix C. Imported ABNF .........................................93 | |||
8.2. Status Code Registry . . . . . . . . . . . . . . . . . . . 75 | Appendix D. Collected ABNF ........................................94 | |||
8.2.1. Procedure . . . . . . . . . . . . . . . . . . . . . . 75 | Index .............................................................97 | |||
8.2.2. Considerations for New Status Codes . . . . . . . . . 76 | ||||
8.2.3. Registrations . . . . . . . . . . . . . . . . . . . . 76 | ||||
8.3. Header Field Registry . . . . . . . . . . . . . . . . . . 77 | ||||
8.3.1. Considerations for New Header Fields . . . . . . . . . 78 | ||||
8.3.2. Registrations . . . . . . . . . . . . . . . . . . . . 80 | ||||
8.4. Content Coding Registry . . . . . . . . . . . . . . . . . 80 | ||||
8.4.1. Procedure . . . . . . . . . . . . . . . . . . . . . . 81 | ||||
8.4.2. Registrations . . . . . . . . . . . . . . . . . . . . 81 | ||||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 81 | ||||
9.1. Attacks Based on File and Path Names . . . . . . . . . . . 82 | ||||
9.2. Attacks Based on Command, Code, or Query Injection . . . . 82 | ||||
9.3. Disclosure of Personal Information . . . . . . . . . . . . 83 | ||||
9.4. Disclosure of Sensitive Information in URIs . . . . . . . 83 | ||||
9.5. Disclosure of Fragment after Redirects . . . . . . . . . . 83 | ||||
9.6. Disclosure of Product Information . . . . . . . . . . . . 84 | ||||
9.7. Browser Fingerprinting . . . . . . . . . . . . . . . . . . 84 | ||||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 85 | ||||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 85 | ||||
11.1. Normative References . . . . . . . . . . . . . . . . . . . 85 | ||||
11.2. Informative References . . . . . . . . . . . . . . . . . . 86 | ||||
Appendix A. Differences between HTTP and MIME . . . . . . . . . . 88 | ||||
A.1. MIME-Version . . . . . . . . . . . . . . . . . . . . . . . 89 | ||||
A.2. Conversion to Canonical Form . . . . . . . . . . . . . . . 89 | ||||
A.3. Conversion of Date Formats . . . . . . . . . . . . . . . . 89 | ||||
A.4. Conversion of Content-Encoding . . . . . . . . . . . . . . 89 | ||||
A.5. Conversion of Content-Transfer-Encoding . . . . . . . . . 90 | ||||
A.6. MHTML and Line Length Limitations . . . . . . . . . . . . 90 | ||||
Appendix B. Changes from RFC 2616 . . . . . . . . . . . . . . . . 90 | ||||
Appendix C. Imported ABNF . . . . . . . . . . . . . . . . . . . . 93 | ||||
Appendix D. Collected ABNF . . . . . . . . . . . . . . . . . . . 93 | ||||
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 | ||||
1. Introduction | 1. Introduction | |||
Each Hypertext Transfer Protocol (HTTP) message is either a request | Each Hypertext Transfer Protocol (HTTP) message is either a request | |||
or a response. A server listens on a connection for a request, | or a response. A server listens on a connection for a request, | |||
parses each message received, interprets the message semantics in | parses each message received, interprets the message semantics in | |||
relation to the identified request target, and responds to that | relation to the identified request target, and responds to that | |||
request with one or more response messages. A client constructs | request with one or more response messages. A client constructs | |||
request messages to communicate specific intentions, examines | request messages to communicate specific intentions, examines | |||
received responses to see if the intentions were carried out, and | received responses to see if the intentions were carried out, and | |||
skipping to change at page 7, line 25 | skipping to change at page 7, line 25 | |||
Section 2.7 of [RFC7230]. | Section 2.7 of [RFC7230]. | |||
When a client constructs an HTTP/1.1 request message, it sends the | When a client constructs an HTTP/1.1 request message, it sends the | |||
target URI in one of various forms, as defined in (Section 5.3 of | target URI in one of various forms, as defined in (Section 5.3 of | |||
[RFC7230]). When a request is received, the server reconstructs an | [RFC7230]). When a request is received, the server reconstructs an | |||
effective request URI for the target resource (Section 5.5 of | effective request URI for the target resource (Section 5.5 of | |||
[RFC7230]). | [RFC7230]). | |||
One design goal of HTTP is to separate resource identification from | One design goal of HTTP is to separate resource identification from | |||
request semantics, which is made possible by vesting the request | request semantics, which is made possible by vesting the request | |||
semantics in the request method (Section 4) and a few request- | semantics in the request method (Section 4) and a few | |||
modifying header fields (Section 5). If there is a conflict between | request-modifying header fields (Section 5). If there is a conflict | |||
the method semantics and any semantic implied by the URI itself, as | between the method semantics and any semantic implied by the URI | |||
described in Section 4.2.1, the method semantics take precedence. | itself, as described in Section 4.2.1, the method semantics take | |||
precedence. | ||||
3. Representations | 3. Representations | |||
Considering that a resource could be anything, and that the uniform | Considering that a resource could be anything, and that the uniform | |||
interface provided by HTTP is similar to a window through which one | interface provided by HTTP is similar to a window through which one | |||
can observe and act upon such a thing only through the communication | can observe and act upon such a thing only through the communication | |||
of messages to some independent actor on the other side, an | of messages to some independent actor on the other side, an | |||
abstraction is needed to represent ("take the place of") the current | abstraction is needed to represent ("take the place of") the current | |||
or desired state of that thing in our communications. That | or desired state of that thing in our communications. That | |||
abstraction is called a representation [REST]. | abstraction is called a representation [REST]. | |||
skipping to change at page 13, line 14 | skipping to change at page 13, line 21 | |||
3.1.3. Audience Language | 3.1.3. Audience Language | |||
3.1.3.1. Language Tags | 3.1.3.1. Language Tags | |||
A language tag, as defined in [RFC5646], identifies a natural | A language tag, as defined in [RFC5646], identifies a natural | |||
language spoken, written, or otherwise conveyed by human beings for | language spoken, written, or otherwise conveyed by human beings for | |||
communication of information to other human beings. Computer | communication of information to other human beings. Computer | |||
languages are explicitly excluded. | languages are explicitly excluded. | |||
HTTP uses language tags within the Accept-Language and Content- | HTTP uses language tags within the Accept-Language and | |||
Language header fields. Accept-Language uses the broader language- | Content-Language header fields. Accept-Language uses the broader | |||
range production defined in Section 5.3.5, whereas Content-Language | language-range production defined in Section 5.3.5, whereas | |||
uses the language-tag production defined below. | Content-Language uses the language-tag production defined below. | |||
language-tag = <Language-Tag, see [RFC5646], Section 2.1> | language-tag = <Language-Tag, see [RFC5646], Section 2.1> | |||
A language tag is a sequence of one or more case-insensitive subtags, | A language tag is a sequence of one or more case-insensitive subtags, | |||
each separated by a hyphen character ("-", %x2D). In most cases, a | each separated by a hyphen character ("-", %x2D). In most cases, a | |||
language tag consists of a primary language subtag that identifies a | language tag consists of a primary language subtag that identifies a | |||
broad family of related languages (e.g., "en" = English), which is | broad family of related languages (e.g., "en" = English), which is | |||
optionally followed by a series of subtags that refine or narrow that | optionally followed by a series of subtags that refine or narrow that | |||
language's range (e.g., "en-CA" = the variety of English as | language's range (e.g., "en-CA" = the variety of English as | |||
communicated in Canada). Whitespace is not allowed within a language | communicated in Canada). Whitespace is not allowed within a language | |||
skipping to change at page 16, line 18 | skipping to change at page 16, line 29 | |||
If Content-Location is included in a 2xx (Successful) response | If Content-Location is included in a 2xx (Successful) response | |||
message and its field-value refers to a URI that differs from the | message and its field-value refers to a URI that differs from the | |||
effective request URI, then the origin server claims that the URI is | effective request URI, then the origin server claims that the URI is | |||
an identifier for a different resource corresponding to the enclosed | an identifier for a different resource corresponding to the enclosed | |||
representation. Such a claim can only be trusted if both identifiers | representation. Such a claim can only be trusted if both identifiers | |||
share the same resource owner, which cannot be programmatically | share the same resource owner, which cannot be programmatically | |||
determined via HTTP. | determined via HTTP. | |||
o For a response to a GET or HEAD request, this is an indication | o For a response to a GET or HEAD request, this is an indication | |||
that the effective request URI refers to a resource that is | that the effective request URI refers to a resource that is | |||
subject to content negotiation and the Content-Location field- | subject to content negotiation and the Content-Location | |||
value is a more specific identifier for the selected | field-value is a more specific identifier for the selected | |||
representation. | representation. | |||
o For a 201 (Created) response to a state-changing method, a | o For a 201 (Created) response to a state-changing method, a | |||
Content-Location field-value that is identical to the Location | Content-Location field-value that is identical to the Location | |||
field-value indicates that this payload is a current | field-value indicates that this payload is a current | |||
representation of the newly created resource. | representation of the newly created resource. | |||
o Otherwise, such a Content-Location indicates that this payload is | o Otherwise, such a Content-Location indicates that this payload is | |||
a representation reporting on the requested action's status and | a representation reporting on the requested action's status and | |||
that the same report is available (for future access with GET) at | that the same report is available (for future access with GET) at | |||
skipping to change at page 21, line 39 | skipping to change at page 21, line 47 | |||
Unlike distributed objects, the standardized request methods in HTTP | Unlike distributed objects, the standardized request methods in HTTP | |||
are not resource-specific, since uniform interfaces provide for | are not resource-specific, since uniform interfaces provide for | |||
better visibility and reuse in network-based systems [REST]. Once | better visibility and reuse in network-based systems [REST]. Once | |||
defined, a standardized method ought to have the same semantics when | defined, a standardized method ought to have the same semantics when | |||
applied to any resource, though each resource determines for itself | applied to any resource, though each resource determines for itself | |||
whether those semantics are implemented or allowed. | whether those semantics are implemented or allowed. | |||
This specification defines a number of standardized methods that are | This specification defines a number of standardized methods that are | |||
commonly used in HTTP, as outlined by the following table. By | commonly used in HTTP, as outlined by the following table. By | |||
convention, standardized methods are defined in all-uppercase US- | convention, standardized methods are defined in all-uppercase | |||
ASCII letters. | US-ASCII letters. | |||
+---------+-------------------------------------------------+-------+ | +---------+-------------------------------------------------+-------+ | |||
| Method | Description | Sec. | | | Method | Description | Sec. | | |||
+---------+-------------------------------------------------+-------+ | +---------+-------------------------------------------------+-------+ | |||
| GET | Transfer a current representation of the target | 4.3.1 | | | GET | Transfer a current representation of the target | 4.3.1 | | |||
| | resource. | | | | | resource. | | | |||
| HEAD | Same as GET, but only transfer the status line | 4.3.2 | | | HEAD | Same as GET, but only transfer the status line | 4.3.2 | | |||
| | and header section. | | | | | and header section. | | | |||
| POST | Perform resource-specific processing on the | 4.3.3 | | | POST | Perform resource-specific processing on the | 4.3.3 | | |||
| | request payload. | | | | | request payload. | | | |||
skipping to change at page 26, line 29 | skipping to change at page 26, line 32 | |||
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 7.1.2) and a representation that describes the status of the | (Section 7.1.2) and a representation that describes the status of the | |||
request while referring to the new resource(s). | 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 [RFC7234]). | explicit freshness information (see Section 4.2.1 of [RFC7234]). | |||
However, POST caching is not widely implemented. For cases where an | However, POST caching is not widely implemented. For cases where an | |||
origin server wishes the client to be able to cache the result of a | origin server wishes the client to be able to cache the result of a | |||
POST in a way that can be reused by a later GET, the origin server | POST in a way that can be reused by a later GET, the origin server | |||
MAY send a 200 (OK) response containing the result and a Content- | MAY send a 200 (OK) response containing the result and a | |||
Location header field that has the same value as the POST's effective | Content-Location header field that has the same value as the POST's | |||
request URI (Section 3.1.4.2). | effective request URI (Section 3.1.4.2). | |||
If the result of processing a POST would be equivalent to a | If the result of processing a POST would be equivalent to a | |||
representation of an existing resource, an origin server MAY redirect | representation of an existing resource, an origin server MAY redirect | |||
the user agent to that resource by sending a 303 (See Other) response | the user agent to that resource by sending a 303 (See Other) response | |||
with the existing resource's identifier in the Location field. This | with the existing resource's identifier in the Location field. This | |||
has the benefits of providing the user agent a resource identifier | has the benefits of providing the user agent a resource identifier | |||
and transferring the representation via a method more amenable to | and transferring the representation via a method more amenable to | |||
shared caching, though at the cost of an extra request if the user | shared caching, though at the cost of an extra request if the user | |||
agent does not already have the representation cached. | agent does not already have the representation cached. | |||
skipping to change at page 34, line 22 | skipping to change at page 34, line 22 | |||
Expect = "100-continue" | Expect = "100-continue" | |||
The Expect field-value is case-insensitive. | The Expect field-value is case-insensitive. | |||
A server that receives an Expect field-value other than 100-continue | A server that receives an Expect field-value other than 100-continue | |||
MAY respond with a 417 (Expectation Failed) status code to indicate | MAY respond with a 417 (Expectation Failed) status code to indicate | |||
that the unexpected expectation cannot be met. | that the unexpected expectation cannot be met. | |||
A 100-continue expectation informs recipients that the client is | A 100-continue expectation informs recipients that the client is | |||
about to send a (presumably large) message body in this request and | about to send a (presumably large) message body in this request and | |||
wishes to receive a 100 (Continue) interim response if the request- | wishes to receive a 100 (Continue) interim response if the | |||
line and header fields are not sufficient to cause an immediate | request-line and header fields are not sufficient to cause an | |||
success, redirect, or error response. This allows the client to wait | immediate success, redirect, or error response. This allows the | |||
for an indication that it is worthwhile to send the message body | client to wait for an indication that it is worthwhile to send the | |||
before actually doing so, which can improve efficiency when the | message body before actually doing so, which can improve efficiency | |||
message body is huge or when the client anticipates that an error is | when the message body is huge or when the client anticipates that an | |||
likely (e.g., when sending a state-changing method, for the first | error is likely (e.g., when sending a state-changing method, for the | |||
time, without previously verified authentication credentials). | first time, without previously verified authentication credentials). | |||
For example, a request that begins with | For example, a request that begins with | |||
PUT /somewhere/fun HTTP/1.1 | PUT /somewhere/fun HTTP/1.1 | |||
Host: origin.example.com | Host: origin.example.com | |||
Content-Type: video/h264 | Content-Type: video/h264 | |||
Content-Length: 1234567890987 | Content-Length: 1234567890987 | |||
Expect: 100-continue | Expect: 100-continue | |||
allows the origin server to immediately respond with an error | allows the origin server to immediately respond with an error | |||
skipping to change at page 35, line 37 | skipping to change at page 35, line 37 | |||
o A server that sends a 100 (Continue) response MUST ultimately send | o A server that sends a 100 (Continue) response MUST ultimately send | |||
a final status code, once the message body is received and | a final status code, once the message body is received and | |||
processed, unless the connection is closed prematurely. | processed, unless the connection is closed prematurely. | |||
o A server that responds with a final status code before reading the | o A server that responds with a final status code before reading the | |||
entire message body SHOULD indicate in that response whether it | entire message body SHOULD indicate in that response whether it | |||
intends to close the connection or continue reading and discarding | intends to close the connection or continue reading and discarding | |||
the request message (see Section 6.6 of [RFC7230]). | the request message (see Section 6.6 of [RFC7230]). | |||
An origin server MUST, upon receiving an HTTP/1.1 (or later) request- | An origin server MUST, upon receiving an HTTP/1.1 (or later) | |||
line and a complete header section that contains a 100-continue | request-line and a complete header section that contains a | |||
expectation and indicates a request message body will follow, either | 100-continue expectation and indicates a request message body will | |||
send an immediate response with a final status code, if that status | follow, either send an immediate response with a final status code, | |||
can be determined by examining just the request-line and header | if that status can be determined by examining just the request-line | |||
fields, or send an immediate 100 (Continue) response to encourage the | and header fields, or send an immediate 100 (Continue) response to | |||
client to send the request's message body. The origin server MUST | encourage the client to send the request's message body. The origin | |||
NOT wait for the message body before sending the 100 (Continue) | server MUST NOT wait for the message body before sending the 100 | |||
response. | (Continue) response. | |||
A proxy MUST, upon receiving an HTTP/1.1 (or later) request-line and | A proxy MUST, upon receiving an HTTP/1.1 (or later) request-line and | |||
a complete header section that contains a 100-continue expectation | a complete header section that contains a 100-continue expectation | |||
and indicates a request message body will follow, either send an | and indicates a request message body will follow, either send an | |||
immediate response with a final status code, if that status can be | immediate response with a final status code, if that status can be | |||
determined by examining just the request-line and header fields, or | determined by examining just the request-line and header fields, or | |||
begin forwarding the request toward the origin server by sending a | begin forwarding the request toward the origin server by sending a | |||
corresponding request-line and header section to the next inbound | corresponding request-line and header section to the next inbound | |||
server. If the proxy believes (from configuration or past | server. If the proxy believes (from configuration or past | |||
interaction) that the next inbound server only supports HTTP/1.0, the | interaction) that the next inbound server only supports HTTP/1.0, the | |||
skipping to change at page 38, line 23 | skipping to change at page 38, line 23 | |||
A sender of qvalue MUST NOT generate more than three digits after the | A sender of qvalue MUST NOT generate more than three digits after the | |||
decimal point. User configuration of these values ought to be | decimal point. User configuration of these values ought to be | |||
limited in the same fashion. | limited in the same fashion. | |||
5.3.2. Accept | 5.3.2. Accept | |||
The "Accept" header field can be used by user agents to specify | The "Accept" header field can be used by user agents to specify | |||
response media types that are acceptable. Accept header fields can | response media types that are acceptable. Accept header fields can | |||
be used to indicate that the request is specifically limited to a | be used to indicate that the request is specifically limited to a | |||
small set of desired types, as in the case of a request for an in- | small set of desired types, as in the case of a request for an | |||
line image. | in-line image. | |||
Accept = #( media-range [ accept-params ] ) | Accept = #( media-range [ accept-params ] ) | |||
media-range = ( "*/*" | media-range = ( "*/*" | |||
/ ( type "/" "*" ) | / ( type "/" "*" ) | |||
/ ( type "/" subtype ) | / ( type "/" subtype ) | |||
) *( OWS ";" OWS parameter ) | ) *( OWS ";" OWS parameter ) | |||
accept-params = weight *( accept-ext ) | accept-params = weight *( accept-ext ) | |||
accept-ext = OWS ";" OWS token [ "=" ( token / quoted-string ) ] | accept-ext = OWS ";" OWS token [ "=" ( token / quoted-string ) ] | |||
skipping to change at page 40, line 44 | skipping to change at page 40, line 44 | |||
Accept-Charset = 1#( ( charset / "*" ) [ weight ] ) | Accept-Charset = 1#( ( charset / "*" ) [ weight ] ) | |||
Charset names are defined in Section 3.1.1.2. A user agent MAY | Charset names are defined in Section 3.1.1.2. A user agent MAY | |||
associate a quality value with each charset to indicate the user's | associate a quality value with each charset to indicate the user's | |||
relative preference for that charset, as defined in Section 5.3.1. | relative preference for that charset, as defined in Section 5.3.1. | |||
An example is | An example is | |||
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8 | Accept-Charset: iso-8859-5, unicode-1-1;q=0.8 | |||
The special value "*", if present in the Accept-Charset field, | The special value "*", if present in the Accept-Charset field, | |||
matches every charset that is not mentioned elsewhere in the Accept- | matches every charset that is not mentioned elsewhere in the | |||
Charset field. If no "*" is present in an Accept-Charset field, then | Accept-Charset field. If no "*" is present in an Accept-Charset | |||
any charsets not explicitly mentioned in the field are considered | field, then any charsets not explicitly mentioned in the field are | |||
"not acceptable" to the client. | considered "not acceptable" to the client. | |||
A request without any Accept-Charset header field implies that the | A request without any Accept-Charset header field implies that the | |||
user agent will accept any charset in response. Most general-purpose | user agent will accept any charset in response. Most general-purpose | |||
user agents do not send Accept-Charset, unless specifically | user agents do not send Accept-Charset, unless specifically | |||
configured to do so, because a detailed list of supported charsets | configured to do so, because a detailed list of supported charsets | |||
makes it easier for a server to identify an individual by virtue of | makes it easier for a server to identify an individual by virtue of | |||
the user agent's request characteristics (Section 9.7). | the user agent's request characteristics (Section 9.7). | |||
If an Accept-Charset header field is present in a request and none of | If an Accept-Charset header field is present in a request and none of | |||
the available representations for the response has a charset that is | the available representations for the response has a charset that is | |||
skipping to change at page 42, line 6 | skipping to change at page 42, line 6 | |||
does not imply that the user agent will be able to correctly process | does not imply that the user agent will be able to correctly process | |||
all encodings. | all encodings. | |||
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 field is in the request, any content-coding | 1. If no Accept-Encoding field is in the request, any content-coding | |||
is considered acceptable by the user agent. | 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 | |||
Encoding field stating either "identity;q=0" or "*;q=0" without a | Accept-Encoding field stating either "identity;q=0" or "*;q=0" | |||
more specific entry for "identity". | without a more specific entry for "identity". | |||
3. If the representation's content-coding is one of the content- | 3. If the representation's content-coding is one of the | |||
codings listed in the Accept-Encoding field, then it is | content-codings listed in the Accept-Encoding field, then it is | |||
acceptable unless it is accompanied by a qvalue of 0. (As | acceptable unless it is accompanied by a qvalue of 0. (As | |||
defined in Section 5.3.1, a qvalue of 0 means "not acceptable".) | defined in Section 5.3.1, a qvalue of 0 means "not acceptable".) | |||
4. If multiple content-codings are acceptable, then the acceptable | 4. If multiple content-codings are acceptable, then the acceptable | |||
content-coding with the highest non-zero qvalue is preferred. | content-coding with the highest non-zero qvalue is preferred. | |||
An Accept-Encoding header field with a combined field-value that is | An Accept-Encoding header field with a combined field-value that is | |||
empty implies that the user agent does not want any content-coding in | empty implies that the user agent does not want any content-coding in | |||
response. If an Accept-Encoding header field is present in a request | response. If an Accept-Encoding header field is present in a request | |||
and none of the available representations for the response have a | and none of the available representations for the response have a | |||
skipping to change at page 43, line 32 | skipping to change at page 43, line 32 | |||
was previously defined for HTTP in Section 14.4 of [RFC2616]. | was previously defined for HTTP in Section 14.4 of [RFC2616]. | |||
It might be contrary to the privacy expectations of the user to send | It might be contrary to the privacy expectations of the user to send | |||
an Accept-Language header field with the complete linguistic | an Accept-Language header field with the complete linguistic | |||
preferences of the user in every request (Section 9.7). | preferences of the user in every request (Section 9.7). | |||
Since intelligibility is highly dependent on the individual user, | Since intelligibility is highly dependent on the individual user, | |||
user agents need to allow user control over the linguistic preference | user agents need to allow user control over the linguistic preference | |||
(either through configuration of the user agent itself or by | (either through configuration of the user agent itself or by | |||
defaulting to a user controllable system setting). A user agent that | defaulting to a user controllable system setting). A user agent that | |||
does not provide such control to the user MUST NOT send an Accept- | does not provide such control to the user MUST NOT send an | |||
Language header field. | Accept-Language header field. | |||
Note: User agents ought to provide guidance to users when setting | Note: User agents ought to provide guidance to users when setting | |||
a preference, since users are rarely familiar with the details of | a preference, since users are rarely familiar with the details of | |||
language matching as described above. For example, users might | language matching as described above. For example, users might | |||
assume that on selecting "en-gb", they will be served any kind of | assume that on selecting "en-gb", they will be served any kind of | |||
English document if British English is not available. A user | English document if British English is not available. A user | |||
agent might suggest, in such a case, to add "en" to the list for | agent might suggest, in such a case, to add "en" to the list for | |||
better matching behavior. | better matching behavior. | |||
5.4. Authentication Credentials | 5.4. Authentication Credentials | |||
skipping to change at page 46, line 36 | skipping to change at page 46, line 43 | |||
listed in decreasing order of their significance for identifying the | listed in decreasing order of their significance for identifying the | |||
user agent software. Each product identifier consists of a name and | user agent software. Each product identifier consists of a name and | |||
optional version. | optional version. | |||
product = token ["/" product-version] | product = token ["/" product-version] | |||
product-version = token | product-version = token | |||
A sender SHOULD limit generated product identifiers to what is | A sender SHOULD limit generated product identifiers to what is | |||
necessary to identify the product; a sender MUST NOT generate | necessary to identify the product; a sender MUST NOT generate | |||
advertising or other nonessential information within the product | advertising or other nonessential information within the product | |||
identifier. A sender SHOULD NOT generate information in product- | identifier. A sender SHOULD NOT generate information in | |||
version that is not a version identifier (i.e., successive versions | product-version that is not a version identifier (i.e., successive | |||
of the same product name ought to differ only in the product-version | versions of the same product name ought to differ only in the | |||
portion of the product identifier). | product-version portion of the product identifier). | |||
Example: | Example: | |||
User-Agent: CERN-LineMode/2.15 libwww/2.17b3 | User-Agent: CERN-LineMode/2.15 libwww/2.17b3 | |||
A user agent SHOULD NOT generate a User-Agent field containing | A user agent SHOULD NOT generate a User-Agent field containing | |||
needlessly fine-grained detail and SHOULD limit the addition of | needlessly fine-grained detail and SHOULD limit the addition of | |||
subproducts by third parties. Overly long and detailed User-Agent | subproducts by third parties. Overly long and detailed User-Agent | |||
field values increase request latency and the risk of a user being | field values increase request latency and the risk of a user being | |||
identified against their wishes ("fingerprinting"). | identified against their wishes ("fingerprinting"). | |||
skipping to change at page 50, line 33 | skipping to change at page 50, line 35 | |||
"Expect: 100-continue" field when it forwards a request, then it need | "Expect: 100-continue" field when it forwards a request, then it need | |||
not forward the corresponding 100 (Continue) response(s). | not forward the corresponding 100 (Continue) response(s). | |||
6.2.1. 100 Continue | 6.2.1. 100 Continue | |||
The 100 (Continue) status code indicates that the initial part of a | The 100 (Continue) status code indicates that the initial part of a | |||
request has been received and has not yet been rejected by the | request has been received and has not yet been rejected by the | |||
server. The server intends to send a final response after the | server. The server intends to send a final response after the | |||
request has been fully received and acted upon. | request has been fully received and acted upon. | |||
When the request contains an Expect header field that includes a 100- | When the request contains an Expect header field that includes a | |||
continue expectation, the 100 response indicates that the server | 100-continue expectation, the 100 response indicates that the server | |||
wishes to receive the request payload body, as described in | wishes to receive the request payload body, as described in | |||
Section 5.1.1. The client ought to continue sending the request and | Section 5.1.1. The client ought to continue sending the request and | |||
discard the 100 response. | discard the 100 response. | |||
If the request did not contain an Expect header field containing the | If the request did not contain an Expect header field containing the | |||
100-continue expectation, the client can simply discard this interim | 100-continue expectation, the client can simply discard this interim | |||
response. | response. | |||
6.2.2. 101 Switching Protocols | 6.2.2. 101 Switching Protocols | |||
skipping to change at page 52, line 10 | skipping to change at page 52, line 15 | |||
6.3.2. 201 Created | 6.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 | |||
field is received, by the effective request URI. | field is received, by the effective request URI. | |||
The 201 response payload typically describes and links to the | The 201 response payload typically describes and links to the | |||
resource(s) created. See Section 7.2 for a discussion of the meaning | resource(s) created. See Section 7.2 for a discussion of the meaning | |||
and purpose of validator header fields, such as ETag and Last- | and purpose of validator header fields, such as ETag and | |||
Modified, in a 201 response. | Last-Modified, in a 201 response. | |||
6.3.3. 202 Accepted | 6.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 61, line 26 | skipping to change at page 61, line 37 | |||
it adds a valid Content-Length header field containing the length of | it adds a valid Content-Length header field containing the length of | |||
the message body in the request message. | the message body in the request message. | |||
6.5.11. 413 Payload Too Large | 6.5.11. 413 Payload Too Large | |||
The 413 (Payload Too Large) status code indicates that the server is | The 413 (Payload Too Large) status code indicates that the server is | |||
refusing to process a request because the request payload is larger | refusing to process a request because the request payload is larger | |||
than the server is willing or able to process. The server MAY close | than the server is willing or able to process. The server MAY close | |||
the connection to prevent the client from continuing the request. | the connection to prevent the client from continuing the request. | |||
If the condition is temporary, the server SHOULD generate a Retry- | If the condition is temporary, the server SHOULD generate a | |||
After header field to indicate that it is temporary and after what | Retry-After header field to indicate that it is temporary and after | |||
time the client MAY try again. | what time the client MAY try again. | |||
6.5.12. 414 URI Too Long | 6.5.12. 414 URI Too Long | |||
The 414 (URI Too Long) status code indicates that the server is | The 414 (URI Too Long) status code indicates that the server is | |||
refusing to service the request because the request-target (Section | refusing to service the request because the request-target (Section | |||
5.3 of [RFC7230]) is longer than the server is willing to interpret. | 5.3 of [RFC7230]) is longer than the server is willing to interpret. | |||
This rare condition is only likely to occur when a client has | This rare condition is only likely to occur when a client has | |||
improperly converted a POST request to a GET request with long query | improperly converted a POST request to a GET request with long query | |||
information, when the client has descended into a "black hole" of | information, when the client has descended into a "black hole" of | |||
redirection (e.g., a redirected URI prefix that points to a suffix of | redirection (e.g., a redirected URI prefix that points to a suffix of | |||
skipping to change at page 61, line 51 | skipping to change at page 62, line 14 | |||
A 414 response is cacheable by default; i.e., unless otherwise | A 414 response is cacheable by default; 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 [RFC7234]). | Section 4.2.2 of [RFC7234]). | |||
6.5.13. 415 Unsupported Media Type | 6.5.13. 415 Unsupported Media Type | |||
The 415 (Unsupported Media Type) status code indicates that the | The 415 (Unsupported Media Type) status code indicates that the | |||
origin server is refusing to service the request because the payload | origin server is refusing to service the request because the payload | |||
is in a format not supported by this method on the target resource. | is in a format not supported by this method on the target resource. | |||
The format problem might be due to the request's indicated Content- | The format problem might be due to the request's indicated | |||
Type or Content-Encoding, or as a result of inspecting the data | Content-Type or Content-Encoding, or as a result of inspecting the | |||
directly. | data directly. | |||
6.5.14. 417 Expectation Failed | 6.5.14. 417 Expectation Failed | |||
The 417 (Expectation Failed) status code indicates that the | The 417 (Expectation Failed) status code indicates that the | |||
expectation given in the request's Expect header field | expectation given in the request's Expect header field | |||
(Section 5.1.1) could not be met by at least one of the inbound | (Section 5.1.1) could not be met by at least one of the inbound | |||
servers. | servers. | |||
6.5.15. 426 Upgrade Required | 6.5.15. 426 Upgrade Required | |||
skipping to change at page 64, line 8 | skipping to change at page 64, line 20 | |||
that it is unable or unwilling to complete the request using the same | that it is unable or unwilling to complete the request using the same | |||
major version as the client, as described in Section 2.6 of | major version as the client, as described in Section 2.6 of | |||
[RFC7230], other than with this error message. The server SHOULD | [RFC7230], other than with this error message. The server SHOULD | |||
generate a representation for the 505 response that describes why | generate a representation for the 505 response that describes why | |||
that version is not supported and what other protocols are supported | that version is not supported and what other protocols are supported | |||
by that server. | by that server. | |||
7. Response Header Fields | 7. Response Header Fields | |||
The response header fields allow the server to pass additional | The response header fields allow the server to pass additional | |||
information about the response beyond what is placed in the status- | information about the response beyond what is placed in the | |||
line. These header fields give information about the server, about | status-line. These header fields give information about the server, | |||
further access to the target resource, or about related resources. | about further access to the target resource, or about related | |||
resources. | ||||
Although each response header field has a defined meaning, in | Although each response header field has a defined meaning, in | |||
general, the precise semantics might be further refined by the | general, the precise semantics might be further refined by the | |||
semantics of the request method and/or response status code. | semantics of the request method and/or response status code. | |||
7.1. Control Data | 7.1. Control Data | |||
Response header fields can supply control data that supplements the | Response header fields can supply control data that supplements the | |||
status code, directs caching, or instructs the client where to go | status code, directs caching, or instructs the client where to go | |||
next. | next. | |||
skipping to change at page 65, line 12 | skipping to change at page 65, line 28 | |||
Sun, 06 Nov 1994 08:49:37 GMT ; IMF-fixdate | Sun, 06 Nov 1994 08:49:37 GMT ; IMF-fixdate | |||
Examples of the two obsolete formats are | Examples of the two obsolete formats are | |||
Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 format | Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 format | |||
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format | Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format | |||
A recipient that parses a timestamp value in an HTTP header field | A recipient that parses a timestamp value in an HTTP header field | |||
MUST accept all three HTTP-date formats. When a sender generates a | MUST accept all three HTTP-date formats. When a sender generates a | |||
header field that contains one or more timestamps defined as HTTP- | header field that contains one or more timestamps defined as | |||
date, the sender MUST generate those timestamps in the IMF-fixdate | HTTP-date, the sender MUST generate those timestamps in the | |||
format. | 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. A sender that generates HTTP-date values from a local | |||
clock ought to use NTP ([RFC5905]) or some similar protocol to | clock ought to use NTP ([RFC5905]) or some similar protocol to | |||
synchronize its clock to UTC. | synchronize its clock to UTC. | |||
Preferred format: | Preferred format: | |||
skipping to change at page 67, line 22 | skipping to change at page 67, line 7 | |||
/ %x46.72.69.64.61.79 ; "Friday", case-sensitive | / %x46.72.69.64.61.79 ; "Friday", case-sensitive | |||
/ %x53.61.74.75.72.64.61.79 ; "Saturday", case-sensitive | / %x53.61.74.75.72.64.61.79 ; "Saturday", case-sensitive | |||
/ %x53.75.6E.64.61.79 ; "Sunday", case-sensitive | / %x53.75.6E.64.61.79 ; "Sunday", case-sensitive | |||
asctime-date = day-name SP date3 SP time-of-day SP year | asctime-date = day-name SP date3 SP time-of-day SP year | |||
date3 = month SP ( 2DIGIT / ( SP 1DIGIT )) | date3 = month SP ( 2DIGIT / ( SP 1DIGIT )) | |||
; e.g., Jun 2 | ; e.g., Jun 2 | |||
HTTP-date is case sensitive. A sender MUST NOT generate additional | HTTP-date is case sensitive. A sender MUST NOT generate additional | |||
whitespace in an HTTP-date beyond that specifically included as SP in | whitespace in an HTTP-date beyond that specifically included as SP in | |||
the grammar. The semantics of day-name, day, month, year, and time- | the grammar. The semantics of day-name, day, month, year, and | |||
of-day are the same as those defined for the Internet Message Format | time-of-day are the same as those defined for the Internet Message | |||
constructs with the corresponding name ([RFC5322], Section 3.3). | Format constructs with the corresponding name ([RFC5322], Section | |||
3.3). | ||||
Recipients of a timestamp value in rfc850-date format, which uses a | Recipients of a timestamp value in rfc850-date format, which uses a | |||
two-digit year, MUST interpret a timestamp that appears to be more | two-digit year, MUST interpret a timestamp that appears to be more | |||
than 50 years in the future as representing the most recent year in | than 50 years in the future as representing the most recent year in | |||
the past that had the same last two digits. | the past that had the same last two digits. | |||
Recipients of timestamp values are encouraged to be robust in parsing | Recipients of timestamp values are encouraged to be robust in parsing | |||
timestamps unless otherwise restricted by the field definition. For | timestamps unless otherwise restricted by the field definition. For | |||
example, messages are occasionally forwarded over HTTP from a non- | example, messages are occasionally forwarded over HTTP from a | |||
HTTP source that might generate any of the date and time | non-HTTP source that might generate any of the date and time | |||
specifications defined by the Internet Message Format. | specifications defined by the Internet Message Format. | |||
Note: HTTP requirements for the date/time stamp format apply only | Note: HTTP requirements for the date/time stamp format apply only | |||
to their usage within the protocol stream. Implementations are | to their usage within the protocol stream. Implementations are | |||
not required to use these formats for user presentation, request | not required to use these formats for user presentation, request | |||
logging, etc. | logging, etc. | |||
7.1.1.2. Date | 7.1.1.2. Date | |||
The "Date" header field represents the date and time at which the | The "Date" header field represents the date and time at which the | |||
skipping to change at page 70, line 30 | skipping to change at page 70, line 18 | |||
Retry-After: 120 | Retry-After: 120 | |||
In the latter example, the delay is 2 minutes. | In the latter example, the delay is 2 minutes. | |||
7.1.4. Vary | 7.1.4. 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, Host header field, and | request message, aside from the method, Host header field, and | |||
request target, might influence the origin server's process for | request target, might influence the origin server's process for | |||
selecting and representing this response. The value consists of | selecting and representing this response. The value consists of | |||
either a single asterisk ("*") or a list of header field names (case- | either a single asterisk ("*") or a list of header field names | |||
insensitive). | (case-insensitive). | |||
Vary = "*" / 1#field-name | Vary = "*" / 1#field-name | |||
A Vary field value of "*" signals that anything about the request | A Vary field value of "*" signals that anything about the request | |||
might play a role in selecting the response representation, possibly | might play a role in selecting the response representation, possibly | |||
including elements outside the message syntax (e.g., the client's | including elements outside the message syntax (e.g., the client's | |||
network address). A recipient will not be able to determine whether | network address). A recipient will not be able to determine whether | |||
this response is appropriate for a later request without forwarding | this response is appropriate for a later request without forwarding | |||
the request to the origin server. A proxy MUST NOT generate a Vary | the request to the origin server. A proxy MUST NOT generate a Vary | |||
field with a "*" value. | field with a "*" value. | |||
skipping to change at page 78, line 35 | skipping to change at page 78, line 35 | |||
[RFC7230] as necessary, and are usually constrained to the range of | [RFC7230] as necessary, and are usually constrained to the range of | |||
US-ASCII characters. Header fields needing a greater range of | US-ASCII characters. Header fields needing a greater range of | |||
characters can use an encoding such as the one defined in [RFC5987]. | characters can use an encoding such as the one defined in [RFC5987]. | |||
Leading and trailing whitespace in raw field values is removed upon | Leading and trailing whitespace in raw field values is removed upon | |||
field parsing (Section 3.2.4 of [RFC7230]). Field definitions where | field parsing (Section 3.2.4 of [RFC7230]). Field definitions where | |||
leading or trailing whitespace in values is significant will have to | leading or trailing whitespace in values is significant will have to | |||
use a container syntax such as quoted-string (Section 3.2.6 of | use a container syntax such as quoted-string (Section 3.2.6 of | |||
[RFC7230]). | [RFC7230]). | |||
Because commas (",") are used as a generic delimiter between field- | Because commas (",") are used as a generic delimiter between | |||
values, they need to be treated with care if they are allowed in the | field-values, they need to be treated with care if they are allowed | |||
field-value. Typically, components that might contain a comma are | in the field-value. Typically, components that might contain a comma | |||
protected with double-quotes using the quoted-string ABNF production. | are protected with double-quotes using the quoted-string ABNF | |||
production. | ||||
For example, a textual date and a URI (either of which might contain | For example, a textual date and a URI (either of which might contain | |||
a comma) could be safely carried in field-values like these: | a comma) could be safely carried in field-values like these: | |||
Example-URI-Field: "http://example.com/a.html,foo", | Example-URI-Field: "http://example.com/a.html,foo", | |||
"http://without-a-comma.example.com/" | "http://without-a-comma.example.com/" | |||
Example-Date-Field: "Sat, 04 May 1996", "Wed, 14 Sep 2005" | Example-Date-Field: "Sat, 04 May 1996", "Wed, 14 Sep 2005" | |||
Note that double-quote delimiters almost always are used with the | Note that double-quote delimiters almost always are used with the | |||
quoted-string production; using a different syntax inside double- | quoted-string production; using a different syntax inside | |||
quotes will likely cause unnecessary confusion. | double-quotes will likely cause unnecessary confusion. | |||
Many header fields use a format including (case-insensitively) named | Many header fields use a format including (case-insensitively) named | |||
parameters (for instance, Content-Type, defined in Section 3.1.1.5). | parameters (for instance, Content-Type, defined in Section 3.1.1.5). | |||
Allowing both unquoted (token) and quoted (quoted-string) syntax for | Allowing both unquoted (token) and quoted (quoted-string) syntax for | |||
the parameter value enables recipients to use existing parser | the parameter value enables recipients to use 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 independent of the syntax used for it (for an | value ought to be independent of the syntax used for it (for an | |||
example, see the notes on parameter handling for media types in | example, see the notes on parameter handling for media types in | |||
Section 3.1.1.1). | Section 3.1.1.1). | |||
Authors of specifications defining new header fields are advised to | Authors of specifications defining new header fields are advised to | |||
consider documenting: | consider documenting: | |||
skipping to change at page 83, line 31 | skipping to change at page 83, line 36 | |||
9.4. Disclosure of Sensitive Information in URIs | 9.4. Disclosure of Sensitive Information in URIs | |||
URIs are intended to be shared, not secured, even when they identify | URIs are intended to be shared, not secured, even when they identify | |||
secure resources. URIs are often shown on displays, added to | secure resources. URIs are often shown on displays, added to | |||
templates when a page is printed, and stored in a variety of | templates when a page is printed, and stored in a variety of | |||
unprotected bookmark lists. It is therefore unwise to include | unprotected bookmark lists. It is therefore unwise to include | |||
information within a URI that is sensitive, personally identifiable, | information within a URI that is sensitive, personally identifiable, | |||
or a risk to disclose. | or a risk to disclose. | |||
Authors of services ought to avoid GET-based forms for the submission | Authors of services ought to avoid GET-based forms for the submission | |||
of sensitive data because that data will be placed in the request- | of sensitive data because that data will be placed in the | |||
target. Many existing servers, proxies, and user agents log or | request-target. Many existing servers, proxies, and user agents log | |||
display the request-target in places where it might be visible to | or display the request-target in places where it might be visible to | |||
third parties. Such services ought to use POST-based form submission | third parties. Such services ought to use POST-based form submission | |||
instead. | instead. | |||
Since the Referer header field tells a target site about the context | Since the Referer header field tells a target site about the context | |||
that resulted in a request, it has the potential to reveal | that resulted in a request, it has the potential to reveal | |||
information about the user's immediate browsing history and any | information about the user's immediate browsing history and any | |||
personal information that might be found in the referring resource's | personal information that might be found in the referring resource's | |||
URI. Limitations on the Referer header field are described in | URI. Limitations on the Referer header field are described in | |||
Section 5.5.2 to address some of its security considerations. | Section 5.5.2 to address some of its security considerations. | |||
skipping to change at page 85, line 12 | skipping to change at page 85, line 21 | |||
details about the user's system or extensions. However, the source | details about the user's system or extensions. However, the source | |||
of unique information that is least expected by users is proactive | of unique information that is least expected by users is proactive | |||
negotiation (Section 5.3), including the Accept, Accept-Charset, | negotiation (Section 5.3), including the Accept, Accept-Charset, | |||
Accept-Encoding, and Accept-Language header fields. | Accept-Encoding, and Accept-Language header fields. | |||
In addition to the fingerprinting concern, detailed use of the | In addition to the fingerprinting concern, detailed use of the | |||
Accept-Language header field can reveal information the user might | Accept-Language header field can reveal information the user might | |||
consider to be of a private nature. For example, understanding a | consider to be of a private nature. For example, understanding a | |||
given language set might be strongly correlated to membership in a | given language set might be strongly correlated to membership in a | |||
particular ethnic group. An approach that limits such loss of | particular ethnic group. An approach that limits such loss of | |||
privacy would be for a user agent to omit the sending of Accept- | privacy would be for a user agent to omit the sending of | |||
Language except for sites that have been whitelisted, perhaps via | Accept-Language except for sites that have been whitelisted, perhaps | |||
interaction after detecting a Vary header field that indicates | via interaction after detecting a Vary header field that indicates | |||
language negotiation might be useful. | language negotiation might be useful. | |||
In environments where proxies are used to enhance privacy, user | In environments where proxies are used to enhance privacy, user | |||
agents ought to be conservative in sending proactive negotiation | agents ought to be conservative in sending proactive negotiation | |||
header fields. General-purpose user agents that provide a high | header fields. General-purpose user agents that provide a high | |||
degree of header field configurability ought to inform users about | degree of header field configurability ought to inform users about | |||
the loss of privacy that might result if too much detail is provided. | the loss of privacy that might result if too much detail is provided. | |||
As an extreme privacy measure, proxies could filter the proactive | As an extreme privacy measure, proxies could filter the proactive | |||
negotiation header fields in relayed requests. | negotiation header fields in relayed requests. | |||
skipping to change at page 86, line 15 | skipping to change at page 86, line 24 | |||
[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, September 2009. | Languages", BCP 47, RFC 5646, September 2009. | |||
[RFC6365] Hoffman, P. and J. Klensin, "Terminology Used in | [RFC6365] Hoffman, P. and J. Klensin, "Terminology Used in | |||
Internationalization in the IETF", BCP 166, RFC 6365, | Internationalization in the IETF", BCP 166, RFC 6365, | |||
September 2011. | September 2011. | |||
[RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
Protocol (HTTP/1.1): Message Syntax and Routing", | Protocol (HTTP/1.1): Message Syntax and Routing", | |||
draft-ietf-httpbis-p1-messaging-latest (work in progress), | RFC 7230, June 2014. | |||
June 2014. | ||||
[RFC7232] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7232] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
Protocol (HTTP/1.1): Conditional Requests", | Protocol (HTTP/1.1): Conditional Requests", RFC 7232, | |||
draft-ietf-httpbis-p4-conditional-latest (work in | June 2014. | |||
progress), June 2014. | ||||
[RFC7233] Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed., | [RFC7233] Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed., | |||
"Hypertext Transfer Protocol (HTTP/1.1): Range Requests", | "Hypertext Transfer Protocol (HTTP/1.1): Range Requests", | |||
draft-ietf-httpbis-p5-range-latest (work in progress), | RFC 7233, June 2014. | |||
June 2014. | ||||
[RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | |||
draft-ietf-httpbis-p6-cache-latest (work in progress), | RFC 7234, June 2014. | |||
June 2014. | ||||
[RFC7235] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7235] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
Protocol (HTTP/1.1): Authentication", | Protocol (HTTP/1.1): Authentication", RFC 7235, June 2014. | |||
draft-ietf-httpbis-p7-auth-latest (work in progress), | ||||
June 2014. | ||||
11.2. Informative References | 11.2. Informative References | |||
[BCP13] Freed, N., Klensin, J., and T. Hansen, "Media Type | [BCP13] Freed, N., Klensin, J., and T. Hansen, "Media Type | |||
Specifications and Registration Procedures", BCP 13, | Specifications and Registration Procedures", BCP 13, | |||
RFC 6838, January 2013. | RFC 6838, January 2013. | |||
[BCP178] Saint-Andre, P., Crocker, D., and M. Nottingham, | [BCP178] Saint-Andre, P., Crocker, D., and M. Nottingham, | |||
"Deprecating the "X-" Prefix and Similar Constructs in | "Deprecating the "X-" Prefix and Similar Constructs in | |||
Application Protocols", BCP 178, RFC 6648, June 2012. | Application Protocols", BCP 178, RFC 6648, June 2012. | |||
skipping to change at page 88, line 32 | skipping to change at page 88, line 36 | |||
[RFC5988] Nottingham, M., "Web Linking", RFC 5988, October 2010. | [RFC5988] Nottingham, M., "Web Linking", RFC 5988, October 2010. | |||
[RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265, | [RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265, | |||
April 2011. | April 2011. | |||
[RFC6266] Reschke, J., "Use of the Content-Disposition Header Field | [RFC6266] Reschke, J., "Use of the Content-Disposition Header Field | |||
in the Hypertext Transfer Protocol (HTTP)", RFC 6266, | in the Hypertext Transfer Protocol (HTTP)", RFC 6266, | |||
June 2011. | June 2011. | |||
[RFC7238] Reschke, J., "The Hypertext Transfer Protocol (HTTP) | [RFC7238] Reschke, J., "The Hypertext Transfer Protocol (HTTP) | |||
Status Code 308 (Permanent Redirect)", | Status Code 308 (Permanent Redirect)", RFC 7238, | |||
draft-reschke-http-status-308-07 (work in progress), | June 2014. | |||
March 2012. | ||||
Appendix A. Differences between HTTP and MIME | Appendix A. Differences between HTTP and MIME | |||
HTTP/1.1 uses many of the constructs defined for the Internet Message | HTTP/1.1 uses many of the constructs defined for the Internet Message | |||
Format [RFC5322] and the Multipurpose Internet Mail Extensions (MIME) | Format [RFC5322] and the Multipurpose Internet Mail Extensions (MIME) | |||
[RFC2045] to allow a message body to be transmitted in an open | [RFC2045] to allow a message body to be transmitted in an open | |||
variety of representations and with extensible header fields. | variety of representations and with extensible header fields. | |||
However, RFC 2045 is focused only on email; applications of HTTP have | However, RFC 2045 is focused only on email; applications of HTTP have | |||
many characteristics that differ from email; hence, HTTP has features | many characteristics that differ from email; hence, HTTP has features | |||
that differ from MIME. These differences were carefully chosen to | that differ from MIME. These differences were carefully chosen to | |||
skipping to change at page 89, line 10 | skipping to change at page 89, line 28 | |||
This appendix describes specific areas where HTTP differs from MIME. | This appendix describes specific areas where HTTP differs from MIME. | |||
Proxies and gateways to and from strict MIME environments need to be | Proxies and gateways to and from strict MIME environments need to be | |||
aware of these differences and provide the appropriate conversions | aware of these differences and provide the appropriate conversions | |||
where necessary. | where necessary. | |||
A.1. MIME-Version | A.1. MIME-Version | |||
HTTP is not a MIME-compliant protocol. However, messages can include | HTTP is not a MIME-compliant protocol. However, messages can include | |||
a single MIME-Version header field to indicate what version of the | a single MIME-Version header field to indicate what version of the | |||
MIME protocol was used to construct the message. Use of the MIME- | MIME protocol was used to construct the message. Use of the | |||
Version header field indicates that the message is in full | MIME-Version header field indicates that the message is in full | |||
conformance with the MIME protocol (as defined in [RFC2045]). | conformance with the MIME protocol (as defined in [RFC2045]). | |||
Senders are responsible for ensuring full conformance (where | Senders are responsible for ensuring full conformance (where | |||
possible) when exporting HTTP messages to strict MIME environments. | possible) when exporting HTTP messages to strict MIME environments. | |||
A.2. Conversion to Canonical Form | A.2. Conversion to Canonical Form | |||
MIME requires that an Internet mail body part be converted to | MIME requires that an Internet mail body part be converted to | |||
canonical form prior to being transferred, as described in Section 4 | canonical form prior to being transferred, as described in Section 4 | |||
of [RFC2049]. Section 3.1.1.3 of this document describes the forms | of [RFC2049]. Section 3.1.1.3 of this document describes the forms | |||
allowed for subtypes of the "text" media type when transmitted over | allowed for subtypes of the "text" media type when transmitted over | |||
skipping to change at page 89, line 50 | skipping to change at page 90, line 20 | |||
A.3. Conversion of Date Formats | A.3. Conversion of Date Formats | |||
HTTP/1.1 uses a restricted set of date formats (Section 7.1.1.1) to | HTTP/1.1 uses a restricted set of date formats (Section 7.1.1.1) to | |||
simplify the process of date comparison. Proxies and gateways from | simplify the process of date comparison. Proxies and gateways from | |||
other protocols ought to ensure that any Date header field present in | other protocols ought to ensure that any Date header field present in | |||
a message conforms to one of the HTTP/1.1 formats and rewrite the | a message conforms to one of the HTTP/1.1 formats and rewrite the | |||
date if necessary. | date if necessary. | |||
A.4. Conversion of Content-Encoding | A.4. Conversion of Content-Encoding | |||
MIME does not include any concept equivalent to HTTP/1.1's Content- | MIME does not include any concept equivalent to HTTP/1.1's | |||
Encoding header field. Since this acts as a modifier on the media | Content-Encoding header field. Since this acts as a modifier on the | |||
type, proxies and gateways from HTTP to MIME-compliant protocols | media type, proxies and gateways from HTTP to MIME-compliant | |||
ought to either change the value of the Content-Type header field or | protocols ought to either change the value of the Content-Type header | |||
decode the representation before forwarding the message. (Some | field or decode the representation before forwarding the message. | |||
experimental applications of Content-Type for Internet mail have used | (Some experimental applications of Content-Type for Internet mail | |||
a media-type parameter of ";conversions=<content-coding>" to perform | have used a media-type parameter of ";conversions=<content-coding>" | |||
a function equivalent to Content-Encoding. However, this parameter | to perform a function equivalent to Content-Encoding. However, this | |||
is not part of the MIME standards). | parameter is not part of the MIME standards). | |||
A.5. Conversion of Content-Transfer-Encoding | A.5. Conversion of Content-Transfer-Encoding | |||
HTTP does not use the Content-Transfer-Encoding field of MIME. | HTTP does not use the Content-Transfer-Encoding field of MIME. | |||
Proxies and gateways from MIME-compliant protocols to HTTP need to | Proxies and gateways from MIME-compliant protocols to HTTP need to | |||
remove any Content-Transfer-Encoding prior to delivering the response | remove any Content-Transfer-Encoding prior to delivering the response | |||
message to an HTTP client. | message to an HTTP client. | |||
Proxies and gateways from HTTP to MIME-compliant protocols are | Proxies and gateways from HTTP to MIME-compliant protocols are | |||
responsible for ensuring that the message is in the correct format | responsible for ensuring that the message is in the correct format | |||
skipping to change at page 96, line 49 | skipping to change at page 97, line 29 | |||
5 | 5 | |||
5xx Server Error (status code class) 62 | 5xx Server Error (status code class) 62 | |||
1 | 1 | |||
100 Continue (status code) 50 | 100 Continue (status code) 50 | |||
100-continue (expect value) 34 | 100-continue (expect value) 34 | |||
101 Switching Protocols (status code) 50 | 101 Switching Protocols (status code) 50 | |||
2 | 2 | |||
200 OK (status code) 51 | 200 OK (status code) 51 | |||
201 Created (status code) 51 | 201 Created (status code) 52 | |||
202 Accepted (status code) 52 | 202 Accepted (status code) 52 | |||
203 Non-Authoritative Information (status code) 52 | 203 Non-Authoritative Information (status code) 52 | |||
204 No Content (status code) 53 | 204 No Content (status code) 53 | |||
205 Reset Content (status code) 53 | 205 Reset Content (status code) 53 | |||
3 | 3 | |||
300 Multiple Choices (status code) 55 | 300 Multiple Choices (status code) 55 | |||
301 Moved Permanently (status code) 56 | 301 Moved Permanently (status code) 56 | |||
302 Found (status code) 56 | 302 Found (status code) 56 | |||
303 See Other (status code) 57 | 303 See Other (status code) 57 | |||
305 Use Proxy (status code) 57 | 305 Use Proxy (status code) 58 | |||
306 (Unused) (status code) 57 | 306 (Unused) (status code) 58 | |||
307 Temporary Redirect (status code) 58 | 307 Temporary Redirect (status code) 58 | |||
4 | 4 | |||
400 Bad Request (status code) 58 | 400 Bad Request (status code) 58 | |||
402 Payment Required (status code) 58 | 402 Payment Required (status code) 59 | |||
403 Forbidden (status code) 58 | 403 Forbidden (status code) 59 | |||
404 Not Found (status code) 59 | 404 Not Found (status code) 59 | |||
405 Method Not Allowed (status code) 59 | 405 Method Not Allowed (status code) 59 | |||
406 Not Acceptable (status code) 59 | 406 Not Acceptable (status code) 59 | |||
408 Request Timeout (status code) 60 | 408 Request Timeout (status code) 60 | |||
409 Conflict (status code) 60 | 409 Conflict (status code) 60 | |||
410 Gone (status code) 60 | 410 Gone (status code) 60 | |||
411 Length Required (status code) 61 | 411 Length Required (status code) 61 | |||
413 Payload Too Large (status code) 61 | 413 Payload Too Large (status code) 61 | |||
414 URI Too Long (status code) 61 | 414 URI Too Long (status code) 61 | |||
415 Unsupported Media Type (status code) 61 | 415 Unsupported Media Type (status code) 62 | |||
417 Expectation Failed (status code) 62 | 417 Expectation Failed (status code) 62 | |||
426 Upgrade Required (status code) 62 | 426 Upgrade Required (status code) 62 | |||
5 | 5 | |||
500 Internal Server Error (status code) 62 | 500 Internal Server Error (status code) 63 | |||
501 Not Implemented (status code) 63 | 501 Not Implemented (status code) 63 | |||
502 Bad Gateway (status code) 63 | 502 Bad Gateway (status code) 63 | |||
503 Service Unavailable (status code) 63 | 503 Service Unavailable (status code) 63 | |||
504 Gateway Timeout (status code) 63 | 504 Gateway Timeout (status code) 63 | |||
505 HTTP Version Not Supported (status code) 63 | 505 HTTP Version Not Supported (status code) 64 | |||
A | A | |||
Accept header field 38 | Accept header field 38 | |||
Accept-Charset header field 40 | Accept-Charset header field 40 | |||
Accept-Encoding header field 41 | Accept-Encoding header field 41 | |||
Accept-Language header field 42 | Accept-Language header field 42 | |||
Allow header field 72 | Allow header field 72 | |||
C | C | |||
cacheable 24 | cacheable 24 | |||
compress (content coding) 11 | compress (content coding) 11 | |||
conditional request 36 | conditional request 36 | |||
CONNECT method 30 | CONNECT method 30 | |||
content coding 11 | content coding 11 | |||
content negotiation 6 | content negotiation 6 | |||
Content-Encoding header field 12 | Content-Encoding header field 12 | |||
Content-Language header field 13 | Content-Language header field 13 | |||
Content-Location header field 15 | Content-Location header field 15 | |||
Content-Transfer-Encoding header field 90 | Content-Transfer-Encoding header field 89 | |||
Content-Type header field 10 | Content-Type header field 10 | |||
D | D | |||
Date header field 67 | Date header field 67 | |||
deflate (content coding) 11 | deflate (content coding) 11 | |||
DELETE method 29 | DELETE method 29 | |||
E | E | |||
Expect header field 34 | Expect header field 34 | |||
skipping to change at page 98, line 34 | skipping to change at page 99, line 15 | |||
G | G | |||
GET method 24 | GET method 24 | |||
Grammar | Grammar | |||
Accept 38 | Accept 38 | |||
Accept-Charset 40 | Accept-Charset 40 | |||
Accept-Encoding 41 | Accept-Encoding 41 | |||
accept-ext 38 | accept-ext 38 | |||
Accept-Language 42 | Accept-Language 42 | |||
accept-params 38 | accept-params 38 | |||
Allow 72 | Allow 72 | |||
asctime-date 67 | asctime-date 66 | |||
charset 9 | charset 9 | |||
codings 41 | codings 41 | |||
content-coding 11 | content-coding 11 | |||
Content-Encoding 12 | Content-Encoding 12 | |||
Content-Language 13 | Content-Language 13 | |||
Content-Location 15 | Content-Location 15 | |||
Content-Type 10 | Content-Type 10 | |||
Date 67 | Date 67 | |||
date1 66 | date1 65 | |||
day 66 | day 65 | |||
day-name 66 | day-name 65 | |||
day-name-l 66 | day-name-l 65 | |||
delay-seconds 70 | delay-seconds 69 | |||
Expect 34 | Expect 34 | |||
From 44 | From 44 | |||
GMT 66 | GMT 65 | |||
hour 66 | hour 65 | |||
HTTP-date 64 | HTTP-date 65 | |||
IMF-fixdate 66 | IMF-fixdate 65 | |||
language-range 42 | language-range 42 | |||
language-tag 13 | language-tag 13 | |||
Location 68 | Location 68 | |||
Max-Forwards 36 | Max-Forwards 36 | |||
media-range 38 | media-range 38 | |||
media-type 8 | media-type 8 | |||
method 21 | method 21 | |||
minute 66 | minute 65 | |||
month 66 | month 65 | |||
obs-date 66 | obs-date 66 | |||
parameter 8 | parameter 8 | |||
product 46 | product 46 | |||
product-version 46 | product-version 46 | |||
qvalue 38 | qvalue 38 | |||
Referer 45 | Referer 45 | |||
Retry-After 70 | Retry-After 69 | |||
rfc850-date 67 | rfc850-date 66 | |||
second 66 | second 65 | |||
Server 73 | Server 73 | |||
subtype 8 | subtype 8 | |||
time-of-day 66 | time-of-day 65 | |||
type 8 | type 8 | |||
User-Agent 46 | User-Agent 46 | |||
Vary 70 | Vary 70 | |||
weight 38 | weight 38 | |||
year 66 | year 65 | |||
gzip (content coding) 11 | gzip (content coding) 11 | |||
H | H | |||
HEAD method 25 | HEAD method 25 | |||
I | I | |||
idempotent 23 | idempotent 23 | |||
L | L | |||
Location header field 68 | Location header field 68 | |||
End of changes. 57 change blocks. | ||||
308 lines changed or deleted | 286 lines changed or added | |||
This html diff was produced by rfcdiff 1.38. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |