diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc7231.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc7231.txt')
-rw-r--r-- | doc/rfc/rfc7231.txt | 5659 |
1 files changed, 5659 insertions, 0 deletions
diff --git a/doc/rfc/rfc7231.txt b/doc/rfc/rfc7231.txt new file mode 100644 index 0000000..ea0a562 --- /dev/null +++ b/doc/rfc/rfc7231.txt @@ -0,0 +1,5659 @@ + + + + + + +Internet Engineering Task Force (IETF) R. Fielding, Ed. +Request for Comments: 7231 Adobe +Obsoletes: 2616 J. Reschke, Ed. +Updates: 2817 greenbytes +Category: Standards Track June 2014 +ISSN: 2070-1721 + + + Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content + +Abstract + + The Hypertext Transfer Protocol (HTTP) is a stateless application- + level protocol for distributed, collaborative, hypertext information + systems. This document defines the semantics of HTTP/1.1 messages, + as expressed by request methods, request header fields, response + status codes, and response header fields, along with the payload of + messages (metadata and body content) and mechanisms for content + negotiation. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 5741. + + 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. + + + + + + + + + + + + + + + + + + +Fielding & Reschke Standards Track [Page 1] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +Copyright Notice + + Copyright (c) 2014 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (http://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Simplified BSD License text as described in Section 4.e of + the Trust Legal Provisions and are provided without warranty as + described in the Simplified BSD License. + + This document may contain material from IETF Documents or IETF + Contributions published or made publicly available before November + 10, 2008. The person(s) controlling the copyright in some of this + material may not have granted the IETF Trust the right to allow + modifications of such material outside the IETF Standards Process. + Without obtaining an adequate license from the person(s) controlling + the copyright in such materials, this document may not be modified + outside the IETF Standards Process, and derivative works of it may + not be created outside the IETF Standards Process, except to format + it for publication as an RFC or to translate it into languages other + than English. + + + + + + + + + + + + + + + + + + + + + + + + + +Fielding & Reschke Standards Track [Page 2] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +Table of Contents + + 1. Introduction ....................................................6 + 1.1. Conformance and Error Handling .............................6 + 1.2. Syntax Notation ............................................6 + 2. Resources .......................................................7 + 3. Representations .................................................7 + 3.1. Representation Metadata ....................................8 + 3.1.1. Processing Representation Data ......................8 + 3.1.2. Encoding for Compression or Integrity ..............11 + 3.1.3. Audience Language ..................................13 + 3.1.4. Identification .....................................14 + 3.2. Representation Data .......................................17 + 3.3. Payload Semantics .........................................17 + 3.4. Content Negotiation .......................................18 + 3.4.1. Proactive Negotiation ..............................19 + 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 + + + +Fielding & Reschke Standards Track [Page 3] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + 6. Response Status Codes ..........................................47 + 6.1. Overview of Status Codes ..................................48 + 6.2. Informational 1xx .........................................50 + 6.2.1. 100 Continue .......................................50 + 6.2.2. 101 Switching Protocols ............................50 + 6.3. Successful 2xx ............................................51 + 6.3.1. 200 OK .............................................51 + 6.3.2. 201 Created ........................................52 + 6.3.3. 202 Accepted .......................................52 + 6.3.4. 203 Non-Authoritative Information ..................52 + 6.3.5. 204 No Content .....................................53 + 6.3.6. 205 Reset Content ..................................53 + 6.4. Redirection 3xx ...........................................54 + 6.4.1. 300 Multiple Choices ...............................55 + 6.4.2. 301 Moved Permanently ..............................56 + 6.4.3. 302 Found ..........................................56 + 6.4.4. 303 See Other ......................................57 + 6.4.5. 305 Use Proxy ......................................58 + 6.4.6. 306 (Unused) .......................................58 + 6.4.7. 307 Temporary Redirect .............................58 + 6.5. Client Error 4xx ..........................................58 + 6.5.1. 400 Bad Request ....................................58 + 6.5.2. 402 Payment Required ...............................59 + 6.5.3. 403 Forbidden ......................................59 + 6.5.4. 404 Not Found ......................................59 + 6.5.5. 405 Method Not Allowed .............................59 + 6.5.6. 406 Not Acceptable .................................60 + 6.5.7. 408 Request Timeout ................................60 + 6.5.8. 409 Conflict .......................................60 + 6.5.9. 410 Gone ...........................................60 + 6.5.10. 411 Length Required ...............................61 + 6.5.11. 413 Payload Too Large .............................61 + 6.5.12. 414 URI Too Long ..................................61 + 6.5.13. 415 Unsupported Media Type ........................62 + 6.5.14. 417 Expectation Failed ............................62 + 6.5.15. 426 Upgrade Required ..............................62 + 6.6. Server Error 5xx ..........................................62 + 6.6.1. 500 Internal Server Error ..........................63 + 6.6.2. 501 Not Implemented ................................63 + 6.6.3. 502 Bad Gateway ....................................63 + 6.6.4. 503 Service Unavailable ............................63 + 6.6.5. 504 Gateway Timeout ................................63 + 6.6.6. 505 HTTP Version Not Supported .....................64 + 7. Response Header Fields .........................................64 + 7.1. Control Data ..............................................64 +ed 7.1.1. Origination Date ...................................65 + 7.1.2. Location ...........................................68 + 7.1.3. Retry-After ........................................69 + + + +Fielding & Reschke Standards Track [Page 4] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + 7.1.4. Vary ...............................................70 + 7.2. Validator Header Fields ...................................71 + 7.3. Authentication Challenges .................................72 + 7.4. Response Context ..........................................72 + 7.4.1. Allow ..............................................72 + 7.4.2. Server .............................................73 + 8. IANA Considerations ............................................73 + 8.1. Method Registry ...........................................73 + 8.1.1. Procedure ..........................................74 + 8.1.2. Considerations for New Methods .....................74 + 8.1.3. Registrations ......................................75 + 8.2. Status Code Registry ......................................75 + 8.2.1. Procedure ..........................................75 + 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 ...................................81 + 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 ....................84 + 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 .....................89 + A.1. MIME-Version ..............................................89 + A.2. Conversion to Canonical Form ..............................89 + A.3. Conversion of Date Formats ................................90 + A.4. Conversion of Content-Encoding ............................90 + A.5. Conversion of Content-Transfer-Encoding ...................90 + A.6. MHTML and Line Length Limitations .........................90 + Appendix B. Changes from RFC 2616 .................................91 + Appendix C. Imported ABNF .........................................93 + Appendix D. Collected ABNF ........................................94 + Index .............................................................97 + + + + + + + +Fielding & Reschke Standards Track [Page 5] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +1. Introduction + + Each Hypertext Transfer Protocol (HTTP) message is either a request + or a response. A server listens on a connection for a request, + parses each message received, interprets the message semantics in + relation to the identified request target, and responds to that + request with one or more response messages. A client constructs + request messages to communicate specific intentions, examines + received responses to see if the intentions were carried out, and + determines how to interpret the results. This document defines + HTTP/1.1 request and response semantics in terms of the architecture + defined in [RFC7230]. + + HTTP provides a uniform interface for interacting with a resource + (Section 2), regardless of its type, nature, or implementation, via + the manipulation and transfer of representations (Section 3). + + HTTP semantics include the intentions defined by each request method + (Section 4), extensions to those semantics that might be described in + request header fields (Section 5), the meaning of status codes to + indicate a machine-readable response (Section 6), and the meaning of + other control data and resource metadata that might be given in + response header fields (Section 7). + + This document also defines representation metadata that describe how + a payload is intended to be interpreted by a recipient, the request + header fields that might influence content selection, and the various + selection algorithms that are collectively referred to as "content + negotiation" (Section 3.4). + +1.1. Conformance and Error Handling + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this + document are to be interpreted as described in [RFC2119]. + + Conformance criteria and considerations regarding error handling are + defined in Section 2.5 of [RFC7230]. + +1.2. Syntax Notation + + This specification uses the Augmented Backus-Naur Form (ABNF) + notation of [RFC5234] with a list extension, defined in Section 7 of + [RFC7230], that allows for compact definition of comma-separated + lists using a '#' operator (similar to how the '*' operator indicates + repetition). Appendix C describes rules imported from other + documents. Appendix D shows the collected grammar with all list + operators expanded to standard ABNF notation. + + + +Fielding & Reschke Standards Track [Page 6] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + This specification uses the terms "character", "character encoding + scheme", "charset", and "protocol element" as they are defined in + [RFC6365]. + +2. Resources + + The target of an HTTP request is called a "resource". HTTP does not + limit the nature of a resource; it merely defines an interface that + might be used to interact with resources. Each resource is + identified by a Uniform Resource Identifier (URI), as described in + Section 2.7 of [RFC7230]. + + 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 + [RFC7230]). When a request is received, the server reconstructs an + effective request URI for the target resource (Section 5.5 of + [RFC7230]). + + One design goal of HTTP is to separate resource identification from + request semantics, which is made possible by vesting the request + semantics in the request method (Section 4) and a few + request-modifying header fields (Section 5). If there is a conflict + between the method semantics and any semantic implied by the URI + itself, as described in Section 4.2.1, the method semantics take + precedence. + +3. Representations + + Considering that a resource could be anything, and that the uniform + interface provided by HTTP is similar to a window through which one + can observe and act upon such a thing only through the communication + of messages to some independent actor on the other side, an + abstraction is needed to represent ("take the place of") the current + or desired state of that thing in our communications. That + abstraction is called a representation [REST]. + + For the purposes of HTTP, a "representation" is information that is + intended to reflect a past, current, or desired state of a given + resource, in a format that can be readily communicated via the + protocol, and that consists of a set of representation metadata and a + potentially unbounded stream of representation data. + + An origin server might be provided with, or be capable of generating, + multiple representations that are each intended to reflect the + current state of a target resource. In such cases, some algorithm is + used by the origin server to select one of those representations as + most applicable to a given request, usually based on content + negotiation. This "selected representation" is used to provide the + + + +Fielding & Reschke Standards Track [Page 7] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + data and metadata for evaluating conditional requests [RFC7232] and + constructing the payload for 200 (OK) and 304 (Not Modified) + responses to GET (Section 4.3.1). + +3.1. Representation Metadata + + Representation header fields provide metadata about the + representation. When a message includes a payload body, the + representation header fields describe how to interpret the + representation data enclosed in the payload body. In a response to a + HEAD request, the representation header fields describe the + representation data that would have been enclosed in the payload body + if the same request had been a GET. + + The following header fields convey representation metadata: + + +-------------------+-----------------+ + | Header Field Name | Defined in... | + +-------------------+-----------------+ + | Content-Type | Section 3.1.1.5 | + | Content-Encoding | Section 3.1.2.2 | + | Content-Language | Section 3.1.3.2 | + | Content-Location | Section 3.1.4.2 | + +-------------------+-----------------+ + +3.1.1. Processing Representation Data + +3.1.1.1. Media Type + + HTTP uses Internet media types [RFC2046] in the Content-Type + (Section 3.1.1.5) and Accept (Section 5.3.2) header fields in order + to provide open and extensible data typing and type negotiation. + Media types define both a data format and various processing models: + how to process that data in accordance with each context in which it + is received. + + media-type = type "/" subtype *( OWS ";" OWS parameter ) + type = token + subtype = token + + The type/subtype MAY be followed by parameters in the form of + name=value pairs. + + parameter = token "=" ( token / quoted-string ) + + + + + + + +Fielding & Reschke Standards Track [Page 8] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + The type, subtype, and parameter name tokens are case-insensitive. + Parameter values might or might not be case-sensitive, depending on + the semantics of the parameter name. The presence or absence of a + parameter might be significant to the processing of a media-type, + depending on its definition within the media type registry. + + A parameter value that matches the token production can be + transmitted either as a token or within a quoted-string. The quoted + and unquoted values are equivalent. For example, the following + examples are all equivalent, but the first is preferred for + consistency: + + text/html;charset=utf-8 + text/html;charset=UTF-8 + Text/HTML;Charset="utf-8" + text/html; charset="utf-8" + + Internet media types ought to be registered with IANA according to + the procedures defined in [BCP13]. + + Note: Unlike some similar constructs in other header fields, media + type parameters do not allow whitespace (even "bad" whitespace) + around the "=" character. + +3.1.1.2. Charset + + HTTP uses charset names to indicate or negotiate the character + encoding scheme of a textual representation [RFC6365]. A charset is + identified by a case-insensitive token. + + charset = token + + Charset names ought to be registered in the IANA "Character Sets" + registry (<http://www.iana.org/assignments/character-sets>) according + to the procedures defined in [RFC2978]. + +3.1.1.3. Canonicalization and Text Defaults + + Internet media types are registered with a canonical form in order to + be interoperable among systems with varying native encoding formats. + Representations selected or transferred via HTTP ought to be in + canonical form, for many of the same reasons described by the + Multipurpose Internet Mail Extensions (MIME) [RFC2045]. However, the + performance characteristics of email deployments (i.e., store and + forward messages to peers) are significantly different from those + common to HTTP and the Web (server-based information services). + Furthermore, MIME's constraints for the sake of compatibility with + older mail transfer protocols do not apply to HTTP (see Appendix A). + + + +Fielding & Reschke Standards Track [Page 9] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + MIME's canonical form requires that media subtypes of the "text" type + use CRLF as the text line break. HTTP allows the transfer of text + media with plain CR or LF alone representing a line break, when such + line breaks are consistent for an entire representation. An HTTP + sender MAY generate, and a recipient MUST be able to parse, line + breaks in text media that consist of CRLF, bare CR, or bare LF. In + addition, text media in HTTP is not limited to charsets that use + octets 13 and 10 for CR and LF, respectively. This flexibility + regarding line breaks applies only to text within a representation + that has been assigned a "text" media type; it does not apply to + "multipart" types or HTTP elements outside the payload body (e.g., + header fields). + + If a representation is encoded with a content-coding, the underlying + data ought to be in a form defined above prior to being encoded. + +3.1.1.4. Multipart Types + + MIME provides for a number of "multipart" types -- encapsulations of + one or more representations within a single message body. All + multipart types share a common syntax, as defined in Section 5.1.1 of + [RFC2046], and include a boundary parameter as part of the media type + value. The message body is itself a protocol element; a sender MUST + generate only CRLF to represent line breaks between body parts. + + HTTP message framing does not use the multipart boundary as an + indicator of message body length, though it might be used by + implementations that generate or process the payload. For example, + the "multipart/form-data" type is often used for carrying form data + in a request, as described in [RFC2388], and the "multipart/ + byteranges" type is defined by this specification for use in some 206 + (Partial Content) responses [RFC7233]. + +3.1.1.5. Content-Type + + The "Content-Type" header field indicates the media type of the + associated representation: either the representation enclosed in the + message payload or the selected representation, as determined by the + message semantics. The indicated media type defines both the data + format and how that data is intended to be processed by a recipient, + within the scope of the received message semantics, after any content + codings indicated by Content-Encoding are decoded. + + Content-Type = media-type + + + + + + + +Fielding & Reschke Standards Track [Page 10] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + Media types are defined in Section 3.1.1.1. An example of the field + is + + Content-Type: text/html; charset=ISO-8859-4 + + A sender that generates a message containing a payload body SHOULD + generate a Content-Type header field in that message unless the + intended media type of the enclosed representation is unknown to the + sender. If a Content-Type header field is not present, the recipient + MAY either assume a media type of "application/octet-stream" + ([RFC2046], Section 4.5.1) or examine the data to determine its type. + + In practice, resource owners do not always properly configure their + origin server to provide the correct Content-Type for a given + representation, with the result that some clients will examine a + payload's content and override the specified type. Clients that do + so risk drawing incorrect conclusions, which might expose additional + security risks (e.g., "privilege escalation"). Furthermore, it is + impossible to determine the sender's intent by examining the data + format: many data formats match multiple media types that differ only + in processing semantics. Implementers are encouraged to provide a + means of disabling such "content sniffing" when it is used. + +3.1.2. Encoding for Compression or Integrity + +3.1.2.1. Content Codings + + Content coding values indicate an encoding transformation that has + been or can be applied to a representation. Content codings are + primarily used to allow a representation to be compressed or + otherwise usefully transformed without losing the identity of its + underlying media type and without loss of information. Frequently, + the representation is stored in coded form, transmitted directly, and + only decoded by the final recipient. + + content-coding = token + + All content-coding values are case-insensitive and ought to be + registered within the "HTTP Content Coding Registry", as defined in + Section 8.4. They are used in the Accept-Encoding (Section 5.3.4) + and Content-Encoding (Section 3.1.2.2) header fields. + + + + + + + + + + +Fielding & Reschke Standards Track [Page 11] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + The following content-coding values are defined by this + specification: + + compress (and x-compress): See Section 4.2.1 of [RFC7230]. + + deflate: See Section 4.2.2 of [RFC7230]. + + gzip (and x-gzip): See Section 4.2.3 of [RFC7230]. + +3.1.2.2. Content-Encoding + + The "Content-Encoding" header field indicates what content codings + have been applied to the representation, beyond those inherent in the + media type, and thus what decoding mechanisms have to be applied in + order to obtain data in the media type referenced by the Content-Type + header field. Content-Encoding is primarily used to allow a + representation's data to be compressed without losing the identity of + its underlying media type. + + Content-Encoding = 1#content-coding + + An example of its use is + + Content-Encoding: gzip + + If one or more encodings have been applied to a representation, the + sender that applied the encodings MUST generate a Content-Encoding + header field that lists the content codings in the order in which + they were applied. Additional information about the encoding + parameters can be provided by other header fields not defined by this + specification. + + Unlike Transfer-Encoding (Section 3.3.1 of [RFC7230]), the codings + listed in Content-Encoding are a characteristic of the + representation; the representation is defined in terms of the coded + form, and all other metadata about the representation is about the + coded form unless otherwise noted in the metadata definition. + Typically, the representation is only decoded just prior to rendering + or analogous usage. + + If the media type includes an inherent encoding, such as a data + format that is always compressed, then that encoding would not be + restated in Content-Encoding even if it happens to be the same + algorithm as one of the content codings. Such a content coding would + only be listed if, for some bizarre reason, it is applied a second + time to form the representation. Likewise, an origin server might + choose to publish the same data as multiple representations that + differ only in whether the coding is defined as part of Content-Type + + + +Fielding & Reschke Standards Track [Page 12] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + or Content-Encoding, since some user agents will behave differently + in their handling of each response (e.g., open a "Save as ..." dialog + instead of automatic decompression and rendering of content). + + An origin server MAY respond with a status code of 415 (Unsupported + Media Type) if a representation in the request message has a content + coding that is not acceptable. + +3.1.3. Audience Language + +3.1.3.1. Language Tags + + A language tag, as defined in [RFC5646], identifies a natural + language spoken, written, or otherwise conveyed by human beings for + communication of information to other human beings. Computer + languages are explicitly excluded. + + HTTP uses language tags within the Accept-Language and + Content-Language header fields. Accept-Language uses the broader + language-range production defined in Section 5.3.5, whereas + Content-Language uses the language-tag production defined below. + + language-tag = <Language-Tag, see [RFC5646], Section 2.1> + + A language tag is a sequence of one or more case-insensitive subtags, + each separated by a hyphen character ("-", %x2D). In most cases, a + language tag consists of a primary language subtag that identifies a + broad family of related languages (e.g., "en" = English), which is + optionally followed by a series of subtags that refine or narrow that + language's range (e.g., "en-CA" = the variety of English as + communicated in Canada). Whitespace is not allowed within a language + tag. Example tags include: + + fr, en-US, es-419, az-Arab, x-pig-latin, man-Nkoo-GN + + See [RFC5646] for further information. + +3.1.3.2. Content-Language + + The "Content-Language" header field describes the natural language(s) + of the intended audience for the representation. Note that this + might not be equivalent to all the languages used within the + representation. + + Content-Language = 1#language-tag + + + + + + +Fielding & Reschke Standards Track [Page 13] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + Language tags are defined in Section 3.1.3.1. The primary purpose of + Content-Language is to allow a user to identify and differentiate + representations according to the users' own preferred language. + Thus, if the content is intended only for a Danish-literate audience, + the appropriate field is + + Content-Language: da + + If no Content-Language is specified, the default is that the content + is intended for all language audiences. This might mean that the + sender does not consider it to be specific to any natural language, + or that the sender does not know for which language it is intended. + + Multiple languages MAY be listed for content that is intended for + multiple audiences. For example, a rendition of the "Treaty of + Waitangi", presented simultaneously in the original Maori and English + versions, would call for + + Content-Language: mi, en + + However, just because multiple languages are present within a + representation does not mean that it is intended for multiple + linguistic audiences. An example would be a beginner's language + primer, such as "A First Lesson in Latin", which is clearly intended + to be used by an English-literate audience. In this case, the + Content-Language would properly only include "en". + + Content-Language MAY be applied to any media type -- it is not + limited to textual documents. + +3.1.4. Identification + +3.1.4.1. Identifying a Representation + + When a complete or partial representation is transferred in a message + payload, it is often desirable for the sender to supply, or the + recipient to determine, an identifier for a resource corresponding to + that representation. + + For a request message: + + o If the request has a Content-Location header field, then the + sender asserts that the payload is a representation of the + resource identified by the Content-Location field-value. However, + such an assertion cannot be trusted unless it can be verified by + other means (not defined by this specification). The information + might still be useful for revision history links. + + + + +Fielding & Reschke Standards Track [Page 14] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + o Otherwise, the payload is unidentified. + + For a response message, the following rules are applied in order + until a match is found: + + 1. If the request method is GET or HEAD and the response status code + is 200 (OK), 204 (No Content), 206 (Partial Content), or 304 (Not + Modified), the payload is a representation of the resource + identified by the effective request URI (Section 5.5 of + [RFC7230]). + + 2. If the request method is GET or HEAD and the response status code + is 203 (Non-Authoritative Information), the payload is a + potentially modified or enhanced representation of the target + resource as provided by an intermediary. + + 3. If the response has a Content-Location header field and its + field-value is a reference to the same URI as the effective + request URI, the payload is a representation of the resource + identified by the effective request URI. + + 4. If the response has a Content-Location header field and its + field-value is a reference to a URI different from the effective + request URI, then the sender asserts that the payload is a + representation of the resource identified by the Content-Location + field-value. However, such an assertion cannot be trusted unless + it can be verified by other means (not defined by this + specification). + + 5. Otherwise, the payload is unidentified. + +3.1.4.2. Content-Location + + The "Content-Location" header field references a URI that can be used + as an identifier for a specific resource corresponding to the + representation in this message's payload. In other words, if one + were to perform a GET request on this URI at the time of this + message's generation, then a 200 (OK) response would contain the same + representation that is enclosed as payload in this message. + + Content-Location = absolute-URI / partial-URI + + The Content-Location value is not a replacement for the effective + Request URI (Section 5.5 of [RFC7230]). It is representation + metadata. It has the same syntax and semantics as the header field + of the same name defined for MIME body parts in Section 4 of + [RFC2557]. However, its appearance in an HTTP message has some + special implications for HTTP recipients. + + + +Fielding & Reschke Standards Track [Page 15] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + If Content-Location is included in a 2xx (Successful) response + message and its value refers (after conversion to absolute form) to a + URI that is the same as the effective request URI, then the recipient + MAY consider the payload to be a current representation of that + resource at the time indicated by the message origination date. For + a GET (Section 4.3.1) or HEAD (Section 4.3.2) request, this is the + same as the default semantics when no Content-Location is provided by + the server. For a state-changing request like PUT (Section 4.3.4) or + POST (Section 4.3.3), it implies that the server's response contains + the new representation of that resource, thereby distinguishing it + from representations that might only report about the action (e.g., + "It worked!"). This allows authoring applications to update their + local copies without the need for a subsequent GET request. + + If Content-Location is included in a 2xx (Successful) response + 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 + an identifier for a different resource corresponding to the enclosed + representation. Such a claim can only be trusted if both identifiers + share the same resource owner, which cannot be programmatically + determined via HTTP. + + 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 + subject to content negotiation and the Content-Location + field-value is a more specific identifier for the selected + representation. + + o For a 201 (Created) response to a state-changing method, a + Content-Location field-value that is identical to the Location + field-value indicates that this payload is a current + representation of the newly created resource. + + o Otherwise, such a Content-Location indicates that this payload is + a representation reporting on the requested action's status and + that the same report is available (for future access with GET) at + the given URI. For example, a purchase transaction made via a + POST request might include a receipt document as the payload of + the 200 (OK) response; the Content-Location field-value provides + an identifier for retrieving a copy of that same receipt in the + future. + + A user agent that sends Content-Location in a request message is + stating that its value refers to where the user agent originally + obtained the content of the enclosed representation (prior to any + modifications made by that user agent). In other words, the user + agent is providing a back link to the source of the original + representation. + + + +Fielding & Reschke Standards Track [Page 16] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + An origin server that receives a Content-Location field in a request + message MUST treat the information as transitory request context + rather than as metadata to be saved verbatim as part of the + representation. An origin server MAY use that context to guide in + processing the request or to save it for other uses, such as within + source links or versioning metadata. However, an origin server MUST + NOT use such context information to alter the request semantics. + + For example, if a client makes a PUT request on a negotiated resource + and the origin server accepts that PUT (without redirection), then + the new state of that resource is expected to be consistent with the + one representation supplied in that PUT; the Content-Location cannot + be used as a form of reverse content selection identifier to update + only one of the negotiated representations. If the user agent had + wanted the latter semantics, it would have applied the PUT directly + to the Content-Location URI. + +3.2. Representation Data + + The representation data associated with an HTTP message is either + provided as the payload body of the message or referred to by the + message semantics and the effective request URI. The representation + data is in a format and encoding defined by the representation + metadata header fields. + + The data type of the representation data is determined via the header + fields Content-Type and Content-Encoding. These define a two-layer, + ordered encoding model: + + representation-data := Content-Encoding( Content-Type( bits ) ) + +3.3. Payload Semantics + + Some HTTP messages transfer a complete or partial representation as + the message "payload". In some cases, a payload might contain only + the associated representation's header fields (e.g., responses to + HEAD) or only some part(s) of the representation data (e.g., the 206 + (Partial Content) status code). + + The purpose of a payload in a request is defined by the method + semantics. For example, a representation in the payload of a PUT + request (Section 4.3.4) represents the desired state of the target + resource if the request is successfully applied, whereas a + representation in the payload of a POST request (Section 4.3.3) + represents information to be processed by the target resource. + + + + + + +Fielding & Reschke Standards Track [Page 17] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + In a response, the payload's purpose is defined by both the request + method and the response status code. For example, the payload of a + 200 (OK) response to GET (Section 4.3.1) represents the current state + of the target resource, as observed at the time of the message + origination date (Section 7.1.1.2), whereas the payload of the same + status code in a response to POST might represent either the + processing result or the new state of the target resource after + applying the processing. Response messages with an error status code + usually contain a payload that represents the error condition, such + that it describes the error state and what next steps are suggested + for resolving it. + + Header fields that specifically describe the payload, rather than the + associated representation, are referred to as "payload header + fields". Payload header fields are defined in other parts of this + specification, due to their impact on message parsing. + + +-------------------+----------------------------+ + | Header Field Name | Defined in... | + +-------------------+----------------------------+ + | Content-Length | Section 3.3.2 of [RFC7230] | + | Content-Range | Section 4.2 of [RFC7233] | + | Trailer | Section 4.4 of [RFC7230] | + | Transfer-Encoding | Section 3.3.1 of [RFC7230] | + +-------------------+----------------------------+ + +3.4. Content Negotiation + + When responses convey payload information, whether indicating a + success or an error, the origin server often has different ways of + representing that information; for example, in different formats, + languages, or encodings. Likewise, different users or user agents + might have differing capabilities, characteristics, or preferences + that could influence which representation, among those available, + would be best to deliver. For this reason, HTTP provides mechanisms + for content negotiation. + + This specification defines two patterns of content negotiation that + can be made visible within the protocol: "proactive", where the + server selects the representation based upon the user agent's stated + preferences, and "reactive" negotiation, where the server provides a + list of representations for the user agent to choose from. Other + patterns of content negotiation include "conditional content", where + the representation consists of multiple parts that are selectively + rendered based on user agent parameters, "active content", where the + representation contains a script that makes additional (more + specific) requests based on the user agent characteristics, and + "Transparent Content Negotiation" ([RFC2295]), where content + + + +Fielding & Reschke Standards Track [Page 18] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + selection is performed by an intermediary. These patterns are not + mutually exclusive, and each has trade-offs in applicability and + practicality. + + Note that, in all cases, HTTP is not aware of the resource semantics. + The consistency with which an origin server responds to requests, + over time and over the varying dimensions of content negotiation, and + thus the "sameness" of a resource's observed representations over + time, is determined entirely by whatever entity or algorithm selects + or generates those responses. HTTP pays no attention to the man + behind the curtain. + +3.4.1. Proactive Negotiation + + When content negotiation preferences are sent by the user agent in a + request to encourage an algorithm located at the server to select the + preferred representation, it is called proactive negotiation (a.k.a., + server-driven negotiation). Selection is based on the available + representations for a response (the dimensions over which it might + vary, such as language, content-coding, etc.) compared to various + information supplied in the request, including both the explicit + negotiation fields of Section 5.3 and implicit characteristics, such + as the client's network address or parts of the User-Agent field. + + Proactive negotiation is advantageous when the algorithm for + selecting from among the available representations is difficult to + describe to a user agent, or when the server desires to send its + "best guess" to the user agent along with the first response (hoping + to avoid the round trip delay of a subsequent request if the "best + guess" is good enough for the user). In order to improve the + server's guess, a user agent MAY send request header fields that + describe its preferences. + + Proactive negotiation has serious disadvantages: + + o It is impossible for the server to accurately determine what might + be "best" for any given user, since that would require complete + knowledge of both the capabilities of the user agent and the + intended use for the response (e.g., does the user want to view it + on screen or print it on paper?); + + o Having the user agent describe its capabilities in every request + can be both very inefficient (given that only a small percentage + of responses have multiple representations) and a potential risk + to the user's privacy; + + o It complicates the implementation of an origin server and the + algorithms for generating responses to a request; and, + + + +Fielding & Reschke Standards Track [Page 19] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + o It limits the reusability of responses for shared caching. + + A user agent cannot rely on proactive negotiation preferences being + consistently honored, since the origin server might not implement + proactive negotiation for the requested resource or might decide that + sending a response that doesn't conform to the user agent's + preferences is better than sending a 406 (Not Acceptable) response. + + A Vary header field (Section 7.1.4) is often sent in a response + subject to proactive negotiation to indicate what parts of the + request information were used in the selection algorithm. + +3.4.2. Reactive Negotiation + + With reactive negotiation (a.k.a., agent-driven negotiation), + selection of the best response representation (regardless of the + status code) is performed by the user agent after receiving an + initial response from the origin server that contains a list of + resources for alternative representations. If the user agent is not + satisfied by the initial response representation, it can perform a + GET request on one or more of the alternative resources, selected + based on metadata included in the list, to obtain a different form of + representation for that response. Selection of alternatives might be + performed automatically by the user agent or manually by the user + selecting from a generated (possibly hypertext) menu. + + Note that the above refers to representations of the response, in + general, not representations of the resource. The alternative + representations are only considered representations of the target + resource if the response in which those alternatives are provided has + the semantics of being a representation of the target resource (e.g., + a 200 (OK) response to a GET request) or has the semantics of + providing links to alternative representations for the target + resource (e.g., a 300 (Multiple Choices) response to a GET request). + + A server might choose not to send an initial representation, other + than the list of alternatives, and thereby indicate that reactive + negotiation by the user agent is preferred. For example, the + alternatives listed in responses with the 300 (Multiple Choices) and + 406 (Not Acceptable) status codes include information about the + available representations so that the user or user agent can react by + making a selection. + + Reactive negotiation is advantageous when the response would vary + over commonly used dimensions (such as type, language, or encoding), + when the origin server is unable to determine a user agent's + capabilities from examining the request, and generally when public + caches are used to distribute server load and reduce network usage. + + + +Fielding & Reschke Standards Track [Page 20] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + Reactive negotiation suffers from the disadvantages of transmitting a + list of alternatives to the user agent, which degrades user-perceived + latency if transmitted in the header section, and needing a second + request to obtain an alternate representation. Furthermore, this + specification does not define a mechanism for supporting automatic + selection, though it does not prevent such a mechanism from being + developed as an extension. + +4. Request Methods + +4.1. Overview + + The request method token is the primary source of request semantics; + it indicates the purpose for which the client has made this request + and what is expected by the client as a successful result. + + The request method's semantics might be further specialized by the + semantics of some header fields when present in a request (Section 5) + if those additional semantics do not conflict with the method. For + example, a client can send conditional request header fields + (Section 5.2) to make the requested action conditional on the current + state of the target resource ([RFC7232]). + + method = token + + HTTP was originally designed to be usable as an interface to + distributed object systems. The request method was envisioned as + applying semantics to a target resource in much the same way as + invoking a defined method on an identified object would apply + semantics. The method token is case-sensitive because it might be + used as a gateway to object-based systems with case-sensitive method + names. + + Unlike distributed objects, the standardized request methods in HTTP + are not resource-specific, since uniform interfaces provide for + better visibility and reuse in network-based systems [REST]. Once + defined, a standardized method ought to have the same semantics when + applied to any resource, though each resource determines for itself + whether those semantics are implemented or allowed. + + This specification defines a number of standardized methods that are + commonly used in HTTP, as outlined by the following table. By + convention, standardized methods are defined in all-uppercase + US-ASCII letters. + + + + + + + +Fielding & Reschke Standards Track [Page 21] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + +---------+-------------------------------------------------+-------+ + | Method | Description | Sec. | + +---------+-------------------------------------------------+-------+ + | GET | Transfer a current representation of the target | 4.3.1 | + | | resource. | | + | HEAD | Same as GET, but only transfer the status line | 4.3.2 | + | | and header section. | | + | POST | Perform resource-specific processing on the | 4.3.3 | + | | request payload. | | + | PUT | Replace all current representations of the | 4.3.4 | + | | target resource with the request payload. | | + | DELETE | Remove all current representations of the | 4.3.5 | + | | target resource. | | + | CONNECT | Establish a tunnel to the server identified by | 4.3.6 | + | | the target resource. | | + | OPTIONS | Describe the communication options for the | 4.3.7 | + | | target resource. | | + | TRACE | Perform a message loop-back test along the path | 4.3.8 | + | | to the target resource. | | + +---------+-------------------------------------------------+-------+ + + All general-purpose servers MUST support the methods GET and HEAD. + All other methods are OPTIONAL. + + Additional methods, outside the scope of this specification, have + been standardized for use in HTTP. All such methods ought to be + registered within the "Hypertext Transfer Protocol (HTTP) Method + Registry" maintained by IANA, as defined in Section 8.1. + + The set of methods allowed by a target resource can be listed in an + Allow header field (Section 7.4.1). However, the set of allowed + methods can change dynamically. When a request method is received + that is unrecognized or not implemented by an origin server, the + origin server SHOULD respond with the 501 (Not Implemented) status + code. When a request method is received that is known by an origin + server but not allowed for the target resource, the origin server + SHOULD respond with the 405 (Method Not Allowed) status code. + +4.2. Common Method Properties + +4.2.1. Safe Methods + + Request methods are considered "safe" if their defined semantics are + essentially read-only; i.e., the client does not request, and does + not expect, any state change on the origin server as a result of + applying a safe method to a target resource. Likewise, reasonable + use of a safe method is not expected to cause any harm, loss of + property, or unusual burden on the origin server. + + + +Fielding & Reschke Standards Track [Page 22] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + This definition of safe methods does not prevent an implementation + from including behavior that is potentially harmful, that is not + entirely read-only, or that causes side effects while invoking a safe + method. What is important, however, is that the client did not + request that additional behavior and cannot be held accountable for + it. For example, most servers append request information to access + log files at the completion of every response, regardless of the + method, and that is considered safe even though the log storage might + become full and crash the server. Likewise, a safe request initiated + by selecting an advertisement on the Web will often have the side + effect of charging an advertising account. + + Of the request methods defined by this specification, the GET, HEAD, + OPTIONS, and TRACE methods are defined to be safe. + + The purpose of distinguishing between safe and unsafe methods is to + allow automated retrieval processes (spiders) and cache performance + optimization (pre-fetching) to work without fear of causing harm. In + addition, it allows a user agent to apply appropriate constraints on + the automated use of unsafe methods when processing potentially + untrusted content. + + A user agent SHOULD distinguish between safe and unsafe methods when + presenting potential actions to a user, such that the user can be + made aware of an unsafe action before it is requested. + + When a resource is constructed such that parameters within the + effective request URI have the effect of selecting an action, it is + the resource owner's responsibility to ensure that the action is + consistent with the request method semantics. For example, it is + common for Web-based content editing software to use actions within + query parameters, such as "page?do=delete". If the purpose of such a + resource is to perform an unsafe action, then the resource owner MUST + disable or disallow that action when it is accessed using a safe + request method. Failure to do so will result in unfortunate side + effects when automated processes perform a GET on every URI reference + for the sake of link maintenance, pre-fetching, building a search + index, etc. + +4.2.2. Idempotent Methods + + A request method is considered "idempotent" if the intended effect on + the server of multiple identical requests with that method is the + same as the effect for a single such request. Of the request methods + defined by this specification, PUT, DELETE, and safe request methods + are idempotent. + + + + + +Fielding & Reschke Standards Track [Page 23] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + Like the definition of safe, the idempotent property only applies to + what has been requested by the user; a server is free to log each + request separately, retain a revision control history, or implement + other non-idempotent side effects for each idempotent request. + + Idempotent methods are distinguished because the request can be + repeated automatically if a communication failure occurs before the + client is able to read the server's response. For example, if a + client sends a PUT request and the underlying connection is closed + before any response is received, then the client can establish a new + connection and retry the idempotent request. It knows that repeating + the request will have the same intended effect, even if the original + request succeeded, though the response might differ. + +4.2.3. Cacheable Methods + + Request methods can be defined as "cacheable" to indicate that + responses to them are allowed to be stored for future reuse; for + specific requirements see [RFC7234]. In general, safe methods that + do not depend on a current or authoritative response are defined as + cacheable; this specification defines GET, HEAD, and POST as + cacheable, although the overwhelming majority of cache + implementations only support GET and HEAD. + +4.3. Method Definitions + +4.3.1. GET + + The GET method requests transfer of a current selected representation + for the target resource. GET is the primary mechanism of information + retrieval and the focus of almost all performance optimizations. + Hence, when people speak of retrieving some identifiable information + via HTTP, they are generally referring to making a GET request. + + It is tempting to think of resource identifiers as remote file system + pathnames and of representations as being a copy of the contents of + such files. In fact, that is how many resources are implemented (see + Section 9.1 for related security considerations). However, there are + no such limitations in practice. The HTTP interface for a resource + is just as likely to be implemented as a tree of content objects, a + programmatic view on various database records, or a gateway to other + information systems. Even when the URI mapping mechanism is tied to + a file system, an origin server might be configured to execute the + files with the request as input and send the output as the + representation rather than transfer the files directly. Regardless, + only the origin server needs to know how each of its resource + + + + + +Fielding & Reschke Standards Track [Page 24] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + identifiers corresponds to an implementation and how each + implementation manages to select and send a current representation of + the target resource in a response to GET. + + A client can alter the semantics of GET to be a "range request", + requesting transfer of only some part(s) of the selected + representation, by sending a Range header field in the request + ([RFC7233]). + + A payload within a GET request message has no defined semantics; + sending a payload body on a GET request might cause some existing + implementations to reject the request. + + The response to a GET request is cacheable; a cache MAY use it to + satisfy subsequent GET and HEAD requests unless otherwise indicated + by the Cache-Control header field (Section 5.2 of [RFC7234]). + +4.3.2. HEAD + + The HEAD method is identical to GET except that the server MUST NOT + send a message body in the response (i.e., the response terminates at + the end of the header section). The server SHOULD send the same + header fields in response to a HEAD request as it would have sent if + the request had been a GET, except that the payload header fields + (Section 3.3) MAY be omitted. This method can be used for obtaining + metadata about the selected representation without transferring the + representation data and is often used for testing hypertext links for + validity, accessibility, and recent modification. + + A payload within a HEAD request message has no defined semantics; + sending a payload body on a HEAD request might cause some existing + implementations to reject the request. + + The response to a HEAD request is cacheable; a cache MAY use it to + satisfy subsequent HEAD requests unless otherwise indicated by the + Cache-Control header field (Section 5.2 of [RFC7234]). A HEAD + response might also have an effect on previously cached responses to + GET; see Section 4.3.5 of [RFC7234]. + +4.3.3. POST + + The POST method requests that the target resource process the + representation enclosed in the request according to the resource's + own specific semantics. For example, POST is used for the following + functions (among others): + + o Providing a block of data, such as the fields entered into an HTML + form, to a data-handling process; + + + +Fielding & Reschke Standards Track [Page 25] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + o Posting a message to a bulletin board, newsgroup, mailing list, + blog, or similar group of articles; + + o Creating a new resource that has yet to be identified by the + origin server; and + + o Appending data to a resource's existing representation(s). + + An origin server indicates response semantics by choosing an + appropriate status code depending on the result of processing the + POST request; almost all of the status codes defined by this + specification might be received in a response to POST (the exceptions + being 206 (Partial Content), 304 (Not Modified), and 416 (Range Not + Satisfiable)). + + If one or more resources has been created on the origin server as a + result of successfully processing a POST request, the origin server + SHOULD send a 201 (Created) response containing a Location header + field that provides an identifier for the primary resource created + (Section 7.1.2) and a representation that describes the status of the + request while referring to the new resource(s). + + Responses to POST requests are only cacheable when they include + explicit freshness information (see Section 4.2.1 of [RFC7234]). + 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 + 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-Location header field that has the same value as the POST's + effective request URI (Section 3.1.4.2). + + If the result of processing a POST would be equivalent to a + representation of an existing resource, an origin server MAY redirect + the user agent to that resource by sending a 303 (See Other) response + with the existing resource's identifier in the Location field. This + has the benefits of providing the user agent a resource identifier + and transferring the representation via a method more amenable to + shared caching, though at the cost of an extra request if the user + agent does not already have the representation cached. + +4.3.4. PUT + + The PUT method requests that the state of the target resource be + created or replaced with the state defined by the representation + enclosed in the request message payload. A successful PUT of a given + representation would suggest that a subsequent GET on that same + target resource will result in an equivalent representation being + sent in a 200 (OK) response. However, there is no guarantee that + + + +Fielding & Reschke Standards Track [Page 26] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + such a state change will be observable, since the target resource + might be acted upon by other user agents in parallel, or might be + subject to dynamic processing by the origin server, before any + subsequent GET is received. A successful response only implies that + the user agent's intent was achieved at the time of its processing by + the origin server. + + If the target resource does not have a current representation and the + PUT successfully creates one, then the origin server MUST inform the + user agent by sending a 201 (Created) response. If the target + resource does have a current representation and that representation + is successfully modified in accordance with the state of the enclosed + representation, then the origin server MUST send either a 200 (OK) or + a 204 (No Content) response to indicate successful completion of the + request. + + An origin server SHOULD ignore unrecognized header fields received in + a PUT request (i.e., do not save them as part of the resource state). + + An origin server SHOULD verify that the PUT representation is + consistent with any constraints the server has for the target + resource that cannot or will not be changed by the PUT. This is + particularly important when the origin server uses internal + configuration information related to the URI in order to set the + values for representation metadata on GET responses. When a PUT + representation is inconsistent with the target resource, the origin + server SHOULD either make them consistent, by transforming the + representation or changing the resource configuration, or respond + with an appropriate error message containing sufficient information + to explain why the representation is unsuitable. The 409 (Conflict) + or 415 (Unsupported Media Type) status codes are suggested, with the + latter being specific to constraints on Content-Type values. + + For example, if the target resource is configured to always have a + Content-Type of "text/html" and the representation being PUT has a + Content-Type of "image/jpeg", the origin server ought to do one of: + + a. reconfigure the target resource to reflect the new media type; + + b. transform the PUT representation to a format consistent with that + of the resource before saving it as the new resource state; or, + + c. reject the request with a 415 (Unsupported Media Type) response + indicating that the target resource is limited to "text/html", + perhaps including a link to a different resource that would be a + suitable target for the new representation. + + + + + +Fielding & Reschke Standards Track [Page 27] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + HTTP does not define exactly how a PUT method affects the state of an + origin server beyond what can be expressed by the intent of the user + agent request and the semantics of the origin server response. It + does not define what a resource might be, in any sense of that word, + beyond the interface provided via HTTP. It does not define how + resource state is "stored", nor how such storage might change as a + result of a change in resource state, nor how the origin server + translates resource state into representations. Generally speaking, + all implementation details behind the resource interface are + intentionally hidden by the server. + + An origin server MUST NOT send a validator header field + (Section 7.2), such as an ETag or Last-Modified field, in a + successful response to PUT unless the request's representation data + was saved without any transformation applied to the body (i.e., the + resource's new representation data is identical to the representation + data received in the PUT request) and the validator field value + reflects the new representation. This requirement allows a user + agent to know when the representation body it has in memory remains + current as a result of the PUT, thus not in need of being retrieved + again from the origin server, and that the new validator(s) received + in the response can be used for future conditional requests in order + to prevent accidental overwrites (Section 5.2). + + The fundamental difference between the POST and PUT methods is + highlighted by the different intent for the enclosed representation. + The target resource in a POST request is intended to handle the + enclosed representation according to the resource's own semantics, + whereas the enclosed representation in a PUT request is defined as + replacing the state of the target resource. Hence, the intent of PUT + is idempotent and visible to intermediaries, even though the exact + effect is only known by the origin server. + + Proper interpretation of a PUT request presumes that the user agent + knows which target resource is desired. A service that selects a + proper URI on behalf of the client, after receiving a state-changing + request, SHOULD be implemented using the POST method rather than PUT. + If the origin server will not make the requested PUT state change to + the target resource and instead wishes to have it applied to a + different resource, such as when the resource has been moved to a + different URI, then the origin server MUST send an appropriate 3xx + (Redirection) response; the user agent MAY then make its own decision + regarding whether or not to redirect the request. + + A PUT request applied to the target resource can have side effects on + other resources. For example, an article might have a URI for + identifying "the current version" (a resource) that is separate from + the URIs identifying each particular version (different resources + + + +Fielding & Reschke Standards Track [Page 28] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + that at one point shared the same state as the current version + resource). A successful PUT request on "the current version" URI + might therefore create a new version resource in addition to changing + the state of the target resource, and might also cause links to be + added between the related resources. + + An origin server that allows PUT on a given target resource MUST send + a 400 (Bad Request) response to a PUT request that contains a + Content-Range header field (Section 4.2 of [RFC7233]), since the + payload is likely to be partial content that has been mistakenly PUT + as a full representation. Partial content updates are possible by + targeting a separately identified resource with state that overlaps a + portion of the larger resource, or by using a different method that + has been specifically defined for partial updates (for example, the + PATCH method defined in [RFC5789]). + + Responses to the PUT method are not cacheable. If a successful PUT + request passes through a cache that has one or more stored responses + for the effective request URI, those stored responses will be + invalidated (see Section 4.4 of [RFC7234]). + +4.3.5. DELETE + + The DELETE method requests that the origin server remove the + association between the target resource and its current + functionality. In effect, this method is similar to the rm command + in UNIX: it expresses a deletion operation on the URI mapping of the + origin server rather than an expectation that the previously + associated information be deleted. + + If the target resource has one or more current representations, they + might or might not be destroyed by the origin server, and the + associated storage might or might not be reclaimed, depending + entirely on the nature of the resource and its implementation by the + origin server (which are beyond the scope of this specification). + Likewise, other implementation aspects of a resource might need to be + deactivated or archived as a result of a DELETE, such as database or + gateway connections. In general, it is assumed that the origin + server will only allow DELETE on resources for which it has a + prescribed mechanism for accomplishing the deletion. + + Relatively few resources allow the DELETE method -- its primary use + is for remote authoring environments, where the user has some + direction regarding its effect. For example, a resource that was + previously created using a PUT request, or identified via the + Location header field after a 201 (Created) response to a POST + request, might allow a corresponding DELETE request to undo those + actions. Similarly, custom user agent implementations that implement + + + +Fielding & Reschke Standards Track [Page 29] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + an authoring function, such as revision control clients using HTTP + for remote operations, might use DELETE based on an assumption that + the server's URI space has been crafted to correspond to a version + repository. + + If a DELETE method is successfully applied, the origin server SHOULD + send a 202 (Accepted) status code if the action will likely succeed + but has not yet been enacted, a 204 (No Content) status code if the + action has been enacted and no further information is to be supplied, + or a 200 (OK) status code if the action has been enacted and the + response message includes a representation describing the status. + + A payload within a DELETE request message has no defined semantics; + sending a payload body on a DELETE request might cause some existing + implementations to reject the request. + + Responses to the DELETE method are not cacheable. If a DELETE + request passes through a cache that has one or more stored responses + for the effective request URI, those stored responses will be + invalidated (see Section 4.4 of [RFC7234]). + +4.3.6. CONNECT + + The CONNECT method requests that the recipient establish a tunnel to + the destination origin server identified by the request-target and, + if successful, thereafter restrict its behavior to blind forwarding + of packets, in both directions, until the tunnel is closed. Tunnels + are commonly used to create an end-to-end virtual connection, through + one or more proxies, which can then be secured using TLS (Transport + Layer Security, [RFC5246]). + + CONNECT is intended only for use in requests to a proxy. An origin + server that receives a CONNECT request for itself MAY respond with a + 2xx (Successful) status code to indicate that a connection is + established. However, most origin servers do not implement CONNECT. + + A client sending a CONNECT request MUST send the authority form of + request-target (Section 5.3 of [RFC7230]); i.e., the request-target + consists of only the host name and port number of the tunnel + destination, separated by a colon. For example, + + CONNECT server.example.com:80 HTTP/1.1 + Host: server.example.com:80 + + The recipient proxy can establish a tunnel either by directly + connecting to the request-target or, if configured to use another + proxy, by forwarding the CONNECT request to the next inbound proxy. + Any 2xx (Successful) response indicates that the sender (and all + + + +Fielding & Reschke Standards Track [Page 30] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + inbound proxies) will switch to tunnel mode immediately after the + blank line that concludes the successful response's header section; + data received after that blank line is from the server identified by + the request-target. Any response other than a successful response + indicates that the tunnel has not yet been formed and that the + connection remains governed by HTTP. + + A tunnel is closed when a tunnel intermediary detects that either + side has closed its connection: the intermediary MUST attempt to send + any outstanding data that came from the closed side to the other + side, close both connections, and then discard any remaining data + left undelivered. + + Proxy authentication might be used to establish the authority to + create a tunnel. For example, + + CONNECT server.example.com:80 HTTP/1.1 + Host: server.example.com:80 + Proxy-Authorization: basic aGVsbG86d29ybGQ= + + There are significant risks in establishing a tunnel to arbitrary + servers, particularly when the destination is a well-known or + reserved TCP port that is not intended for Web traffic. For example, + a CONNECT to a request-target of "example.com:25" would suggest that + the proxy connect to the reserved port for SMTP traffic; if allowed, + that could trick the proxy into relaying spam email. Proxies that + support CONNECT SHOULD restrict its use to a limited set of known + ports or a configurable whitelist of safe request targets. + + A server MUST NOT send any Transfer-Encoding or Content-Length header + fields in a 2xx (Successful) response to CONNECT. A client MUST + ignore any Content-Length or Transfer-Encoding header fields received + in a successful response to CONNECT. + + A payload within a CONNECT request message has no defined semantics; + sending a payload body on a CONNECT request might cause some existing + implementations to reject the request. + + Responses to the CONNECT method are not cacheable. + +4.3.7. OPTIONS + + The OPTIONS method requests information about the communication + options available for the target resource, at either the origin + server or an intervening intermediary. This method allows a client + to determine the options and/or requirements associated with a + resource, or the capabilities of a server, without implying a + resource action. + + + +Fielding & Reschke Standards Track [Page 31] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + An OPTIONS request with an asterisk ("*") as the request-target + (Section 5.3 of [RFC7230]) applies to the server in general rather + than to a specific resource. Since a server's communication options + typically depend on the resource, the "*" request is only useful as a + "ping" or "no-op" type of method; it does nothing beyond allowing the + client to test the capabilities of the server. For example, this can + be used to test a proxy for HTTP/1.1 conformance (or lack thereof). + + If the request-target is not an asterisk, the OPTIONS request applies + to the options that are available when communicating with the target + resource. + + A server generating a successful response to OPTIONS SHOULD send any + header fields that might indicate optional features implemented by + the server and applicable to the target resource (e.g., Allow), + including potential extensions not defined by this specification. + The response payload, if any, might also describe the communication + options in a machine or human-readable representation. A standard + format for such a representation is not defined by this + specification, but might be defined by future extensions to HTTP. A + server MUST generate a Content-Length field with a value of "0" if no + payload body is to be sent in the response. + + A client MAY send a Max-Forwards header field in an OPTIONS request + to target a specific recipient in the request chain (see + Section 5.1.2). A proxy MUST NOT generate a Max-Forwards header + field while forwarding a request unless that request was received + with a Max-Forwards field. + + A client that generates an OPTIONS request containing a payload body + MUST send a valid Content-Type header field describing the + representation media type. Although this specification does not + define any use for such a payload, future extensions to HTTP might + use the OPTIONS body to make more detailed queries about the target + resource. + + Responses to the OPTIONS method are not cacheable. + +4.3.8. TRACE + + The TRACE method requests a remote, application-level loop-back of + the request message. The final recipient of the request SHOULD + reflect the message received, excluding some fields described below, + back to the client as the message body of a 200 (OK) response with a + Content-Type of "message/http" (Section 8.3.1 of [RFC7230]). The + final recipient is either the origin server or the first server to + receive a Max-Forwards value of zero (0) in the request + (Section 5.1.2). + + + +Fielding & Reschke Standards Track [Page 32] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + A client MUST NOT generate header fields in a TRACE request + containing sensitive data that might be disclosed by the response. + For example, it would be foolish for a user agent to send stored user + credentials [RFC7235] or cookies [RFC6265] in a TRACE request. The + final recipient of the request SHOULD exclude any request header + fields that are likely to contain sensitive data when that recipient + generates the response body. + + TRACE allows the client to see what is being received at the other + end of the request chain and use that data for testing or diagnostic + information. The value of the Via header field (Section 5.7.1 of + [RFC7230]) is of particular interest, since it acts as a trace of the + request chain. Use of the Max-Forwards header field allows the + client to limit the length of the request chain, which is useful for + testing a chain of proxies forwarding messages in an infinite loop. + + A client MUST NOT send a message body in a TRACE request. + + Responses to the TRACE method are not cacheable. + +5. Request Header Fields + + A client sends request header fields to provide more information + about the request context, make the request conditional based on the + target resource state, suggest preferred formats for the response, + supply authentication credentials, or modify the expected request + processing. These fields act as request modifiers, similar to the + parameters on a programming language method invocation. + +5.1. Controls + + Controls are request header fields that direct specific handling of + the request. + + +-------------------+--------------------------+ + | Header Field Name | Defined in... | + +-------------------+--------------------------+ + | Cache-Control | Section 5.2 of [RFC7234] | + | Expect | Section 5.1.1 | + | Host | Section 5.4 of [RFC7230] | + | Max-Forwards | Section 5.1.2 | + | Pragma | Section 5.4 of [RFC7234] | + | Range | Section 3.1 of [RFC7233] | + | TE | Section 4.3 of [RFC7230] | + +-------------------+--------------------------+ + + + + + + +Fielding & Reschke Standards Track [Page 33] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +5.1.1. Expect + + The "Expect" header field in a request indicates a certain set of + behaviors (expectations) that need to be supported by the server in + order to properly handle this request. The only such expectation + defined by this specification is 100-continue. + + Expect = "100-continue" + + The Expect field-value is case-insensitive. + + A server that receives an Expect field-value other than 100-continue + MAY respond with a 417 (Expectation Failed) status code to indicate + that the unexpected expectation cannot be met. + + A 100-continue expectation informs recipients that the client is + about to send a (presumably large) message body in this request and + wishes to receive a 100 (Continue) interim response if the + request-line and header fields are not sufficient to cause an + immediate success, redirect, or error response. This allows the + client to wait for an indication that it is worthwhile to send the + message body before actually doing so, which can improve efficiency + when the message body is huge or when the client anticipates that an + error is likely (e.g., when sending a state-changing method, for the + first time, without previously verified authentication credentials). + + For example, a request that begins with + + PUT /somewhere/fun HTTP/1.1 + Host: origin.example.com + Content-Type: video/h264 + Content-Length: 1234567890987 + Expect: 100-continue + + + allows the origin server to immediately respond with an error + message, such as 401 (Unauthorized) or 405 (Method Not Allowed), + before the client starts filling the pipes with an unnecessary data + transfer. + + Requirements for clients: + + o A client MUST NOT generate a 100-continue expectation in a request + that does not include a message body. + + o A client that will wait for a 100 (Continue) response before + sending the request message body MUST send an Expect header field + containing a 100-continue expectation. + + + +Fielding & Reschke Standards Track [Page 34] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + o A client that sends a 100-continue expectation is not required to + wait for any specific length of time; such a client MAY proceed to + send the message body even if it has not yet received a response. + Furthermore, since 100 (Continue) responses cannot be sent through + an HTTP/1.0 intermediary, such a client SHOULD NOT wait for an + indefinite period before sending the message body. + + o A client that receives a 417 (Expectation Failed) status code in + response to a request containing a 100-continue expectation SHOULD + repeat that request without a 100-continue expectation, since the + 417 response merely indicates that the response chain does not + support expectations (e.g., it passes through an HTTP/1.0 server). + + Requirements for servers: + + o A server that receives a 100-continue expectation in an HTTP/1.0 + request MUST ignore that expectation. + + o A server MAY omit sending a 100 (Continue) response if it has + already received some or all of the message body for the + corresponding request, or if the framing indicates that there is + no message body. + + o A server that sends a 100 (Continue) response MUST ultimately send + a final status code, once the message body is received and + processed, unless the connection is closed prematurely. + + o A server that responds with a final status code before reading the + entire message body SHOULD indicate in that response whether it + intends to close the connection or continue reading and discarding + the request message (see Section 6.6 of [RFC7230]). + + An origin server MUST, upon receiving an HTTP/1.1 (or later) + request-line and a complete header section that contains a + 100-continue expectation and indicates a request message body will + follow, either send an immediate response with a final status code, + if that status can be determined by examining just the request-line + and header fields, or send an immediate 100 (Continue) response to + encourage the client to send the request's message body. The origin + server MUST NOT wait for the message body before sending the 100 + (Continue) response. + + A proxy MUST, upon receiving an HTTP/1.1 (or later) request-line and + a complete header section that contains a 100-continue expectation + and indicates a request message body will follow, either send an + immediate response with a final status code, if that status can be + determined by examining just the request-line and header fields, or + begin forwarding the request toward the origin server by sending a + + + +Fielding & Reschke Standards Track [Page 35] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + corresponding request-line and header section to the next inbound + server. If the proxy believes (from configuration or past + interaction) that the next inbound server only supports HTTP/1.0, the + proxy MAY generate an immediate 100 (Continue) response to encourage + the client to begin sending the message body. + + Note: The Expect header field was added after the original + publication of HTTP/1.1 [RFC2068] as both the means to request an + interim 100 (Continue) response and the general mechanism for + indicating must-understand extensions. However, the extension + mechanism has not been used by clients and the must-understand + requirements have not been implemented by many servers, rendering + the extension mechanism useless. This specification has removed + the extension mechanism in order to simplify the definition and + processing of 100-continue. + +5.1.2. Max-Forwards + + The "Max-Forwards" header field provides a mechanism with the TRACE + (Section 4.3.8) and OPTIONS (Section 4.3.7) request methods to limit + the number of times that the request is forwarded by proxies. This + can be useful when the client is attempting to trace a request that + appears to be failing or looping mid-chain. + + Max-Forwards = 1*DIGIT + + The Max-Forwards value is a decimal integer indicating the remaining + number of times this request message can be forwarded. + + Each intermediary that receives a TRACE or OPTIONS request containing + a Max-Forwards header field MUST check and update its value prior to + forwarding the request. If the received value is zero (0), the + intermediary MUST NOT forward the request; instead, the intermediary + MUST respond as the final recipient. If the received Max-Forwards + value is greater than zero, the intermediary MUST generate an updated + Max-Forwards field in the forwarded message with a field-value that + is the lesser of a) the received value decremented by one (1) or b) + the recipient's maximum supported value for Max-Forwards. + + A recipient MAY ignore a Max-Forwards header field received with any + other request methods. + +5.2. Conditionals + + The HTTP conditional request header fields [RFC7232] allow a client + to place a precondition on the state of the target resource, so that + the action corresponding to the method semantics will not be applied + if the precondition evaluates to false. Each precondition defined by + + + +Fielding & Reschke Standards Track [Page 36] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + this specification consists of a comparison between a set of + validators obtained from prior representations of the target resource + to the current state of validators for the selected representation + (Section 7.2). Hence, these preconditions evaluate whether the state + of the target resource has changed since a given state known by the + client. The effect of such an evaluation depends on the method + semantics and choice of conditional, as defined in Section 5 of + [RFC7232]. + + +---------------------+--------------------------+ + | Header Field Name | Defined in... | + +---------------------+--------------------------+ + | If-Match | Section 3.1 of [RFC7232] | + | If-None-Match | Section 3.2 of [RFC7232] | + | If-Modified-Since | Section 3.3 of [RFC7232] | + | If-Unmodified-Since | Section 3.4 of [RFC7232] | + | If-Range | Section 3.2 of [RFC7233] | + +---------------------+--------------------------+ + +5.3. Content Negotiation + + The following request header fields are sent by a user agent to + engage in proactive negotiation of the response content, as defined + in Section 3.4.1. The preferences sent in these fields apply to any + content in the response, including representations of the target + resource, representations of error or processing status, and + potentially even the miscellaneous text strings that might appear + within the protocol. + + +-------------------+---------------+ + | Header Field Name | Defined in... | + +-------------------+---------------+ + | Accept | Section 5.3.2 | + | Accept-Charset | Section 5.3.3 | + | Accept-Encoding | Section 5.3.4 | + | Accept-Language | Section 5.3.5 | + +-------------------+---------------+ + +5.3.1. Quality Values + + Many of the request header fields for proactive negotiation use a + common parameter, named "q" (case-insensitive), to assign a relative + "weight" to the preference for that associated kind of content. This + weight is referred to as a "quality value" (or "qvalue") because the + same parameter name is often used within server configurations to + assign a weight to the relative quality of the various + representations that can be selected for a resource. + + + + +Fielding & Reschke Standards Track [Page 37] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + The weight is normalized to a real number in the range 0 through 1, + where 0.001 is the least preferred and 1 is the most preferred; a + value of 0 means "not acceptable". If no "q" parameter is present, + the default weight is 1. + + weight = OWS ";" OWS "q=" qvalue + qvalue = ( "0" [ "." 0*3DIGIT ] ) + / ( "1" [ "." 0*3("0") ] ) + + A sender of qvalue MUST NOT generate more than three digits after the + decimal point. User configuration of these values ought to be + limited in the same fashion. + +5.3.2. Accept + + The "Accept" header field can be used by user agents to specify + response media types that are acceptable. Accept header fields can + 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-line image. + + Accept = #( media-range [ accept-params ] ) + + media-range = ( "*/*" + / ( type "/" "*" ) + / ( type "/" subtype ) + ) *( OWS ";" OWS parameter ) + accept-params = weight *( accept-ext ) + accept-ext = OWS ";" OWS token [ "=" ( token / quoted-string ) ] + + The asterisk "*" character is used to group media types into ranges, + with "*/*" indicating all media types and "type/*" indicating all + subtypes of that type. The media-range can include media type + parameters that are applicable to that range. + + Each media-range might be followed by zero or more applicable media + type parameters (e.g., charset), an optional "q" parameter for + indicating a relative weight (Section 5.3.1), and then zero or more + extension parameters. The "q" parameter is necessary if any + extensions (accept-ext) are present, since it acts as a separator + between the two parameter sets. + + Note: Use of the "q" parameter name to separate media type + parameters from Accept extension parameters is due to historical + practice. Although this prevents any media type parameter named + "q" from being used with a media range, such an event is believed + to be unlikely given the lack of any "q" parameters in the IANA + + + + +Fielding & Reschke Standards Track [Page 38] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + media type registry and the rare usage of any media type + parameters in Accept. Future media types are discouraged from + registering any parameter named "q". + + The example + + Accept: audio/*; q=0.2, audio/basic + + is interpreted as "I prefer audio/basic, but send me any audio type + if it is the best available after an 80% markdown in quality". + + A request without any Accept header field implies that the user agent + will accept any media type in response. If the header field is + present in a request and none of the available representations for + the response have a media type that is listed as acceptable, the + origin server can either honor the header field by sending a 406 (Not + Acceptable) response or disregard the header field by treating the + response as if it is not subject to content negotiation. + + A more elaborate example is + + Accept: text/plain; q=0.5, text/html, + text/x-dvi; q=0.8, text/x-c + + Verbally, this would be interpreted as "text/html and text/x-c are + the equally preferred media types, but if they do not exist, then + send the text/x-dvi representation, and if that does not exist, send + the text/plain representation". + + Media ranges can be overridden by more specific media ranges or + specific media types. If more than one media range applies to a + given type, the most specific reference has precedence. For example, + + Accept: text/*, text/plain, text/plain;format=flowed, */* + + have the following precedence: + + 1. text/plain;format=flowed + + 2. text/plain + + 3. text/* + + 4. */* + + The media type quality factor associated with a given type is + determined by finding the media range with the highest precedence + that matches the type. For example, + + + +Fielding & Reschke Standards Track [Page 39] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1, + text/html;level=2;q=0.4, */*;q=0.5 + + would cause the following values to be associated: + + +-------------------+---------------+ + | Media Type | Quality Value | + +-------------------+---------------+ + | text/html;level=1 | 1 | + | text/html | 0.7 | + | text/plain | 0.3 | + | image/jpeg | 0.5 | + | text/html;level=2 | 0.4 | + | text/html;level=3 | 0.7 | + +-------------------+---------------+ + + Note: A user agent might be provided with a default set of quality + values for certain media ranges. However, unless the user agent is a + closed system that cannot interact with other rendering agents, this + default set ought to be configurable by the user. + +5.3.3. Accept-Charset + + The "Accept-Charset" header field can be sent by a user agent to + indicate what charsets are acceptable in textual response content. + This field allows user agents capable of understanding more + comprehensive or special-purpose charsets to signal that capability + to an origin server that is capable of representing information in + those charsets. + + Accept-Charset = 1#( ( charset / "*" ) [ weight ] ) + + 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 + relative preference for that charset, as defined in Section 5.3.1. + An example is + + Accept-Charset: iso-8859-5, unicode-1-1;q=0.8 + + The special value "*", if present in the Accept-Charset field, + matches every charset that is not mentioned elsewhere in the + Accept-Charset field. If no "*" is present in an Accept-Charset + field, then any charsets not explicitly mentioned in the field are + considered "not acceptable" to the client. + + A request without any Accept-Charset header field implies that the + user agent will accept any charset in response. Most general-purpose + user agents do not send Accept-Charset, unless specifically + + + +Fielding & Reschke Standards Track [Page 40] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + configured to do so, because a detailed list of supported charsets + makes it easier for a server to identify an individual by virtue of + the user agent's request characteristics (Section 9.7). + + 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 + listed as acceptable, the origin server can either honor the header + field, by sending a 406 (Not Acceptable) response, or disregard the + header field by treating the resource as if it is not subject to + content negotiation. + +5.3.4. Accept-Encoding + + The "Accept-Encoding" header field can be used by user agents to + indicate what response content-codings (Section 3.1.2.1) are + acceptable in the response. An "identity" token is used as a synonym + for "no encoding" in order to communicate when no encoding is + preferred. + + Accept-Encoding = #( codings [ weight ] ) + codings = content-coding / "identity" / "*" + + Each codings value MAY be given an associated quality value + representing the preference for that encoding, as defined in + Section 5.3.1. The asterisk "*" symbol in an Accept-Encoding field + matches any available content-coding not explicitly listed in the + header field. + + For example, + + Accept-Encoding: compress, gzip + Accept-Encoding: + Accept-Encoding: * + Accept-Encoding: compress;q=0.5, gzip;q=1.0 + Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0 + + A request without an Accept-Encoding header field implies that the + user agent has no preferences regarding content-codings. Although + this allows the server to use any content-coding in a response, it + does not imply that the user agent will be able to correctly process + all encodings. + + A server tests whether a content-coding for a given representation is + acceptable using these rules: + + 1. If no Accept-Encoding field is in the request, any content-coding + is considered acceptable by the user agent. + + + + +Fielding & Reschke Standards Track [Page 41] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + 2. If the representation has no content-coding, then it is + acceptable by default unless specifically excluded by the + Accept-Encoding field stating either "identity;q=0" or "*;q=0" + without a more specific entry for "identity". + + 3. If the representation's content-coding is one of the + content-codings listed in the Accept-Encoding field, then it is + acceptable unless it is accompanied by a qvalue of 0. (As + defined in Section 5.3.1, a qvalue of 0 means "not acceptable".) + + 4. If multiple content-codings are acceptable, then the acceptable + content-coding with the highest non-zero qvalue is preferred. + + 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 + response. If an Accept-Encoding header field is present in a request + and none of the available representations for the response have a + content-coding that is listed as acceptable, the origin server SHOULD + send a response without any content-coding. + + Note: Most HTTP/1.0 applications do not recognize or obey qvalues + associated with content-codings. This means that qvalues might + not work and are not permitted with x-gzip or x-compress. + +5.3.5. Accept-Language + + The "Accept-Language" header field can be used by user agents to + indicate the set of natural languages that are preferred in the + response. Language tags are defined in Section 3.1.3.1. + + Accept-Language = 1#( language-range [ weight ] ) + language-range = + <language-range, see [RFC4647], Section 2.1> + + Each language-range can be given an associated quality value + representing an estimate of the user's preference for the languages + specified by that range, as defined in Section 5.3.1. For example, + + Accept-Language: da, en-gb;q=0.8, en;q=0.7 + + would mean: "I prefer Danish, but will accept British English and + other types of English". + + A request without any Accept-Language header field implies that the + user agent will accept any language in response. If the header field + is present in a request and none of the available representations for + the response have a matching language tag, the origin server can + either disregard the header field by treating the response as if it + + + +Fielding & Reschke Standards Track [Page 42] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + is not subject to content negotiation or honor the header field by + sending a 406 (Not Acceptable) response. However, the latter is not + encouraged, as doing so can prevent users from accessing content that + they might be able to use (with translation software, for example). + + Note that some recipients treat the order in which language tags are + listed as an indication of descending priority, particularly for tags + that are assigned equal quality values (no value is the same as q=1). + However, this behavior cannot be relied upon. For consistency and to + maximize interoperability, many user agents assign each language tag + a unique quality value while also listing them in order of decreasing + quality. Additional discussion of language priority lists can be + found in Section 2.3 of [RFC4647]. + + For matching, Section 3 of [RFC4647] defines several matching + schemes. Implementations can offer the most appropriate matching + scheme for their requirements. The "Basic Filtering" scheme + ([RFC4647], Section 3.3.1) is identical to the matching scheme that + was previously defined for HTTP in Section 14.4 of [RFC2616]. + + It might be contrary to the privacy expectations of the user to send + an Accept-Language header field with the complete linguistic + preferences of the user in every request (Section 9.7). + + Since intelligibility is highly dependent on the individual user, + user agents need to allow user control over the linguistic preference + (either through configuration of the user agent itself or by + defaulting to a user controllable system setting). A user agent that + does not provide such control to the user MUST NOT send an + Accept-Language header field. + + Note: User agents ought to provide guidance to users when setting + a preference, since users are rarely familiar with the details of + language matching as described above. For example, users might + assume that on selecting "en-gb", they will be served any kind of + English document if British English is not available. A user + agent might suggest, in such a case, to add "en" to the list for + better matching behavior. + + + + + + + + + + + + + +Fielding & Reschke Standards Track [Page 43] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +5.4. Authentication Credentials + + Two header fields are used for carrying authentication credentials, + as defined in [RFC7235]. Note that various custom mechanisms for + user authentication use the Cookie header field for this purpose, as + defined in [RFC6265]. + + +---------------------+--------------------------+ + | Header Field Name | Defined in... | + +---------------------+--------------------------+ + | Authorization | Section 4.2 of [RFC7235] | + | Proxy-Authorization | Section 4.4 of [RFC7235] | + +---------------------+--------------------------+ + +5.5. Request Context + + The following request header fields provide additional information + about the request context, including information about the user, user + agent, and resource behind the request. + + +-------------------+---------------+ + | Header Field Name | Defined in... | + +-------------------+---------------+ + | From | Section 5.5.1 | + | Referer | Section 5.5.2 | + | User-Agent | Section 5.5.3 | + +-------------------+---------------+ + +5.5.1. From + + The "From" header field contains an Internet email address for a + human user who controls the requesting user agent. The address ought + to be machine-usable, as defined by "mailbox" in Section 3.4 of + [RFC5322]: + + From = mailbox + + mailbox = <mailbox, see [RFC5322], Section 3.4> + + An example is: + + From: webmaster@example.org + + The From header field is rarely sent by non-robotic user agents. A + user agent SHOULD NOT send a From header field without explicit + configuration by the user, since that might conflict with the user's + privacy interests or their site's security policy. + + + + +Fielding & Reschke Standards Track [Page 44] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + A robotic user agent SHOULD send a valid From header field so that + the person responsible for running the robot can be contacted if + problems occur on servers, such as if the robot is sending excessive, + unwanted, or invalid requests. + + A server SHOULD NOT use the From header field for access control or + authentication, since most recipients will assume that the field + value is public information. + +5.5.2. Referer + + The "Referer" [sic] header field allows the user agent to specify a + URI reference for the resource from which the target URI was obtained + (i.e., the "referrer", though the field name is misspelled). A user + agent MUST NOT include the fragment and userinfo components of the + URI reference [RFC3986], if any, when generating the Referer field + value. + + Referer = absolute-URI / partial-URI + + The Referer header field allows servers to generate back-links to + other resources for simple analytics, logging, optimized caching, + etc. It also allows obsolete or mistyped links to be found for + maintenance. Some servers use the Referer header field as a means of + denying links from other sites (so-called "deep linking") or + restricting cross-site request forgery (CSRF), but not all requests + contain it. + + Example: + + Referer: http://www.example.org/hypertext/Overview.html + + If the target URI was obtained from a source that does not have its + own URI (e.g., input from the user keyboard, or an entry within the + user's bookmarks/favorites), the user agent MUST either exclude the + Referer field or send it with a value of "about:blank". + + The Referer field has the potential to reveal information about the + request context or browsing history of the user, which is a privacy + concern if the referring resource's identifier reveals personal + information (such as an account name) or a resource that is supposed + to be confidential (such as behind a firewall or internal to a + secured service). Most general-purpose user agents do not send the + Referer header field when the referring resource is a local "file" or + "data" URI. A user agent MUST NOT send a Referer header field in an + unsecured HTTP request if the referring page was received with a + secure protocol. See Section 9.4 for additional security + considerations. + + + +Fielding & Reschke Standards Track [Page 45] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + Some intermediaries have been known to indiscriminately remove + Referer header fields from outgoing requests. This has the + unfortunate side effect of interfering with protection against CSRF + attacks, which can be far more harmful to their users. + Intermediaries and user agent extensions that wish to limit + information disclosure in Referer ought to restrict their changes to + specific edits, such as replacing internal domain names with + pseudonyms or truncating the query and/or path components. An + intermediary SHOULD NOT modify or delete the Referer header field + when the field value shares the same scheme and host as the request + target. + +5.5.3. User-Agent + + The "User-Agent" header field contains information about the user + agent originating the request, which is often used by servers to help + identify the scope of reported interoperability problems, to work + around or tailor responses to avoid particular user agent + limitations, and for analytics regarding browser or operating system + use. A user agent SHOULD send a User-Agent field in each request + unless specifically configured not to do so. + + User-Agent = product *( RWS ( product / comment ) ) + + The User-Agent field-value consists of one or more product + identifiers, each followed by zero or more comments (Section 3.2 of + [RFC7230]), which together identify the user agent software and its + significant subproducts. By convention, the product identifiers are + listed in decreasing order of their significance for identifying the + user agent software. Each product identifier consists of a name and + optional version. + + product = token ["/" product-version] + product-version = token + + A sender SHOULD limit generated product identifiers to what is + necessary to identify the product; a sender MUST NOT generate + advertising or other nonessential information within the product + identifier. A sender SHOULD NOT generate information in + product-version that is not a version identifier (i.e., successive + versions of the same product name ought to differ only in the + product-version portion of the product identifier). + + Example: + + User-Agent: CERN-LineMode/2.15 libwww/2.17b3 + + + + + +Fielding & Reschke Standards Track [Page 46] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + A user agent SHOULD NOT generate a User-Agent field containing + needlessly fine-grained detail and SHOULD limit the addition of + subproducts by third parties. Overly long and detailed User-Agent + field values increase request latency and the risk of a user being + identified against their wishes ("fingerprinting"). + + Likewise, implementations are encouraged not to use the product + tokens of other implementations in order to declare compatibility + with them, as this circumvents the purpose of the field. If a user + agent masquerades as a different user agent, recipients can assume + that the user intentionally desires to see responses tailored for + that identified user agent, even if they might not work as well for + the actual user agent being used. + +6. Response Status Codes + + The status-code element is a three-digit integer code giving the + result of the attempt to understand and satisfy the request. + + HTTP status codes are extensible. HTTP clients are not required to + understand the meaning of all registered status codes, though such + understanding is obviously desirable. However, a client MUST + understand the class of any status code, as indicated by the first + digit, and treat an unrecognized status code as being equivalent to + the x00 status code of that class, with the exception that a + recipient MUST NOT cache a response with an unrecognized status code. + + For example, if an unrecognized status code of 471 is received by a + client, the client can assume that there was something wrong with its + request and treat the response as if it had received a 400 (Bad + Request) status code. The response message will usually contain a + representation that explains the status. + + The first digit of the status-code defines the class of response. + The last two digits do not have any categorization role. There are + five values for the first digit: + + o 1xx (Informational): The request was received, continuing process + + o 2xx (Successful): The request was successfully received, + understood, and accepted + + o 3xx (Redirection): Further action needs to be taken in order to + complete the request + + o 4xx (Client Error): The request contains bad syntax or cannot be + fulfilled + + + + +Fielding & Reschke Standards Track [Page 47] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + o 5xx (Server Error): The server failed to fulfill an apparently + valid request + +6.1. Overview of Status Codes + + The status codes listed below are defined in this specification, + Section 4 of [RFC7232], Section 4 of [RFC7233], and Section 3 of + [RFC7235]. The reason phrases listed here are only recommendations + -- they can be replaced by local equivalents without affecting the + protocol. + + Responses with status codes that are defined as cacheable by default + (e.g., 200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501 in + this specification) can be reused by a cache with heuristic + expiration unless otherwise indicated by the method definition or + explicit cache controls [RFC7234]; all other status codes are not + cacheable by default. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Fielding & Reschke Standards Track [Page 48] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + +------+-------------------------------+--------------------------+ + | Code | Reason-Phrase | Defined in... | + +------+-------------------------------+--------------------------+ + | 100 | Continue | Section 6.2.1 | + | 101 | Switching Protocols | Section 6.2.2 | + | 200 | OK | Section 6.3.1 | + | 201 | Created | Section 6.3.2 | + | 202 | Accepted | Section 6.3.3 | + | 203 | Non-Authoritative Information | Section 6.3.4 | + | 204 | No Content | Section 6.3.5 | + | 205 | Reset Content | Section 6.3.6 | + | 206 | Partial Content | Section 4.1 of [RFC7233] | + | 300 | Multiple Choices | Section 6.4.1 | + | 301 | Moved Permanently | Section 6.4.2 | + | 302 | Found | Section 6.4.3 | + | 303 | See Other | Section 6.4.4 | + | 304 | Not Modified | Section 4.1 of [RFC7232] | + | 305 | Use Proxy | Section 6.4.5 | + | 307 | Temporary Redirect | Section 6.4.7 | + | 400 | Bad Request | Section 6.5.1 | + | 401 | Unauthorized | Section 3.1 of [RFC7235] | + | 402 | Payment Required | Section 6.5.2 | + | 403 | Forbidden | Section 6.5.3 | + | 404 | Not Found | Section 6.5.4 | + | 405 | Method Not Allowed | Section 6.5.5 | + | 406 | Not Acceptable | Section 6.5.6 | + | 407 | Proxy Authentication Required | Section 3.2 of [RFC7235] | + | 408 | Request Timeout | Section 6.5.7 | + | 409 | Conflict | Section 6.5.8 | + | 410 | Gone | Section 6.5.9 | + | 411 | Length Required | Section 6.5.10 | + | 412 | Precondition Failed | Section 4.2 of [RFC7232] | + | 413 | Payload Too Large | Section 6.5.11 | + | 414 | URI Too Long | Section 6.5.12 | + | 415 | Unsupported Media Type | Section 6.5.13 | + | 416 | Range Not Satisfiable | Section 4.4 of [RFC7233] | + | 417 | Expectation Failed | Section 6.5.14 | + | 426 | Upgrade Required | Section 6.5.15 | + | 500 | Internal Server Error | Section 6.6.1 | + | 501 | Not Implemented | Section 6.6.2 | + | 502 | Bad Gateway | Section 6.6.3 | + | 503 | Service Unavailable | Section 6.6.4 | + | 504 | Gateway Timeout | Section 6.6.5 | + | 505 | HTTP Version Not Supported | Section 6.6.6 | + +------+-------------------------------+--------------------------+ + + + + + + +Fielding & Reschke Standards Track [Page 49] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + Note that this list is not exhaustive -- it does not include + extension status codes defined in other specifications. The complete + list of status codes is maintained by IANA. See Section 8.2 for + details. + +6.2. Informational 1xx + + The 1xx (Informational) class of status code indicates an interim + response for communicating connection status or request progress + prior to completing the requested action and sending a final + response. 1xx responses are terminated by the first empty line after + the status-line (the empty line signaling the end of the header + section). Since HTTP/1.0 did not define any 1xx status codes, a + server MUST NOT send a 1xx response to an HTTP/1.0 client. + + A client MUST be able to parse one or more 1xx responses received + prior to a final response, even if the client does not expect one. A + user agent MAY ignore unexpected 1xx responses. + + A proxy MUST forward 1xx responses unless the proxy itself requested + the generation of the 1xx response. For example, if a proxy adds an + "Expect: 100-continue" field when it forwards a request, then it need + not forward the corresponding 100 (Continue) response(s). + +6.2.1. 100 Continue + + The 100 (Continue) status code indicates that the initial part of a + request has been received and has not yet been rejected by the + server. The server intends to send a final response after the + request has been fully received and acted upon. + + When the request contains an Expect header field that includes a + 100-continue expectation, the 100 response indicates that the server + wishes to receive the request payload body, as described in + Section 5.1.1. The client ought to continue sending the request and + discard the 100 response. + + If the request did not contain an Expect header field containing the + 100-continue expectation, the client can simply discard this interim + response. + +6.2.2. 101 Switching Protocols + + The 101 (Switching Protocols) status code indicates that the server + understands and is willing to comply with the client's request, via + the Upgrade header field (Section 6.7 of [RFC7230]), for a change in + the application protocol being used on this connection. The server + + + + +Fielding & Reschke Standards Track [Page 50] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + MUST generate an Upgrade header field in the response that indicates + which protocol(s) will be switched to immediately after the empty + line that terminates the 101 response. + + It is assumed that the server will only agree to switch protocols + when it is advantageous to do so. For example, switching to a newer + version of HTTP might be advantageous over older versions, and + switching to a real-time, synchronous protocol might be advantageous + when delivering resources that use such features. + +6.3. Successful 2xx + + The 2xx (Successful) class of status code indicates that the client's + request was successfully received, understood, and accepted. + +6.3.1. 200 OK + + The 200 (OK) status code indicates that the request has succeeded. + The payload sent in a 200 response depends on the request method. + For the methods defined by this specification, the intended meaning + of the payload can be summarized as: + + GET a representation of the target resource; + + HEAD the same representation as GET, but without the representation + data; + + POST a representation of the status of, or results obtained from, + the action; + + PUT, DELETE a representation of the status of the action; + + OPTIONS a representation of the communications options; + + TRACE a representation of the request message as received by the end + server. + + Aside from responses to CONNECT, a 200 response always has a payload, + though an origin server MAY generate a payload body of zero length. + If no payload is desired, an origin server ought to send 204 (No + Content) instead. For CONNECT, no payload is allowed because the + successful result is a tunnel, which begins immediately after the 200 + response header section. + + A 200 response is cacheable by default; i.e., unless otherwise + indicated by the method definition or explicit cache controls (see + Section 4.2.2 of [RFC7234]). + + + + +Fielding & Reschke Standards Track [Page 51] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +6.3.2. 201 Created + + The 201 (Created) status code indicates that the request has been + fulfilled and has resulted in one or more new resources being + created. The primary resource created by the request is identified + by either a Location header field in the response or, if no Location + field is received, by the effective request URI. + + The 201 response payload typically describes and links to the + resource(s) created. See Section 7.2 for a discussion of the meaning + and purpose of validator header fields, such as ETag and + Last-Modified, in a 201 response. + +6.3.3. 202 Accepted + + The 202 (Accepted) status code indicates that the request has been + accepted for processing, but the processing has not been completed. + The request might or might not eventually be acted upon, as it might + be disallowed when processing actually takes place. There is no + facility in HTTP for re-sending a status code from an asynchronous + operation. + + The 202 response is intentionally noncommittal. Its purpose is to + allow a server to accept a request for some other process (perhaps a + batch-oriented process that is only run once per day) without + requiring that the user agent's connection to the server persist + until the process is completed. The representation sent with this + response ought to describe the request's current status and point to + (or embed) a status monitor that can provide the user with an + estimate of when the request will be fulfilled. + +6.3.4. 203 Non-Authoritative Information + + The 203 (Non-Authoritative Information) status code indicates that + the request was successful but the enclosed payload has been modified + from that of the origin server's 200 (OK) response by a transforming + proxy (Section 5.7.2 of [RFC7230]). This status code allows the + proxy to notify recipients when a transformation has been applied, + since that knowledge might impact later decisions regarding the + content. For example, future cache validation requests for the + content might only be applicable along the same request path (through + the same proxies). + + The 203 response is similar to the Warning code of 214 Transformation + Applied (Section 5.5 of [RFC7234]), which has the advantage of being + applicable to responses with any status code. + + + + + +Fielding & Reschke Standards Track [Page 52] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + A 203 response is cacheable by default; i.e., unless otherwise + indicated by the method definition or explicit cache controls (see + Section 4.2.2 of [RFC7234]). + +6.3.5. 204 No Content + + The 204 (No Content) status code indicates that the server has + successfully fulfilled the request and that there is no additional + content to send in the response payload body. Metadata in the + response header fields refer to the target resource and its selected + representation after the requested action was applied. + + For example, if a 204 status code is received in response to a PUT + request and the response contains an ETag header field, then the PUT + was successful and the ETag field-value contains the entity-tag for + the new representation of that target resource. + + The 204 response allows a server to indicate that the action has been + successfully applied to the target resource, while implying that the + user agent does not need to traverse away from its current "document + view" (if any). The server assumes that the user agent will provide + some indication of the success to its user, in accord with its own + interface, and apply any new or updated metadata in the response to + its active representation. + + For example, a 204 status code is commonly used with document editing + interfaces corresponding to a "save" action, such that the document + being saved remains available to the user for editing. It is also + frequently used with interfaces that expect automated data transfers + to be prevalent, such as within distributed version control systems. + + A 204 response is terminated by the first empty line after the header + fields because it cannot contain a message body. + + A 204 response is cacheable by default; i.e., unless otherwise + indicated by the method definition or explicit cache controls (see + Section 4.2.2 of [RFC7234]). + +6.3.6. 205 Reset Content + + The 205 (Reset Content) status code indicates that the server has + fulfilled the request and desires that the user agent reset the + "document view", which caused the request to be sent, to its original + state as received from the origin server. + + This response is intended to support a common data entry use case + where the user receives content that supports data entry (a form, + notepad, canvas, etc.), enters or manipulates data in that space, + + + +Fielding & Reschke Standards Track [Page 53] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + causes the entered data to be submitted in a request, and then the + data entry mechanism is reset for the next entry so that the user can + easily initiate another input action. + + Since the 205 status code implies that no additional content will be + provided, a server MUST NOT generate a payload in a 205 response. In + other words, a server MUST do one of the following for a 205 + response: a) indicate a zero-length body for the response by + including a Content-Length header field with a value of 0; b) + indicate a zero-length payload for the response by including a + Transfer-Encoding header field with a value of chunked and a message + body consisting of a single chunk of zero-length; or, c) close the + connection immediately after sending the blank line terminating the + header section. + +6.4. Redirection 3xx + + The 3xx (Redirection) class of status code indicates that further + action needs to be taken by the user agent in order to fulfill the + request. If a Location header field (Section 7.1.2) is provided, the + user agent MAY automatically redirect its request to the URI + referenced by the Location field value, even if the specific status + code is not understood. Automatic redirection needs to done with + care for methods not known to be safe, as defined in Section 4.2.1, + since the user might not wish to redirect an unsafe request. + + There are several types of redirects: + + 1. Redirects that indicate the resource might be available at a + different URI, as provided by the Location field, as in the + status codes 301 (Moved Permanently), 302 (Found), and 307 + (Temporary Redirect). + + 2. Redirection that offers a choice of matching resources, each + capable of representing the original request target, as in the + 300 (Multiple Choices) status code. + + 3. Redirection to a different resource, identified by the Location + field, that can represent an indirect response to the request, as + in the 303 (See Other) status code. + + 4. Redirection to a previously cached result, as in the 304 (Not + Modified) status code. + + Note: In HTTP/1.0, the status codes 301 (Moved Permanently) and + 302 (Found) were defined for the first type of redirect + ([RFC1945], Section 9.3). Early user agents split on whether the + method applied to the redirect target would be the same as the + + + +Fielding & Reschke Standards Track [Page 54] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + original request or would be rewritten as GET. Although HTTP + originally defined the former semantics for 301 and 302 (to match + its original implementation at CERN), and defined 303 (See Other) + to match the latter semantics, prevailing practice gradually + converged on the latter semantics for 301 and 302 as well. The + first revision of HTTP/1.1 added 307 (Temporary Redirect) to + indicate the former semantics without being impacted by divergent + practice. Over 10 years later, most user agents still do method + rewriting for 301 and 302; therefore, this specification makes + that behavior conformant when the original request is POST. + + A client SHOULD detect and intervene in cyclical redirections (i.e., + "infinite" redirection loops). + + Note: An earlier version of this specification recommended a + maximum of five redirections ([RFC2068], Section 10.3). Content + developers need to be aware that some clients might implement such + a fixed limitation. + +6.4.1. 300 Multiple Choices + + The 300 (Multiple Choices) status code indicates that the target + resource has more than one representation, each with its own more + specific identifier, and information about the alternatives is being + provided so that the user (or user agent) can select a preferred + representation by redirecting its request to one or more of those + identifiers. In other words, the server desires that the user agent + engage in reactive negotiation to select the most appropriate + representation(s) for its needs (Section 3.4). + + If the server has a preferred choice, the server SHOULD generate a + Location header field containing a preferred choice's URI reference. + The user agent MAY use the Location field value for automatic + redirection. + + For request methods other than HEAD, the server SHOULD generate a + payload in the 300 response containing a list of representation + metadata and URI reference(s) from which the user or user agent can + choose the one most preferred. The user agent MAY make a selection + from that list automatically if it understands the provided media + type. A specific format for automatic selection is not defined by + this specification because HTTP tries to remain orthogonal to the + definition of its payloads. In practice, the representation is + provided in some easily parsed format believed to be acceptable to + the user agent, as determined by shared design or content + negotiation, or in some commonly accepted hypertext format. + + + + + +Fielding & Reschke Standards Track [Page 55] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + A 300 response is cacheable by default; i.e., unless otherwise + indicated by the method definition or explicit cache controls (see + Section 4.2.2 of [RFC7234]). + + Note: The original proposal for the 300 status code defined the + URI header field as providing a list of alternative + representations, such that it would be usable for 200, 300, and + 406 responses and be transferred in responses to the HEAD method. + However, lack of deployment and disagreement over syntax led to + both URI and Alternates (a subsequent proposal) being dropped from + this specification. It is possible to communicate the list using + a set of Link header fields [RFC5988], each with a relationship of + "alternate", though deployment is a chicken-and-egg problem. + +6.4.2. 301 Moved Permanently + + The 301 (Moved Permanently) status code indicates that the target + resource has been assigned a new permanent URI and any future + references to this resource ought to use one of the enclosed URIs. + Clients with link-editing capabilities ought to automatically re-link + references to the effective request URI to one or more of the new + references sent by the server, where possible. + + The server SHOULD generate a Location header field in the response + containing a preferred URI reference for the new permanent URI. The + user agent MAY use the Location field value for automatic + redirection. The server's response payload usually contains a short + hypertext note with a hyperlink to the new URI(s). + + Note: For historical reasons, a user agent MAY change the request + method from POST to GET for the subsequent request. If this + behavior is undesired, the 307 (Temporary Redirect) status code + can be used instead. + + A 301 response is cacheable by default; i.e., unless otherwise + indicated by the method definition or explicit cache controls (see + Section 4.2.2 of [RFC7234]). + +6.4.3. 302 Found + + The 302 (Found) status code indicates that the target resource + resides temporarily under a different URI. Since the redirection + might be altered on occasion, the client ought to continue to use the + effective request URI for future requests. + + + + + + + +Fielding & Reschke Standards Track [Page 56] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + The server SHOULD generate a Location header field in the response + containing a URI reference for the different URI. The user agent MAY + use the Location field value for automatic redirection. The server's + response payload usually contains a short hypertext note with a + hyperlink to the different URI(s). + + Note: For historical reasons, a user agent MAY change the request + method from POST to GET for the subsequent request. If this + behavior is undesired, the 307 (Temporary Redirect) status code + can be used instead. + +6.4.4. 303 See Other + + The 303 (See Other) status code indicates that the server is + redirecting the user agent to a different resource, as indicated by a + URI in the Location header field, which is intended to provide an + indirect response to the original request. A user agent can perform + a retrieval request targeting that URI (a GET or HEAD request if + using HTTP), which might also be redirected, and present the eventual + result as an answer to the original request. Note that the new URI + in the Location header field is not considered equivalent to the + effective request URI. + + This status code is applicable to any HTTP method. It is primarily + used to allow the output of a POST action to redirect the user agent + to a selected resource, since doing so provides the information + corresponding to the POST response in a form that can be separately + identified, bookmarked, and cached, independent of the original + request. + + A 303 response to a GET request indicates that the origin server does + not have a representation of the target resource that can be + transferred by the server over HTTP. However, the Location field + value refers to a resource that is descriptive of the target + resource, such that making a retrieval request on that other resource + might result in a representation that is useful to recipients without + implying that it represents the original target resource. Note that + answers to the questions of what can be represented, what + representations are adequate, and what might be a useful description + are outside the scope of HTTP. + + Except for responses to a HEAD request, the representation of a 303 + response ought to contain a short hypertext note with a hyperlink to + the same URI reference provided in the Location header field. + + + + + + + +Fielding & Reschke Standards Track [Page 57] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +6.4.5. 305 Use Proxy + + The 305 (Use Proxy) status code was defined in a previous version of + this specification and is now deprecated (Appendix B). + +6.4.6. 306 (Unused) + + The 306 status code was defined in a previous version of this + specification, is no longer used, and the code is reserved. + +6.4.7. 307 Temporary Redirect + + The 307 (Temporary Redirect) status code indicates that the target + resource resides temporarily under a different URI and the user agent + MUST NOT change the request method if it performs an automatic + redirection to that URI. Since the redirection can change over time, + the client ought to continue using the original effective request URI + for future requests. + + The server SHOULD generate a Location header field in the response + containing a URI reference for the different URI. The user agent MAY + use the Location field value for automatic redirection. The server's + response payload usually contains a short hypertext note with a + hyperlink to the different URI(s). + + Note: This status code is similar to 302 (Found), except that it + does not allow changing the request method from POST to GET. This + specification defines no equivalent counterpart for 301 (Moved + Permanently) ([RFC7238], however, defines the status code 308 + (Permanent Redirect) for this purpose). + +6.5. Client Error 4xx + + The 4xx (Client Error) class of status code indicates that the client + seems to have erred. Except when responding to a HEAD request, the + server SHOULD send a representation containing an explanation of the + error situation, and whether it is a temporary or permanent + condition. These status codes are applicable to any request method. + User agents SHOULD display any included representation to the user. + +6.5.1. 400 Bad Request + + The 400 (Bad Request) status code indicates that the server cannot or + will not process the request due to something that is perceived to be + a client error (e.g., malformed request syntax, invalid request + message framing, or deceptive request routing). + + + + + +Fielding & Reschke Standards Track [Page 58] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +6.5.2. 402 Payment Required + + The 402 (Payment Required) status code is reserved for future use. + +6.5.3. 403 Forbidden + + The 403 (Forbidden) status code indicates that the server understood + the request but refuses to authorize it. A server that wishes to + make public why the request has been forbidden can describe that + reason in the response payload (if any). + + If authentication credentials were provided in the request, the + server considers them insufficient to grant access. The client + SHOULD NOT automatically repeat the request with the same + credentials. The client MAY repeat the request with new or different + credentials. However, a request might be forbidden for reasons + unrelated to the credentials. + + An origin server that wishes to "hide" the current existence of a + forbidden target resource MAY instead respond with a status code of + 404 (Not Found). + +6.5.4. 404 Not Found + + The 404 (Not Found) status code indicates that the origin server did + not find a current representation for the target resource or is not + willing to disclose that one exists. A 404 status code does not + indicate whether this lack of representation is temporary or + permanent; the 410 (Gone) status code is preferred over 404 if the + origin server knows, presumably through some configurable means, that + the condition is likely to be permanent. + + A 404 response is cacheable by default; i.e., unless otherwise + indicated by the method definition or explicit cache controls (see + Section 4.2.2 of [RFC7234]). + +6.5.5. 405 Method Not Allowed + + The 405 (Method Not Allowed) status code indicates that the method + received in the request-line is known by the origin server but not + supported by the target resource. The origin server MUST generate an + Allow header field in a 405 response containing a list of the target + resource's currently supported methods. + + A 405 response is cacheable by default; i.e., unless otherwise + indicated by the method definition or explicit cache controls (see + Section 4.2.2 of [RFC7234]). + + + + +Fielding & Reschke Standards Track [Page 59] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +6.5.6. 406 Not Acceptable + + The 406 (Not Acceptable) status code indicates that the target + resource does not have a current representation that would be + acceptable to the user agent, according to the proactive negotiation + header fields received in the request (Section 5.3), and the server + is unwilling to supply a default representation. + + The server SHOULD generate a payload containing a list of available + representation characteristics and corresponding resource identifiers + from which the user or user agent can choose the one most + appropriate. A user agent MAY automatically select the most + appropriate choice from that list. However, this specification does + not define any standard for such automatic selection, as described in + Section 6.4.1. + +6.5.7. 408 Request Timeout + + The 408 (Request Timeout) status code indicates that the server did + not receive a complete request message within the time that it was + prepared to wait. A server SHOULD send the "close" connection option + (Section 6.1 of [RFC7230]) in the response, since 408 implies that + the server has decided to close the connection rather than continue + waiting. If the client has an outstanding request in transit, the + client MAY repeat that request on a new connection. + +6.5.8. 409 Conflict + + The 409 (Conflict) status code indicates that the request could not + be completed due to a conflict with the current state of the target + resource. This code is used in situations where the user might be + able to resolve the conflict and resubmit the request. The server + SHOULD generate a payload that includes enough information for a user + to recognize the source of the conflict. + + Conflicts are most likely to occur in response to a PUT request. For + example, if versioning were being used and the representation being + PUT included changes to a resource that conflict with those made by + an earlier (third-party) request, the origin server might use a 409 + response to indicate that it can't complete the request. In this + case, the response representation would likely contain information + useful for merging the differences based on the revision history. + +6.5.9. 410 Gone + + The 410 (Gone) status code indicates that access to the target + resource is no longer available at the origin server and that this + condition is likely to be permanent. If the origin server does not + + + +Fielding & Reschke Standards Track [Page 60] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + know, or has no facility to determine, whether or not the condition + is permanent, the status code 404 (Not Found) ought to be used + instead. + + The 410 response is primarily intended to assist the task of web + maintenance by notifying the recipient that the resource is + intentionally unavailable and that the server owners desire that + remote links to that resource be removed. Such an event is common + for limited-time, promotional services and for resources belonging to + individuals no longer associated with the origin server's site. It + is not necessary to mark all permanently unavailable resources as + "gone" or to keep the mark for any length of time -- that is left to + the discretion of the server owner. + + A 410 response is cacheable by default; i.e., unless otherwise + indicated by the method definition or explicit cache controls (see + Section 4.2.2 of [RFC7234]). + +6.5.10. 411 Length Required + + The 411 (Length Required) status code indicates that the server + refuses to accept the request without a defined Content-Length + (Section 3.3.2 of [RFC7230]). The client MAY repeat the request if + it adds a valid Content-Length header field containing the length of + the message body in the request message. + +6.5.11. 413 Payload Too Large + + The 413 (Payload Too Large) status code indicates that the server is + refusing to process a request because the request payload is larger + than the server is willing or able to process. The server MAY close + the connection to prevent the client from continuing the request. + + If the condition is temporary, the server SHOULD generate a + Retry-After header field to indicate that it is temporary and after + what time the client MAY try again. + +6.5.12. 414 URI Too Long + + The 414 (URI Too Long) status code indicates that the server is + refusing to service the request because the request-target (Section + 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 + improperly converted a POST request to a GET request with long query + information, when the client has descended into a "black hole" of + redirection (e.g., a redirected URI prefix that points to a suffix of + itself) or when the server is under attack by a client attempting to + exploit potential security holes. + + + +Fielding & Reschke Standards Track [Page 61] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + A 414 response is cacheable by default; i.e., unless otherwise + indicated by the method definition or explicit cache controls (see + Section 4.2.2 of [RFC7234]). + +6.5.13. 415 Unsupported Media Type + + The 415 (Unsupported Media Type) status code indicates that the + origin server is refusing to service the request because the payload + 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-Type or Content-Encoding, or as a result of inspecting the + data directly. + +6.5.14. 417 Expectation Failed + + The 417 (Expectation Failed) status code indicates that the + expectation given in the request's Expect header field + (Section 5.1.1) could not be met by at least one of the inbound + servers. + +6.5.15. 426 Upgrade Required + + The 426 (Upgrade Required) status code indicates that the server + refuses to perform the request using the current protocol but might + be willing to do so after the client upgrades to a different + protocol. The server MUST send an Upgrade header field in a 426 + response to indicate the required protocol(s) (Section 6.7 of + [RFC7230]). + + Example: + + HTTP/1.1 426 Upgrade Required + Upgrade: HTTP/3.0 + Connection: Upgrade + Content-Length: 53 + Content-Type: text/plain + + This service requires use of the HTTP/3.0 protocol. + +6.6. Server Error 5xx + + The 5xx (Server Error) class of status code indicates that the server + is aware that it has erred or is incapable of performing the + requested method. Except when responding to a HEAD request, the + server SHOULD send a representation containing an explanation of the + error situation, and whether it is a temporary or permanent + + + + + +Fielding & Reschke Standards Track [Page 62] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + condition. A user agent SHOULD display any included representation + to the user. These response codes are applicable to any request + method. + +6.6.1. 500 Internal Server Error + + The 500 (Internal Server Error) status code indicates that the server + encountered an unexpected condition that prevented it from fulfilling + the request. + +6.6.2. 501 Not Implemented + + The 501 (Not Implemented) status code indicates that the server does + not support the functionality required to fulfill the request. This + is the appropriate response when the server does not recognize the + request method and is not capable of supporting it for any resource. + + A 501 response is cacheable by default; i.e., unless otherwise + indicated by the method definition or explicit cache controls (see + Section 4.2.2 of [RFC7234]). + +6.6.3. 502 Bad Gateway + + The 502 (Bad Gateway) status code indicates that the server, while + acting as a gateway or proxy, received an invalid response from an + inbound server it accessed while attempting to fulfill the request. + +6.6.4. 503 Service Unavailable + + The 503 (Service Unavailable) status code indicates that the server + is currently unable to handle the request due to a temporary overload + or scheduled maintenance, which will likely be alleviated after some + delay. The server MAY send a Retry-After header field + (Section 7.1.3) to suggest an appropriate amount of time for the + client to wait before retrying the request. + + Note: The existence of the 503 status code does not imply that a + server has to use it when becoming overloaded. Some servers might + simply refuse the connection. + +6.6.5. 504 Gateway Timeout + + The 504 (Gateway Timeout) status code indicates that the server, + while acting as a gateway or proxy, did not receive a timely response + from an upstream server it needed to access in order to complete the + request. + + + + + +Fielding & Reschke Standards Track [Page 63] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +6.6.6. 505 HTTP Version Not Supported + + The 505 (HTTP Version Not Supported) status code indicates that the + server does not support, or refuses to support, the major version of + HTTP that was used in the request message. The server is indicating + 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 + [RFC7230], other than with this error message. The server SHOULD + generate a representation for the 505 response that describes why + that version is not supported and what other protocols are supported + by that server. + +7. Response Header Fields + + The response header fields allow the server to pass additional + information about the response beyond what is placed in the + status-line. These header fields give information about the server, + about further access to the target resource, or about related + resources. + + Although each response header field has a defined meaning, in + general, the precise semantics might be further refined by the + semantics of the request method and/or response status code. + +7.1. Control Data + + Response header fields can supply control data that supplements the + status code, directs caching, or instructs the client where to go + next. + + +-------------------+--------------------------+ + | Header Field Name | Defined in... | + +-------------------+--------------------------+ + | Age | Section 5.1 of [RFC7234] | + | Cache-Control | Section 5.2 of [RFC7234] | + | Expires | Section 5.3 of [RFC7234] | + | Date | Section 7.1.1.2 | + | Location | Section 7.1.2 | + | Retry-After | Section 7.1.3 | + | Vary | Section 7.1.4 | + | Warning | Section 5.5 of [RFC7234] | + +-------------------+--------------------------+ + + + + + + + + + +Fielding & Reschke Standards Track [Page 64] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +7.1.1. Origination Date + +7.1.1.1. Date/Time Formats + + Prior to 1995, there were three different formats commonly used by + servers to communicate timestamps. For compatibility with old + implementations, all three are defined here. The preferred format is + a fixed-length and single-zone subset of the date and time + specification used by the Internet Message Format [RFC5322]. + + HTTP-date = IMF-fixdate / obs-date + + An example of the preferred format is + + Sun, 06 Nov 1994 08:49:37 GMT ; IMF-fixdate + + Examples of the two obsolete formats are + + Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 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 + MUST accept all three HTTP-date formats. When a sender generates a + header field that contains one or more timestamps defined as + HTTP-date, the sender MUST generate those timestamps in the + IMF-fixdate format. + + An HTTP-date value represents time as an instance of Coordinated + Universal Time (UTC). The first two formats indicate UTC by the + three-letter abbreviation for Greenwich Mean Time, "GMT", a + 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 + clock ought to use NTP ([RFC5905]) or some similar protocol to + synchronize its clock to UTC. + + Preferred format: + + IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT + ; fixed length/zone/capitalization subset of the format + ; see Section 3.3 of [RFC5322] + + day-name = %x4D.6F.6E ; "Mon", case-sensitive + / %x54.75.65 ; "Tue", case-sensitive + / %x57.65.64 ; "Wed", case-sensitive + / %x54.68.75 ; "Thu", case-sensitive + / %x46.72.69 ; "Fri", case-sensitive + / %x53.61.74 ; "Sat", case-sensitive + / %x53.75.6E ; "Sun", case-sensitive + + + +Fielding & Reschke Standards Track [Page 65] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + date1 = day SP month SP year + ; e.g., 02 Jun 1982 + + day = 2DIGIT + month = %x4A.61.6E ; "Jan", case-sensitive + / %x46.65.62 ; "Feb", case-sensitive + / %x4D.61.72 ; "Mar", case-sensitive + / %x41.70.72 ; "Apr", case-sensitive + / %x4D.61.79 ; "May", case-sensitive + / %x4A.75.6E ; "Jun", case-sensitive + / %x4A.75.6C ; "Jul", case-sensitive + / %x41.75.67 ; "Aug", case-sensitive + / %x53.65.70 ; "Sep", case-sensitive + / %x4F.63.74 ; "Oct", case-sensitive + / %x4E.6F.76 ; "Nov", case-sensitive + / %x44.65.63 ; "Dec", case-sensitive + year = 4DIGIT + + GMT = %x47.4D.54 ; "GMT", case-sensitive + + time-of-day = hour ":" minute ":" second + ; 00:00:00 - 23:59:60 (leap second) + + hour = 2DIGIT + minute = 2DIGIT + second = 2DIGIT + + Obsolete formats: + + obs-date = rfc850-date / asctime-date + + rfc850-date = day-name-l "," SP date2 SP time-of-day SP GMT + date2 = day "-" month "-" 2DIGIT + ; e.g., 02-Jun-82 + + day-name-l = %x4D.6F.6E.64.61.79 ; "Monday", case-sensitive + / %x54.75.65.73.64.61.79 ; "Tuesday", case-sensitive + / %x57.65.64.6E.65.73.64.61.79 ; "Wednesday", case-sensitive + / %x54.68.75.72.73.64.61.79 ; "Thursday", case-sensitive + / %x46.72.69.64.61.79 ; "Friday", case-sensitive + / %x53.61.74.75.72.64.61.79 ; "Saturday", case-sensitive + / %x53.75.6E.64.61.79 ; "Sunday", case-sensitive + + + asctime-date = day-name SP date3 SP time-of-day SP year + date3 = month SP ( 2DIGIT / ( SP 1DIGIT )) + ; e.g., Jun 2 + + + + +Fielding & Reschke Standards Track [Page 66] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + HTTP-date is case sensitive. A sender MUST NOT generate additional + whitespace in an HTTP-date beyond that specifically included as SP in + the grammar. The semantics of day-name, day, month, year, and + time-of-day are the same as those defined for the Internet Message + Format constructs with the corresponding name ([RFC5322], Section + 3.3). + + Recipients of a timestamp value in rfc850-date format, which uses a + 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 + the past that had the same last two digits. + + Recipients of timestamp values are encouraged to be robust in parsing + timestamps unless otherwise restricted by the field definition. For + example, messages are occasionally forwarded over HTTP from a + non-HTTP source that might generate any of the date and time + specifications defined by the Internet Message Format. + + Note: HTTP requirements for the date/time stamp format apply only + to their usage within the protocol stream. Implementations are + not required to use these formats for user presentation, request + logging, etc. + +7.1.1.2. Date + + The "Date" header field represents the date and time at which the + message was originated, having the same semantics as the Origination + Date Field (orig-date) defined in Section 3.6.1 of [RFC5322]. The + field value is an HTTP-date, as defined in Section 7.1.1.1. + + Date = HTTP-date + + An example is + + Date: Tue, 15 Nov 1994 08:12:31 GMT + + When a Date header field is generated, the sender SHOULD generate its + field value as the best available approximation of the date and time + of message generation. In theory, the date ought to represent the + moment just before the payload is generated. In practice, the date + can be generated at any time during message origination. + + An origin server MUST NOT send a Date header field if it does not + have a clock capable of providing a reasonable approximation of the + current instance in Coordinated Universal Time. An origin server MAY + send a Date header field if the response is in the 1xx + (Informational) or 5xx (Server Error) class of status codes. An + origin server MUST send a Date header field in all other cases. + + + +Fielding & Reschke Standards Track [Page 67] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + A recipient with a clock that receives a response message without a + Date header field MUST record the time it was received and append a + corresponding Date header field to the message's header section if it + is cached or forwarded downstream. + + A user agent MAY send a Date header field in a request, though + generally will not do so unless it is believed to convey useful + information to the server. For example, custom applications of HTTP + might convey a Date if the server is expected to adjust its + interpretation of the user's request based on differences between the + user agent and server clocks. + +7.1.2. Location + + The "Location" header field is used in some responses to refer to a + specific resource in relation to the response. The type of + relationship is defined by the combination of request method and + status code semantics. + + Location = URI-reference + + The field value consists of a single URI-reference. When it has the + form of a relative reference ([RFC3986], Section 4.2), the final + value is computed by resolving it against the effective request URI + ([RFC3986], Section 5). + + For 201 (Created) responses, the Location value refers to the primary + resource created by the request. For 3xx (Redirection) responses, + the Location value refers to the preferred target resource for + automatically redirecting the request. + + If the Location value provided in a 3xx (Redirection) response does + not have a fragment component, a user agent MUST process the + redirection as if the value inherits the fragment component of the + URI reference used to generate the request target (i.e., the + redirection inherits the original reference's fragment, if any). + + For example, a GET request generated for the URI reference + "http://www.example.org/~tim" might result in a 303 (See Other) + response containing the header field: + + Location: /People.html#tim + + which suggests that the user agent redirect to + "http://www.example.org/People.html#tim" + + + + + + +Fielding & Reschke Standards Track [Page 68] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + Likewise, a GET request generated for the URI reference + "http://www.example.org/index.html#larry" might result in a 301 + (Moved Permanently) response containing the header field: + + Location: http://www.example.net/index.html + + which suggests that the user agent redirect to + "http://www.example.net/index.html#larry", preserving the original + fragment identifier. + + There are circumstances in which a fragment identifier in a Location + value would not be appropriate. For example, the Location header + field in a 201 (Created) response is supposed to provide a URI that + is specific to the created resource. + + Note: Some recipients attempt to recover from Location fields that + are not valid URI references. This specification does not mandate + or define such processing, but does allow it for the sake of + robustness. + + Note: The Content-Location header field (Section 3.1.4.2) differs + from Location in that the Content-Location refers to the most + specific resource corresponding to the enclosed representation. + It is therefore possible for a response to contain both the + Location and Content-Location header fields. + +7.1.3. Retry-After + + Servers send the "Retry-After" header field to indicate how long the + user agent ought to wait before making a follow-up request. When + sent with a 503 (Service Unavailable) response, Retry-After indicates + how long the service is expected to be unavailable to the client. + When sent with any 3xx (Redirection) response, Retry-After indicates + the minimum time that the user agent is asked to wait before issuing + the redirected request. + + The value of this field can be either an HTTP-date or a number of + seconds to delay after the response is received. + + Retry-After = HTTP-date / delay-seconds + + A delay-seconds value is a non-negative decimal integer, representing + time in seconds. + + delay-seconds = 1*DIGIT + + + + + + +Fielding & Reschke Standards Track [Page 69] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + Two examples of its use are + + Retry-After: Fri, 31 Dec 1999 23:59:59 GMT + Retry-After: 120 + + In the latter example, the delay is 2 minutes. + +7.1.4. Vary + + The "Vary" header field in a response describes what parts of a + request message, aside from the method, Host header field, and + request target, might influence the origin server's process for + selecting and representing this response. The value consists of + either a single asterisk ("*") or a list of header field names + (case-insensitive). + + Vary = "*" / 1#field-name + + A Vary field value of "*" signals that anything about the request + might play a role in selecting the response representation, possibly + including elements outside the message syntax (e.g., the client's + network address). A recipient will not be able to determine whether + this response is appropriate for a later request without forwarding + the request to the origin server. A proxy MUST NOT generate a Vary + field with a "*" value. + + A Vary field value consisting of a comma-separated list of names + indicates that the named request header fields, known as the + selecting header fields, might have a role in selecting the + representation. The potential selecting header fields are not + limited to those defined by this specification. + + For example, a response that contains + + Vary: accept-encoding, accept-language + + indicates that the origin server might have used the request's + Accept-Encoding and Accept-Language fields (or lack thereof) as + determining factors while choosing the content for this response. + + An origin server might send Vary with a list of fields for two + purposes: + + 1. To inform cache recipients that they MUST NOT use this response + to satisfy a later request unless the later request has the same + values for the listed fields as the original request (Section 4.1 + of [RFC7234]). In other words, Vary expands the cache key + required to match a new request to the stored cache entry. + + + +Fielding & Reschke Standards Track [Page 70] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + 2. To inform user agent recipients that this response is subject to + content negotiation (Section 5.3) and that a different + representation might be sent in a subsequent request if + additional parameters are provided in the listed header fields + (proactive negotiation). + + An origin server SHOULD send a Vary header field when its algorithm + for selecting a representation varies based on aspects of the request + message other than the method and request target, unless the variance + cannot be crossed or the origin server has been deliberately + configured to prevent cache transparency. For example, there is no + need to send the Authorization field name in Vary because reuse + across users is constrained by the field definition (Section 4.2 of + [RFC7235]). Likewise, an origin server might use Cache-Control + directives (Section 5.2 of [RFC7234]) to supplant Vary if it + considers the variance less significant than the performance cost of + Vary's impact on caching. + +7.2. Validator Header Fields + + Validator header fields convey metadata about the selected + representation (Section 3). In responses to safe requests, validator + fields describe the selected representation chosen by the origin + server while handling the response. Note that, depending on the + status code semantics, the selected representation for a given + response is not necessarily the same as the representation enclosed + as response payload. + + In a successful response to a state-changing request, validator + fields describe the new representation that has replaced the prior + selected representation as a result of processing the request. + + For example, an ETag header field in a 201 (Created) response + communicates the entity-tag of the newly created resource's + representation, so that it can be used in later conditional requests + to prevent the "lost update" problem [RFC7232]. + + +-------------------+--------------------------+ + | Header Field Name | Defined in... | + +-------------------+--------------------------+ + | ETag | Section 2.3 of [RFC7232] | + | Last-Modified | Section 2.2 of [RFC7232] | + +-------------------+--------------------------+ + + + + + + + + +Fielding & Reschke Standards Track [Page 71] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +7.3. Authentication Challenges + + Authentication challenges indicate what mechanisms are available for + the client to provide authentication credentials in future requests. + + +--------------------+--------------------------+ + | Header Field Name | Defined in... | + +--------------------+--------------------------+ + | WWW-Authenticate | Section 4.1 of [RFC7235] | + | Proxy-Authenticate | Section 4.3 of [RFC7235] | + +--------------------+--------------------------+ + +7.4. Response Context + + The remaining response header fields provide more information about + the target resource for potential use in later requests. + + +-------------------+--------------------------+ + | Header Field Name | Defined in... | + +-------------------+--------------------------+ + | Accept-Ranges | Section 2.3 of [RFC7233] | + | Allow | Section 7.4.1 | + | Server | Section 7.4.2 | + +-------------------+--------------------------+ + +7.4.1. Allow + + The "Allow" header field lists the set of methods advertised as + supported by the target resource. The purpose of this field is + strictly to inform the recipient of valid request methods associated + with the resource. + + Allow = #method + + Example of use: + + Allow: GET, HEAD, PUT + + The actual set of allowed methods is defined by the origin server at + the time of each request. An origin server MUST generate an Allow + field in a 405 (Method Not Allowed) response and MAY do so in any + other response. An empty Allow field value indicates that the + resource allows no methods, which might occur in a 405 response if + the resource has been temporarily disabled by configuration. + + A proxy MUST NOT modify the Allow header field -- it does not need to + understand all of the indicated methods in order to handle them + according to the generic message handling rules. + + + +Fielding & Reschke Standards Track [Page 72] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +7.4.2. Server + + The "Server" header field contains information about the software + used by the origin server to handle the request, which is often used + by clients to help identify the scope of reported interoperability + problems, to work around or tailor requests to avoid particular + server limitations, and for analytics regarding server or operating + system use. An origin server MAY generate a Server field in its + responses. + + Server = product *( RWS ( product / comment ) ) + + The Server field-value consists of one or more product identifiers, + each followed by zero or more comments (Section 3.2 of [RFC7230]), + which together identify the origin server software and its + significant subproducts. By convention, the product identifiers are + listed in decreasing order of their significance for identifying the + origin server software. Each product identifier consists of a name + and optional version, as defined in Section 5.5.3. + + Example: + + Server: CERN/3.0 libwww/2.17 + + An origin server SHOULD NOT generate a Server field containing + needlessly fine-grained detail and SHOULD limit the addition of + subproducts by third parties. Overly long and detailed Server field + values increase response latency and potentially reveal internal + implementation details that might make it (slightly) easier for + attackers to find and exploit known security holes. + +8. IANA Considerations + +8.1. Method Registry + + The "Hypertext Transfer Protocol (HTTP) Method Registry" defines the + namespace for the request method token (Section 4). The method + registry has been created and is now maintained at + <http://www.iana.org/assignments/http-methods>. + + + + + + + + + + + + +Fielding & Reschke Standards Track [Page 73] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +8.1.1. Procedure + + HTTP method registrations MUST include the following fields: + + o Method Name (see Section 4) + + o Safe ("yes" or "no", see Section 4.2.1) + + o Idempotent ("yes" or "no", see Section 4.2.2) + + o Pointer to specification text + + Values to be added to this namespace require IETF Review (see + [RFC5226], Section 4.1). + +8.1.2. Considerations for New Methods + + Standardized methods are generic; that is, they are potentially + applicable to any resource, not just one particular media type, kind + of resource, or application. As such, it is preferred that new + methods be registered in a document that isn't specific to a single + application or data format, since orthogonal technologies deserve + orthogonal specification. + + Since message parsing (Section 3.3 of [RFC7230]) needs to be + independent of method semantics (aside from responses to HEAD), + definitions of new methods cannot change the parsing algorithm or + prohibit the presence of a message body on either the request or the + response message. Definitions of new methods can specify that only a + zero-length message body is allowed by requiring a Content-Length + header field with a value of "0". + + A new method definition needs to indicate whether it is safe + (Section 4.2.1), idempotent (Section 4.2.2), cacheable + (Section 4.2.3), what semantics are to be associated with the payload + body if any is present in the request and what refinements the method + makes to header field or status code semantics. If the new method is + cacheable, its definition ought to describe how, and under what + conditions, a cache can store a response and use it to satisfy a + subsequent request. The new method ought to describe whether it can + be made conditional (Section 5.2) and, if so, how a server responds + when the condition is false. Likewise, if the new method might have + some use for partial response semantics ([RFC7233]), it ought to + document this, too. + + Note: Avoid defining a method name that starts with "M-", since + that prefix might be misinterpreted as having the semantics + assigned to it by [RFC2774]. + + + +Fielding & Reschke Standards Track [Page 74] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +8.1.3. Registrations + + The "Hypertext Transfer Protocol (HTTP) Method Registry" has been + populated with the registrations below: + + +---------+------+------------+---------------+ + | Method | Safe | Idempotent | Reference | + +---------+------+------------+---------------+ + | CONNECT | no | no | Section 4.3.6 | + | DELETE | no | yes | Section 4.3.5 | + | GET | yes | yes | Section 4.3.1 | + | HEAD | yes | yes | Section 4.3.2 | + | OPTIONS | yes | yes | Section 4.3.7 | + | POST | no | no | Section 4.3.3 | + | PUT | no | yes | Section 4.3.4 | + | TRACE | yes | yes | Section 4.3.8 | + +---------+------+------------+---------------+ + +8.2. Status Code Registry + + The "Hypertext Transfer Protocol (HTTP) Status Code Registry" defines + the namespace for the response status-code token (Section 6). The + status code registry is maintained at + <http://www.iana.org/assignments/http-status-codes>. + + This section replaces the registration procedure for HTTP Status + Codes previously defined in Section 7.1 of [RFC2817]. + +8.2.1. Procedure + + A registration MUST include the following fields: + + o Status Code (3 digits) + + o Short Description + + o Pointer to specification text + + Values to be added to the HTTP status code namespace require IETF + Review (see [RFC5226], Section 4.1). + + + + + + + + + + + +Fielding & Reschke Standards Track [Page 75] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +8.2.2. Considerations for New Status Codes + + When it is necessary to express semantics for a response that are not + defined by current status codes, a new status code can be registered. + Status codes are generic; they are potentially applicable to any + resource, not just one particular media type, kind of resource, or + application of HTTP. As such, it is preferred that new status codes + be registered in a document that isn't specific to a single + application. + + New status codes are required to fall under one of the categories + defined in Section 6. To allow existing parsers to process the + response message, new status codes cannot disallow a payload, + although they can mandate a zero-length payload body. + + Proposals for new status codes that are not yet widely deployed ought + to avoid allocating a specific number for the code until there is + clear consensus that it will be registered; instead, early drafts can + use a notation such as "4NN", or "3N0" .. "3N9", to indicate the + class of the proposed status code(s) without consuming a number + prematurely. + + The definition of a new status code ought to explain the request + conditions that would cause a response containing that status code + (e.g., combinations of request header fields and/or method(s)) along + with any dependencies on response header fields (e.g., what fields + are required, what fields can modify the semantics, and what header + field semantics are further refined when used with the new status + code). + + The definition of a new status code ought to specify whether or not + it is cacheable. Note that all status codes can be cached if the + response they occur in has explicit freshness information; however, + status codes that are defined as being cacheable are allowed to be + cached without explicit freshness information. Likewise, the + definition of a status code can place constraints upon cache + behavior. See [RFC7234] for more information. + + Finally, the definition of a new status code ought to indicate + whether the payload has any implied association with an identified + resource (Section 3.1.4.1). + +8.2.3. Registrations + + The status code registry has been updated with the registrations + below: + + + + + +Fielding & Reschke Standards Track [Page 76] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + +-------+-------------------------------+----------------+ + | Value | Description | Reference | + +-------+-------------------------------+----------------+ + | 100 | Continue | Section 6.2.1 | + | 101 | Switching Protocols | Section 6.2.2 | + | 200 | OK | Section 6.3.1 | + | 201 | Created | Section 6.3.2 | + | 202 | Accepted | Section 6.3.3 | + | 203 | Non-Authoritative Information | Section 6.3.4 | + | 204 | No Content | Section 6.3.5 | + | 205 | Reset Content | Section 6.3.6 | + | 300 | Multiple Choices | Section 6.4.1 | + | 301 | Moved Permanently | Section 6.4.2 | + | 302 | Found | Section 6.4.3 | + | 303 | See Other | Section 6.4.4 | + | 305 | Use Proxy | Section 6.4.5 | + | 306 | (Unused) | Section 6.4.6 | + | 307 | Temporary Redirect | Section 6.4.7 | + | 400 | Bad Request | Section 6.5.1 | + | 402 | Payment Required | Section 6.5.2 | + | 403 | Forbidden | Section 6.5.3 | + | 404 | Not Found | Section 6.5.4 | + | 405 | Method Not Allowed | Section 6.5.5 | + | 406 | Not Acceptable | Section 6.5.6 | + | 408 | Request Timeout | Section 6.5.7 | + | 409 | Conflict | Section 6.5.8 | + | 410 | Gone | Section 6.5.9 | + | 411 | Length Required | Section 6.5.10 | + | 413 | Payload Too Large | Section 6.5.11 | + | 414 | URI Too Long | Section 6.5.12 | + | 415 | Unsupported Media Type | Section 6.5.13 | + | 417 | Expectation Failed | Section 6.5.14 | + | 426 | Upgrade Required | Section 6.5.15 | + | 500 | Internal Server Error | Section 6.6.1 | + | 501 | Not Implemented | Section 6.6.2 | + | 502 | Bad Gateway | Section 6.6.3 | + | 503 | Service Unavailable | Section 6.6.4 | + | 504 | Gateway Timeout | Section 6.6.5 | + | 505 | HTTP Version Not Supported | Section 6.6.6 | + +-------+-------------------------------+----------------+ + +8.3. Header Field Registry + + HTTP header fields are registered within the "Message Headers" + registry located at + <http://www.iana.org/assignments/message-headers>, as defined by + [BCP90]. + + + + +Fielding & Reschke Standards Track [Page 77] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +8.3.1. Considerations for New Header Fields + + Header fields are key:value pairs that can be used to communicate + data about the message, its payload, the target resource, or the + connection (i.e., control data). See Section 3.2 of [RFC7230] for a + general definition of header field syntax in HTTP messages. + + The requirements for header field names are defined in [BCP90]. + + Authors of specifications defining new fields are advised to keep the + name as short as practical and not to prefix the name with "X-" + unless the header field will never be used on the Internet. (The + "X-" prefix idiom has been extensively misused in practice; it was + intended to only be used as a mechanism for avoiding name collisions + inside proprietary software or intranet processing, since the prefix + would ensure that private names never collide with a newly registered + Internet name; see [BCP178] for further information). + + New header field values typically have their syntax defined using + ABNF ([RFC5234]), using the extension defined in Section 7 of + [RFC7230] as necessary, and are usually constrained to the range of + US-ASCII characters. Header fields needing a greater range of + characters can use an encoding such as the one defined in [RFC5987]. + + Leading and trailing whitespace in raw field values is removed upon + field parsing (Section 3.2.4 of [RFC7230]). Field definitions where + leading or trailing whitespace in values is significant will have to + use a container syntax such as quoted-string (Section 3.2.6 of + [RFC7230]). + + Because commas (",") are used as a generic delimiter between + field-values, they need to be treated with care if they are allowed + in the field-value. Typically, components that might contain a comma + are protected with double-quotes using the quoted-string ABNF + production. + + For example, a textual date and a URI (either of which might contain + a comma) could be safely carried in field-values like these: + + Example-URI-Field: "http://example.com/a.html,foo", + "http://without-a-comma.example.com/" + Example-Date-Field: "Sat, 04 May 1996", "Wed, 14 Sep 2005" + + Note that double-quote delimiters almost always are used with the + quoted-string production; using a different syntax inside + double-quotes will likely cause unnecessary confusion. + + + + + +Fielding & Reschke Standards Track [Page 78] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + Many header fields use a format including (case-insensitively) named + parameters (for instance, Content-Type, defined in Section 3.1.1.5). + Allowing both unquoted (token) and quoted (quoted-string) syntax for + the parameter value enables recipients to use existing parser + components. When allowing both forms, the meaning of a parameter + value ought to be independent of the syntax used for it (for an + example, see the notes on parameter handling for media types in + Section 3.1.1.1). + + Authors of specifications defining new header fields are advised to + consider documenting: + + o Whether the field is a single value or whether it can be a list + (delimited by commas; see Section 3.2 of [RFC7230]). + + If it does not use the list syntax, document how to treat messages + where the field occurs multiple times (a sensible default would be + to ignore the field, but this might not always be the right + choice). + + Note that intermediaries and software libraries might combine + multiple header field instances into a single one, despite the + field's definition not allowing the list syntax. A robust format + enables recipients to discover these situations (good example: + "Content-Type", as the comma can only appear inside quoted + strings; bad example: "Location", as a comma can occur inside a + URI). + + o Under what conditions the header field can be used; e.g., only in + responses or requests, in all messages, only on responses to a + particular request method, etc. + + o Whether the field should be stored by origin servers that + understand it upon a PUT request. + + o Whether the field semantics are further refined by the context, + such as by existing request methods or status codes. + + o Whether it is appropriate to list the field-name in the Connection + header field (i.e., if the header field is to be hop-by-hop; see + Section 6.1 of [RFC7230]). + + o Under what conditions intermediaries are allowed to insert, + delete, or modify the field's value. + + + + + + + +Fielding & Reschke Standards Track [Page 79] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + o Whether it is appropriate to list the field-name in a Vary + response header field (e.g., when the request header field is used + by an origin server's content selection algorithm; see + Section 7.1.4). + + o Whether the header field is useful or allowable in trailers (see + Section 4.1 of [RFC7230]). + + o Whether the header field ought to be preserved across redirects. + + o Whether it introduces any additional security considerations, such + as disclosure of privacy-related data. + +8.3.2. Registrations + + The "Message Headers" registry has been updated with the following + permanent registrations: + + +-------------------+----------+----------+-----------------+ + | Header Field Name | Protocol | Status | Reference | + +-------------------+----------+----------+-----------------+ + | Accept | http | standard | Section 5.3.2 | + | Accept-Charset | http | standard | Section 5.3.3 | + | Accept-Encoding | http | standard | Section 5.3.4 | + | Accept-Language | http | standard | Section 5.3.5 | + | Allow | http | standard | Section 7.4.1 | + | Content-Encoding | http | standard | Section 3.1.2.2 | + | Content-Language | http | standard | Section 3.1.3.2 | + | Content-Location | http | standard | Section 3.1.4.2 | + | Content-Type | http | standard | Section 3.1.1.5 | + | Date | http | standard | Section 7.1.1.2 | + | Expect | http | standard | Section 5.1.1 | + | From | http | standard | Section 5.5.1 | + | Location | http | standard | Section 7.1.2 | + | Max-Forwards | http | standard | Section 5.1.2 | + | MIME-Version | http | standard | Appendix A.1 | + | Referer | http | standard | Section 5.5.2 | + | Retry-After | http | standard | Section 7.1.3 | + | Server | http | standard | Section 7.4.2 | + | User-Agent | http | standard | Section 5.5.3 | + | Vary | http | standard | Section 7.1.4 | + +-------------------+----------+----------+-----------------+ + + The change controller for the above registrations is: "IETF + (iesg@ietf.org) - Internet Engineering Task Force". + + + + + + +Fielding & Reschke Standards Track [Page 80] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +8.4. Content Coding Registry + + The "HTTP Content Coding Registry" defines the namespace for content + coding names (Section 4.2 of [RFC7230]). The content coding registry + is maintained at <http://www.iana.org/assignments/http-parameters>. + +8.4.1. Procedure + + Content coding registrations MUST include the following fields: + + o Name + + o Description + + o Pointer to specification text + + Names of content codings MUST NOT overlap with names of transfer + codings (Section 4 of [RFC7230]), unless the encoding transformation + is identical (as is the case for the compression codings defined in + Section 4.2 of [RFC7230]). + + Values to be added to this namespace require IETF Review (see Section + 4.1 of [RFC5226]) and MUST conform to the purpose of content coding + defined in this section. + +8.4.2. Registrations + + The "HTTP Content Coding Registry" has been updated with the + registrations below: + + +----------+----------------------------------------+---------------+ + | Name | Description | Reference | + +----------+----------------------------------------+---------------+ + | identity | Reserved (synonym for "no encoding" in | Section 5.3.4 | + | | Accept-Encoding) | | + +----------+----------------------------------------+---------------+ + +9. Security Considerations + + This section is meant to inform developers, information providers, + and users of known security concerns relevant to HTTP semantics and + its use for transferring information over the Internet. + Considerations related to message syntax, parsing, and routing are + discussed in Section 9 of [RFC7230]. + + The list of considerations below is not exhaustive. Most security + concerns related to HTTP semantics are about securing server-side + applications (code behind the HTTP interface), securing user agent + + + +Fielding & Reschke Standards Track [Page 81] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + processing of payloads received via HTTP, or secure use of the + Internet in general, rather than security of the protocol. Various + organizations maintain topical information and links to current + research on Web application security (e.g., [OWASP]). + +9.1. Attacks Based on File and Path Names + + Origin servers frequently make use of their local file system to + manage the mapping from effective request URI to resource + representations. Most file systems are not designed to protect + against malicious file or path names. Therefore, an origin server + needs to avoid accessing names that have a special significance to + the system when mapping the request target to files, folders, or + directories. + + For example, UNIX, Microsoft Windows, and other operating systems use + ".." as a path component to indicate a directory level above the + current one, and they use specially named paths or file names to send + data to system devices. Similar naming conventions might exist + within other types of storage systems. Likewise, local storage + systems have an annoying tendency to prefer user-friendliness over + security when handling invalid or unexpected characters, + recomposition of decomposed characters, and case-normalization of + case-insensitive names. + + Attacks based on such special names tend to focus on either denial- + of-service (e.g., telling the server to read from a COM port) or + disclosure of configuration and source files that are not meant to be + served. + +9.2. Attacks Based on Command, Code, or Query Injection + + Origin servers often use parameters within the URI as a means of + identifying system services, selecting database entries, or choosing + a data source. However, data received in a request cannot be + trusted. An attacker could construct any of the request data + elements (method, request-target, header fields, or body) to contain + data that might be misinterpreted as a command, code, or query when + passed through a command invocation, language interpreter, or + database interface. + + For example, SQL injection is a common attack wherein additional + query language is inserted within some part of the request-target or + header fields (e.g., Host, Referer, etc.). If the received data is + used directly within a SELECT statement, the query language might be + interpreted as a database command instead of a simple string value. + This type of implementation vulnerability is extremely common, in + spite of being easy to prevent. + + + +Fielding & Reschke Standards Track [Page 82] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + In general, resource implementations ought to avoid use of request + data in contexts that are processed or interpreted as instructions. + Parameters ought to be compared to fixed strings and acted upon as a + result of that comparison, rather than passed through an interface + that is not prepared for untrusted data. Received data that isn't + based on fixed parameters ought to be carefully filtered or encoded + to avoid being misinterpreted. + + Similar considerations apply to request data when it is stored and + later processed, such as within log files, monitoring tools, or when + included within a data format that allows embedded scripts. + +9.3. Disclosure of Personal Information + + Clients are often privy to large amounts of personal information, + including both information provided by the user to interact with + resources (e.g., the user's name, location, mail address, passwords, + encryption keys, etc.) and information about the user's browsing + activity over time (e.g., history, bookmarks, etc.). Implementations + need to prevent unintentional disclosure of personal information. + +9.4. Disclosure of Sensitive Information in URIs + + URIs are intended to be shared, not secured, even when they identify + secure resources. URIs are often shown on displays, added to + templates when a page is printed, and stored in a variety of + unprotected bookmark lists. It is therefore unwise to include + information within a URI that is sensitive, personally identifiable, + or a risk to disclose. + + Authors of services ought to avoid GET-based forms for the submission + of sensitive data because that data will be placed in the + request-target. Many existing servers, proxies, and user agents log + or display the request-target in places where it might be visible to + third parties. Such services ought to use POST-based form submission + instead. + + Since the Referer header field tells a target site about the context + that resulted in a request, it has the potential to reveal + information about the user's immediate browsing history and any + personal information that might be found in the referring resource's + URI. Limitations on the Referer header field are described in + Section 5.5.2 to address some of its security considerations. + + + + + + + + +Fielding & Reschke Standards Track [Page 83] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +9.5. Disclosure of Fragment after Redirects + + Although fragment identifiers used within URI references are not sent + in requests, implementers ought to be aware that they will be visible + to the user agent and any extensions or scripts running as a result + of the response. In particular, when a redirect occurs and the + original request's fragment identifier is inherited by the new + reference in Location (Section 7.1.2), this might have the effect of + disclosing one site's fragment to another site. If the first site + uses personal information in fragments, it ought to ensure that + redirects to other sites include a (possibly empty) fragment + component in order to block that inheritance. + +9.6. Disclosure of Product Information + + The User-Agent (Section 5.5.3), Via (Section 5.7.1 of [RFC7230]), and + Server (Section 7.4.2) header fields often reveal information about + the respective sender's software systems. In theory, this can make + it easier for an attacker to exploit known security holes; in + practice, attackers tend to try all potential holes regardless of the + apparent software versions being used. + + Proxies that serve as a portal through a network firewall ought to + take special precautions regarding the transfer of header information + that might identify hosts behind the firewall. The Via header field + allows intermediaries to replace sensitive machine names with + pseudonyms. + +9.7. Browser Fingerprinting + + Browser fingerprinting is a set of techniques for identifying a + specific user agent over time through its unique set of + characteristics. These characteristics might include information + related to its TCP behavior, feature capabilities, and scripting + environment, though of particular interest here is the set of unique + characteristics that might be communicated via HTTP. Fingerprinting + is considered a privacy concern because it enables tracking of a user + agent's behavior over time without the corresponding controls that + the user might have over other forms of data collection (e.g., + cookies). Many general-purpose user agents (i.e., Web browsers) have + taken steps to reduce their fingerprints. + + There are a number of request header fields that might reveal + information to servers that is sufficiently unique to enable + fingerprinting. The From header field is the most obvious, though it + is expected that From will only be sent when self-identification is + desired by the user. Likewise, Cookie header fields are deliberately + + + + +Fielding & Reschke Standards Track [Page 84] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + designed to enable re-identification, so fingerprinting concerns only + apply to situations where cookies are disabled or restricted by the + user agent's configuration. + + The User-Agent header field might contain enough information to + uniquely identify a specific device, usually when combined with other + characteristics, particularly if the user agent sends excessive + details about the user's system or extensions. However, the source + of unique information that is least expected by users is proactive + negotiation (Section 5.3), including the Accept, Accept-Charset, + Accept-Encoding, and Accept-Language header fields. + + In addition to the fingerprinting concern, detailed use of the + Accept-Language header field can reveal information the user might + consider to be of a private nature. For example, understanding a + given language set might be strongly correlated to membership in a + particular ethnic group. An approach that limits such loss of + privacy would be for a user agent to omit the sending of + Accept-Language except for sites that have been whitelisted, perhaps + via interaction after detecting a Vary header field that indicates + language negotiation might be useful. + + In environments where proxies are used to enhance privacy, user + agents ought to be conservative in sending proactive negotiation + header fields. General-purpose user agents that provide a high + degree of header field configurability ought to inform users about + the loss of privacy that might result if too much detail is provided. + As an extreme privacy measure, proxies could filter the proactive + negotiation header fields in relayed requests. + +10. Acknowledgments + + See Section 10 of [RFC7230]. + +11. References + +11.1. Normative References + + [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail + Extensions (MIME) Part One: Format of Internet Message + Bodies", RFC 2045, November 1996. + + [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail + Extensions (MIME) Part Two: Media Types", RFC 2046, + November 1996. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + + +Fielding & Reschke Standards Track [Page 85] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform + Resource Identifier (URI): Generic Syntax", STD 66, + RFC 3986, January 2005. + + [RFC4647] Phillips, A., Ed. and M. Davis, Ed., "Matching of Language + Tags", BCP 47, RFC 4647, September 2006. + + [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax + Specifications: ABNF", STD 68, RFC 5234, January 2008. + + [RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying + Languages", BCP 47, RFC 5646, September 2009. + + [RFC6365] Hoffman, P. and J. Klensin, "Terminology Used in + Internationalization in the IETF", BCP 166, RFC 6365, + September 2011. + + [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer + Protocol (HTTP/1.1): Message Syntax and Routing", + RFC 7230, June 2014. + + [RFC7232] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer + Protocol (HTTP/1.1): Conditional Requests", RFC 7232, + June 2014. + + [RFC7233] Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed., + "Hypertext Transfer Protocol (HTTP/1.1): Range Requests", + RFC 7233, June 2014. + + [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, + Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", + RFC 7234, June 2014. + + [RFC7235] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer + Protocol (HTTP/1.1): Authentication", RFC 7235, June 2014. + +11.2. Informative References + + [BCP13] Freed, N., Klensin, J., and T. Hansen, "Media Type + Specifications and Registration Procedures", BCP 13, + RFC 6838, January 2013. + + [BCP178] Saint-Andre, P., Crocker, D., and M. Nottingham, + "Deprecating the "X-" Prefix and Similar Constructs in + Application Protocols", BCP 178, RFC 6648, June 2012. + + + + + + +Fielding & Reschke Standards Track [Page 86] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + [BCP90] Klyne, G., Nottingham, M., and J. Mogul, "Registration + Procedures for Message Header Fields", BCP 90, RFC 3864, + September 2004. + + [OWASP] van der Stock, A., Ed., "A Guide to Building Secure Web + Applications and Web Services", The Open Web Application + Security Project (OWASP) 2.0.1, July 2005, + <https://www.owasp.org/>. + + [REST] Fielding, R., "Architectural Styles and the Design of + Network-based Software Architectures", + Doctoral Dissertation, University of California, Irvine, + September 2000, + <http://roy.gbiv.com/pubs/dissertation/top.htm>. + + [RFC1945] Berners-Lee, T., Fielding, R., and H. Nielsen, "Hypertext + Transfer Protocol -- HTTP/1.0", RFC 1945, May 1996. + + [RFC2049] Freed, N. and N. Borenstein, "Multipurpose Internet Mail + Extensions (MIME) Part Five: Conformance Criteria and + Examples", RFC 2049, November 1996. + + [RFC2068] Fielding, R., Gettys, J., Mogul, J., Nielsen, H., and T. + Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", + RFC 2068, January 1997. + + [RFC2295] Holtman, K. and A. Mutz, "Transparent Content Negotiation + in HTTP", RFC 2295, March 1998. + + [RFC2388] Masinter, L., "Returning Values from Forms: multipart/ + form-data", RFC 2388, August 1998. + + [RFC2557] Palme, F., Hopmann, A., Shelness, N., and E. Stefferud, + "MIME Encapsulation of Aggregate Documents, such as HTML + (MHTML)", RFC 2557, March 1999. + + [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., + Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext + Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. + + [RFC2774] Frystyk, H., Leach, P., and S. Lawrence, "An HTTP + Extension Framework", RFC 2774, February 2000. + + [RFC2817] Khare, R. and S. Lawrence, "Upgrading to TLS Within + HTTP/1.1", RFC 2817, May 2000. + + [RFC2978] Freed, N. and J. Postel, "IANA Charset Registration + Procedures", BCP 19, RFC 2978, October 2000. + + + +Fielding & Reschke Standards Track [Page 87] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an + IANA Considerations Section in RFCs", BCP 26, RFC 5226, + May 2008. + + [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security + (TLS) Protocol Version 1.2", RFC 5246, August 2008. + + [RFC5322] Resnick, P., "Internet Message Format", RFC 5322, + October 2008. + + [RFC5789] Dusseault, L. and J. Snell, "PATCH Method for HTTP", + RFC 5789, March 2010. + + [RFC5905] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch, + "Network Time Protocol Version 4: Protocol and Algorithms + Specification", RFC 5905, June 2010. + + [RFC5987] Reschke, J., "Character Set and Language Encoding for + Hypertext Transfer Protocol (HTTP) Header Field + Parameters", RFC 5987, August 2010. + + [RFC5988] Nottingham, M., "Web Linking", RFC 5988, October 2010. + + [RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265, + April 2011. + + [RFC6266] Reschke, J., "Use of the Content-Disposition Header Field + in the Hypertext Transfer Protocol (HTTP)", RFC 6266, + June 2011. + + [RFC7238] Reschke, J., "The Hypertext Transfer Protocol (HTTP) + Status Code 308 (Permanent Redirect)", RFC 7238, + June 2014. + + + + + + + + + + + + + + + + + + +Fielding & Reschke Standards Track [Page 88] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +Appendix A. Differences between HTTP and MIME + + HTTP/1.1 uses many of the constructs defined for the Internet Message + Format [RFC5322] and the Multipurpose Internet Mail Extensions (MIME) + [RFC2045] to allow a message body to be transmitted in an open + variety of representations and with extensible header fields. + However, RFC 2045 is focused only on email; applications of HTTP have + many characteristics that differ from email; hence, HTTP has features + that differ from MIME. These differences were carefully chosen to + optimize performance over binary connections, to allow greater + freedom in the use of new media types, to make date comparisons + easier, and to acknowledge the practice of some early HTTP servers + and clients. + + This appendix describes specific areas where HTTP differs from MIME. + Proxies and gateways to and from strict MIME environments need to be + aware of these differences and provide the appropriate conversions + where necessary. + +A.1. MIME-Version + + HTTP is not a MIME-compliant protocol. However, messages can include + a single MIME-Version header field to indicate what version of the + MIME protocol was used to construct the message. Use of the + MIME-Version header field indicates that the message is in full + conformance with the MIME protocol (as defined in [RFC2045]). + Senders are responsible for ensuring full conformance (where + possible) when exporting HTTP messages to strict MIME environments. + +A.2. Conversion to Canonical Form + + MIME requires that an Internet mail body part be converted to + canonical form prior to being transferred, as described in Section 4 + of [RFC2049]. Section 3.1.1.3 of this document describes the forms + allowed for subtypes of the "text" media type when transmitted over + HTTP. [RFC2046] requires that content with a type of "text" + represent line breaks as CRLF and forbids the use of CR or LF outside + of line break sequences. HTTP allows CRLF, bare CR, and bare LF to + indicate a line break within text content. + + A proxy or gateway from HTTP to a strict MIME environment ought to + translate all line breaks within the text media types described in + Section 3.1.1.3 of this document to the RFC 2049 canonical form of + CRLF. Note, however, this might be complicated by the presence of a + Content-Encoding and by the fact that HTTP allows the use of some + charsets that do not use octets 13 and 10 to represent CR and LF, + respectively. + + + + +Fielding & Reschke Standards Track [Page 89] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + Conversion will break any cryptographic checksums applied to the + original content unless the original content is already in canonical + form. Therefore, the canonical form is recommended for any content + that uses such checksums in HTTP. + +A.3. Conversion of Date Formats + + 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 + 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 + date if necessary. + +A.4. Conversion of Content-Encoding + + MIME does not include any concept equivalent to HTTP/1.1's + Content-Encoding header field. Since this acts as a modifier on the + media type, proxies and gateways from HTTP to MIME-compliant + protocols ought to either change the value of the Content-Type header + field or decode the representation before forwarding the message. + (Some experimental applications of Content-Type for Internet mail + have used a media-type parameter of ";conversions=<content-coding>" + to perform a function equivalent to Content-Encoding. However, this + parameter is not part of the MIME standards). + +A.5. Conversion of Content-Transfer-Encoding + + HTTP does not use the Content-Transfer-Encoding field of MIME. + Proxies and gateways from MIME-compliant protocols to HTTP need to + remove any Content-Transfer-Encoding prior to delivering the response + message to an HTTP client. + + Proxies and gateways from HTTP to MIME-compliant protocols are + responsible for ensuring that the message is in the correct format + and encoding for safe transport on that protocol, where "safe + transport" is defined by the limitations of the protocol being used. + Such a proxy or gateway ought to transform and label the data with an + appropriate Content-Transfer-Encoding if doing so will improve the + likelihood of safe transport over the destination protocol. + +A.6. MHTML and Line Length Limitations + + HTTP implementations that share code with MHTML [RFC2557] + implementations need to be aware of MIME line length limitations. + Since HTTP does not have this limitation, HTTP does not fold long + lines. MHTML messages being transported by HTTP follow all + conventions of MHTML, including line length limitations and folding, + canonicalization, etc., since HTTP transfers message-bodies as + + + +Fielding & Reschke Standards Track [Page 90] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + payload and, aside from the "multipart/byteranges" type (Appendix A + of [RFC7233]), does not interpret the content or any MIME header + lines that might be contained therein. + +Appendix B. Changes from RFC 2616 + + The primary changes in this revision have been editorial in nature: + extracting the messaging syntax and partitioning HTTP semantics into + separate documents for the core features, conditional requests, + partial requests, caching, and authentication. The conformance + language has been revised to clearly target requirements and the + terminology has been improved to distinguish payload from + representations and representations from resources. + + A new requirement has been added that semantics embedded in a URI be + disabled when those semantics are inconsistent with the request + method, since this is a common cause of interoperability failure. + (Section 2) + + An algorithm has been added for determining if a payload is + associated with a specific identifier. (Section 3.1.4.1) + + The default charset of ISO-8859-1 for text media types has been + removed; the default is now whatever the media type definition says. + Likewise, special treatment of ISO-8859-1 has been removed from the + Accept-Charset header field. (Section 3.1.1.3 and Section 5.3.3) + + The definition of Content-Location has been changed to no longer + affect the base URI for resolving relative URI references, due to + poor implementation support and the undesirable effect of potentially + breaking relative links in content-negotiated resources. + (Section 3.1.4.2) + + To be consistent with the method-neutral parsing algorithm of + [RFC7230], the definition of GET has been relaxed so that requests + can have a body, even though a body has no meaning for GET. + (Section 4.3.1) + + Servers are no longer required to handle all Content-* header fields + and use of Content-Range has been explicitly banned in PUT requests. + (Section 4.3.4) + + Definition of the CONNECT method has been moved from [RFC2817] to + this specification. (Section 4.3.6) + + The OPTIONS and TRACE request methods have been defined as being + safe. (Section 4.3.7 and Section 4.3.8) + + + + +Fielding & Reschke Standards Track [Page 91] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + The Expect header field's extension mechanism has been removed due to + widely-deployed broken implementations. (Section 5.1.1) + + The Max-Forwards header field has been restricted to the OPTIONS and + TRACE methods; previously, extension methods could have used it as + well. (Section 5.1.2) + + The "about:blank" URI has been suggested as a value for the Referer + header field when no referring URI is applicable, which distinguishes + that case from others where the Referer field is not sent or has been + removed. (Section 5.5.2) + + The following status codes are now cacheable (that is, they can be + stored and reused by a cache without explicit freshness information + present): 204, 404, 405, 414, 501. (Section 6) + + The 201 (Created) status description has been changed to allow for + the possibility that more than one resource has been created. + (Section 6.3.2) + + The definition of 203 (Non-Authoritative Information) has been + broadened to include cases of payload transformations as well. + (Section 6.3.4) + + The set of request methods that are safe to automatically redirect is + no longer closed; user agents are able to make that determination + based upon the request method semantics. The redirect status codes + 301, 302, and 307 no longer have normative requirements on response + payloads and user interaction. (Section 6.4) + + The status codes 301 and 302 have been changed to allow user agents + to rewrite the method from POST to GET. (Sections 6.4.2 and 6.4.3) + + The description of the 303 (See Other) status code has been changed + to allow it to be cached if explicit freshness information is given, + and a specific definition has been added for a 303 response to GET. + (Section 6.4.4) + + The 305 (Use Proxy) status code has been deprecated due to security + concerns regarding in-band configuration of a proxy. (Section 6.4.5) + + The 400 (Bad Request) status code has been relaxed so that it isn't + limited to syntax errors. (Section 6.5.1) + + The 426 (Upgrade Required) status code has been incorporated from + [RFC2817]. (Section 6.5.15) + + + + + +Fielding & Reschke Standards Track [Page 92] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + The target of requirements on HTTP-date and the Date header field + have been reduced to those systems generating the date, rather than + all systems sending a date. (Section 7.1.1) + + The syntax of the Location header field has been changed to allow all + URI references, including relative references and fragments, along + with some clarifications as to when use of fragments would not be + appropriate. (Section 7.1.2) + + Allow has been reclassified as a response header field, removing the + option to specify it in a PUT request. Requirements relating to the + content of Allow have been relaxed; correspondingly, clients are not + required to always trust its value. (Section 7.4.1) + + A Method Registry has been defined. (Section 8.1) + + The Status Code Registry has been redefined by this specification; + previously, it was defined in Section 7.1 of [RFC2817]. + (Section 8.2) + + Registration of content codings has been changed to require IETF + Review. (Section 8.4) + + The Content-Disposition header field has been removed since it is now + defined by [RFC6266]. + + The Content-MD5 header field has been removed because it was + inconsistently implemented with respect to partial responses. + +Appendix C. Imported ABNF + + The following core rules are included by reference, as defined in + Appendix B.1 of [RFC5234]: ALPHA (letters), CR (carriage return), + CRLF (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double + quote), HEXDIG (hexadecimal 0-9/A-F/a-f), HTAB (horizontal tab), LF + (line feed), OCTET (any 8-bit sequence of data), SP (space), and + VCHAR (any visible US-ASCII character). + + The rules below are defined in [RFC7230]: + + BWS = <BWS, see [RFC7230], Section 3.2.3> + OWS = <OWS, see [RFC7230], Section 3.2.3> + RWS = <RWS, see [RFC7230], Section 3.2.3> + URI-reference = <URI-reference, see [RFC7230], Section 2.7> + absolute-URI = <absolute-URI, see [RFC7230], Section 2.7> + comment = <comment, see [RFC7230], Section 3.2.6> + field-name = <comment, see [RFC7230], Section 3.2> + partial-URI = <partial-URI, see [RFC7230], Section 2.7> + + + +Fielding & Reschke Standards Track [Page 93] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + quoted-string = <quoted-string, see [RFC7230], Section 3.2.6> + token = <token, see [RFC7230], Section 3.2.6> + +Appendix D. Collected ABNF + + In the collected ABNF below, list rules are expanded as per Section + 1.2 of [RFC7230]. + + Accept = [ ( "," / ( media-range [ accept-params ] ) ) *( OWS "," [ + OWS ( media-range [ accept-params ] ) ] ) ] + Accept-Charset = *( "," OWS ) ( ( charset / "*" ) [ weight ] ) *( OWS + "," [ OWS ( ( charset / "*" ) [ weight ] ) ] ) + Accept-Encoding = [ ( "," / ( codings [ weight ] ) ) *( OWS "," [ OWS + ( codings [ weight ] ) ] ) ] + Accept-Language = *( "," OWS ) ( language-range [ weight ] ) *( OWS + "," [ OWS ( language-range [ weight ] ) ] ) + Allow = [ ( "," / method ) *( OWS "," [ OWS method ] ) ] + + BWS = <BWS, see [RFC7230], Section 3.2.3> + + Content-Encoding = *( "," OWS ) content-coding *( OWS "," [ OWS + content-coding ] ) + Content-Language = *( "," OWS ) language-tag *( OWS "," [ OWS + language-tag ] ) + Content-Location = absolute-URI / partial-URI + Content-Type = media-type + + Date = HTTP-date + + Expect = "100-continue" + + From = mailbox + + GMT = %x47.4D.54 ; GMT + + HTTP-date = IMF-fixdate / obs-date + + IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT + + Location = URI-reference + + Max-Forwards = 1*DIGIT + + OWS = <OWS, see [RFC7230], Section 3.2.3> + + RWS = <RWS, see [RFC7230], Section 3.2.3> + Referer = absolute-URI / partial-URI + Retry-After = HTTP-date / delay-seconds + + + +Fielding & Reschke Standards Track [Page 94] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + Server = product *( RWS ( product / comment ) ) + + URI-reference = <URI-reference, see [RFC7230], Section 2.7> + User-Agent = product *( RWS ( product / comment ) ) + + Vary = "*" / ( *( "," OWS ) field-name *( OWS "," [ OWS field-name ] + ) ) + + absolute-URI = <absolute-URI, see [RFC7230], Section 2.7> + accept-ext = OWS ";" OWS token [ "=" ( token / quoted-string ) ] + accept-params = weight *accept-ext + asctime-date = day-name SP date3 SP time-of-day SP year + + charset = token + codings = content-coding / "identity" / "*" + comment = <comment, see [RFC7230], Section 3.2.6> + content-coding = token + + date1 = day SP month SP year + date2 = day "-" month "-" 2DIGIT + date3 = month SP ( 2DIGIT / ( SP DIGIT ) ) + day = 2DIGIT + day-name = %x4D.6F.6E ; Mon + / %x54.75.65 ; Tue + / %x57.65.64 ; Wed + / %x54.68.75 ; Thu + / %x46.72.69 ; Fri + / %x53.61.74 ; Sat + / %x53.75.6E ; Sun + day-name-l = %x4D.6F.6E.64.61.79 ; Monday + / %x54.75.65.73.64.61.79 ; Tuesday + / %x57.65.64.6E.65.73.64.61.79 ; Wednesday + / %x54.68.75.72.73.64.61.79 ; Thursday + / %x46.72.69.64.61.79 ; Friday + / %x53.61.74.75.72.64.61.79 ; Saturday + / %x53.75.6E.64.61.79 ; Sunday + delay-seconds = 1*DIGIT + + field-name = <comment, see [RFC7230], Section 3.2> + + hour = 2DIGIT + + language-range = <language-range, see [RFC4647], Section 2.1> + language-tag = <Language-Tag, see [RFC5646], Section 2.1> + + mailbox = <mailbox, see [RFC5322], Section 3.4> + media-range = ( "*/*" / ( type "/*" ) / ( type "/" subtype ) ) *( OWS + ";" OWS parameter ) + + + +Fielding & Reschke Standards Track [Page 95] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + media-type = type "/" subtype *( OWS ";" OWS parameter ) + method = token + minute = 2DIGIT + month = %x4A.61.6E ; Jan + / %x46.65.62 ; Feb + / %x4D.61.72 ; Mar + / %x41.70.72 ; Apr + / %x4D.61.79 ; May + / %x4A.75.6E ; Jun + / %x4A.75.6C ; Jul + / %x41.75.67 ; Aug + / %x53.65.70 ; Sep + / %x4F.63.74 ; Oct + / %x4E.6F.76 ; Nov + / %x44.65.63 ; Dec + + obs-date = rfc850-date / asctime-date + + parameter = token "=" ( token / quoted-string ) + partial-URI = <partial-URI, see [RFC7230], Section 2.7> + product = token [ "/" product-version ] + product-version = token + quoted-string = <quoted-string, see [RFC7230], Section 3.2.6> + qvalue = ( "0" [ "." *3DIGIT ] ) / ( "1" [ "." *3"0" ] ) + + rfc850-date = day-name-l "," SP date2 SP time-of-day SP GMT + + second = 2DIGIT + subtype = token + + time-of-day = hour ":" minute ":" second + token = <token, see [RFC7230], Section 3.2.6> + type = token + + weight = OWS ";" OWS "q=" qvalue + + year = 4DIGIT + + + + + + + + + + + + + + +Fielding & Reschke Standards Track [Page 96] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + +Index + + 1 + 1xx Informational (status code class) 50 + + 2 + 2xx Successful (status code class) 51 + + 3 + 3xx Redirection (status code class) 54 + + 4 + 4xx Client Error (status code class) 58 + + 5 + 5xx Server Error (status code class) 62 + + 1 + 100 Continue (status code) 50 + 100-continue (expect value) 34 + 101 Switching Protocols (status code) 50 + + 2 + 200 OK (status code) 51 + 201 Created (status code) 52 + 202 Accepted (status code) 52 + 203 Non-Authoritative Information (status code) 52 + 204 No Content (status code) 53 + 205 Reset Content (status code) 53 + + 3 + 300 Multiple Choices (status code) 55 + 301 Moved Permanently (status code) 56 + 302 Found (status code) 56 + 303 See Other (status code) 57 + 305 Use Proxy (status code) 58 + 306 (Unused) (status code) 58 + 307 Temporary Redirect (status code) 58 + + 4 + 400 Bad Request (status code) 58 + 402 Payment Required (status code) 59 + 403 Forbidden (status code) 59 + 404 Not Found (status code) 59 + 405 Method Not Allowed (status code) 59 + 406 Not Acceptable (status code) 59 + 408 Request Timeout (status code) 60 + 409 Conflict (status code) 60 + + + +Fielding & Reschke Standards Track [Page 97] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + 410 Gone (status code) 60 + 411 Length Required (status code) 61 + 413 Payload Too Large (status code) 61 + 414 URI Too Long (status code) 61 + 415 Unsupported Media Type (status code) 62 + 417 Expectation Failed (status code) 62 + 426 Upgrade Required (status code) 62 + + 5 + 500 Internal Server Error (status code) 63 + 501 Not Implemented (status code) 63 + 502 Bad Gateway (status code) 63 + 503 Service Unavailable (status code) 63 + 504 Gateway Timeout (status code) 63 + 505 HTTP Version Not Supported (status code) 64 + + A + Accept header field 38 + Accept-Charset header field 40 + Accept-Encoding header field 41 + Accept-Language header field 42 + Allow header field 72 + + C + cacheable 24 + compress (content coding) 11 + conditional request 36 + CONNECT method 30 + content coding 11 + content negotiation 6 + Content-Encoding header field 12 + Content-Language header field 13 + Content-Location header field 15 + Content-Transfer-Encoding header field 89 + Content-Type header field 10 + + D + Date header field 67 + deflate (content coding) 11 + DELETE method 29 + + E + Expect header field 34 + + F + From header field 44 + + + + + +Fielding & Reschke Standards Track [Page 98] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + G + GET method 24 + Grammar + Accept 38 + Accept-Charset 40 + Accept-Encoding 41 + accept-ext 38 + Accept-Language 42 + accept-params 38 + Allow 72 + asctime-date 66 + charset 9 + codings 41 + content-coding 11 + Content-Encoding 12 + Content-Language 13 + Content-Location 15 + Content-Type 10 + Date 67 + date1 65 + day 65 + day-name 65 + day-name-l 65 + delay-seconds 69 + Expect 34 + From 44 + GMT 65 + hour 65 + HTTP-date 65 + IMF-fixdate 65 + language-range 42 + language-tag 13 + Location 68 + Max-Forwards 36 + media-range 38 + media-type 8 + method 21 + minute 65 + month 65 + obs-date 66 + parameter 8 + product 46 + product-version 46 + qvalue 38 + Referer 45 + Retry-After 69 + rfc850-date 66 + second 65 + + + +Fielding & Reschke Standards Track [Page 99] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + Server 73 + subtype 8 + time-of-day 65 + type 8 + User-Agent 46 + Vary 70 + weight 38 + year 65 + gzip (content coding) 11 + + H + HEAD method 25 + + I + idempotent 23 + + L + Location header field 68 + + M + Max-Forwards header field 36 + MIME-Version header field 89 + + O + OPTIONS method 31 + + P + payload 17 + POST method 25 + PUT method 26 + + R + Referer header field 45 + representation 7 + Retry-After header field 69 + + S + safe 22 + selected representation 7, 71 + Server header field 73 + Status Codes Classes + 1xx Informational 50 + 2xx Successful 51 + 3xx Redirection 54 + 4xx Client Error 58 + 5xx Server Error 62 + + + + + +Fielding & Reschke Standards Track [Page 100] + +RFC 7231 HTTP/1.1 Semantics and Content June 2014 + + + T + TRACE method 32 + + U + User-Agent header field 46 + + V + Vary header field 70 + + X + x-compress (content coding) 11 + x-gzip (content coding) 11 + +Authors' Addresses + + Roy T. Fielding (editor) + Adobe Systems Incorporated + 345 Park Ave + San Jose, CA 95110 + USA + + EMail: fielding@gbiv.com + URI: http://roy.gbiv.com/ + + + Julian F. Reschke (editor) + greenbytes GmbH + Hafenweg 16 + Muenster, NW 48155 + Germany + + EMail: julian.reschke@greenbytes.de + URI: http://greenbytes.de/tech/webdav/ + + + + + + + + + + + + + + + + + + +Fielding & Reschke Standards Track [Page 101] + |