aboutsummaryrefslogtreecommitdiff
path: root/rfc/rfc7231.txt
diff options
context:
space:
mode:
Diffstat (limited to 'rfc/rfc7231.txt')
-rw-r--r--rfc/rfc7231.txt5659
1 files changed, 5659 insertions, 0 deletions
diff --git a/rfc/rfc7231.txt b/rfc/rfc7231.txt
new file mode 100644
index 0000000..ea0a562
--- /dev/null
+++ b/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]
+