| rfc9110v2.xml | rfc9110v3.xml | |||||
|---|---|---|---|---|---|---|
| skipping to change at line 170 ¶ | skipping to change at line 170 ¶ | |||||
| </section> | </section> | |||||
| <section anchor="history.and.evolution" title="History and Evolution"> | <section anchor="history.and.evolution" title="History and Evolution"> | |||||
| <t> | <t> | |||||
| HTTP has been the primary information transfer protocol for the World | HTTP has been the primary information transfer protocol for the World | |||||
| Wide Web since its introduction in 1990. It began as a trivial | Wide Web since its introduction in 1990. It began as a trivial | |||||
| mechanism for low-latency requests, with a single method (GET) to | mechanism for low-latency requests, with a single method (GET) to | |||||
| request transfer of a presumed hypertext document identified by a given pathname. | request transfer of a presumed hypertext document identified by a given pathname. | |||||
| As the Web grew, HTTP was extended to enclose requests and responses within | As the Web grew, HTTP was extended to enclose requests and responses within | |||||
| messages, transfer arbitrary data formats using MIME-like media types, and | messages, transfer arbitrary data formats using MIME-like media types, and | |||||
| route requests through intermediaries. These protocols were eventually | route requests through intermediaries. These protocols were eventually | |||||
| defined as HTTP/0.9 and HTTP/1.0 (see <xref/>). | defined as HTTP/0.9 and HTTP/1.0 (see <xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| HTTP/1.1 was designed to refine the protocol's features while retaining | HTTP/1.1 was designed to refine the protocol's features while retaining | |||||
| compatibility with the existing text-based messaging syntax, improving | compatibility with the existing text-based messaging syntax, improving | |||||
| its interoperability, scalability, and robustness across the Internet. | its interoperability, scalability, and robustness across the Internet. | |||||
| This included length-based data delimiters for both fixed and dynamic | This included length-based data delimiters for both fixed and dynamic | |||||
| (chunked) content, a consistent framework for content negotiation, | (chunked) content, a consistent framework for content negotiation, | |||||
| opaque validators for conditional requests, cache controls for better | opaque validators for conditional requests, cache controls for better | |||||
| cache consistency, range requests for partial updates, and default | cache consistency, range requests for partial updates, and default | |||||
| persistent connections. HTTP/1.1 was introduced in 1995 and published on | persistent connections. HTTP/1.1 was introduced in 1995 and published on | |||||
| the Standards Track in 1997 <xref/>, revised in | the Standards Track in 1997 <xref/>, revised in | |||||
| 1999 <xref/>, and revised again in 2014 | 1999 <xref/>, and revised again in 2014 | |||||
| (<xref/> through <xref/>). | (<xref/> through <xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| HTTP/2 <xref/> introduced a multiplexed session layer | HTTP/2 <xref/> introduced a multiplexed session layer | |||||
| on top of the existing TLS and TCP protocols for exchanging concurrent | on top of the existing TLS and TCP protocols for exchanging concurrent | |||||
| HTTP messages with efficient field compression and server push. | HTTP messages with efficient field compression and server push. | |||||
| HTTP/3 <xref/> provides greater independence for concurrent | HTTP/3 <xref/> provides greater independence for concurrent | |||||
| messages by using QUIC as a secure multiplexed transport over UDP instead of | messages by using QUIC as a secure multiplexed transport over UDP instead of | |||||
| TCP. | TCP. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| All three major versions of HTTP rely on the semantics defined by | All three major versions of HTTP rely on the semantics defined by | |||||
| this document. They have not obsoleted each other because each one has | this document. They have not obsoleted each other because each one has | |||||
| specific benefits and limitations depending on the context of use. | specific benefits and limitations depending on the context of use. | |||||
| Implementations are expected to choose the most appropriate transport and | Implementations are expected to choose the most appropriate transport and | |||||
| messaging syntax for their particular context. | messaging syntax for their particular context. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| This revision of HTTP separates the definition of semantics (this document) | This revision of HTTP separates the definition of semantics (this document) | |||||
| and caching <xreftarget="RFC9111"/> from the current HTTP/1.1 messaging | and caching <xreftarget="CACHING"/> from the current HTTP/1.1 messaging | |||||
| syntax <xreftarget="RFC9112"/> to allow each major protocol version | syntax <xreftarget="HTTP11"/> to allow each major protocol version | |||||
| to progress independently while referring to the same core semantics. | to progress independently while referring to the same core semantics. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="core.semantics" title="Core Semantics"> | <section anchor="core.semantics" title="Core Semantics"> | |||||
| <t> | <t> | |||||
| HTTP provides a uniform interface for interacting with a resource | HTTP provides a uniform interface for interacting with a resource | |||||
| (<xref/>) -- regardless of its type, nature, or | (<xref/>) -- regardless of its type, nature, or | |||||
| implementation -- by sending messages that manipulate or transfer | implementation -- by sending messages that manipulate or transfer | |||||
| representations (<xref/>). | representations (<xref/>). | |||||
| </t> | </t> | |||||
| skipping to change at line 344 ¶ | skipping to change at line 344 ¶ | |||||
| <xref format="counter"/> | <xref format="counter"/> | |||||
| </td> | </td> | |||||
| </tr> | </tr> | |||||
| </tbody> | </tbody> | |||||
| </table> | </table> | |||||
| <t> | <t> | |||||
| [*] This document only obsoletes the portions of | [*] This document only obsoletes the portions of | |||||
| <xref format="none">RFC 7230</xref> that are independent of | <xref format="none">RFC 7230</xref> that are independent of | |||||
| the HTTP/1.1 messaging syntax and connection management; the remaining | the HTTP/1.1 messaging syntax and connection management; the remaining | |||||
| bits of <xref format="none">RFC 7230</xref> are | bits of <xref format="none">RFC 7230</xref> are | |||||
| obsoleted by "HTTP/1.1" <xref/>. | obsoleted by "HTTP/1.1" <xref/>. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| </section> | </section> | |||||
| <section anchor="conformance" title="Conformance"> | <section anchor="conformance" title="Conformance"> | |||||
| <section anchor="notation" title="Syntax Notation"> | <section anchor="notation" title="Syntax Notation"> | |||||
| <iref primary="true" item="Grammar" subitem="ALPHA"/> | <iref primary="true" item="Grammar" subitem="ALPHA"/> | |||||
| <iref primary="true" item="Grammar" subitem="CR"/> | <iref primary="true" item="Grammar" subitem="CR"/> | |||||
| <iref primary="true" item="Grammar" subitem="CRLF"/> | <iref primary="true" item="Grammar" subitem="CRLF"/> | |||||
| <iref primary="true" item="Grammar" subitem="CTL"/> | <iref primary="true" item="Grammar" subitem="CTL"/> | |||||
| <iref primary="true" item="Grammar" subitem="DIGIT"/> | <iref primary="true" item="Grammar" subitem="DIGIT"/> | |||||
| skipping to change at line 540 ¶ | skipping to change at line 540 ¶ | |||||
| HTTP version number changes when incompatible changes are made to the wire | HTTP version number changes when incompatible changes are made to the wire | |||||
| format. Additionally, HTTP allows incremental, backwards-compatible | format. Additionally, HTTP allows incremental, backwards-compatible | |||||
| changes to be made to the protocol without changing its version through | changes to be made to the protocol without changing its version through | |||||
| the use of defined extension points (<xref/>). | the use of defined extension points (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The protocol version as a whole indicates the sender's conformance with | The protocol version as a whole indicates the sender's conformance with | |||||
| the set of requirements laid out in that version's corresponding | the set of requirements laid out in that version's corresponding | |||||
| specification of HTTP. | specification of HTTP. | |||||
| For example, the version "HTTP/1.1" is defined by the combined | For example, the version "HTTP/1.1" is defined by the combined | |||||
| specifications of this document, "HTTP Caching" <xreftarget="RFC9111"/>, | specifications of this document, "HTTP Caching" <xreftarget="CACHING"/>, | |||||
| and "HTTP/1.1" <xreftarget="RFC9112"/>. | and "HTTP/1.1" <xreftarget="HTTP11"/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| HTTP's major version number is incremented when an incompatible message | HTTP's major version number is incremented when an incompatible message | |||||
| syntax is introduced. The minor number is incremented when changes made to | syntax is introduced. The minor number is incremented when changes made to | |||||
| the protocol have the effect of adding to the message semantics or | the protocol have the effect of adding to the message semantics or | |||||
| implying additional capabilities of the sender. | implying additional capabilities of the sender. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The minor version advertises the sender's communication capabilities even | The minor version advertises the sender's communication capabilities even | |||||
| when the sender is only using a backwards-compatible subset of the | when the sender is only using a backwards-compatible subset of the | |||||
| skipping to change at line 591 ¶ | skipping to change at line 591 ¶ | |||||
| semantics in the request method (<xref/>) and a few | semantics in the request method (<xref/>) and a few | |||||
| request-modifying header fields. | request-modifying header fields. | |||||
| A resource cannot treat a request in a manner inconsistent with the | A resource cannot treat a request in a manner inconsistent with the | |||||
| semantics of the method of the request. For example, though the URI of a | semantics of the method of the request. For example, though the URI of a | |||||
| resource might imply semantics that are not safe, a client can expect the | resource might imply semantics that are not safe, a client can expect the | |||||
| resource to avoid actions that are unsafe when processing a request with a | resource to avoid actions that are unsafe when processing a request with a | |||||
| safe method (see <xref/>). | safe method (see <xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| HTTP relies upon the Uniform Resource Identifier (URI) | HTTP relies upon the Uniform Resource Identifier (URI) | |||||
| standard <xref/> to indicate the target resource | standard <xref/> to indicate the target resource | |||||
| (<xref/>) and relationships between resources. | (<xref/>) and relationships between resources. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="representations" title="Representations"> | <section anchor="representations" title="Representations"> | |||||
| <iref primary="true" item="representation"/> | <iref primary="true" item="representation"/> | |||||
| <t> | <t> | |||||
| A <em>representation</em> is information | A <em>representation</em> is information | |||||
| that is intended to reflect a past, current, or desired state of a given | 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. | resource, in a format that can be readily communicated via the protocol. | |||||
| A representation consists of a set of representation metadata and a | A representation consists of a set of representation metadata and a | |||||
| skipping to change at line 870 ¶ | skipping to change at line 870 ¶ | |||||
| to user agent requirements on the gateway's inbound connection. | to user agent requirements on the gateway's inbound connection. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| <iref primary="true" item="tunnel"/> | <iref primary="true" item="tunnel"/> | |||||
| A <em>tunnel</em> acts as a blind relay between two connections | A <em>tunnel</em> acts as a blind relay between two connections | |||||
| without changing the messages. Once active, a tunnel is not | without changing the messages. Once active, a tunnel is not | |||||
| considered a party to the HTTP communication, though the tunnel might | considered a party to the HTTP communication, though the tunnel might | |||||
| have been initiated by an HTTP request. A tunnel ceases to exist when | have been initiated by an HTTP request. A tunnel ceases to exist when | |||||
| both ends of the relayed connection are closed. Tunnels are used to | both ends of the relayed connection are closed. Tunnels are used to | |||||
| extend a virtual connection through an intermediary, such as when | extend a virtual connection through an intermediary, such as when | |||||
| Transport Layer Security (TLS, <xref/>) is used to | Transport Layer Security (TLS, <xref/>) is used to | |||||
| establish confidential communication through a shared firewall proxy. | establish confidential communication through a shared firewall proxy. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The above categories for intermediary only consider those acting as | The above categories for intermediary only consider those acting as | |||||
| participants in the HTTP communication. There are also intermediaries | participants in the HTTP communication. There are also intermediaries | |||||
| that can act on lower layers of the network protocol stack, filtering or | that can act on lower layers of the network protocol stack, filtering or | |||||
| redirecting HTTP traffic without the knowledge or permission of message | redirecting HTTP traffic without the knowledge or permission of message | |||||
| senders. Network intermediaries are indistinguishable (at a protocol level) | senders. Network intermediaries are indistinguishable (at a protocol level) | |||||
| from an on-path attacker, often introducing security flaws or | from an on-path attacker, often introducing security flaws or | |||||
| interoperability problems due to mistakenly violating HTTP semantics. | interoperability problems due to mistakenly violating HTTP semantics. | |||||
| skipping to change at line 932 ¶ | skipping to change at line 932 ¶ | |||||
| ]]></artwork> | ]]></artwork> | |||||
| </figure> | </figure> | |||||
| <t> | <t> | |||||
| <iref primary="true" item="cacheable"/> | <iref primary="true" item="cacheable"/> | |||||
| A response is <em>cacheable</em> if a cache is allowed to store a copy of | A response is <em>cacheable</em> if a cache is allowed to store a copy of | |||||
| the response message for use in answering subsequent requests. | the response message for use in answering subsequent requests. | |||||
| Even when a response is cacheable, there might be additional | Even when a response is cacheable, there might be additional | |||||
| constraints placed by the client or by the origin server on when | constraints placed by the client or by the origin server on when | |||||
| that cached response can be used for a particular request. HTTP | that cached response can be used for a particular request. HTTP | |||||
| requirements for cache behavior and cacheable responses are | requirements for cache behavior and cacheable responses are | |||||
| defined in <xref/>. | defined in <xref/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| There is a wide variety of architectures and configurations | There is a wide variety of architectures and configurations | |||||
| of caches deployed across the World Wide Web and | of caches deployed across the World Wide Web and | |||||
| inside large organizations. These include national hierarchies | inside large organizations. These include national hierarchies | |||||
| of proxy caches to save bandwidth and reduce latency, content delivery | of proxy caches to save bandwidth and reduce latency, content delivery | |||||
| networks that use gateway caching to optimize regional and global distribution of popular sites, | networks that use gateway caching to optimize regional and global distribution of popular sites, | |||||
| collaborative systems that | collaborative systems that | |||||
| broadcast or multicast cache entries, archives of pre-fetched cache | broadcast or multicast cache entries, archives of pre-fetched cache | |||||
| entries for use in off-line or high-latency environments, and so on. | entries for use in off-line or high-latency environments, and so on. | |||||
| skipping to change at line 981 ¶ | skipping to change at line 981 ¶ | |||||
| Content-Type: text/plain | Content-Type: text/plain | |||||
| Hello World! My content includes a trailing CRLF. | Hello World! My content includes a trailing CRLF. | |||||
| ]]></sourcecode> | ]]></sourcecode> | |||||
| </section> | </section> | |||||
| </section> | </section> | |||||
| <section anchor="uri" title="Identifiers in HTTP"> | <section anchor="uri" title="Identifiers in HTTP"> | |||||
| <iref primary="true" item="URI"/> | <iref primary="true" item="URI"/> | |||||
| <iref primary="false" item="resource"/> | <iref primary="false" item="resource"/> | |||||
| <t> | <t> | |||||
| Uniform Resource Identifiers (URIs) <xref/> are used | Uniform Resource Identifiers (URIs) <xref/> are used | |||||
| throughout HTTP as the means for identifying resources (<xref/>). | throughout HTTP as the means for identifying resources (<xref/>). | |||||
| </t> | </t> | |||||
| <section anchor="uri.references" title="URI References"> | <section anchor="uri.references" title="URI References"> | |||||
| <iref primary="true" item="URI reference"/> | <iref primary="true" item="URI reference"/> | |||||
| <t> | <t> | |||||
| URI references are used to target requests, indicate redirects, and define | URI references are used to target requests, indicate redirects, and define | |||||
| relationships. | relationships. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The definitions of "URI-reference", | The definitions of "URI-reference", | |||||
| skipping to change at line 1120 ¶ | skipping to change at line 1120 ¶ | |||||
| whether or not that server currently maps that identifier to a resource. | whether or not that server currently maps that identifier to a resource. | |||||
| The delegated nature of registered names and IP addresses creates a | The delegated nature of registered names and IP addresses creates a | |||||
| federated namespace whether or not an HTTP server is present. | federated namespace whether or not an HTTP server is present. | |||||
| </t> | </t> | |||||
| <section anchor="http.uri" title="http URI Scheme"> | <section anchor="http.uri" title="http URI Scheme"> | |||||
| <iref item="http URI scheme" primary="true"/> | <iref item="http URI scheme" primary="true"/> | |||||
| <iref item="URI scheme" subitem="http" primary="true"/> | <iref item="URI scheme" subitem="http" primary="true"/> | |||||
| <t> | <t> | |||||
| The "http" URI scheme is hereby defined for minting identifiers within the | The "http" URI scheme is hereby defined for minting identifiers within the | |||||
| hierarchical namespace governed by a potential HTTP origin server | hierarchical namespace governed by a potential HTTP origin server | |||||
| listening for TCP <xref/> connections on a given port. | listening for TCP <xref/> connections on a given port. | |||||
| </t> | </t> | |||||
| <iref primary="true" item="Grammar" subitem="http-URI"/> | <iref primary="true" item="Grammar" subitem="http-URI"/> | |||||
| <sourcecode type="abnf7230"><![CDATA[ http-URI = "http" "://" authority path-abempty [ "?" query ] | <sourcecode type="abnf7230"><![CDATA[ http-URI = "http" "://" authority path-abempty [ "?" query ] | |||||
| ]]></sourcecode> | ]]></sourcecode> | |||||
| <t> | <t> | |||||
| The origin server for an "http" URI is identified by the | The origin server for an "http" URI is identified by the | |||||
| <xref format="none">authority</xref> component, which includes a host identifier | <xref format="none">authority</xref> component, which includes a host identifier | |||||
| (<xreftarget="RFC3986" sectionFormat="comma" section="3.2.2"/>) | (<xreftarget="URI" sectionFormat="comma" section="3.2.2"/>) | |||||
| and optional port number (<xreftarget="RFC3986" sectionFormat="comma"sectio | and optional port number (<xreftarget="URI" sectionFormat="comma"section="3 | |||||
| n="3.2.3"/>). | .2.3"/>). | |||||
| If the port subcomponent is empty or not given, TCP port 80 (the | If the port subcomponent is empty or not given, TCP port 80 (the | |||||
| reserved port for WWW services) is the default. | reserved port for WWW services) is the default. | |||||
| The origin determines who has the right to respond authoritatively to | The origin determines who has the right to respond authoritatively to | |||||
| requests that target the identified resource, as defined in | requests that target the identified resource, as defined in | |||||
| <xref/>. | <xref/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A sender <bcp14>MUST NOT</bcp14> generate an "http" URI with an empty host identifier. | A sender <bcp14>MUST NOT</bcp14> generate an "http" URI with an empty host identifier. | |||||
| A recipient that processes such a URI reference <bcp14>MUST</bcp14> reject it as invalid. | A recipient that processes such a URI reference <bcp14>MUST</bcp14> reject it as invalid. | |||||
| </t> | </t> | |||||
| skipping to change at line 1154 ¶ | skipping to change at line 1154 ¶ | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="https.uri" title="https URI Scheme"> | <section anchor="https.uri" title="https URI Scheme"> | |||||
| <iref item="https URI scheme" primary="true"/> | <iref item="https URI scheme" primary="true"/> | |||||
| <iref item="URI scheme" subitem="https" primary="true"/> | <iref item="URI scheme" subitem="https" primary="true"/> | |||||
| <iref item="secured" primary="true"/> | <iref item="secured" primary="true"/> | |||||
| <t> | <t> | |||||
| The "https" URI scheme is hereby defined for minting identifiers within the | The "https" URI scheme is hereby defined for minting identifiers within the | |||||
| hierarchical namespace governed by a potential origin server listening for | hierarchical namespace governed by a potential origin server listening for | |||||
| TCP connections on a given port and capable of establishing a TLS | TCP connections on a given port and capable of establishing a TLS | |||||
| <xref/> connection that has been secured for HTTP | <xref/> connection that has been secured for HTTP | |||||
| communication. In this context, <em>secured</em> specifically | communication. In this context, <em>secured</em> specifically | |||||
| means that the server has been authenticated as acting on behalf of the | means that the server has been authenticated as acting on behalf of the | |||||
| identified authority and all HTTP communication with that server has | identified authority and all HTTP communication with that server has | |||||
| confidentiality and integrity protection that is acceptable to both client | confidentiality and integrity protection that is acceptable to both client | |||||
| and server. | and server. | |||||
| </t> | </t> | |||||
| <iref primary="true" item="Grammar" subitem="https-URI"/> | <iref primary="true" item="Grammar" subitem="https-URI"/> | |||||
| <sourcecode type="abnf7230"><![CDATA[ https-URI = "https" "://" authority path-abempty [ "?" query ] | <sourcecode type="abnf7230"><![CDATA[ https-URI = "https" "://" authority path-abempty [ "?" query ] | |||||
| ]]></sourcecode> | ]]></sourcecode> | |||||
| <t> | <t> | |||||
| The origin server for an "https" URI is identified by the | The origin server for an "https" URI is identified by the | |||||
| <xref format="none">authority</xref> component, which includes a host identifier | <xref format="none">authority</xref> component, which includes a host identifier | |||||
| (<xreftarget="RFC3986" sectionFormat="comma" section="3.2.2"/>) | (<xreftarget="URI" sectionFormat="comma" section="3.2.2"/>) | |||||
| and optional port number (<xreftarget="RFC3986" sectionFormat="comma"sectio | and optional port number (<xreftarget="URI" sectionFormat="comma"section="3 | |||||
| n="3.2.3"/>). | .2.3"/>). | |||||
| If the port subcomponent is empty or not given, TCP port 443 | If the port subcomponent is empty or not given, TCP port 443 | |||||
| (the reserved port for HTTP over TLS) is the default. | (the reserved port for HTTP over TLS) is the default. | |||||
| The origin determines who has the right to respond authoritatively to | The origin determines who has the right to respond authoritatively to | |||||
| requests that target the identified resource, as defined in | requests that target the identified resource, as defined in | |||||
| <xref/>. | <xref/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A sender <bcp14>MUST NOT</bcp14> generate an "https" URI with an empty host identifier. | A sender <bcp14>MUST NOT</bcp14> generate an "https" URI with an empty host identifier. | |||||
| A recipient that processes such a URI reference <bcp14>MUST</bcp14> reject it as invalid. | A recipient that processes such a URI reference <bcp14>MUST</bcp14> reject it as invalid. | |||||
| </t> | </t> | |||||
| skipping to change at line 1195 ¶ | skipping to change at line 1195 ¶ | |||||
| A client <bcp14>MUST</bcp14> ensure that its HTTP requests for an "https" resource are | A client <bcp14>MUST</bcp14> ensure that its HTTP requests for an "https" resource are | |||||
| secured, prior to being communicated, and that it only accepts secured | secured, prior to being communicated, and that it only accepts secured | |||||
| responses to those requests. Note that the definition of what cryptographic | responses to those requests. Note that the definition of what cryptographic | |||||
| mechanisms are acceptable to client and server are usually negotiated and | mechanisms are acceptable to client and server are usually negotiated and | |||||
| can change over time. | can change over time. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Resources made available via the "https" scheme have no shared identity | Resources made available via the "https" scheme have no shared identity | |||||
| with the "http" scheme. They are distinct origins with separate namespaces. | with the "http" scheme. They are distinct origins with separate namespaces. | |||||
| However, extensions to HTTP that are defined as applying to all origins with | However, extensions to HTTP that are defined as applying to all origins with | |||||
| the same host, such as the Cookie protocol <xref/>, | the same host, such as the Cookie protocol <xref/>, | |||||
| allow information set by one service to impact communication with other | allow information set by one service to impact communication with other | |||||
| services within a matching group of host domains. Such extensions ought to | services within a matching group of host domains. Such extensions ought to | |||||
| be designed with great care to prevent information obtained from a secured | be designed with great care to prevent information obtained from a secured | |||||
| connection being inadvertently exchanged within an unsecured context. | connection being inadvertently exchanged within an unsecured context. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="uri.comparison" title="http(s) Normalization and Comparison"> | <section anchor="uri.comparison" title="http(s) Normalization and Comparison"> | |||||
| <t> | <t> | |||||
| The "http" and "https" URI are normalized and compared according to the | The "http" and "https" URI are normalized and compared according to the | |||||
| methods defined in <xref section="6"/>, using | methods defined in <xref section="6"/>, using | |||||
| the defaults described above for each scheme. | the defaults described above for each scheme. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| HTTP does not require the use of a specific method for determining | HTTP does not require the use of a specific method for determining | |||||
| equivalence. For example, a cache key might be compared as a simple | equivalence. For example, a cache key might be compared as a simple | |||||
| string, after syntax-based normalization, or after scheme-based | string, after syntax-based normalization, or after scheme-based | |||||
| normalization. | normalization. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Scheme-based normalization (<xref section="6.2.3"/>) of "http" and "https" URIs involves the following | Scheme-based normalization (<xref section="6.2.3"/>) of "http" and "https" URIs involves the following | |||||
| additional rules: | additional rules: | |||||
| </t> | </t> | |||||
| <ul> | <ul> | |||||
| <li>If the port is equal to the default port for a scheme, the normal form | <li>If the port is equal to the default port for a scheme, the normal form | |||||
| is to omit the port subcomponent.</li> | is to omit the port subcomponent.</li> | |||||
| <li>When not being used as the target of an OPTIONS request, an empty path | <li>When not being used as the target of an OPTIONS request, an empty path | |||||
| component is equivalent to an absolute path of "/", so the normal form is | component is equivalent to an absolute path of "/", so the normal form is | |||||
| to provide a path of "/" instead.</li> | to provide a path of "/" instead.</li> | |||||
| <li>The scheme and host are case-insensitive and normally provided in | <li>The scheme and host are case-insensitive and normally provided in | |||||
| lowercase; all other components are compared in a case-sensitive | lowercase; all other components are compared in a case-sensitive | |||||
| skipping to change at line 1243 ¶ | skipping to change at line 1243 ¶ | |||||
| to their percent-encoded octets: the normal form is to not encode | to their percent-encoded octets: the normal form is to not encode | |||||
| them (see Sections 2.1 and 2.2 of [URI]). | them (see Sections 2.1 and 2.2 of [URI]). | |||||
| Perhaps: | Perhaps: | |||||
| * Characters other than those in the "reserved" set are equivalent | * Characters other than those in the "reserved" set are equivalent | |||||
| to their percent-encoded octets: the normal form is not encoded | to their percent-encoded octets: the normal form is not encoded | |||||
| (see Sections 2.1 and 2.2 of [URI]). | (see Sections 2.1 and 2.2 of [URI]). | |||||
| --> | --> | |||||
| <li>Characters other than those in the "reserved" set are equivalent to | <li>Characters other than those in the "reserved" set are equivalent to | |||||
| their percent-encoded octets: the normal form is to not encode them (see | their percent-encoded octets: the normal form is to not encode them (see | |||||
| Sections <xref sectionFormat="bare" section="2.1"/> and <xref sectionFormat="bare" section="2.2"/> of <xref/>).</li> | Sections <xref sectionFormat="bare" section="2.1"/> and <xref target="URI" sectionFormat="bare" section="2.2"/> of <xref/>).</li> | |||||
| </ul> | </ul> | |||||
| <t> | <t> | |||||
| For example, the following three URIs are equivalent: | For example, the following three URIs are equivalent: | |||||
| </t> | </t> | |||||
| <artwork type="example"><![CDATA[ | <artwork type="example"><![CDATA[ | |||||
| http://example.com:80/~smith/home.html | http://example.com:80/~smith/home.html | |||||
| http://EXAMPLE.com/%7Esmith/home.html | http://EXAMPLE.com/%7Esmith/home.html | |||||
| http://EXAMPLE.com:/%7esmith/home.html | http://EXAMPLE.com:/%7esmith/home.html | |||||
| ]]></artwork> | ]]></artwork> | |||||
| <t> | <t> | |||||
| Two HTTP URIs that are equivalent after normalization (using any method) | Two HTTP URIs that are equivalent after normalization (using any method) | |||||
| can be assumed to identify the same resource, and any HTTP component <bcp14>MAY</bcp14> | can be assumed to identify the same resource, and any HTTP component <bcp14>MAY</bcp14> | |||||
| perform normalization. As a result, distinct resources <bcp14>SHOULD NOT</bcp14> be | perform normalization. As a result, distinct resources <bcp14>SHOULD NOT</bcp14> be | |||||
| identified by HTTP URIs that are equivalent after normalization (using any | identified by HTTP URIs that are equivalent after normalization (using any | |||||
| method defined in <xref section="6.2"/>). | method defined in <xref section="6.2"/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="http.userinfo" title="Deprecation of userinfo in http(s) URIs"> | <section anchor="http.userinfo" title="Deprecation of userinfo in http(s) URIs"> | |||||
| <t> | <t> | |||||
| The URI generic syntax for authority also includes a userinfo subcomponent | The URI generic syntax for authority also includes a userinfo subcomponent | |||||
| (<xref sectionFormat="comma" section="3.2.1"/>) for including user | (<xref sectionFormat="comma" section="3.2.1"/>) for including user | |||||
| authentication information in the URI. In that subcomponent, the | authentication information in the URI. In that subcomponent, the | |||||
| use of the format "user:password" is deprecated. | use of the format "user:password" is deprecated. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Some implementations make use of the userinfo component for internal | Some implementations make use of the userinfo component for internal | |||||
| configuration of authentication information, such as within command | configuration of authentication information, such as within command | |||||
| invocation options, configuration files, or bookmark lists, even | invocation options, configuration files, or bookmark lists, even | |||||
| though such usage might expose a user identifier or password. | though such usage might expose a user identifier or password. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| skipping to change at line 1292 ¶ | skipping to change at line 1292 ¶ | |||||
| an error; it is likely being used to obscure the authority for the sake of | an error; it is likely being used to obscure the authority for the sake of | |||||
| phishing attacks. | phishing attacks. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="uri.fragment.identifiers" | <section anchor="uri.fragment.identifiers" | |||||
| title="http(s) References with Fragment Identifiers"> | title="http(s) References with Fragment Identifiers"> | |||||
| <iref item="Fragment Identifiers"/> | <iref item="Fragment Identifiers"/> | |||||
| <t> | <t> | |||||
| Fragment identifiers allow for indirect identification | Fragment identifiers allow for indirect identification | |||||
| of a secondary resource, independent of the URI scheme, as defined in | of a secondary resource, independent of the URI scheme, as defined in | |||||
| <xref section="3.5"/>. | <xref section="3.5"/>. | |||||
| Some protocol elements that refer to a URI allow inclusion of a fragment, | Some protocol elements that refer to a URI allow inclusion of a fragment, | |||||
| while others do not. They are distinguished by use of the ABNF rule for | while others do not. They are distinguished by use of the ABNF rule for | |||||
| elements where fragment is allowed; otherwise, a specific rule that excludes | elements where fragment is allowed; otherwise, a specific rule that excludes | |||||
| fragments is used. | fragments is used. | |||||
| </t> | </t> | |||||
| <aside> | <aside> | |||||
| <t> | <t> | |||||
| <strong>Note:</strong> The fragment identifier component is not part of the scheme | <strong>Note:</strong> The fragment identifier component is not part of the scheme | |||||
| definition for a URI scheme (see <xref section="4.3"/>), | definition for a URI scheme (see <xref section="4.3"/>), | |||||
| thus does not appear in the ABNF definitions for the "http" and "https" | thus does not appear in the ABNF definitions for the "http" and "https" | |||||
| URI schemes above. | URI schemes above. | |||||
| </t> | </t> | |||||
| </aside> | </aside> | |||||
| </section> | </section> | |||||
| </section> | </section> | |||||
| <section anchor="authoritative.access" title="Authoritative Access"> | <section anchor="authoritative.access" title="Authoritative Access"> | |||||
| <t> | <t> | |||||
| Authoritative access refers to dereferencing a given identifier, | Authoritative access refers to dereferencing a given identifier, | |||||
| for the sake of access to the identified resource, in a way that the client | for the sake of access to the identified resource, in a way that the client | |||||
| skipping to change at line 1407 ¶ | skipping to change at line 1407 ¶ | |||||
| target URI (<xref/>). | target URI (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| If the server responds to such a request with a non-interim HTTP response | If the server responds to such a request with a non-interim HTTP response | |||||
| message, as described in <xref/>, then that response | message, as described in <xref/>, then that response | |||||
| is considered an authoritative answer to the client's request. | is considered an authoritative answer to the client's request. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Note, however, that the above is not the only means for obtaining an | Note, however, that the above is not the only means for obtaining an | |||||
| authoritative response, nor does it imply that an authoritative response | authoritative response, nor does it imply that an authoritative response | |||||
| is always necessary (see <xreftarget="RFC9111"/>). | is always necessary (see <xreftarget="CACHING"/>). | |||||
| For example, the Alt-Svc header field <xreftarget="RFC7838"/> allows an | For example, the Alt-Svc header field <xreftarget="ALTSVC"/> allows an | |||||
| origin server to identify other services that are also authoritative for | origin server to identify other services that are also authoritative for | |||||
| that origin. Access to "http" identified resources might also be provided | that origin. Access to "http" identified resources might also be provided | |||||
| by protocols outside the scope of this document. | by protocols outside the scope of this document. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="https.origin" title="https Origins"> | <section anchor="https.origin" title="https Origins"> | |||||
| <t> | <t> | |||||
| The "https" scheme (<xref/>) associates authority based | The "https" scheme (<xref/>) associates authority based | |||||
| on the ability of a server to use the private key corresponding to a | on the ability of a server to use the private key corresponding to a | |||||
| certificate that the client considers to be trustworthy for the identified | certificate that the client considers to be trustworthy for the identified | |||||
| skipping to change at line 1486 ¶ | skipping to change at line 1486 ¶ | |||||
| (<xref/>). | (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| If the server responds to such a request with a non-interim HTTP response | If the server responds to such a request with a non-interim HTTP response | |||||
| message, as described in <xref/>, then that response | message, as described in <xref/>, then that response | |||||
| is considered an authoritative answer to the client's request. | is considered an authoritative answer to the client's request. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Note, however, that the above is not the only means for obtaining an | Note, however, that the above is not the only means for obtaining an | |||||
| authoritative response, nor does it imply that an authoritative response | authoritative response, nor does it imply that an authoritative response | |||||
| is always necessary (see <xref/>). | is always necessary (see <xref/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="https.verify" title="https Certificate Verification"> | <section anchor="https.verify" title="https Certificate Verification"> | |||||
| <t> | <t> | |||||
| To establish a <xref format="none">secured</xref> connection to dereference a URI, | To establish a <xref format="none">secured</xref> connection to dereference a URI, | |||||
| a client <bcp14>MUST</bcp14> verify that the service's identity is an acceptable | a client <bcp14>MUST</bcp14> verify that the service's identity is an acceptable | |||||
| match for the URI's origin server. Certificate verification is used to | match for the URI's origin server. Certificate verification is used to | |||||
| prevent server impersonation by an on-path attacker or by an attacker | prevent server impersonation by an on-path attacker or by an attacker | |||||
| that controls name resolution. This process requires that a client be | that controls name resolution. This process requires that a client be | |||||
| configured with a set of trust anchors. | configured with a set of trust anchors. | |||||
| skipping to change at line 1541 ¶ | skipping to change at line 1541 ¶ | |||||
| Automated clients <bcp14>MAY</bcp14> provide a configuration setting that disables | Automated clients <bcp14>MAY</bcp14> provide a configuration setting that disables | |||||
| this check, but <bcp14>MUST</bcp14> provide a setting which enables it. | this check, but <bcp14>MUST</bcp14> provide a setting which enables it. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="https.ip-id" title="IP-ID Reference Identity"> | <section anchor="https.ip-id" title="IP-ID Reference Identity"> | |||||
| <t> | <t> | |||||
| A server that is identified using an IP address literal in the "host" field | A server that is identified using an IP address literal in the "host" field | |||||
| of an "https" URI has a reference identity of type IP-ID. An IP version 4 | of an "https" URI has a reference identity of type IP-ID. An IP version 4 | |||||
| address uses the "IPv4address" ABNF rule, and an IP version 6 address uses | address uses the "IPv4address" ABNF rule, and an IP version 6 address uses | |||||
| the "IP-literal" production with the "IPv6address" option; see | the "IP-literal" production with the "IPv6address" option; see | |||||
| <xref section="3.2.2"/>. A reference identity of | <xref section="3.2.2"/>. A reference identity of | |||||
| IP-ID contains the decoded bytes of the IP address. | IP-ID contains the decoded bytes of the IP address. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| An IP version 4 address is 4 octets, and an IP version 6 address is 16 octets. | An IP version 4 address is 4 octets, and an IP version 6 address is 16 octets. | |||||
| Use of IP-ID is not defined for any other IP version. The iPAddress | Use of IP-ID is not defined for any other IP version. The iPAddress | |||||
| choice in the certificate subjectAltName extension does not explicitly | choice in the certificate subjectAltName extension does not explicitly | |||||
| include the IP version and so relies on the length of the address to | include the IP version and so relies on the length of the address to | |||||
| distinguish versions; see | distinguish versions; see | |||||
| <xref section="4.2.1.6"/>. | <xref section="4.2.1.6"/>. | |||||
| </t> | </t> | |||||
| skipping to change at line 1665 ¶ | skipping to change at line 1665 ¶ | |||||
| <bcp14>MUST NOT</bcp14> generate multiple field lines with the same name in a message | <bcp14>MUST NOT</bcp14> generate multiple field lines with the same name in a message | |||||
| (whether in the headers or trailers) or append a field line when a field | (whether in the headers or trailers) or append a field line when a field | |||||
| line of the same name already exists in the message, unless that field's | line of the same name already exists in the message, unless that field's | |||||
| definition allows multiple field line values to be recombined as a | definition allows multiple field line values to be recombined as a | |||||
| comma-separated list (i.e., at least one alternative of the field's | comma-separated list (i.e., at least one alternative of the field's | |||||
| definition allows a comma-separated list, such as an ABNF rule of | definition allows a comma-separated list, such as an ABNF rule of | |||||
| #(values) defined in <xref/>). | #(values) defined in <xref/>). | |||||
| </t> | </t> | |||||
| <aside> | <aside> | |||||
| <t> | <t> | |||||
| <strong>Note:</strong> In practice, the "Set-Cookie" header field <xref/> | <strong>Note:</strong> In practice, the "Set-Cookie" header field <xref/> | |||||
| often appears in a response message across multiple field lines and does not | often appears in a response message across multiple field lines and does not | |||||
| use the list syntax, violating the above requirements on multiple field lines | use the list syntax, violating the above requirements on multiple field lines | |||||
| with the same field name. Since it cannot be combined into a single field | with the same field name. Since it cannot be combined into a single field | |||||
| value, recipients ought to handle "Set-Cookie" as a special case while | value, recipients ought to handle "Set-Cookie" as a special case while | |||||
| processing fields. (See Appendix A.2.3 of <xref/> for | processing fields. (See Appendix A.2.3 of <xref/> for | |||||
| details.) | details.) | |||||
| </t> | </t> | |||||
| </aside> | </aside> | |||||
| <t> | <t> | |||||
| The order in which field lines with differing field names are received in a | The order in which field lines with differing field names are received in a | |||||
| skipping to change at line 1702 ¶ | skipping to change at line 1702 ¶ | |||||
| or on the length of a header or trailer section as a whole, as described in | or on the length of a header or trailer section as a whole, as described in | |||||
| <xref/>. Various ad hoc limitations on individual | <xref/>. Various ad hoc limitations on individual | |||||
| lengths are found in practice, often depending on the specific | lengths are found in practice, often depending on the specific | |||||
| field's semantics. | field's semantics. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A server that receives a request header field line, field value, or set of | A server that receives a request header field line, field value, or set of | |||||
| fields larger than it wishes to process <bcp14>MUST</bcp14> respond with an appropriate | fields larger than it wishes to process <bcp14>MUST</bcp14> respond with an appropriate | |||||
| <xref format="none">4xx (Client Error)</xref> status code. Ignoring such header fields | <xref format="none">4xx (Client Error)</xref> status code. Ignoring such header fields | |||||
| would increase the server's vulnerability to request smuggling attacks | would increase the server's vulnerability to request smuggling attacks | |||||
| (<xref section="11.2"/>). | (<xref section="11.2"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A client <bcp14>MAY</bcp14> discard or truncate received field lines that are larger | A client <bcp14>MAY</bcp14> discard or truncate received field lines that are larger | |||||
| than the client wishes to process if the field semantics are such that the | than the client wishes to process if the field semantics are such that the | |||||
| dropped value(s) can be safely ignored without changing the | dropped value(s) can be safely ignored without changing the | |||||
| message framing or response semantics. | message framing or response semantics. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="fields.values" title="Field Values"> | <section anchor="fields.values" title="Field Values"> | |||||
| <t> | <t> | |||||
| skipping to change at line 2165 ¶ | skipping to change at line 2165 ¶ | |||||
| day-name-l = %s"Monday" / %s"Tuesday" / %s"Wednesday" | day-name-l = %s"Monday" / %s"Tuesday" / %s"Wednesday" | |||||
| / %s"Thursday" / %s"Friday" / %s"Saturday" | / %s"Thursday" / %s"Friday" / %s"Saturday" | |||||
| / %s"Sunday" | / %s"Sunday" | |||||
| ]]></sourcecode> | ]]></sourcecode> | |||||
| <iref primary="true" item="Grammar" subitem="asctime-date"/> | <iref primary="true" item="Grammar" subitem="asctime-date"/> | |||||
| <sourcecode type="abnf7230"><![CDATA[ asctime-date = day-name SP date3 SP time-of-day SP year | <sourcecode type="abnf7230"><![CDATA[ asctime-date = day-name SP date3 SP time-of-day SP year | |||||
| date3 = month SP ( 2DIGIT / ( SP 1DIGIT )) | date3 = month SP ( 2DIGIT / ( SP 1DIGIT )) | |||||
| ; e.g., Jun 2 | ; e.g., Jun 2 | |||||
| ]]></sourcecode> | ]]></sourcecode> | |||||
| <t> | <t> | |||||
| HTTP-date is case sensitive. Note that <xref section="4.2"/> relaxes this for cache recipients. | HTTP-date is case sensitive. Note that <xref section="4.2"/> relaxes this for cache recipients. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A sender <bcp14>MUST NOT</bcp14> generate additional whitespace in an HTTP-date beyond | A sender <bcp14>MUST NOT</bcp14> generate additional whitespace in an HTTP-date beyond | |||||
| that specifically included as SP in the grammar. | that specifically included as SP in the grammar. | |||||
| The semantics of <xref format="none">day-name</xref>, <xref format="none">day</xref>, | The semantics of <xref format="none">day-name</xref>, <xref format="none">day</xref>, | |||||
| <xref format="none">month</xref>, <xref target="preferred.date.format" format="none">year</xref>, and <xref format="none">time-of-day</xref> | <xref format="none">month</xref>, <xref target="preferred.date.format" format="none">year</xref>, and <xref format="none">time-of-day</xref> | |||||
| are the same as those defined for the Internet Message Format constructs | are the same as those defined for the Internet Message Format constructs | |||||
| with the corresponding name (<xref sectionFormat="comma" section="3.3"/>). | with the corresponding name (<xref sectionFormat="comma" section="3.3"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| skipping to change at line 2315 ¶ | skipping to change at line 2315 ¶ | |||||
| <iref primary="true" item="control data"/> | <iref primary="true" item="control data"/> | |||||
| <t> | <t> | |||||
| Messages start with control data that describe its primary purpose. Request | Messages start with control data that describe its primary purpose. Request | |||||
| message control data includes a request method (<xref/>), | message control data includes a request method (<xref/>), | |||||
| request target (<xref/>), and protocol version | request target (<xref/>), and protocol version | |||||
| (<xref/>). Response message control data includes | (<xref/>). Response message control data includes | |||||
| a status code (<xref/>), optional reason phrase, and | a status code (<xref/>), optional reason phrase, and | |||||
| protocol version. | protocol version. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| In HTTP/1.1 <xreftarget="RFC9112"/> and earlier, control data is sent | In HTTP/1.1 <xreftarget="HTTP11"/> and earlier, control data is sent | |||||
| as the first line of a message. In HTTP/2 <xreftarget="RFC7540"/> and | as the first line of a message. In HTTP/2 <xreftarget="HTTP2"/> and | |||||
| HTTP/3 <xreftarget="RFC9113"/>, control data is sent as pseudo-header | HTTP/3 <xreftarget="HTTP3"/>, control data is sent as pseudo-header | |||||
| fields with a reserved name prefix (e.g., ":authority"). | fields with a reserved name prefix (e.g., ":authority"). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Every HTTP message has a protocol version. Depending on the version in use, | Every HTTP message has a protocol version. Depending on the version in use, | |||||
| it might be identified within the message explicitly or inferred by the | it might be identified within the message explicitly or inferred by the | |||||
| connection over which the message is received. Recipients use that version | connection over which the message is received. Recipients use that version | |||||
| information to determine limitations or potential for later communication | information to determine limitations or potential for later communication | |||||
| with that sender. | with that sender. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| skipping to change at line 2397 ¶ | skipping to change at line 2397 ¶ | |||||
| <section anchor="content" title="Content"> | <section anchor="content" title="Content"> | |||||
| <iref item="content"/> | <iref item="content"/> | |||||
| <t> | <t> | |||||
| HTTP messages often transfer a complete or partial representation as the | HTTP messages often transfer a complete or partial representation as the | |||||
| message <em>content</em>: a stream of octets sent after the header | message <em>content</em>: a stream of octets sent after the header | |||||
| section, as delineated by the message framing. | section, as delineated by the message framing. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| This abstract definition of content reflects the data after it has been | This abstract definition of content reflects the data after it has been | |||||
| extracted from the message framing. For example, an HTTP/1.1 message body | extracted from the message framing. For example, an HTTP/1.1 message body | |||||
| (<xref section="6"/>) might consist of a stream of data encoded | (<xref section="6"/>) might consist of a stream of data encoded | |||||
| with the chunked transfer coding -- a sequence of data chunks, one | with the chunked transfer coding -- a sequence of data chunks, one | |||||
| zero-length chunk, and a trailer section -- whereas | zero-length chunk, and a trailer section -- whereas | |||||
| the content of that same message | the content of that same message | |||||
| includes only the data stream after the transfer coding has been decoded; | includes only the data stream after the transfer coding has been decoded; | |||||
| it does not include the chunk lengths, chunked framing syntax, nor the | it does not include the chunk lengths, chunked framing syntax, nor the | |||||
| trailer fields (<xref/>). | trailer fields (<xref/>). | |||||
| </t> | </t> | |||||
| <aside> | <aside> | |||||
| <t> | <t> | |||||
| <strong>Note:</strong> Some field names have a "Content-" prefix. This is an informal | <strong>Note:</strong> Some field names have a "Content-" prefix. This is an informal | |||||
| skipping to change at line 2551 ¶ | skipping to change at line 2551 ¶ | |||||
| the time the header section was complete. The presence or absence of | the time the header section was complete. The presence or absence of | |||||
| certain header fields might impact choices made for the routing or | certain header fields might impact choices made for the routing or | |||||
| processing of the message as a whole before the trailers are received; | processing of the message as a whole before the trailers are received; | |||||
| those choices cannot be unmade by the later discovery of trailer fields. | those choices cannot be unmade by the later discovery of trailer fields. | |||||
| </t> | </t> | |||||
| <section anchor="trailers.limitations" title="Limitations on Use of Trailers"> | <section anchor="trailers.limitations" title="Limitations on Use of Trailers"> | |||||
| <t> | <t> | |||||
| A trailer section is only possible when supported by the version | A trailer section is only possible when supported by the version | |||||
| of HTTP in use and enabled by an explicit framing mechanism. | of HTTP in use and enabled by an explicit framing mechanism. | |||||
| For example, the chunked coding in HTTP/1.1 allows a trailer section to be | For example, the chunked coding in HTTP/1.1 allows a trailer section to be | |||||
| sent after the content (<xref section="7.1.2"/>). | sent after the content (<xref section="7.1.2"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Many fields cannot be processed outside the header section because | Many fields cannot be processed outside the header section because | |||||
| their evaluation is necessary prior to receiving the content, such as | their evaluation is necessary prior to receiving the content, such as | |||||
| those that describe message framing, routing, authentication, | those that describe message framing, routing, authentication, | |||||
| request modifiers, response controls, or content format. | request modifiers, response controls, or content format. | |||||
| A sender <bcp14>MUST NOT</bcp14> generate a trailer field unless the sender knows the | A sender <bcp14>MUST NOT</bcp14> generate a trailer field unless the sender knows the | |||||
| corresponding header field name's definition permits the field to be sent | corresponding header field name's definition permits the field to be sent | |||||
| in trailers. | in trailers. | |||||
| </t> | </t> | |||||
| skipping to change at line 2732 ¶ | skipping to change at line 2732 ¶ | |||||
| Although HTTP is used in a wide variety of applications, most clients rely | Although HTTP is used in a wide variety of applications, most clients rely | |||||
| on the same resource identification mechanism and configuration techniques | on the same resource identification mechanism and configuration techniques | |||||
| as general-purpose Web browsers. Even when communication options are | as general-purpose Web browsers. Even when communication options are | |||||
| hard-coded in a client's configuration, we can think of their combined | hard-coded in a client's configuration, we can think of their combined | |||||
| effect as a URI reference (<xref/>). | effect as a URI reference (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A URI reference is resolved to its absolute form in order to obtain the | A URI reference is resolved to its absolute form in order to obtain the | |||||
| <em>target URI</em>. The target URI excludes the reference's | <em>target URI</em>. The target URI excludes the reference's | |||||
| fragment component, if any, since fragment identifiers are reserved for | fragment component, if any, since fragment identifiers are reserved for | |||||
| client-side processing (<xref sectionFormat="comma" section="3.5"/>). | client-side processing (<xref sectionFormat="comma" section="3.5"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| To perform an action on a <em>target resource</em>, the client sends | To perform an action on a <em>target resource</em>, the client sends | |||||
| a request message containing enough components of its parsed target URI to | a request message containing enough components of its parsed target URI to | |||||
| enable recipients to identify that same resource. For historical reasons, | enable recipients to identify that same resource. For historical reasons, | |||||
| the parsed target URI components, collectively referred to as the | the parsed target URI components, collectively referred to as the | |||||
| <em>request target</em>, are sent within the message control data | <em>request target</em>, are sent within the message control data | |||||
| and the <xref format="none">Host</xref> header field (<xref/>). | and the <xref format="none">Host</xref> header field (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| skipping to change at line 2765 ¶ | skipping to change at line 2765 ¶ | |||||
| </ul> | </ul> | |||||
| <t> | <t> | |||||
| See the respective method definitions for details. These forms <bcp14>MUST NOT</bcp14> | See the respective method definitions for details. These forms <bcp14>MUST NOT</bcp14> | |||||
| be used with other methods. | be used with other methods. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Upon receipt of a client's request, a server reconstructs the target URI | Upon receipt of a client's request, a server reconstructs the target URI | |||||
| from the received components in accordance with their local configuration | from the received components in accordance with their local configuration | |||||
| and incoming connection context. This reconstruction is specific to each | and incoming connection context. This reconstruction is specific to each | |||||
| major protocol version. For example, | major protocol version. For example, | |||||
| <xref section="3.3"/> defines how a server | <xref section="3.3"/> defines how a server | |||||
| determines the target URI of an HTTP/1.1 request. | determines the target URI of an HTTP/1.1 request. | |||||
| </t> | </t> | |||||
| <aside anchor="effective.request.uri"> | <aside anchor="effective.request.uri"> | |||||
| <t> | <t> | |||||
| <iref primary="true" item="effective request URI"/> | <iref primary="true" item="effective request URI"/> | |||||
| <strong>Note:</strong> Previous specifications defined the recomposed target URI as a | <strong>Note:</strong> Previous specifications defined the recomposed target URI as a | |||||
| distinct concept, the <em>effective request URI</em>. | distinct concept, the <em>effective request URI</em>. | |||||
| </t> | </t> | |||||
| </aside> | </aside> | |||||
| </section> | </section> | |||||
| skipping to change at line 2787 ¶ | skipping to change at line 2787 ¶ | |||||
| <iref primary="true" item="Fields" subitem="Host"/> | <iref primary="true" item="Fields" subitem="Host"/> | |||||
| <iref primary="true" item="Header Fields" subitem="Host"/> | <iref primary="true" item="Header Fields" subitem="Host"/> | |||||
| <iref primary="true" item="Host header field"/> | <iref primary="true" item="Host header field"/> | |||||
| <t> | <t> | |||||
| The "Host" header field in a request provides the host and port | The "Host" header field in a request provides the host and port | |||||
| information from the target URI, enabling the origin | information from the target URI, enabling the origin | |||||
| server to distinguish among resources while servicing requests | server to distinguish among resources while servicing requests | |||||
| for multiple host names. | for multiple host names. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| In HTTP/2 <xref/> and HTTP/3 <xref/>, the | In HTTP/2 <xref/> and HTTP/3 <xref/>, the | |||||
| Host header field is, in some cases, supplanted by the ":authority" | Host header field is, in some cases, supplanted by the ":authority" | |||||
| pseudo-header field of a request's control data. | pseudo-header field of a request's control data. | |||||
| </t> | </t> | |||||
| <iref primary="true" item="Grammar" subitem="Host"/> | <iref primary="true" item="Grammar" subitem="Host"/> | |||||
| <sourcecode type="abnf7230"><![CDATA[ Host = uri-host [ ":" port ] ; Section 4 | <sourcecode type="abnf7230"><![CDATA[ Host = uri-host [ ":" port ] ; Section 4 | |||||
| ]]></sourcecode> | ]]></sourcecode> | |||||
| <t> | <t> | |||||
| The target URI's authority information is critical for handling a | The target URI's authority information is critical for handling a | |||||
| request. A user agent <bcp14>MUST</bcp14> generate a Host header field in a request | request. A user agent <bcp14>MUST</bcp14> generate a Host header field in a request | |||||
| unless it sends that information as an ":authority" pseudo-header field. | unless it sends that information as an ":authority" pseudo-header field. | |||||
| skipping to change at line 2827 ¶ | skipping to change at line 2827 ¶ | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="routing.inbound" title="Routing Inbound Requests"> | <section anchor="routing.inbound" title="Routing Inbound Requests"> | |||||
| <t> | <t> | |||||
| Once the target URI and its origin are determined, a client decides whether | Once the target URI and its origin are determined, a client decides whether | |||||
| a network request is necessary to accomplish the desired semantics and, | a network request is necessary to accomplish the desired semantics and, | |||||
| if so, where that request is to be directed. | if so, where that request is to be directed. | |||||
| </t> | </t> | |||||
| <section anchor="routing.cache" title="To a Cache"> | <section anchor="routing.cache" title="To a Cache"> | |||||
| <t> | <t> | |||||
| If the client has a cache <xref/> and the request can be | If the client has a cache <xref/> and the request can be | |||||
| satisfied by it, then the request is | satisfied by it, then the request is | |||||
| usually directed there first. | usually directed there first. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="routing.proxy" title="To a Proxy"> | <section anchor="routing.proxy" title="To a Proxy"> | |||||
| <t> | <t> | |||||
| If the request is not satisfied by a cache, then a typical client will | If the request is not satisfied by a cache, then a typical client will | |||||
| check its configuration to determine whether a proxy is to be used to | check its configuration to determine whether a proxy is to be used to | |||||
| satisfy the request. Proxy configuration is implementation-dependent, | satisfy the request. Proxy configuration is implementation-dependent, | |||||
| but is often based on URI prefix matching, selective authority matching, | but is often based on URI prefix matching, selective authority matching, | |||||
| skipping to change at line 2924 ¶ | skipping to change at line 2924 ¶ | |||||
| responses) can be sent at any time after a request is received, even if the | responses) can be sent at any time after a request is received, even if the | |||||
| request is not yet complete. A response can complete before its | request is not yet complete. A response can complete before its | |||||
| corresponding request is complete (<xref/>). Likewise, clients are not expected | corresponding request is complete (<xref/>). Likewise, clients are not expected | |||||
| to wait any specific amount of time for a response. Clients | to wait any specific amount of time for a response. Clients | |||||
| (including intermediaries) might abandon a request if the response is not | (including intermediaries) might abandon a request if the response is not | |||||
| received within a reasonable period of time. | received within a reasonable period of time. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A client that receives a response while it is still sending the associated | A client that receives a response while it is still sending the associated | |||||
| request <bcp14>SHOULD</bcp14> continue sending that request unless it receives | request <bcp14>SHOULD</bcp14> continue sending that request unless it receives | |||||
| an explicit indication to the contrary (see, e.g., <xref section="9.5"/> and <xref section="6.4"/>). | an explicit indication to the contrary (see, e.g., <xref section="9.5"/> and <xref section="6.4"/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="message.forwarding" title="Message Forwarding"> | <section anchor="message.forwarding" title="Message Forwarding"> | |||||
| <t> | <t> | |||||
| As described in <xref/>, intermediaries can serve | As described in <xref/>, intermediaries can serve | |||||
| a variety of roles in the processing of HTTP requests and responses. | a variety of roles in the processing of HTTP requests and responses. | |||||
| Some intermediaries are used to improve performance or availability. | Some intermediaries are used to improve performance or availability. | |||||
| Others are used for access control or to filter content. | Others are used for access control or to filter content. | |||||
| Since an HTTP stream has characteristics similar to a pipe-and-filter | Since an HTTP stream has characteristics similar to a pipe-and-filter | |||||
| architecture, there are no inherent limits to the extent an intermediary | architecture, there are no inherent limits to the extent an intermediary | |||||
| skipping to change at line 3000 ¶ | skipping to change at line 3000 ¶ | |||||
| message to be self-descriptive and allowing future connection-specific | message to be self-descriptive and allowing future connection-specific | |||||
| extensions to be deployed without fear that they will be blindly | extensions to be deployed without fear that they will be blindly | |||||
| forwarded by older intermediaries. | forwarded by older intermediaries. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Furthermore, intermediaries <bcp14>SHOULD</bcp14> remove or replace field(s) whose | Furthermore, intermediaries <bcp14>SHOULD</bcp14> remove or replace field(s) whose | |||||
| semantics are known to require removal before forwarding, whether or not they appear as a connection | semantics are known to require removal before forwarding, whether or not they appear as a connection | |||||
| option, after applying those fields' semantics. This includes but is not limited to: | option, after applying those fields' semantics. This includes but is not limited to: | |||||
| </t> | </t> | |||||
| <ul> | <ul> | |||||
| <li>Proxy-Connection (<xref section="C.2.2"/>)</li> | <li>Proxy-Connection (<xref section="C.2.2"/>)</li> | |||||
| <li>Keep-Alive (<xref section="19.7.1"/>)</li> | <li>Keep-Alive (<xref section="19.7.1"/>)</li> | |||||
| <li>TE (<xref/>)</li> | <li>TE (<xref/>)</li> | |||||
| <li>Transfer-Encoding (<xref section="6.1"/>)</li> | <li>Transfer-Encoding (<xref section="6.1"/>)</li> | |||||
| <li>Upgrade (<xref/>)</li> | <li>Upgrade (<xref/>)</li> | |||||
| </ul> | </ul> | |||||
| <t> | <t> | |||||
| The Connection header field's value has the following grammar: | The Connection header field's value has the following grammar: | |||||
| </t> | </t> | |||||
| <iref primary="true" item="Grammar" subitem="Connection"/> | <iref primary="true" item="Grammar" subitem="Connection"/> | |||||
| <iref primary="true" item="Grammar" subitem="connection-option"/> | <iref primary="true" item="Grammar" subitem="connection-option"/> | |||||
| <sourcecode type="abnf7230"><![CDATA[ Connection = #connection-option | <sourcecode type="abnf7230"><![CDATA[ Connection = #connection-option | |||||
| connection-option = token | connection-option = token | |||||
| ]]></sourcecode> | ]]></sourcecode> | |||||
| <t> | <t> | |||||
| Connection options are case-insensitive. | Connection options are case-insensitive. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A sender <bcp14>MUST NOT</bcp14> send a connection option corresponding to a | A sender <bcp14>MUST NOT</bcp14> send a connection option corresponding to a | |||||
| field that is intended for all recipients of the content. | field that is intended for all recipients of the content. | |||||
| For example, Cache-Control is never appropriate as a | For example, Cache-Control is never appropriate as a | |||||
| connection option (<xref section="5.2"/>). | connection option (<xref section="5.2"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Connection options do not always correspond to a field | Connection options do not always correspond to a field | |||||
| present in the message, since a connection-specific field | present in the message, since a connection-specific field | |||||
| might not be needed if there are no parameters associated with a | might not be needed if there are no parameters associated with a | |||||
| connection option. In contrast, a connection-specific field | connection option. In contrast, a connection-specific field | |||||
| received without a corresponding connection option usually indicates | received without a corresponding connection option usually indicates | |||||
| that the field has been improperly forwarded by an intermediary and | that the field has been improperly forwarded by an intermediary and | |||||
| ought to be ignored by the recipient. | ought to be ignored by the recipient. | |||||
| </t> | </t> | |||||
| skipping to change at line 3228 ¶ | skipping to change at line 3228 ¶ | |||||
| If a proxy receives a target URI with a host name that is not a | If a proxy receives a target URI with a host name that is not a | |||||
| fully qualified domain name, it <bcp14>MAY</bcp14> add its own domain to the host name | fully qualified domain name, it <bcp14>MAY</bcp14> add its own domain to the host name | |||||
| it received when forwarding the request. A proxy <bcp14>MUST NOT</bcp14> change the | it received when forwarding the request. A proxy <bcp14>MUST NOT</bcp14> change the | |||||
| host name if the target URI contains a fully qualified domain name. | host name if the target URI contains a fully qualified domain name. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A proxy <bcp14>MUST NOT</bcp14> modify the "absolute-path" and "query" parts of the | A proxy <bcp14>MUST NOT</bcp14> modify the "absolute-path" and "query" parts of the | |||||
| received target URI when forwarding it to the next inbound server except | received target URI when forwarding it to the next inbound server except | |||||
| as required by that forwarding protocol. For example, a proxy forwarding | as required by that forwarding protocol. For example, a proxy forwarding | |||||
| a request to an origin server via HTTP/1.1 will replace an empty path with | a request to an origin server via HTTP/1.1 will replace an empty path with | |||||
| "/" (<xref section="3.2.1"/>) or "*" (<xref section="3.2.4"/>), | "/" (<xref section="3.2.1"/>) or "*" (<xref section="3.2.4"/>), | |||||
| depending on the request method. | depending on the request method. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A proxy <bcp14>MUST NOT</bcp14> transform the content (<xref/>) of a message that | A proxy <bcp14>MUST NOT</bcp14> transform the content (<xref/>) of a message that | |||||
| contains a "no-transform" Cache-Control response directive (<xref section="5.2"/>). | contains a "no-transform" Cache-Control response directive (<xref section="5.2"/>). | |||||
| Note that this does not include changes to the message body that do not affect | Note that this does not include changes to the message body that do not affect | |||||
| the content, such as transfer codings (<xref section="7"/>). | the content, such as transfer codings (<xref section="7"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A proxy <bcp14>MAY</bcp14> transform the content of a message | A proxy <bcp14>MAY</bcp14> transform the content of a message | |||||
| that does not contain a no-transform Cache-Control directive. | that does not contain a no-transform Cache-Control directive. | |||||
| A proxy that transforms the content of a <xref format="none">200 (OK)</xref> response | A proxy that transforms the content of a <xref format="none">200 (OK)</xref> response | |||||
| can inform downstream recipients that a transformation has been | can inform downstream recipients that a transformation has been | |||||
| applied by changing the response status code to | applied by changing the response status code to | |||||
| <xref format="none">203 (Non-Authoritative Information)</xref> (<xref/>). | <xref format="none">203 (Non-Authoritative Information)</xref> (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| skipping to change at line 3589 ¶ | skipping to change at line 3589 ¶ | |||||
| that applied the encodings <bcp14>MUST</bcp14> generate a Content-Encoding header field | that applied the encodings <bcp14>MUST</bcp14> generate a Content-Encoding header field | |||||
| that lists the content codings in the order in which they were applied. | that lists the content codings in the order in which they were applied. | |||||
| Note that the coding named "identity" is reserved for its special role | Note that the coding named "identity" is reserved for its special role | |||||
| in <xref format="none">Accept-Encoding</xref> and thus <bcp14>SHOULD NOT</bcp14> be included. | in <xref format="none">Accept-Encoding</xref> and thus <bcp14>SHOULD NOT</bcp14> be included. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Additional information about the encoding parameters can be provided | Additional information about the encoding parameters can be provided | |||||
| by other header fields not defined by this specification. | by other header fields not defined by this specification. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Unlike Transfer-Encoding (<xref section="6.1"/>), the codings listed | Unlike Transfer-Encoding (<xref section="6.1"/>), the codings listed | |||||
| in Content-Encoding are a characteristic of the representation; the | in Content-Encoding are a characteristic of the representation; the | |||||
| representation is defined in terms of the coded form, and all other | representation is defined in terms of the coded form, and all other | |||||
| metadata about the representation is about the coded form unless otherwise | metadata about the representation is about the coded form unless otherwise | |||||
| noted in the metadata definition. Typically, the representation is only | noted in the metadata definition. Typically, the representation is only | |||||
| decoded just prior to rendering or analogous usage. | decoded just prior to rendering or analogous usage. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| If the media type includes an inherent encoding, such as a data format | 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 | 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 | Content-Encoding even if it happens to be the same algorithm as one | |||||
| skipping to change at line 3770 ¶ | skipping to change at line 3770 ¶ | |||||
| </section> | </section> | |||||
| <section anchor="field.content-length" title="Content-Length"> | <section anchor="field.content-length" title="Content-Length"> | |||||
| <iref primary="true" item="Fields" subitem="Content-Length"/> | <iref primary="true" item="Fields" subitem="Content-Length"/> | |||||
| <iref primary="true" item="Header Fields" subitem="Content-Length"/> | <iref primary="true" item="Header Fields" subitem="Content-Length"/> | |||||
| <iref primary="true" item="Content-Length header field"/> | <iref primary="true" item="Content-Length header field"/> | |||||
| <t> | <t> | |||||
| The "Content-Length" header field indicates the associated representation's | The "Content-Length" header field indicates the associated representation's | |||||
| data length as a decimal non-negative integer number of octets. | data length as a decimal non-negative integer number of octets. | |||||
| When transferring a representation as content, Content-Length refers | When transferring a representation as content, Content-Length refers | |||||
| specifically to the amount of data enclosed so that it can be used to | specifically to the amount of data enclosed so that it can be used to | |||||
| delimit framing (e.g., <xref section="6.2"/>). | delimit framing (e.g., <xref section="6.2"/>). | |||||
| In other cases, Content-Length indicates the selected representation's | In other cases, Content-Length indicates the selected representation's | |||||
| current length, which can be used by recipients to estimate transfer time | current length, which can be used by recipients to estimate transfer time | |||||
| or to compare to previously stored representations. | or to compare to previously stored representations. | |||||
| </t> | </t> | |||||
| <iref primary="true" item="Grammar" subitem="Content-Length"/> | <iref primary="true" item="Grammar" subitem="Content-Length"/> | |||||
| <sourcecode type="abnf7230"><![CDATA[ Content-Length = 1*DIGIT | <sourcecode type="abnf7230"><![CDATA[ Content-Length = 1*DIGIT | |||||
| ]]></sourcecode> | ]]></sourcecode> | |||||
| <t> | <t> | |||||
| An example is | An example is | |||||
| </t> | </t> | |||||
| skipping to change at line 3873 ¶ | skipping to change at line 3873 ¶ | |||||
| of this message's generation, then a <xref format="none">200 (OK)</xref> response would | of this message's generation, then a <xref format="none">200 (OK)</xref> response would | |||||
| contain the same representation that is enclosed as content in this message. | contain the same representation that is enclosed as content in this message. | |||||
| </t> | </t> | |||||
| <iref primary="true" item="Grammar" subitem="Content-Location"/> | <iref primary="true" item="Grammar" subitem="Content-Location"/> | |||||
| <sourcecode type="abnf7230"><![CDATA[ Content-Location = absolute-URI / partial-URI | <sourcecode type="abnf7230"><![CDATA[ Content-Location = absolute-URI / partial-URI | |||||
| ]]></sourcecode> | ]]></sourcecode> | |||||
| <t> | <t> | |||||
| The field value is either an <xref format="none">absolute-URI</xref> or a | The field value is either an <xref format="none">absolute-URI</xref> or a | |||||
| <xref format="none">partial-URI</xref>. In the latter case (<xref/>), | <xref format="none">partial-URI</xref>. In the latter case (<xref/>), | |||||
| the referenced URI is relative to the target URI | the referenced URI is relative to the target URI | |||||
| (<xref sectionFormat="comma" section="5"/>). | (<xref sectionFormat="comma" section="5"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The Content-Location value is not a replacement for the target URI | The Content-Location value is not a replacement for the target URI | |||||
| (<xref/>). It is representation metadata. | (<xref/>). It is representation metadata. | |||||
| It has the same syntax and semantics as the header field of the same name | It has the same syntax and semantics as the header field of the same name | |||||
| defined for MIME body parts in <xref section="4"/>. | defined for MIME body parts in <xref section="4"/>. | |||||
| However, its appearance in an HTTP message has some special implications | However, its appearance in an HTTP message has some special implications | |||||
| for HTTP recipients. | for HTTP recipients. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| skipping to change at line 3991 ¶ | skipping to change at line 3991 ¶ | |||||
| representation, so that the entity-tag can be used as a validator in | representation, so that the entity-tag can be used as a validator in | |||||
| later conditional requests to prevent the "lost update" problem. | later conditional requests to prevent the "lost update" problem. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| This specification defines two forms of metadata that are commonly used | This specification defines two forms of metadata that are commonly used | |||||
| to observe resource state and test for preconditions: modification dates | to observe resource state and test for preconditions: modification dates | |||||
| (<xref/>) and opaque entity tags | (<xref/>) and opaque entity tags | |||||
| (<xref/>). | (<xref/>). | |||||
| Additional metadata that reflects resource state | Additional metadata that reflects resource state | |||||
| has been defined by various extensions of HTTP, such as Web Distributed | has been defined by various extensions of HTTP, such as Web Distributed | |||||
| Authoring and Versioning <xref/>, that are beyond the | Authoring and Versioning <xref/>, that are beyond the | |||||
| scope of this specification. | scope of this specification. | |||||
| </t> | </t> | |||||
| <section anchor="weak.and.strong.validators" title="Weak versus Strong"> | <section anchor="weak.and.strong.validators" title="Weak versus Strong"> | |||||
| <iref primary="true" item="validator" subitem="weak"/> | <iref primary="true" item="validator" subitem="weak"/> | |||||
| <iref primary="true" item="validator" subitem="strong"/> | <iref primary="true" item="validator" subitem="strong"/> | |||||
| <t> | <t> | |||||
| Validators come in two flavors: strong or weak. Weak validators are easy | Validators come in two flavors: strong or weak. Weak validators are easy | |||||
| to generate but are far less useful for comparisons. Strong validators | to generate but are far less useful for comparisons. Strong validators | |||||
| are ideal for comparisons but can be very difficult (and occasionally | are ideal for comparisons but can be very difficult (and occasionally | |||||
| impossible) to generate efficiently. Rather than impose that all forms | impossible) to generate efficiently. Rather than impose that all forms | |||||
| skipping to change at line 4115 ¶ | skipping to change at line 4115 ¶ | |||||
| <t> | <t> | |||||
| An example of its use is | An example of its use is | |||||
| </t> | </t> | |||||
| <sourcecode type="http-message"><![CDATA[Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT | <sourcecode type="http-message"><![CDATA[Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT | |||||
| ]]></sourcecode> | ]]></sourcecode> | |||||
| <section anchor="lastmod.generation" title="Generation"> | <section anchor="lastmod.generation" title="Generation"> | |||||
| <t> | <t> | |||||
| An origin server <bcp14>SHOULD</bcp14> send Last-Modified for any selected | An origin server <bcp14>SHOULD</bcp14> send Last-Modified for any selected | |||||
| representation for which a last modification date can be reasonably | representation for which a last modification date can be reasonably | |||||
| and consistently determined, since its use in conditional requests | and consistently determined, since its use in conditional requests | |||||
| and evaluating cache freshness <xref/> can | and evaluating cache freshness <xref/> can | |||||
| substantially reduce unnecessary transfers and significantly | substantially reduce unnecessary transfers and significantly | |||||
| improve service availability and scalability. | improve service availability and scalability. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A representation is typically the sum of many parts behind the | A representation is typically the sum of many parts behind the | |||||
| resource interface. The last-modified time would usually be | resource interface. The last-modified time would usually be | |||||
| the most recent time that any of those parts were changed. | the most recent time that any of those parts were changed. | |||||
| How that value is determined for any given resource is an | How that value is determined for any given resource is an | |||||
| implementation detail beyond the scope of this specification. | implementation detail beyond the scope of this specification. | |||||
| </t> | </t> | |||||
| skipping to change at line 4286 ¶ | skipping to change at line 4286 ¶ | |||||
| combined with a variance identifier for content negotiation, to | combined with a variance identifier for content negotiation, to | |||||
| accurately differentiate between representations. | accurately differentiate between representations. | |||||
| Other implementations might use a collision-resistant hash of | Other implementations might use a collision-resistant hash of | |||||
| representation content, a combination of various file attributes, or | representation content, a combination of various file attributes, or | |||||
| a modification timestamp that has sub-second resolution. | a modification timestamp that has sub-second resolution. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| An origin server <bcp14>SHOULD</bcp14> send an ETag for any selected representation | An origin server <bcp14>SHOULD</bcp14> send an ETag for any selected representation | |||||
| for which detection of changes can be reasonably and consistently | for which detection of changes can be reasonably and consistently | |||||
| determined, since the entity-tag's use in conditional requests and | determined, since the entity-tag's use in conditional requests and | |||||
| evaluating cache freshness <xref/> can | evaluating cache freshness <xref/> can | |||||
| substantially reduce unnecessary transfers and significantly | substantially reduce unnecessary transfers and significantly | |||||
| improve service availability, scalability, and reliability. | improve service availability, scalability, and reliability. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="entity.tag.comparison" title="Comparison"> | <section anchor="entity.tag.comparison" title="Comparison"> | |||||
| <t> | <t> | |||||
| There are two entity-tag comparison functions, depending on whether or not | There are two entity-tag comparison functions, depending on whether or not | |||||
| the comparison context allows the use of weak validators: | the comparison context allows the use of weak validators: | |||||
| </t> | </t> | |||||
| <dl> | <dl> | |||||
| skipping to change at line 4410 ¶ | skipping to change at line 4410 ¶ | |||||
| Content-Type: text/plain | Content-Type: text/plain | |||||
| Content-Encoding: gzip | Content-Encoding: gzip | |||||
| ...binary data...]]></sourcecode> | ...binary data...]]></sourcecode> | |||||
| <aside> | <aside> | |||||
| <t> | <t> | |||||
| <strong>Note:</strong> Content codings are a property of the representation data, | <strong>Note:</strong> Content codings are a property of the representation data, | |||||
| so a strong entity-tag for a content-encoded representation has to be | so a strong entity-tag for a content-encoded representation has to be | |||||
| distinct from the entity tag of an unencoded representation to prevent | distinct from the entity tag of an unencoded representation to prevent | |||||
| potential conflicts during cache updates and range requests. In contrast, | potential conflicts during cache updates and range requests. In contrast, | |||||
| transfer codings (<xref section="7"/>) apply only during message transfer | transfer codings (<xref section="7"/>) apply only during message transfer | |||||
| and do not result in distinct entity-tags. | and do not result in distinct entity-tags. | |||||
| </t> | </t> | |||||
| </aside> | </aside> | |||||
| </section> | </section> | |||||
| </section> | </section> | |||||
| </section> | </section> | |||||
| </section> | </section> | |||||
| <section anchor="methods" title="Methods"> | <section anchor="methods" title="Methods"> | |||||
| <section anchor="method.overview" title="Overview"> | <section anchor="method.overview" title="Overview"> | |||||
| <t> | <t> | |||||
| skipping to change at line 4665 ¶ | skipping to change at line 4665 ¶ | |||||
| <t> | <t> | |||||
| A proxy <bcp14>MUST NOT</bcp14> automatically retry non-idempotent requests. | A proxy <bcp14>MUST NOT</bcp14> automatically retry non-idempotent requests. | |||||
| A client <bcp14>SHOULD NOT</bcp14> automatically retry a failed automatic retry. | A client <bcp14>SHOULD NOT</bcp14> automatically retry a failed automatic retry. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="cacheable.methods" title="Methods and Caching"> | <section anchor="cacheable.methods" title="Methods and Caching"> | |||||
| <t> | <t> | |||||
| For a cache to store and use a response, the associated method needs to | For a cache to store and use a response, the associated method needs to | |||||
| explicitly allow caching and to detail under what conditions a response can | explicitly allow caching and to detail under what conditions a response can | |||||
| be used to satisfy subsequent requests; a method definition that does not | be used to satisfy subsequent requests; a method definition that does not | |||||
| do so cannot be cached. For additional requirements see <xref/>. | do so cannot be cached. For additional requirements see <xref/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| This specification defines caching semantics for GET, HEAD, and POST, | This specification defines caching semantics for GET, HEAD, and POST, | |||||
| although the overwhelming majority of cache implementations only support | although the overwhelming majority of cache implementations only support | |||||
| GET and HEAD. | GET and HEAD. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| </section> | </section> | |||||
| <section anchor="method.definitions" title="Method Definitions"> | <section anchor="method.definitions" title="Method Definitions"> | |||||
| <section anchor="GET" title="GET"> | <section anchor="GET" title="GET"> | |||||
| <iref primary="true" item="GET method"/> | <iref primary="true" item="GET method"/> | |||||
| <iref primary="true" item="Method" subitem="GET"/> | <iref primary="true" item="Method" subitem="GET"/> | |||||
| <t> | <t> | |||||
| The GET method requests transfer of a current | The GET method requests transfer of a current | |||||
| <xref format="none">selected representation</xref> for the | <xref format="none">selected representation</xref> for the | |||||
| <xref format="none">target resource</xref>. | <xref format="none">target resource</xref>. | |||||
| A successful response reflects the quality of "sameness" identified by | A successful response reflects the quality of "sameness" identified by | |||||
| the target URI (<xref section="1.2.2"/>). Hence, | the target URI (<xref section="1.2.2"/>). Hence, | |||||
| retrieving identifiable information via HTTP is usually performed by | retrieving identifiable information via HTTP is usually performed by | |||||
| making a GET request on an identifier associated with the potential for | making a GET request on an identifier associated with the potential for | |||||
| providing that information in a <xref format="none">200 (OK)</xref> response. | providing that information in a <xref format="none">200 (OK)</xref> response. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| GET is the primary mechanism of information retrieval and the focus of | GET is the primary mechanism of information retrieval and the focus of | |||||
| almost all performance optimizations. Applications that produce a URI for | almost all performance optimizations. Applications that produce a URI for | |||||
| each important resource can benefit from those optimizations while enabling | each important resource can benefit from those optimizations while enabling | |||||
| their reuse by other applications, creating a network effect that promotes | their reuse by other applications, creating a network effect that promotes | |||||
| further expansion of the Web. | further expansion of the Web. | |||||
| skipping to change at line 4725 ¶ | skipping to change at line 4725 ¶ | |||||
| A client can alter the semantics of GET to be a "range request", requesting | 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 | transfer of only some part(s) of the selected representation, by sending a | |||||
| <xref format="none">Range</xref> header field in the request (<xref/>). | <xref format="none">Range</xref> header field in the request (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Although request message framing is independent of the method used, | Although request message framing is independent of the method used, | |||||
| content received in a GET request has no generally defined semantics, | content received in a GET request has no generally defined semantics, | |||||
| cannot alter the meaning or target of the request, and might lead some | cannot alter the meaning or target of the request, and might lead some | |||||
| implementations to reject the request and close the connection because of | implementations to reject the request and close the connection because of | |||||
| its potential as a request smuggling attack | its potential as a request smuggling attack | |||||
| (<xref section="11.2"/>). | (<xref section="11.2"/>). | |||||
| A client <bcp14>SHOULD NOT</bcp14> generate content in a GET request unless it is | A client <bcp14>SHOULD NOT</bcp14> generate content in a GET request unless it is | |||||
| made directly to an origin server that has previously indicated, | made directly to an origin server that has previously indicated, | |||||
| in or out of band, that such a request has a purpose and will be adequately | in or out of band, that such a request has a purpose and will be adequately | |||||
| supported. An origin server <bcp14>SHOULD NOT</bcp14> rely on private agreements to | supported. An origin server <bcp14>SHOULD NOT</bcp14> rely on private agreements to | |||||
| receive content, since participants in HTTP communication are often | receive content, since participants in HTTP communication are often | |||||
| unaware of intermediaries along the request chain. | unaware of intermediaries along the request chain. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The response to a GET request is cacheable; a cache <bcp14>MAY</bcp14> use it to satisfy | The response to a GET request is cacheable; a cache <bcp14>MAY</bcp14> use it to satisfy | |||||
| subsequent GET and HEAD requests unless otherwise indicated by the | subsequent GET and HEAD requests unless otherwise indicated by the | |||||
| Cache-Control header field (<xref section="5.2"/>). | Cache-Control header field (<xref section="5.2"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| When information retrieval is performed with a mechanism that constructs a | When information retrieval is performed with a mechanism that constructs a | |||||
| target URI from user-provided information, such as the query fields of a | target URI from user-provided information, such as the query fields of a | |||||
| form using GET, potentially sensitive data might be provided that would not | form using GET, potentially sensitive data might be provided that would not | |||||
| be appropriate for disclosure within a URI | be appropriate for disclosure within a URI | |||||
| (see <xref/>). In some cases, the | (see <xref/>). In some cases, the | |||||
| data can be filtered or transformed such that it would not reveal such | data can be filtered or transformed such that it would not reveal such | |||||
| information. In others, particularly when there is no benefit from caching | information. In others, particularly when there is no benefit from caching | |||||
| a response, using the POST method (<xref/>) instead of GET | a response, using the POST method (<xref/>) instead of GET | |||||
| skipping to change at line 4781 ¶ | skipping to change at line 4781 ¶ | |||||
| inconsistencies are considered preferable to generating and discarding the | inconsistencies are considered preferable to generating and discarding the | |||||
| content for a HEAD request, since HEAD is usually requested for the | content for a HEAD request, since HEAD is usually requested for the | |||||
| sake of efficiency. | sake of efficiency. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Although request message framing is independent of the method used, | Although request message framing is independent of the method used, | |||||
| content received in a HEAD request has no generally defined semantics, | content received in a HEAD request has no generally defined semantics, | |||||
| cannot alter the meaning or target of the request, and might lead some | cannot alter the meaning or target of the request, and might lead some | |||||
| implementations to reject the request and close the connection because of | implementations to reject the request and close the connection because of | |||||
| its potential as a request smuggling attack | its potential as a request smuggling attack | |||||
| (<xref section="11.2"/>). | (<xref section="11.2"/>). | |||||
| A client <bcp14>SHOULD NOT</bcp14> generate content in a HEAD request unless it is | A client <bcp14>SHOULD NOT</bcp14> generate content in a HEAD request unless it is | |||||
| made directly to an origin server that has previously indicated, | made directly to an origin server that has previously indicated, | |||||
| in or out of band, that such a request has a purpose and will be adequately | in or out of band, that such a request has a purpose and will be adequately | |||||
| supported. An origin server <bcp14>SHOULD NOT</bcp14> rely on private agreements to | supported. An origin server <bcp14>SHOULD NOT</bcp14> rely on private agreements to | |||||
| receive content, since participants in HTTP communication are often | receive content, since participants in HTTP communication are often | |||||
| unaware of intermediaries along the request chain. | unaware of intermediaries along the request chain. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The response to a HEAD request is cacheable; a cache <bcp14>MAY</bcp14> use it to | The response to a HEAD request is cacheable; a cache <bcp14>MAY</bcp14> use it to | |||||
| satisfy subsequent HEAD requests unless otherwise indicated by the | satisfy subsequent HEAD requests unless otherwise indicated by the | |||||
| Cache-Control header field (<xref section="5.2"/>). | Cache-Control header field (<xref section="5.2"/>). | |||||
| A HEAD response might also affect previously cached responses to GET; | A HEAD response might also affect previously cached responses to GET; | |||||
| see <xref section="4.3.5"/>. | see <xref section="4.3.5"/>. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="POST" title="POST"> | <section anchor="POST" title="POST"> | |||||
| <iref primary="true" item="POST method"/> | <iref primary="true" item="POST method"/> | |||||
| <iref primary="true" item="Method" subitem="POST"/> | <iref primary="true" item="Method" subitem="POST"/> | |||||
| <t> | <t> | |||||
| The POST method requests that the <xref format="none">target resource</xref> process | The POST method requests that the <xref format="none">target resource</xref> process | |||||
| the representation enclosed in the request according to the resource's own | the representation enclosed in the request according to the resource's own | |||||
| specific semantics. For example, POST is used for the following functions | specific semantics. For example, POST is used for the following functions | |||||
| (among others): | (among others): | |||||
| skipping to change at line 4847 ¶ | skipping to change at line 4847 ¶ | |||||
| [CACHING]. | [CACHING]. | |||||
| Perhaps: | Perhaps: | |||||
| A cached POST response can be reused to satisfy a later GET or HEAD | A cached POST response can be reused to satisfy a later GET or HEAD | |||||
| request, but not a POST request. Because the POST method is unsafe, | request, but not a POST request. Because the POST method is unsafe, | |||||
| the cache writes POST requests through to the origin server; see | the cache writes POST requests through to the origin server; see | |||||
| Section 4 of [CACHING]. | Section 4 of [CACHING]. | |||||
| --> | --> | |||||
| <t> | <t> | |||||
| Responses to POST requests are only cacheable when they include explicit | Responses to POST requests are only cacheable when they include explicit | |||||
| freshness information (see <xref section="4.2.1"/>) and a | freshness information (see <xref section="4.2.1"/>) and a | |||||
| <xref format="none">Content-Location</xref> header field that has the same value as | <xref format="none">Content-Location</xref> header field that has the same value as | |||||
| the POST's target URI (<xref/>). A cached POST response can be reused | the POST's target URI (<xref/>). A cached POST response can be reused | |||||
| to satisfy a later GET or HEAD request, but not a POST request, since POST | to satisfy a later GET or HEAD request, but not a POST request, since POST | |||||
| is required to be written through to the origin server, because it is | is required to be written through to the origin server, because it is | |||||
| unsafe; see <xref section="4"/>. | unsafe; see <xref section="4"/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| If the result of processing a POST would be equivalent to a representation | If the result of processing a POST would be equivalent to a representation | |||||
| of an existing resource, an origin server <bcp14>MAY</bcp14> redirect the user agent to | of an existing resource, an origin server <bcp14>MAY</bcp14> redirect the user agent to | |||||
| that resource by sending a <xref format="none">303 (See Other)</xref> response with the | that resource by sending a <xref format="none">303 (See Other)</xref> response with the | |||||
| existing resource's identifier in the <xref format="none">Location</xref> field. | existing resource's identifier in the <xref format="none">Location</xref> field. | |||||
| This has the benefits of providing the user agent a resource identifier | This has the benefits of providing the user agent a resource identifier | |||||
| and transferring the representation via a method more amenable to shared | 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 | caching, though at the cost of an extra request if the user agent does not | |||||
| already have the representation cached. | already have the representation cached. | |||||
| skipping to change at line 4997 ¶ | skipping to change at line 4997 ¶ | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Some origin servers support use of the <xref format="none">Content-Range</xref> header | Some origin servers support use of the <xref format="none">Content-Range</xref> header | |||||
| field (<xref/>) as a request modifier to | field (<xref/>) as a request modifier to | |||||
| perform a partial PUT, as described in <xref/>. | perform a partial PUT, as described in <xref/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Responses to the PUT method are not cacheable. If a successful PUT request | 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 | passes through a cache that has one or more stored responses for the | |||||
| target URI, those stored responses will be invalidated | target URI, those stored responses will be invalidated | |||||
| (see <xref section="4.4"/>). | (see <xref section="4.4"/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="DELETE" title="DELETE"> | <section anchor="DELETE" title="DELETE"> | |||||
| <iref primary="true" item="DELETE method"/> | <iref primary="true" item="DELETE method"/> | |||||
| <iref primary="true" item="Method" subitem="DELETE"/> | <iref primary="true" item="Method" subitem="DELETE"/> | |||||
| <t> | <t> | |||||
| The DELETE method requests that the origin server remove the association | The DELETE method requests that the origin server remove the association | |||||
| between the <xref format="none">target resource</xref> and its current functionality. | between the <xref format="none">target resource</xref> and its current functionality. | |||||
| In effect, this method is similar to the "rm" command in UNIX: it expresses a | 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 | deletion operation on the URI mapping of the origin server rather than an | |||||
| skipping to change at line 5050 ¶ | skipping to change at line 5050 ¶ | |||||
| enacted and no further information is to be supplied, or</li> | enacted and no further information is to be supplied, or</li> | |||||
| <li>a <xref format="none">200 (OK)</xref> status code if the action has been enacted and | <li>a <xref format="none">200 (OK)</xref> status code if the action has been enacted and | |||||
| the response message includes a representation describing the status.</li> | the response message includes a representation describing the status.</li> | |||||
| </ul> | </ul> | |||||
| <t> | <t> | |||||
| Although request message framing is independent of the method used, | Although request message framing is independent of the method used, | |||||
| content received in a DELETE request has no generally defined semantics, | content received in a DELETE request has no generally defined semantics, | |||||
| cannot alter the meaning or target of the request, and might lead some | cannot alter the meaning or target of the request, and might lead some | |||||
| implementations to reject the request and close the connection because of | implementations to reject the request and close the connection because of | |||||
| its potential as a request smuggling attack | its potential as a request smuggling attack | |||||
| (<xref section="11.2"/>). | (<xref section="11.2"/>). | |||||
| A client <bcp14>SHOULD NOT</bcp14> generate content in a DELETE request unless it is | A client <bcp14>SHOULD NOT</bcp14> generate content in a DELETE request unless it is | |||||
| made directly to an origin server that has previously indicated, | made directly to an origin server that has previously indicated, | |||||
| in or out of band, that such a request has a purpose and will be adequately | in or out of band, that such a request has a purpose and will be adequately | |||||
| supported. An origin server <bcp14>SHOULD NOT</bcp14> rely on private agreements to | supported. An origin server <bcp14>SHOULD NOT</bcp14> rely on private agreements to | |||||
| receive content, since participants in HTTP communication are often | receive content, since participants in HTTP communication are often | |||||
| unaware of intermediaries along the request chain. | unaware of intermediaries along the request chain. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Responses to the DELETE method are not cacheable. If a successful DELETE | Responses to the DELETE method are not cacheable. If a successful DELETE | |||||
| request passes through a cache that has one or more stored responses for | request passes through a cache that has one or more stored responses for | |||||
| the target URI, those stored responses will be invalidated (see | the target URI, those stored responses will be invalidated (see | |||||
| <xref section="4.4"/>). | <xref section="4.4"/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="CONNECT" title="CONNECT"> | <section anchor="CONNECT" title="CONNECT"> | |||||
| <iref primary="true" item="CONNECT method"/> | <iref primary="true" item="CONNECT method"/> | |||||
| <iref primary="true" item="Method" subitem="CONNECT"/> | <iref primary="true" item="Method" subitem="CONNECT"/> | |||||
| <t> | <t> | |||||
| The CONNECT method requests that the recipient establish a tunnel to the | The CONNECT method requests that the recipient establish a tunnel to the | |||||
| destination origin server identified by the request target and, if | destination origin server identified by the request target and, if | |||||
| successful, thereafter restrict its behavior to blind forwarding of | successful, thereafter restrict its behavior to blind forwarding of | |||||
| data, in both directions, until the tunnel is closed. | data, in both directions, until the tunnel is closed. | |||||
| Tunnels are commonly used to create an end-to-end virtual connection, | Tunnels are commonly used to create an end-to-end virtual connection, | |||||
| through one or more proxies, which can then be secured using TLS | through one or more proxies, which can then be secured using TLS | |||||
| (Transport Layer Security, <xref/>). | (Transport Layer Security, <xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| CONNECT uses a special form of request target, unique to this method, | CONNECT uses a special form of request target, unique to this method, | |||||
| consisting of only the host and port number of the tunnel destination, | consisting of only the host and port number of the tunnel destination, | |||||
| separated by a colon. There is no default port; a client <bcp14>MUST</bcp14> send the | separated by a colon. There is no default port; a client <bcp14>MUST</bcp14> send the | |||||
| port number even if the CONNECT request is based on a URI reference that | port number even if the CONNECT request is based on a URI reference that | |||||
| contains an authority component with an elided port | contains an authority component with an elided port | |||||
| (<xref/>). For example, | (<xref/>). For example, | |||||
| </t> | </t> | |||||
| <sourcecode type="http-message"><![CDATA[CONNECT server.example.com:80 HTTP/1.1 | <sourcecode type="http-message"><![CDATA[CONNECT server.example.com:80 HTTP/1.1 | |||||
| skipping to change at line 5214 ¶ | skipping to change at line 5214 ¶ | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="TRACE" title="TRACE"> | <section anchor="TRACE" title="TRACE"> | |||||
| <iref primary="true" item="TRACE method"/> | <iref primary="true" item="TRACE method"/> | |||||
| <iref primary="true" item="Method" subitem="TRACE"/> | <iref primary="true" item="Method" subitem="TRACE"/> | |||||
| <t> | <t> | |||||
| The TRACE method requests a remote, application-level loop-back of the | The TRACE method requests a remote, application-level loop-back of the | |||||
| request message. The final recipient of the request <bcp14>SHOULD</bcp14> reflect the | request message. The final recipient of the request <bcp14>SHOULD</bcp14> reflect the | |||||
| message received, excluding some fields described below, back to the client | message received, excluding some fields described below, back to the client | |||||
| as the content of a <xref format="none">200 (OK)</xref> response. The "message/http" | as the content of a <xref format="none">200 (OK)</xref> response. The "message/http" | |||||
| format (<xref section="10.1"/>) is one way to do so. | format (<xref section="10.1"/>) is one way to do so. | |||||
| The final recipient is either the origin server or the first server to | The final recipient is either the origin server or the first server to | |||||
| receive a <xref format="none">Max-Forwards</xref> value of zero (0) in the request | receive a <xref format="none">Max-Forwards</xref> value of zero (0) in the request | |||||
| (<xref/>). | (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A client <bcp14>MUST NOT</bcp14> generate fields in a TRACE request containing | A client <bcp14>MUST NOT</bcp14> generate fields in a TRACE request containing | |||||
| sensitive data that might be disclosed by the response. For example, it | sensitive data that might be disclosed by the response. For example, it | |||||
| would be foolish for a user agent to send stored user credentials | would be foolish for a user agent to send stored user credentials | |||||
| (<xref/>) or cookies <xref/> in a TRACE | (<xref/>) or cookies <xref/> in a TRACE | |||||
| request. The final recipient of the request <bcp14>SHOULD</bcp14> exclude any request | request. The final recipient of the request <bcp14>SHOULD</bcp14> exclude any request | |||||
| fields that are likely to contain sensitive data when that recipient | fields that are likely to contain sensitive data when that recipient | |||||
| generates the response content. | generates the response content. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| TRACE allows the client to see what is being received at the other | 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 | end of the request chain and use that data for testing or diagnostic | |||||
| information. The value of the <xref format="none">Via</xref> header field (<xref/>) | information. The value of the <xref format="none">Via</xref> header field (<xref/>) | |||||
| is of particular interest, since it acts as a trace of the request chain. | is of particular interest, since it acts as a trace of the request chain. | |||||
| Use of the <xref format="none">Max-Forwards</xref> header field allows the client to | Use of the <xref format="none">Max-Forwards</xref> header field allows the client to | |||||
| skipping to change at line 5360 ¶ | skipping to change at line 5360 ¶ | |||||
| content. | content. | |||||
| </li> | </li> | |||||
| <li> | <li> | |||||
| A server that sends a <xref format="none">100 (Continue)</xref> response <bcp14>MUST</bcp14> | A server that sends a <xref format="none">100 (Continue)</xref> response <bcp14>MUST</bcp14> | |||||
| ultimately send a final status code, once it receives and processes the | ultimately send a final status code, once it receives and processes the | |||||
| request content, unless the connection is closed prematurely. | request content, unless the connection is closed prematurely. | |||||
| </li> | </li> | |||||
| <li> | <li> | |||||
| A server that responds with a final status code before reading the | A server that responds with a final status code before reading the | |||||
| entire request content <bcp14>SHOULD</bcp14> indicate whether it intends to | entire request content <bcp14>SHOULD</bcp14> indicate whether it intends to | |||||
| close the connection (e.g., see <xref section="9.6"/>) or | close the connection (e.g., see <xref section="9.6"/>) or | |||||
| continue reading the request content. | continue reading the request content. | |||||
| </li> | </li> | |||||
| </ul> | </ul> | |||||
| <!-- [rfced] Section 10.1.1. We are having difficulty parsing the | <!-- [rfced] Section 10.1.1. We are having difficulty parsing the | |||||
| following sentence. Perhaps reordering the front of the sentence | following sentence. Perhaps reordering the front of the sentence | |||||
| and using an unordered list could make it clearer? | and using an unordered list could make it clearer? | |||||
| Current: | Current: | |||||
| An origin server MUST, upon receiving an HTTP/1.1 (or later) request | An origin server MUST, upon receiving an HTTP/1.1 (or later) request | |||||
| that has a method, target URI, and complete header section that | that has a method, target URI, and complete header section that | |||||
| skipping to change at line 5488 ¶ | skipping to change at line 5488 ¶ | |||||
| </section> | </section> | |||||
| <section anchor="field.referer" title="Referer"> | <section anchor="field.referer" title="Referer"> | |||||
| <iref primary="true" item="Fields" subitem="Referer"/> | <iref primary="true" item="Fields" subitem="Referer"/> | |||||
| <iref primary="true" item="Header Fields" subitem="Referer"/> | <iref primary="true" item="Header Fields" subitem="Referer"/> | |||||
| <iref primary="true" item="Referer header field"/> | <iref primary="true" item="Referer header field"/> | |||||
| <t> | <t> | |||||
| The "Referer" [sic] header field allows the user agent to specify a URI | The "Referer" [sic] header field allows the user agent to specify a URI | |||||
| reference for the resource from which the <xref format="none">target URI</xref> was | reference for the resource from which the <xref format="none">target URI</xref> was | |||||
| obtained (i.e., the "referrer", though the field name is misspelled). | obtained (i.e., the "referrer", though the field name is misspelled). | |||||
| A user agent <bcp14>MUST NOT</bcp14> include the fragment and userinfo components | A user agent <bcp14>MUST NOT</bcp14> include the fragment and userinfo components | |||||
| of the URI reference <xref/>, if any, when generating the | of the URI reference <xref/>, if any, when generating the | |||||
| Referer field value. | Referer field value. | |||||
| </t> | </t> | |||||
| <iref primary="true" item="Grammar" subitem="Referer"/> | <iref primary="true" item="Grammar" subitem="Referer"/> | |||||
| <sourcecode type="abnf7230"><![CDATA[ Referer = absolute-URI / partial-URI | <sourcecode type="abnf7230"><![CDATA[ Referer = absolute-URI / partial-URI | |||||
| ]]></sourcecode> | ]]></sourcecode> | |||||
| <t> | <t> | |||||
| The field value is either an <xref format="none">absolute-URI</xref> or a | The field value is either an <xref format="none">absolute-URI</xref> or a | |||||
| <xref format="none">partial-URI</xref>. In the latter case (<xref/>), | <xref format="none">partial-URI</xref>. In the latter case (<xref/>), | |||||
| the referenced URI is relative to the target URI | the referenced URI is relative to the target URI | |||||
| (<xref sectionFormat="comma" section="5"/>). | (<xref sectionFormat="comma" section="5"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The Referer header field allows servers to generate back-links to other | The Referer header field allows servers to generate back-links to other | |||||
| resources for simple analytics, logging, optimized caching, etc. It also | resources for simple analytics, logging, optimized caching, etc. It also | |||||
| allows obsolete or mistyped links to be found for maintenance. Some servers | 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 | 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), | (so-called "deep linking") or restricting cross-site request forgery (CSRF), | |||||
| but not all requests contain it. | but not all requests contain it. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| skipping to change at line 5569 ¶ | skipping to change at line 5569 ¶ | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| As described in <xref/>, | As described in <xref/>, | |||||
| a TE field with a "trailers" member sent in a request indicates that the | a TE field with a "trailers" member sent in a request indicates that the | |||||
| client will not discard trailer fields. | client will not discard trailer fields. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| TE is also used within HTTP/1.1 to advise servers about which transfer | TE is also used within HTTP/1.1 to advise servers about which transfer | |||||
| codings the client is able to accept in a response. | codings the client is able to accept in a response. | |||||
| As of publication, only HTTP/1.1 uses transfer codings | As of publication, only HTTP/1.1 uses transfer codings | |||||
| (see <xref section="7"/>). | (see <xref section="7"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The TE field value is a list of members, with each member (aside from | The TE field value is a list of members, with each member (aside from | |||||
| "trailers") consisting of a transfer coding name token with an optional | "trailers") consisting of a transfer coding name token with an optional | |||||
| weight indicating the client's relative preference for that | weight indicating the client's relative preference for that | |||||
| transfer coding (<xref/>) and | transfer coding (<xref/>) and | |||||
| optional parameters for that transfer coding. | optional parameters for that transfer coding. | |||||
| </t> | </t> | |||||
| <iref primary="true" item="Grammar" subitem="TE"/> | <iref primary="true" item="Grammar" subitem="TE"/> | |||||
| <iref primary="true" item="Grammar" subitem="t-codings"/> | <iref primary="true" item="Grammar" subitem="t-codings"/> | |||||
| skipping to change at line 5706 ¶ | skipping to change at line 5706 ¶ | |||||
| <t> | <t> | |||||
| The "Location" header field is used in some responses to refer to a | The "Location" header field is used in some responses to refer to a | |||||
| specific resource in relation to the response. The type of relationship is | specific resource in relation to the response. The type of relationship is | |||||
| defined by the combination of request method and status code semantics. | defined by the combination of request method and status code semantics. | |||||
| </t> | </t> | |||||
| <iref primary="true" item="Grammar" subitem="Location"/> | <iref primary="true" item="Grammar" subitem="Location"/> | |||||
| <sourcecode type="abnf7230"><![CDATA[ Location = URI-reference | <sourcecode type="abnf7230"><![CDATA[ Location = URI-reference | |||||
| ]]></sourcecode> | ]]></sourcecode> | |||||
| <t> | <t> | |||||
| The field value consists of a single URI-reference. When it has the form | The field value consists of a single URI-reference. When it has the form | |||||
| of a relative reference (<xref sectionFormat="comma" section="4.2"/>), | of a relative reference (<xref sectionFormat="comma" section="4.2"/>), | |||||
| the final value is computed by resolving it against the target | the final value is computed by resolving it against the target | |||||
| URI (<xref sectionFormat="comma" section="5"/>). | URI (<xref sectionFormat="comma" section="5"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| For <xref format="none">201 (Created)</xref> responses, the Location value refers to | For <xref format="none">201 (Created)</xref> responses, the Location value refers to | |||||
| the primary resource created by the request. | the primary resource created by the request. | |||||
| For <xref format="none">3xx (Redirection)</xref> responses, the Location value refers | For <xref format="none">3xx (Redirection)</xref> responses, the Location value refers | |||||
| to the preferred target resource for automatically redirecting the request. | to the preferred target resource for automatically redirecting the request. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| If the Location value provided in a <xref format="none">3xx (Redirection)</xref> | If the Location value provided in a <xref format="none">3xx (Redirection)</xref> | |||||
| response does not have a fragment component, a user agent <bcp14>MUST</bcp14> process the | response does not have a fragment component, a user agent <bcp14>MUST</bcp14> process the | |||||
| skipping to change at line 5888 ¶ | skipping to change at line 5888 ¶ | |||||
| for achieving authentication via that scheme as either a | for achieving authentication via that scheme as either a | |||||
| comma-separated list of parameters or a single sequence of characters | comma-separated list of parameters or a single sequence of characters | |||||
| capable of holding base64-encoded information. | capable of holding base64-encoded information. | |||||
| </t> | </t> | |||||
| <iref primary="true" item="Grammar" subitem="token68"/> | <iref primary="true" item="Grammar" subitem="token68"/> | |||||
| <sourcecode type="abnf7230"><![CDATA[ token68 = 1*( ALPHA / DIGIT / | <sourcecode type="abnf7230"><![CDATA[ token68 = 1*( ALPHA / DIGIT / | |||||
| "-" / "." / "_" / "~" / "+" / "/" ) *"=" | "-" / "." / "_" / "~" / "+" / "/" ) *"=" | |||||
| ]]></sourcecode> | ]]></sourcecode> | |||||
| <t> | <t> | |||||
| The token68 syntax allows the 66 unreserved URI characters | The token68 syntax allows the 66 unreserved URI characters | |||||
| <xref/>, plus a few others, so that it can hold a | <xref/>, plus a few others, so that it can hold a | |||||
| base64, base64url (URL and filename safe alphabet), base32, or base16 (hex) | base64, base64url (URL and filename safe alphabet), base32, or base16 (hex) | |||||
| encoding, with or without padding, but excluding whitespace | encoding, with or without padding, but excluding whitespace | |||||
| <xref/>. | <xref/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Authentication parameters are name=value pairs, where the name token is | Authentication parameters are name=value pairs, where the name token is | |||||
| matched case-insensitively | matched case-insensitively | |||||
| and each parameter name <bcp14>MUST</bcp14> only occur once per challenge. | and each parameter name <bcp14>MUST</bcp14> only occur once per challenge. | |||||
| </t> | </t> | |||||
| <iref primary="true" item="Grammar" subitem="auth-param"/> | <iref primary="true" item="Grammar" subitem="auth-param"/> | |||||
| skipping to change at line 5999 ¶ | skipping to change at line 5999 ¶ | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| HTTP does not restrict applications to this simple challenge-response | HTTP does not restrict applications to this simple challenge-response | |||||
| framework for access authentication. Additional mechanisms can be used, | framework for access authentication. Additional mechanisms can be used, | |||||
| such as authentication at the transport level or via message encapsulation, | such as authentication at the transport level or via message encapsulation, | |||||
| and with additional header fields specifying authentication information. | and with additional header fields specifying authentication information. | |||||
| However, such additional mechanisms are not defined by this specification. | However, such additional mechanisms are not defined by this specification. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Note that various custom mechanisms for user authentication use the | Note that various custom mechanisms for user authentication use the | |||||
| Set-Cookie and Cookie header fields, defined in <xref/>, | Set-Cookie and Cookie header fields, defined in <xref/>, | |||||
| for passing tokens related to authentication. | for passing tokens related to authentication. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <!-- [rfced] Section 11.5. The index entry "Origin" (note the | <!-- [rfced] Section 11.5. The index entry "Origin" (note the | |||||
| capitalization) points to this section. Should the entry be | capitalization) points to this section. Should the entry be | |||||
| lowercase? | lowercase? | |||||
| --> | --> | |||||
| <section anchor="protection.space" | <section anchor="protection.space" | |||||
| title="Establishing a Protection Space (Realm)"> | title="Establishing a Protection Space (Realm)"> | |||||
| <iref item="Protection Space"/> | <iref item="Protection Space"/> | |||||
| skipping to change at line 6132 ¶ | skipping to change at line 6132 ¶ | |||||
| <t> | <t> | |||||
| If a request is authenticated and a realm specified, the same credentials | If a request is authenticated and a realm specified, the same credentials | |||||
| are presumed to be valid for all other requests within this realm (assuming | are presumed to be valid for all other requests within this realm (assuming | |||||
| that the authentication scheme itself does not require otherwise, such as | that the authentication scheme itself does not require otherwise, such as | |||||
| credentials that vary according to a challenge value or using synchronized | credentials that vary according to a challenge value or using synchronized | |||||
| clocks). | clocks). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A proxy forwarding a request <bcp14>MUST NOT</bcp14> modify any | A proxy forwarding a request <bcp14>MUST NOT</bcp14> modify any | |||||
| <xref format="none">Authorization</xref> header fields in that request. | <xref format="none">Authorization</xref> header fields in that request. | |||||
| See <xref section="3.5"/> for details of and requirements | See <xref section="3.5"/> for details of and requirements | |||||
| pertaining to handling of the Authorization header field by HTTP caches. | pertaining to handling of the Authorization header field by HTTP caches. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="field.authentication-info" title="Authentication-Info"> | <section anchor="field.authentication-info" title="Authentication-Info"> | |||||
| <iref primary="true" item="Fields" subitem="Authentication-Info"/> | <iref primary="true" item="Fields" subitem="Authentication-Info"/> | |||||
| <iref primary="true" item="Header Fields" subitem="Authentication-Info"/> | <iref primary="true" item="Header Fields" subitem="Authentication-Info"/> | |||||
| <iref primary="true" item="Authentication-Info header field"/> | <iref primary="true" item="Authentication-Info header field"/> | |||||
| <t> | <t> | |||||
| HTTP authentication schemes can use the "Authentication-Info" response | HTTP authentication schemes can use the "Authentication-Info" response | |||||
| field to communicate information after the client's authentication credentials have been accepted. | field to communicate information after the client's authentication credentials have been accepted. | |||||
| skipping to change at line 6917 ¶ | skipping to change at line 6917 ¶ | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A Vary field containing a list of field names has two purposes: | A Vary field containing a list of field names has two purposes: | |||||
| </t> | </t> | |||||
| <ol> | <ol> | |||||
| <li> | <li> | |||||
| <t> | <t> | |||||
| To inform cache recipients that they <bcp14>MUST NOT</bcp14> use this response | To inform cache recipients that they <bcp14>MUST NOT</bcp14> use this response | |||||
| to satisfy a later request unless the later request has the | to satisfy a later request unless the later request has the | |||||
| same values for the listed header fields as the original request | same values for the listed header fields as the original request | |||||
| (<xref section="4.1"/>) or reuse of the | (<xref section="4.1"/>) or reuse of the | |||||
| response has been validated by the origin server. | response has been validated by the origin server. | |||||
| In other words, Vary expands the cache key | In other words, Vary expands the cache key | |||||
| required to match a new request to the stored cache entry. | required to match a new request to the stored cache entry. | |||||
| </t> | </t> | |||||
| </li> | </li> | |||||
| <li> | <li> | |||||
| <t> | <t> | |||||
| To inform user agent recipients that this response was subject to | To inform user agent recipients that this response was subject to | |||||
| content negotiation (<xref/>) and a | content negotiation (<xref/>) and a | |||||
| different representation might be sent in a subsequent request if | different representation might be sent in a subsequent request if | |||||
| skipping to change at line 6946 ¶ | skipping to change at line 6946 ¶ | |||||
| subsequent requests. Generally, that is the case when the response | subsequent requests. Generally, that is the case when the response | |||||
| content has been tailored to better fit the preferences expressed by | content has been tailored to better fit the preferences expressed by | |||||
| those selecting header fields, such as when an origin server has | those selecting header fields, such as when an origin server has | |||||
| selected the response's language based on the request's | selected the response's language based on the request's | |||||
| <xref format="none">Accept-Language</xref> header field. | <xref format="none">Accept-Language</xref> header field. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Vary might be elided when an origin server considers variance in | Vary might be elided when an origin server considers variance in | |||||
| content selection to be less significant than Vary's performance impact | content selection to be less significant than Vary's performance impact | |||||
| on caching, particularly when reuse is already limited by Cache-Control | on caching, particularly when reuse is already limited by Cache-Control | |||||
| response directives (<xref section="5.2"/>). | response directives (<xref section="5.2"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| There is no need to send the Authorization field name in Vary because | There is no need to send the Authorization field name in Vary because | |||||
| reuse of that response for a different user is prohibited by the field | reuse of that response for a different user is prohibited by the field | |||||
| definition (<xref/>). | definition (<xref/>). | |||||
| Likewise, if the response content has been selected or influenced by | Likewise, if the response content has been selected or influenced by | |||||
| network region, but the origin server wants the cached response to be | network region, but the origin server wants the cached response to be | |||||
| reused even if recipients move from one region to another, then there | reused even if recipients move from one region to another, then there | |||||
| is no need for the origin server to indicate such variance in Vary. | is no need for the origin server to indicate such variance in Vary. | |||||
| </t> | </t> | |||||
| skipping to change at line 6971 ¶ | skipping to change at line 6971 ¶ | |||||
| <iref item="conditional request" primary="true"/> | <iref item="conditional request" primary="true"/> | |||||
| <t> | <t> | |||||
| A conditional request is an HTTP request with one or more request header | A conditional request is an HTTP request with one or more request header | |||||
| fields that indicate a precondition to be tested before | fields that indicate a precondition to be tested before | |||||
| applying the request method to the target resource. | applying the request method to the target resource. | |||||
| <xref/> defines when to evaluate preconditions and | <xref/> defines when to evaluate preconditions and | |||||
| their order of precedence when more than one precondition is present. | their order of precedence when more than one precondition is present. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Conditional GET requests are the most efficient mechanism for HTTP | Conditional GET requests are the most efficient mechanism for HTTP | |||||
| cache updates <xref/>. Conditionals can also be | cache updates <xref/>. Conditionals can also be | |||||
| applied to state-changing methods, such as PUT and DELETE, to prevent | applied to state-changing methods, such as PUT and DELETE, to prevent | |||||
| the "lost update" problem: one client accidentally overwriting | the "lost update" problem: one client accidentally overwriting | |||||
| the work of another client that has been acting in parallel. | the work of another client that has been acting in parallel. | |||||
| </t> | </t> | |||||
| <section anchor="preconditions" title="Preconditions"> | <section anchor="preconditions" title="Preconditions"> | |||||
| <iref primary="false" item="selected representation"/> | <iref primary="false" item="selected representation"/> | |||||
| <t> | <t> | |||||
| Preconditions are usually defined with respect to a state of the target | Preconditions are usually defined with respect to a state of the target | |||||
| resource as a whole (its current value set) or the state as observed in a | resource as a whole (its current value set) or the state as observed in a | |||||
| previously obtained representation (one value in that set). If a resource | previously obtained representation (one value in that set). If a resource | |||||
| skipping to change at line 7006 ¶ | skipping to change at line 7006 ¶ | |||||
| changed since a given state known by the client. The effect of such an | 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 | evaluation depends on the method semantics and choice of conditional, as | |||||
| defined in <xref/>. | defined in <xref/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Other preconditions, defined by other specifications as extension fields, | Other preconditions, defined by other specifications as extension fields, | |||||
| might place conditions on all recipients, on the state of the target | might place conditions on all recipients, on the state of the target | |||||
| resource in general, or on a group of resources. For instance, the "If" | resource in general, or on a group of resources. For instance, the "If" | |||||
| header field in WebDAV can make a request conditional on various aspects | header field in WebDAV can make a request conditional on various aspects | |||||
| of multiple resources, such as locks, if the recipient understands and | of multiple resources, such as locks, if the recipient understands and | |||||
| implements that field (<xref sectionFormat="comma" section="10.4"/>). | implements that field (<xref sectionFormat="comma" section="10.4"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Extensibility of preconditions is only possible when the precondition can | Extensibility of preconditions is only possible when the precondition can | |||||
| be safely ignored if unknown (like <xref format="none">If-Modified-Since</xref>), when | be safely ignored if unknown (like <xref format="none">If-Modified-Since</xref>), when | |||||
| deployment can be assumed for a given use case, or when implementation | deployment can be assumed for a given use case, or when implementation | |||||
| is signaled by some other property of the target resource. This encourages | is signaled by some other property of the target resource. This encourages | |||||
| a focus on mutually agreed deployment of common standards. | a focus on mutually agreed deployment of common standards. | |||||
| </t> | </t> | |||||
| <section anchor="field.if-match" title="If-Match"> | <section anchor="field.if-match" title="If-Match"> | |||||
| <iref primary="true" item="Fields" subitem="If-Match"/> | <iref primary="true" item="Fields" subitem="If-Match"/> | |||||
| skipping to change at line 7203 ¶ | skipping to change at line 7203 ¶ | |||||
| <t> | <t> | |||||
| An origin server that evaluates an If-None-Match condition <bcp14>MUST NOT</bcp14> | An origin server that evaluates an If-None-Match condition <bcp14>MUST NOT</bcp14> | |||||
| perform the requested method if the condition evaluates to false; instead, | perform the requested method if the condition evaluates to false; instead, | |||||
| the origin server <bcp14>MUST</bcp14> respond with either | the origin server <bcp14>MUST</bcp14> respond with either | |||||
| a) the <xref format="none">304 (Not Modified)</xref> status code if the request method | a) the <xref format="none">304 (Not Modified)</xref> status code if the request method | |||||
| is GET or HEAD or b) the <xref format="none">412 (Precondition Failed)</xref> status | is GET or HEAD or b) the <xref format="none">412 (Precondition Failed)</xref> status | |||||
| code for all other request methods. | code for all other request methods. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Requirements on cache handling of a received If-None-Match header field | Requirements on cache handling of a received If-None-Match header field | |||||
| are defined in <xref section="4.3.2"/>. | are defined in <xref section="4.3.2"/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Note that an If-None-Match header field with a list value containing "*" and | Note that an If-None-Match header field with a list value containing "*" and | |||||
| other values (including other instances of "*") is syntactically | other values (including other instances of "*") is syntactically | |||||
| invalid (therefore not allowed to be generated) and furthermore is | invalid (therefore not allowed to be generated) and furthermore is | |||||
| unlikely to be interoperable. | unlikely to be interoperable. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="field.if-modified-since" title="If-Modified-Since"> | <section anchor="field.if-modified-since" title="If-Modified-Since"> | |||||
| <iref primary="true" item="Fields" subitem="If-Modified-Since"/> | <iref primary="true" item="Fields" subitem="If-Modified-Since"/> | |||||
| skipping to change at line 7310 ¶ | skipping to change at line 7310 ¶ | |||||
| <t> | <t> | |||||
| An origin server that evaluates an If-Modified-Since condition | An origin server that evaluates an If-Modified-Since condition | |||||
| <bcp14>SHOULD NOT</bcp14> perform the requested method if the condition evaluates to | <bcp14>SHOULD NOT</bcp14> perform the requested method if the condition evaluates to | |||||
| false; instead, | false; instead, | |||||
| the origin server <bcp14>SHOULD</bcp14> generate a <xref format="none">304 (Not Modified)</xref> | the origin server <bcp14>SHOULD</bcp14> generate a <xref format="none">304 (Not Modified)</xref> | |||||
| response, including only those metadata that are useful for identifying or | response, including only those metadata that are useful for identifying or | |||||
| updating a previously cached response. | updating a previously cached response. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Requirements on cache handling of a received If-Modified-Since header field | Requirements on cache handling of a received If-Modified-Since header field | |||||
| are defined in <xref section="4.3.2"/>. | are defined in <xref section="4.3.2"/>. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="field.if-unmodified-since" title="If-Unmodified-Since"> | <section anchor="field.if-unmodified-since" title="If-Unmodified-Since"> | |||||
| <iref primary="true" item="Fields" subitem="If-Unmodified-Since"/> | <iref primary="true" item="Fields" subitem="If-Unmodified-Since"/> | |||||
| <iref primary="true" item="Header Fields" subitem="If-Unmodified-Since"/> | <iref primary="true" item="Header Fields" subitem="If-Unmodified-Since"/> | |||||
| <iref primary="true" item="If-Unmodified-Since header field"/> | <iref primary="true" item="If-Unmodified-Since header field"/> | |||||
| <t> | <t> | |||||
| The "If-Unmodified-Since" header field makes the request method conditional | The "If-Unmodified-Since" header field makes the request method conditional | |||||
| on the <xref format="none">selected representation</xref>'s last modification date being | on the <xref format="none">selected representation</xref>'s last modification date being | |||||
| earlier than or equal to the date provided in the field value. | earlier than or equal to the date provided in the field value. | |||||
| skipping to change at line 8389 ¶ | skipping to change at line 8389 ¶ | |||||
| The status codes listed below are defined in this specification. | The status codes listed below are defined in this specification. | |||||
| The reason phrases listed here are only recommendations -- they can be | The reason phrases listed here are only recommendations -- they can be | |||||
| replaced by local equivalents or left out altogether without affecting the | replaced by local equivalents or left out altogether without affecting the | |||||
| protocol. | protocol. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Responses with status codes that are defined as heuristically cacheable | Responses with status codes that are defined as heuristically cacheable | |||||
| (e.g., 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, and 501 in this | (e.g., 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, and 501 in this | |||||
| specification) can be reused by a cache with heuristic expiration unless | specification) can be reused by a cache with heuristic expiration unless | |||||
| otherwise indicated by the method definition or explicit cache controls | otherwise indicated by the method definition or explicit cache controls | |||||
| <xref/>; all other status codes are not heuristically cacheable. | <xref/>; all other status codes are not heuristically cacheable. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Additional status codes, outside the scope of this specification, have been | Additional status codes, outside the scope of this specification, have been | |||||
| specified for use in HTTP. All such status codes ought to be registered | specified for use in HTTP. All such status codes ought to be registered | |||||
| within the "Hypertext Transfer Protocol (HTTP) Status Code Registry", | within the "Hypertext Transfer Protocol (HTTP) Status Code Registry", | |||||
| as described in <xref/>. | as described in <xref/>. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="status.1xx" title="Informational 1xx"> | <section anchor="status.1xx" title="Informational 1xx"> | |||||
| <iref primary="true" item="1xx Informational (status code class)"/> | <iref primary="true" item="1xx Informational (status code class)"/> | |||||
| skipping to change at line 8530 ¶ | skipping to change at line 8530 ¶ | |||||
| Aside from responses to CONNECT, a 200 response is expected to contain | Aside from responses to CONNECT, a 200 response is expected to contain | |||||
| message content unless the message framing explicitly indicates that the | message content unless the message framing explicitly indicates that the | |||||
| content has zero length. If some aspect of the request indicates a | content has zero length. If some aspect of the request indicates a | |||||
| preference for no content upon success, the origin server ought to send a | preference for no content upon success, the origin server ought to send a | |||||
| <em>204 (No Content)</em> response instead. | <em>204 (No Content)</em> response instead. | |||||
| For CONNECT, there is no content because the successful result is a | For CONNECT, there is no content because the successful result is a | |||||
| tunnel, which begins immediately after the 200 response header section. | tunnel, which begins immediately after the 200 response header section. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A 200 response is heuristically cacheable; i.e., unless otherwise indicated by | A 200 response is heuristically cacheable; i.e., unless otherwise indicated by | |||||
| the method definition or explicit cache controls (see <xref section="4.2.2"/>). | the method definition or explicit cache controls (see <xref section="4.2.2"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| In 200 responses to GET or HEAD, an origin server <bcp14>SHOULD</bcp14> send any | In 200 responses to GET or HEAD, an origin server <bcp14>SHOULD</bcp14> send any | |||||
| available validator fields (<xref/>) for the | available validator fields (<xref/>) for the | |||||
| <xref format="none">selected representation</xref>, with both a strong entity-tag and | <xref format="none">selected representation</xref>, with both a strong entity-tag and | |||||
| a <xref format="none">Last-Modified</xref> date being preferred. | a <xref format="none">Last-Modified</xref> date being preferred. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| In 200 responses to state-changing methods, any validator fields | In 200 responses to state-changing methods, any validator fields | |||||
| (<xref/>) sent in the response convey the | (<xref/>) sent in the response convey the | |||||
| skipping to change at line 8600 ¶ | skipping to change at line 8600 ¶ | |||||
| indicates that the request was successful but the enclosed content has been | indicates that the request was successful but the enclosed content has been | |||||
| modified from that of the origin server's <xref format="none">200 (OK)</xref> response | modified from that of the origin server's <xref format="none">200 (OK)</xref> response | |||||
| by a transforming proxy (<xref/>). This status code allows the | by a transforming proxy (<xref/>). This status code allows the | |||||
| proxy to notify recipients when a transformation has been applied, since | proxy to notify recipients when a transformation has been applied, since | |||||
| that knowledge might impact later decisions regarding the content. For | that knowledge might impact later decisions regarding the content. For | |||||
| example, future cache validation requests for the content might only be | example, future cache validation requests for the content might only be | |||||
| applicable along the same request path (through the same proxies). | applicable along the same request path (through the same proxies). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A 203 response is heuristically cacheable; i.e., unless otherwise indicated by | A 203 response is heuristically cacheable; i.e., unless otherwise indicated by | |||||
| the method definition or explicit cache controls (see <xref section="4.2.2"/>). | the method definition or explicit cache controls (see <xref section="4.2.2"/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="status.204" title="204 No Content"> | <section anchor="status.204" title="204 No Content"> | |||||
| <iref primary="true" item="204 No Content (status code)"/> | <iref primary="true" item="204 No Content (status code)"/> | |||||
| <t> | <t> | |||||
| The <em>204 (No Content)</em> status code indicates that the server | The <em>204 (No Content)</em> status code indicates that the server | |||||
| has successfully fulfilled the request and that there is no additional | has successfully fulfilled the request and that there is no additional | |||||
| content to send in the response content. Metadata in the response | content to send in the response content. Metadata in the response | |||||
| header fields refer to the <xref format="none">target resource</xref> and its | header fields refer to the <xref format="none">target resource</xref> and its | |||||
| <xref format="none">selected representation</xref> after the requested action was applied. | <xref format="none">selected representation</xref> after the requested action was applied. | |||||
| skipping to change at line 8640 ¶ | skipping to change at line 8640 ¶ | |||||
| being saved remains available to the user for editing. It is also | being saved remains available to the user for editing. It is also | |||||
| frequently used with interfaces that expect automated data transfers | frequently used with interfaces that expect automated data transfers | |||||
| to be prevalent, such as within distributed version control systems. | to be prevalent, such as within distributed version control systems. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A 204 response is terminated by the end of the header section; | A 204 response is terminated by the end of the header section; | |||||
| it cannot contain content or trailers. | it cannot contain content or trailers. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A 204 response is heuristically cacheable; i.e., unless otherwise indicated by | A 204 response is heuristically cacheable; i.e., unless otherwise indicated by | |||||
| the method definition or explicit cache controls (see <xref section="4.2.2"/>). | the method definition or explicit cache controls (see <xref section="4.2.2"/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="status.205" title="205 Reset Content"> | <section anchor="status.205" title="205 Reset Content"> | |||||
| <iref primary="true" item="205 Reset Content (status code)"/> | <iref primary="true" item="205 Reset Content (status code)"/> | |||||
| <t> | <t> | |||||
| The <em>205 (Reset Content)</em> status code indicates that the | The <em>205 (Reset Content)</em> status code indicates that the | |||||
| server has fulfilled the request and desires that the user agent reset 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 | "document view", which caused the request to be sent, to its original state | |||||
| as received from the origin server. | as received from the origin server. | |||||
| </t> | </t> | |||||
| skipping to change at line 8726 ¶ | skipping to change at line 8726 ¶ | |||||
| A sender that generates a 206 response to a request with an <xref format="none">If-Range</xref> | A sender that generates a 206 response to a request with an <xref format="none">If-Range</xref> | |||||
| header field <bcp14>SHOULD NOT</bcp14> generate other representation header | header field <bcp14>SHOULD NOT</bcp14> generate other representation header | |||||
| fields beyond those required because the client | fields beyond those required because the client | |||||
| already has a prior response containing those header fields. | already has a prior response containing those header fields. | |||||
| Otherwise, a sender <bcp14>MUST</bcp14> generate all of the representation header | Otherwise, a sender <bcp14>MUST</bcp14> generate all of the representation header | |||||
| fields that would have been sent in a <xref format="none">200 (OK)</xref> response | fields that would have been sent in a <xref format="none">200 (OK)</xref> response | |||||
| to the same request. | to the same request. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A 206 response is heuristically cacheable; i.e., unless otherwise indicated by | A 206 response is heuristically cacheable; i.e., unless otherwise indicated by | |||||
| explicit cache controls (see <xref section="4.2.2"/>). | explicit cache controls (see <xref section="4.2.2"/>). | |||||
| </t> | </t> | |||||
| <section anchor="partial.single" title="Single Part"> | <section anchor="partial.single" title="Single Part"> | |||||
| <t> | <t> | |||||
| If a single part is being transferred, the server generating the 206 | If a single part is being transferred, the server generating the 206 | |||||
| response <bcp14>MUST</bcp14> generate a <xref format="none">Content-Range</xref> header field, | response <bcp14>MUST</bcp14> generate a <xref format="none">Content-Range</xref> header field, | |||||
| describing what range of the selected representation is enclosed, and a | describing what range of the selected representation is enclosed, and a | |||||
| content consisting of the range. For example: | content consisting of the range. For example: | |||||
| </t> | </t> | |||||
| <sourcecode type="http-message"><![CDATA[HTTP/1.1 206 Partial Content | <sourcecode type="http-message"><![CDATA[HTTP/1.1 206 Partial Content | |||||
| Date: Wed, 15 Nov 1995 06:25:24 GMT | Date: Wed, 15 Nov 1995 06:25:24 GMT | |||||
| skipping to change at line 8905 ¶ | skipping to change at line 8905 ¶ | |||||
| </li> | </li> | |||||
| <li> | <li> | |||||
| Redirection to a previously stored result, as in the | Redirection to a previously stored result, as in the | |||||
| <xref format="none">304 (Not Modified)</xref> status code. | <xref format="none">304 (Not Modified)</xref> status code. | |||||
| </li> | </li> | |||||
| </ol> | </ol> | |||||
| <aside> | <aside> | |||||
| <t> | <t> | |||||
| <strong>Note:</strong> In HTTP/1.0, the status codes <xref target="status.301" format="none">301 (Moved Permanently)</xref> | <strong>Note:</strong> In HTTP/1.0, the status codes <xref target="status.301" format="none">301 (Moved Permanently)</xref> | |||||
| and <xref format="none">302 (Found)</xref> were originally defined as method-preserving | and <xref format="none">302 (Found)</xref> were originally defined as method-preserving | |||||
| (<xref sectionFormat="comma" section="9.3"/>) to match their implementation | (<xref sectionFormat="comma" section="9.3"/>) to match their implementation | |||||
| at CERN; <xref format="none">303 (See Other)</xref> was defined for a redirection that | at CERN; <xref format="none">303 (See Other)</xref> was defined for a redirection that | |||||
| changed its method to GET. However, early user agents split on whether to | changed its method to GET. However, early user agents split on whether to | |||||
| redirect POST requests as POST (according to then-current specification) | redirect POST requests as POST (according to then-current specification) | |||||
| or as GET (the safer alternative when redirected to a different site). | or as GET (the safer alternative when redirected to a different site). | |||||
| Prevailing practice eventually converged on changing the method to GET. | Prevailing practice eventually converged on changing the method to GET. | |||||
| <xref format="none">307 (Temporary Redirect)</xref> and | <xref format="none">307 (Temporary Redirect)</xref> and | |||||
| <xref format="none">308 (Permanent Redirect)</xref> | <xref format="none">308 (Permanent Redirect)</xref> | |||||
| <xref/> were | <xref/> were | |||||
| later added to unambiguously indicate method-preserving redirects, and status codes | later added to unambiguously indicate method-preserving redirects, and status codes | |||||
| <xref format="none">301</xref> and <xref format="none">302</xref> have been adjusted to allow a POST | <xref format="none">301</xref> and <xref format="none">302</xref> have been adjusted to allow a POST | |||||
| skipping to change at line 9049 ¶ | skipping to change at line 9049 ¶ | |||||
| preferred. The user agent <bcp14>MAY</bcp14> make a selection from that list | preferred. The user agent <bcp14>MAY</bcp14> make a selection from that list | |||||
| automatically if it understands the provided media type. A specific format | automatically if it understands the provided media type. A specific format | |||||
| for automatic selection is not defined by this specification because HTTP | for automatic selection is not defined by this specification because HTTP | |||||
| tries to remain orthogonal to the definition of its content. | tries to remain orthogonal to the definition of its content. | |||||
| In practice, the representation is provided in some easily parsed format | In practice, the representation is provided in some easily parsed format | |||||
| believed to be acceptable to the user agent, as determined by shared design | believed to be acceptable to the user agent, as determined by shared design | |||||
| or content negotiation, or in some commonly accepted hypertext format. | or content negotiation, or in some commonly accepted hypertext format. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A 300 response is heuristically cacheable; i.e., unless otherwise indicated by | A 300 response is heuristically cacheable; i.e., unless otherwise indicated by | |||||
| the method definition or explicit cache controls (see <xref section="4.2.2"/>). | the method definition or explicit cache controls (see <xref section="4.2.2"/>). | |||||
| </t> | </t> | |||||
| <aside> | <aside> | |||||
| <t> | <t> | |||||
| <strong>Note:</strong> The original proposal for the 300 status code defined the URI header field as | <strong>Note:</strong> 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 | providing a list of alternative representations, such that it would be | |||||
| usable for 200, 300, and 406 responses and be transferred in responses to | usable for 200, 300, and 406 responses and be transferred in responses to | |||||
| the HEAD method. However, lack of deployment and disagreement over syntax | the HEAD method. However, lack of deployment and disagreement over syntax | |||||
| led to both URI and Alternates (a subsequent proposal) being dropped from | led to both URI and Alternates (a subsequent proposal) being dropped from | |||||
| this specification. It is possible to communicate the list as a | this specification. It is possible to communicate the list as a | |||||
| Link header field value <xref/> whose members have a relationship of | Link header field value <xref/> whose members have a relationship of | |||||
| skipping to change at line 9094 ¶ | skipping to change at line 9094 ¶ | |||||
| <aside> | <aside> | |||||
| <t> | <t> | |||||
| <strong>Note:</strong> For historical reasons, a user agent <bcp14>MAY</bcp14> change the | <strong>Note:</strong> For historical reasons, a user agent <bcp14>MAY</bcp14> change the | |||||
| request method from POST to GET for the subsequent request. If this | request method from POST to GET for the subsequent request. If this | |||||
| behavior is undesired, the <xref format="none">308 (Permanent Redirect)</xref> | behavior is undesired, the <xref format="none">308 (Permanent Redirect)</xref> | |||||
| status code can be used instead. | status code can be used instead. | |||||
| </t> | </t> | |||||
| </aside> | </aside> | |||||
| <t> | <t> | |||||
| A 301 response is heuristically cacheable; i.e., unless otherwise indicated by | A 301 response is heuristically cacheable; i.e., unless otherwise indicated by | |||||
| the method definition or explicit cache controls (see <xref section="4.2.2"/>). | the method definition or explicit cache controls (see <xref section="4.2.2"/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="status.302" title="302 Found"> | <section anchor="status.302" title="302 Found"> | |||||
| <iref primary="true" item="302 Found (status code)"/> | <iref primary="true" item="302 Found (status code)"/> | |||||
| <t> | <t> | |||||
| The <em>302 (Found)</em> status code indicates that the target | The <em>302 (Found)</em> status code indicates that the target | |||||
| resource resides temporarily under a different URI. Since the redirection | resource resides temporarily under a different URI. Since the redirection | |||||
| might be altered on occasion, the client ought to continue to use the | might be altered on occasion, the client ought to continue to use the | |||||
| target URI for future requests. | target URI for future requests. | |||||
| </t> | </t> | |||||
| skipping to change at line 9203 ¶ | skipping to change at line 9203 ¶ | |||||
| <t> | <t> | |||||
| Since the goal of a 304 response is to minimize information transfer | Since the goal of a 304 response is to minimize information transfer | |||||
| when the recipient already has one or more cached representations, | when the recipient already has one or more cached representations, | |||||
| a sender <bcp14>SHOULD NOT</bcp14> generate representation metadata other | a sender <bcp14>SHOULD NOT</bcp14> generate representation metadata other | |||||
| than the above listed fields unless said metadata exists for the | than the above listed fields unless said metadata exists for the | |||||
| purpose of guiding cache updates (e.g., <xref format="none">Last-Modified</xref> might | purpose of guiding cache updates (e.g., <xref format="none">Last-Modified</xref> might | |||||
| be useful if the response does not have an <xref format="none">ETag</xref> field). | be useful if the response does not have an <xref format="none">ETag</xref> field). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Requirements on a cache that receives a 304 response are defined in | Requirements on a cache that receives a 304 response are defined in | |||||
| <xref section="4.3.4"/>. If the conditional request originated with an | <xref section="4.3.4"/>. If the conditional request originated with an | |||||
| outbound client, such as a user agent with its own cache sending a | outbound client, such as a user agent with its own cache sending a | |||||
| conditional GET to a shared proxy, then the proxy <bcp14>SHOULD</bcp14> forward the | conditional GET to a shared proxy, then the proxy <bcp14>SHOULD</bcp14> forward the | |||||
| 304 response to that client. | 304 response to that client. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A 304 response is terminated by the end of the header section; | A 304 response is terminated by the end of the header section; | |||||
| it cannot contain content or trailers. | it cannot contain content or trailers. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="status.305" title="305 Use Proxy"> | <section anchor="status.305" title="305 Use Proxy"> | |||||
| skipping to change at line 9267 ¶ | skipping to change at line 9267 ¶ | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The server <bcp14>SHOULD</bcp14> generate a <xref format="none">Location</xref> header field in the | The server <bcp14>SHOULD</bcp14> generate a <xref format="none">Location</xref> header field in the | |||||
| response containing a preferred URI reference for the new permanent URI. | response containing a preferred URI reference for the new permanent URI. | |||||
| The user agent <bcp14>MAY</bcp14> use the Location field value for automatic redirection. | The user agent <bcp14>MAY</bcp14> use the Location field value for automatic redirection. | |||||
| The server's response content usually contains a short hypertext note with | The server's response content usually contains a short hypertext note with | |||||
| a hyperlink to the new URI(s). | a hyperlink to the new URI(s). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A 308 response is heuristically cacheable; i.e., unless otherwise indicated by | A 308 response is heuristically cacheable; i.e., unless otherwise indicated by | |||||
| the method definition or explicit cache controls (see <xref section="4.2.2"/>). | the method definition or explicit cache controls (see <xref section="4.2.2"/>). | |||||
| </t> | </t> | |||||
| <aside> | <aside> | |||||
| <t> | <t> | |||||
| <strong>Note:</strong> This status code is much younger (June 2014) than its sibling codes and thus | <strong>Note:</strong> This status code is much younger (June 2014) than its sibling codes and thus | |||||
| might not be recognized everywhere. See <xref section="4"/> | might not be recognized everywhere. See <xref section="4"/> | |||||
| for deployment considerations. | for deployment considerations. | |||||
| </t> | </t> | |||||
| </aside> | </aside> | |||||
| </section> | </section> | |||||
| </section> | </section> | |||||
| skipping to change at line 9366 ¶ | skipping to change at line 9366 ¶ | |||||
| The <em>404 (Not Found)</em> status code indicates that the origin | The <em>404 (Not Found)</em> status code indicates that the origin | |||||
| server did not find a current representation for the | server did not find a current representation for the | |||||
| <xref format="none">target resource</xref> or is not willing to disclose that one | <xref format="none">target resource</xref> or is not willing to disclose that one | |||||
| exists. A 404 status code does not indicate whether this lack of representation | exists. A 404 status code does not indicate whether this lack of representation | |||||
| is temporary or permanent; the <xref format="none">410 (Gone)</xref> status code is | is temporary or permanent; the <xref format="none">410 (Gone)</xref> status code is | |||||
| preferred over 404 if the origin server knows, presumably through some | preferred over 404 if the origin server knows, presumably through some | |||||
| configurable means, that the condition is likely to be permanent. | configurable means, that the condition is likely to be permanent. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A 404 response is heuristically cacheable; i.e., unless otherwise indicated by | A 404 response is heuristically cacheable; i.e., unless otherwise indicated by | |||||
| the method definition or explicit cache controls (see <xref section="4.2.2"/>). | the method definition or explicit cache controls (see <xref section="4.2.2"/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="status.405" title="405 Method Not Allowed"> | <section anchor="status.405" title="405 Method Not Allowed"> | |||||
| <iref primary="true" item="405 Method Not Allowed (status code)"/> | <iref primary="true" item="405 Method Not Allowed (status code)"/> | |||||
| <t> | <t> | |||||
| The <em>405 (Method Not Allowed)</em> status code indicates that the | The <em>405 (Method Not Allowed)</em> status code indicates that the | |||||
| method received in the request-line is known by the origin server but | method received in the request-line is known by the origin server but | |||||
| not supported by the <xref format="none">target resource</xref>. | not supported by the <xref format="none">target resource</xref>. | |||||
| The origin server <bcp14>MUST</bcp14> generate an <xref format="none">Allow</xref> header field in | The origin server <bcp14>MUST</bcp14> generate an <xref format="none">Allow</xref> header field in | |||||
| a 405 response containing a list of the target resource's currently | a 405 response containing a list of the target resource's currently | |||||
| supported methods. | supported methods. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A 405 response is heuristically cacheable; i.e., unless otherwise indicated by | A 405 response is heuristically cacheable; i.e., unless otherwise indicated by | |||||
| the method definition or explicit cache controls (see <xref section="4.2.2"/>). | the method definition or explicit cache controls (see <xref section="4.2.2"/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="status.406" title="406 Not Acceptable"> | <section anchor="status.406" title="406 Not Acceptable"> | |||||
| <iref primary="true" item="406 Not Acceptable (status code)"/> | <iref primary="true" item="406 Not Acceptable (status code)"/> | |||||
| <t> | <t> | |||||
| The <em>406 (Not Acceptable)</em> status code indicates that the | The <em>406 (Not Acceptable)</em> status code indicates that the | |||||
| <xref format="none">target resource</xref> does not have a current representation that | <xref format="none">target resource</xref> does not have a current representation that | |||||
| would be acceptable to the user agent, according to the | would be acceptable to the user agent, according to the | |||||
| <xref format="none">proactive negotiation</xref> header fields received in the request | <xref format="none">proactive negotiation</xref> header fields received in the request | |||||
| (<xref/>), and the server is unwilling to supply a | (<xref/>), and the server is unwilling to supply a | |||||
| skipping to change at line 9473 ¶ | skipping to change at line 9473 ¶ | |||||
| intentionally unavailable and that the server owners desire that | intentionally unavailable and that the server owners desire that | |||||
| remote links to that resource be removed. Such an event is common for | remote links to that resource be removed. Such an event is common for | |||||
| limited-time, promotional services and for resources belonging to | limited-time, promotional services and for resources belonging to | |||||
| individuals no longer associated with the origin server's site. It is not | individuals no longer associated with the origin server's site. It is not | |||||
| necessary to mark all permanently unavailable resources as "gone" or | necessary to mark all permanently unavailable resources as "gone" or | |||||
| to keep the mark for any length of time -- that is left to the | to keep the mark for any length of time -- that is left to the | |||||
| discretion of the server owner. | discretion of the server owner. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A 410 response is heuristically cacheable; i.e., unless otherwise indicated by | A 410 response is heuristically cacheable; i.e., unless otherwise indicated by | |||||
| the method definition or explicit cache controls (see <xref section="4.2.2"/>). | the method definition or explicit cache controls (see <xref section="4.2.2"/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="status.411" title="411 Length Required"> | <section anchor="status.411" title="411 Length Required"> | |||||
| <iref primary="true" item="411 Length Required (status code)"/> | <iref primary="true" item="411 Length Required (status code)"/> | |||||
| <t> | <t> | |||||
| The <em>411 (Length Required)</em> status code indicates that the | The <em>411 (Length Required)</em> status code indicates that the | |||||
| server refuses to accept the request without a defined | server refuses to accept the request without a defined | |||||
| <xref format="none">Content-Length</xref> (<xref/>). | <xref format="none">Content-Length</xref> (<xref/>). | |||||
| The client <bcp14>MAY</bcp14> repeat the request if it adds a valid Content-Length | The client <bcp14>MAY</bcp14> repeat the request if it adds a valid Content-Length | |||||
| header field containing the length of the request content. | header field containing the length of the request content. | |||||
| skipping to change at line 9528 ¶ | skipping to change at line 9528 ¶ | |||||
| target URI is longer than the server is willing to | target URI is longer than the server is willing to | |||||
| interpret. This rare condition is only likely to occur when a client has | 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 | improperly converted a POST request to a GET request with long query | |||||
| information, when the client has descended into a "black hole" of | information, when the client has descended into a "black hole" of | |||||
| redirection (e.g., a redirected URI prefix that points to a suffix of | redirection (e.g., a redirected URI prefix that points to a suffix of | |||||
| itself) or when the server is under attack by a client attempting to | itself) or when the server is under attack by a client attempting to | |||||
| exploit potential security holes. | exploit potential security holes. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A 414 response is heuristically cacheable; i.e., unless otherwise indicated by | A 414 response is heuristically cacheable; i.e., unless otherwise indicated by | |||||
| the method definition or explicit cache controls (see <xref section="4.2.2"/>). | the method definition or explicit cache controls (see <xref section="4.2.2"/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="status.415" title="415 Unsupported Media Type"> | <section anchor="status.415" title="415 Unsupported Media Type"> | |||||
| <iref primary="true" item="415 Unsupported Media Type (status code)"/> | <iref primary="true" item="415 Unsupported Media Type (status code)"/> | |||||
| <t> | <t> | |||||
| The <em>415 (Unsupported Media Type)</em> status code indicates that | The <em>415 (Unsupported Media Type)</em> status code indicates that | |||||
| the origin server is refusing to service the request because the content is | the origin server is refusing to service the request because the content is | |||||
| in a format not supported by this method on the <xref format="none">target resource</xref>. | in a format not supported by this method on the <xref format="none">target resource</xref>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| skipping to change at line 9653 ¶ | skipping to change at line 9653 ¶ | |||||
| acting on behalf of the origin server) sends 421 to reject a target URI | acting on behalf of the origin server) sends 421 to reject a target URI | |||||
| that does not match an <xref format="none">origin</xref> for which the server has been | that does not match an <xref format="none">origin</xref> for which the server has been | |||||
| configured (<xref/>) or does not match the connection | configured (<xref/>) or does not match the connection | |||||
| context over which the request was received | context over which the request was received | |||||
| (<xref/>). | (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A client that receives a 421 (Misdirected Request) response <bcp14>MAY</bcp14> retry the | A client that receives a 421 (Misdirected Request) response <bcp14>MAY</bcp14> retry the | |||||
| request, whether or not the request method is idempotent, over a different | request, whether or not the request method is idempotent, over a different | |||||
| connection, such as a fresh connection specific to the target resource's | connection, such as a fresh connection specific to the target resource's | |||||
| origin, or via an alternative service <xref/>. | origin, or via an alternative service <xref/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A proxy <bcp14>MUST NOT</bcp14> generate a 421 response. | A proxy <bcp14>MUST NOT</bcp14> generate a 421 response. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="status.422" title="422 Unprocessable Content"> | <section anchor="status.422" title="422 Unprocessable Content"> | |||||
| <iref primary="true" item="422 Unprocessable Content (status code)"/> | <iref primary="true" item="422 Unprocessable Content (status code)"/> | |||||
| <t> | <t> | |||||
| The <em>422 (Unprocessable Content)</em> status code indicates that the server | The <em>422 (Unprocessable Content)</em> status code indicates that the server | |||||
| understands the content type of the request content (hence a | understands the content type of the request content (hence a | |||||
| skipping to change at line 9726 ¶ | skipping to change at line 9726 ¶ | |||||
| <section anchor="status.501" title="501 Not Implemented"> | <section anchor="status.501" title="501 Not Implemented"> | |||||
| <iref primary="true" item="501 Not Implemented (status code)"/> | <iref primary="true" item="501 Not Implemented (status code)"/> | |||||
| <t> | <t> | |||||
| The <em>501 (Not Implemented)</em> status code indicates that the | The <em>501 (Not Implemented)</em> status code indicates that the | |||||
| server does not support the functionality required to fulfill the request. | server does not support the functionality required to fulfill the request. | |||||
| This is the appropriate response when the server does not recognize the | This is the appropriate response when the server does not recognize the | |||||
| request method and is not capable of supporting it for any resource. | request method and is not capable of supporting it for any resource. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| A 501 response is heuristically cacheable; i.e., unless otherwise indicated by | A 501 response is heuristically cacheable; i.e., unless otherwise indicated by | |||||
| the method definition or explicit cache controls (see <xref section="4.2.2"/>). | the method definition or explicit cache controls (see <xref section="4.2.2"/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="status.502" title="502 Bad Gateway"> | <section anchor="status.502" title="502 Bad Gateway"> | |||||
| <iref primary="true" item="502 Bad Gateway (status code)"/> | <iref primary="true" item="502 Bad Gateway (status code)"/> | |||||
| <t> | <t> | |||||
| The <em>502 (Bad Gateway)</em> status code indicates that the server, | The <em>502 (Bad Gateway)</em> status code indicates that the server, | |||||
| while acting as a gateway or proxy, received an invalid response from an | while acting as a gateway or proxy, received an invalid response from an | |||||
| inbound server it accessed while attempting to fulfill the request. | inbound server it accessed while attempting to fulfill the request. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| skipping to change at line 9785 ¶ | skipping to change at line 9785 ¶ | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| </section> | </section> | |||||
| </section> | </section> | |||||
| <section anchor="extending" title="Extending HTTP"> | <section anchor="extending" title="Extending HTTP"> | |||||
| <t> | <t> | |||||
| HTTP defines a number of generic extension points that can be used to | HTTP defines a number of generic extension points that can be used to | |||||
| introduce capabilities to the protocol without introducing a new version, | introduce capabilities to the protocol without introducing a new version, | |||||
| including methods, status codes, field names, and further extensibility | including methods, status codes, field names, and further extensibility | |||||
| points within defined fields, such as authentication schemes and | points within defined fields, such as authentication schemes and | |||||
| cache directives (see Cache-Control extensions in <xref section="5.2.3"/>). Because the semantics of HTTP are | cache directives (see Cache-Control extensions in <xref section="5.2.3"/>). Because the semantics of HTTP are | |||||
| not versioned, these extension points are persistent; the version of the | not versioned, these extension points are persistent; the version of the | |||||
| protocol in use does not affect their semantics. | protocol in use does not affect their semantics. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Version-independent extensions are discouraged from depending on or | Version-independent extensions are discouraged from depending on or | |||||
| interacting with the specific version of the protocol in use. When this is | interacting with the specific version of the protocol in use. When this is | |||||
| unavoidable, careful consideration needs to be given to how the extension | unavoidable, careful consideration needs to be given to how the extension | |||||
| can interoperate across versions. | can interoperate across versions. | |||||
| </t> | </t> | |||||
| <!-- [rfced] Section 16. In the sentence below, should | <!-- [rfced] Section 16. In the sentence below, should | |||||
| "transfer-codings" be "transfer encodings" or "transfer codings"? | "transfer-codings" be "transfer encodings" or "transfer codings"? | |||||
| Current: | Current: | |||||
| Additionally, specific versions of HTTP might have their own | Additionally, specific versions of HTTP might have their own | |||||
| extensibility points, such as transfer-codings in HTTP/1.1 | extensibility points, such as transfer-codings in HTTP/1.1 | |||||
| --> | --> | |||||
| <t> | <t> | |||||
| Additionally, specific versions of HTTP might have their own extensibility | Additionally, specific versions of HTTP might have their own extensibility | |||||
| points, such as transfer-codings in HTTP/1.1 (<xreftarget="RFC9112" section= | points, such as transfer-codings in HTTP/1.1 (<xreftarget="HTTP11" section=" | |||||
| "6.1"/>) and HTTP/2 | 6.1"/>) and HTTP/2 | |||||
| SETTINGS or frame types <xreftarget="RFC7540"/>. These extension points are | SETTINGS or frame types <xreftarget="HTTP2"/>. These extension points aresp | |||||
| specific to the | ecific to the | |||||
| version of the protocol they occur within. | version of the protocol they occur within. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Version-specific extensions cannot override or modify the semantics of | Version-specific extensions cannot override or modify the semantics of | |||||
| a version-independent mechanism or extension point (like a method or | a version-independent mechanism or extension point (like a method or | |||||
| header field) without explicitly being allowed by that protocol element. For | header field) without explicitly being allowed by that protocol element. For | |||||
| example, the CONNECT method (<xref/>) allows this. | example, the CONNECT method (<xref/>) allows this. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| These guidelines assure that the protocol operates correctly and | These guidelines assure that the protocol operates correctly and | |||||
| skipping to change at line 9975 ¶ | skipping to change at line 9975 ¶ | |||||
| which it occurs has explicit freshness information; however, | which it occurs has explicit freshness information; however, | |||||
| a status code defined as heuristically cacheable is allowed to | a status code defined as heuristically cacheable is allowed to | |||||
| be cached without explicit freshness information. | be cached without explicit freshness information. | |||||
| --> | --> | |||||
| <t> | <t> | |||||
| The definition of a new final status code ought to specify whether or not it is | The definition of a new final status code ought to specify whether or not it is | |||||
| heuristically cacheable. Note that all final status codes can be cached if the response they | heuristically cacheable. Note that all final status codes can be cached if the response they | |||||
| occur in has explicit freshness information; however, those status codes that are | occur in has explicit freshness information; however, those status codes that are | |||||
| defined as being heuristically cacheable are allowed to be cached without explicit | defined as being heuristically cacheable are allowed to be cached without explicit | |||||
| freshness information. Likewise, the definition of a status code can place | freshness information. Likewise, the definition of a status code can place | |||||
| constraints upon cache behavior if the "must-understand" cache directive is used. See <xref/> for more information. | constraints upon cache behavior if the "must-understand" cache directive is used. See <xref/> for more information. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Finally, the definition of a new status code ought to indicate whether the | Finally, the definition of a new status code ought to indicate whether the | |||||
| content has any implied association with an identified resource (<xref target="identifying.content"/>). | content has any implied association with an identified resource (<xref target="identifying.content"/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| </section> | </section> | |||||
| <section anchor="fields.extensibility" title="Field Extensibility"> | <section anchor="fields.extensibility" title="Field Extensibility"> | |||||
| <t> | <t> | |||||
| HTTP's most widely used extensibility point is the definition of new header and | HTTP's most widely used extensibility point is the definition of new header and | |||||
| skipping to change at line 10305 ¶ | skipping to change at line 10305 ¶ | |||||
| <t> | <t> | |||||
| Authentication schemes need to document whether they are usable in | Authentication schemes need to document whether they are usable in | |||||
| origin-server authentication (i.e., using <xref format="none">WWW-Authenticate</xref>), | origin-server authentication (i.e., using <xref format="none">WWW-Authenticate</xref>), | |||||
| and/or proxy authentication (i.e., using <xref format="none">Proxy-Authenticate</xref>). | and/or proxy authentication (i.e., using <xref format="none">Proxy-Authenticate</xref>). | |||||
| </t> | </t> | |||||
| </li> | </li> | |||||
| <li> | <li> | |||||
| <t> | <t> | |||||
| The credentials carried in an <xref format="none">Authorization</xref> header field are specific to | The credentials carried in an <xref format="none">Authorization</xref> header field are specific to | |||||
| the user agent and, therefore, have the same effect on HTTP caches as the | the user agent and, therefore, have the same effect on HTTP caches as the | |||||
| "private" Cache-Control response directive (<xref section="5.2.2.7"/>), | "private" Cache-Control response directive (<xref section="5.2.2.7"/>), | |||||
| within the scope of the request in which they appear. | within the scope of the request in which they appear. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Therefore, new authentication schemes that choose not to carry | Therefore, new authentication schemes that choose not to carry | |||||
| credentials in the <xref format="none">Authorization</xref> header field (e.g., using a newly defined | credentials in the <xref format="none">Authorization</xref> header field (e.g., using a newly defined | |||||
| header field) will need to explicitly disallow caching, by mandating the use of | header field) will need to explicitly disallow caching, by mandating the use of | |||||
| Cache-Control response directives (e.g., "private"). | Cache-Control response directives (e.g., "private"). | |||||
| </t> | </t> | |||||
| </li> | </li> | |||||
| <li> | <li> | |||||
| skipping to change at line 10456 ¶ | skipping to change at line 10456 ¶ | |||||
| This will normally only be used in the case when a | This will normally only be used in the case when a | |||||
| responsible party cannot be contacted.</li> | responsible party cannot be contacted.</li> | |||||
| </ol> | </ol> | |||||
| </section> | </section> | |||||
| </section> | </section> | |||||
| <section anchor="security.considerations" title="Security Considerations"> | <section anchor="security.considerations" title="Security Considerations"> | |||||
| <t> | <t> | |||||
| This section is meant to inform developers, information providers, and | This section is meant to inform developers, information providers, and | |||||
| users of known security concerns relevant to HTTP semantics and its | users of known security concerns relevant to HTTP semantics and its | |||||
| use for transferring information over the Internet. Considerations related | use for transferring information over the Internet. Considerations related | |||||
| to caching are discussed in <xref section="7"/>, | to caching are discussed in <xref section="7"/>, | |||||
| and considerations related to HTTP/1.1 message syntax and parsing are | and considerations related to HTTP/1.1 message syntax and parsing are | |||||
| discussed in <xref section="11"/>. | discussed in <xref section="11"/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The list of considerations below is not exhaustive. Most security concerns | The list of considerations below is not exhaustive. Most security concerns | |||||
| related to HTTP semantics are about securing server-side applications (code | related to HTTP semantics are about securing server-side applications (code | |||||
| behind the HTTP interface), securing user agent processing of content | behind the HTTP interface), securing user agent processing of content | |||||
| received via HTTP, or secure use of the Internet in general, rather than | received via HTTP, or secure use of the Internet in general, rather than | |||||
| security of the protocol. The security considerations for URIs, which | security of the protocol. The security considerations for URIs, which | |||||
| are fundamental to HTTP operation, are discussed in | are fundamental to HTTP operation, are discussed in | |||||
| <xref section="7"/>. Various organizations maintain | <xref section="7"/>. Various organizations maintain | |||||
| topical information and links to current research on Web application | topical information and links to current research on Web application | |||||
| security (e.g., <xref/>). | security (e.g., <xref/>). | |||||
| </t> | </t> | |||||
| <section anchor="establishing.authority" title="Establishing Authority"> | <section anchor="establishing.authority" title="Establishing Authority"> | |||||
| <iref item="authoritative response" primary="true"/> | <iref item="authoritative response" primary="true"/> | |||||
| <iref item="phishing" primary="true"/> | <iref item="phishing" primary="true"/> | |||||
| <t> | <t> | |||||
| HTTP relies on the notion of an <em>authoritative response</em>: a | HTTP relies on the notion of an <em>authoritative response</em>: a | |||||
| response that has been determined by (or at the direction of) the origin | response that has been determined by (or at the direction of) the origin | |||||
| server identified within the target URI to be the most appropriate response | server identified within the target URI to be the most appropriate response | |||||
| skipping to change at line 10509 ¶ | skipping to change at line 10509 ¶ | |||||
| The "https" scheme (<xref/>) is intended to prevent | The "https" scheme (<xref/>) is intended to prevent | |||||
| (or at least reveal) many of these potential attacks on establishing | (or at least reveal) many of these potential attacks on establishing | |||||
| authority, provided that the negotiated connection is secured and | authority, provided that the negotiated connection is secured and | |||||
| the client properly verifies that the communicating server's identity | the client properly verifies that the communicating server's identity | |||||
| matches the target URI's authority component | matches the target URI's authority component | |||||
| (<xref/>). Correctly implementing such verification | (<xref/>). Correctly implementing such verification | |||||
| can be difficult (see <xref/>). | can be difficult (see <xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Authority for a given origin server can be delegated through protocol | Authority for a given origin server can be delegated through protocol | |||||
| extensions; for example, <xref/>. Likewise, the set of | extensions; for example, <xref/>. Likewise, the set of | |||||
| servers for which a connection is considered authoritative can be changed | servers for which a connection is considered authoritative can be changed | |||||
| with a protocol extension like <xref/>. | with a protocol extension like <xref/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Providing a response from a non-authoritative source, such as a shared | Providing a response from a non-authoritative source, such as a shared | |||||
| proxy cache, is often useful to improve performance and availability, but | proxy cache, is often useful to improve performance and availability, but | |||||
| only to the extent that the source can be trusted or the distrusted | only to the extent that the source can be trusted or the distrusted | |||||
| response can be safely used. | response can be safely used. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| skipping to change at line 10547 ¶ | skipping to change at line 10547 ¶ | |||||
| and privacy problems. Intermediaries might have access to security-related | and privacy problems. Intermediaries might have access to security-related | |||||
| information, personal information about individual users and | information, personal information about individual users and | |||||
| organizations, and proprietary information belonging to users and | organizations, and proprietary information belonging to users and | |||||
| content providers. A compromised intermediary, or an intermediary | content providers. A compromised intermediary, or an intermediary | |||||
| implemented or configured without regard to security and privacy | implemented or configured without regard to security and privacy | |||||
| considerations, might be used in the commission of a wide range of | considerations, might be used in the commission of a wide range of | |||||
| potential attacks. | potential attacks. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Intermediaries that contain a shared cache are especially vulnerable | Intermediaries that contain a shared cache are especially vulnerable | |||||
| to cache poisoning attacks, as described in <xref section="7"/>. | to cache poisoning attacks, as described in <xref section="7"/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Implementers need to consider the privacy and security | Implementers need to consider the privacy and security | |||||
| implications of their design and coding decisions, and of the | implications of their design and coding decisions, and of the | |||||
| configuration options they provide to operators (especially the | configuration options they provide to operators (especially the | |||||
| default configuration). | default configuration). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Intermediaries are no more trustworthy than the people and policies | Intermediaries are no more trustworthy than the people and policies | |||||
| under which they operate; HTTP cannot solve this problem. | under which they operate; HTTP cannot solve this problem. | |||||
| skipping to change at line 10671 ¶ | skipping to change at line 10671 ¶ | |||||
| <t> | <t> | |||||
| HTTP messages can be compressed in a number of ways, including using TLS | HTTP messages can be compressed in a number of ways, including using TLS | |||||
| compression, content codings, transfer codings, and other extension or | compression, content codings, transfer codings, and other extension or | |||||
| version-specific mechanisms. | version-specific mechanisms. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The most effective mitigation for this risk is to disable compression on | The most effective mitigation for this risk is to disable compression on | |||||
| sensitive data, or to strictly separate sensitive data from attacker-controlled | sensitive data, or to strictly separate sensitive data from attacker-controlled | |||||
| data so that they cannot share the same compression dictionary. With | data so that they cannot share the same compression dictionary. With | |||||
| careful design, a compression scheme can be designed in a way that is not | careful design, a compression scheme can be designed in a way that is not | |||||
| considered exploitable in limited use cases, such as HPACK <xref/>. | considered exploitable in limited use cases, such as HPACK <xref/>. | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="personal.information" | <section anchor="personal.information" | |||||
| title="Disclosure of Personal Information"> | title="Disclosure of Personal Information"> | |||||
| <t> | <t> | |||||
| Clients are often privy to large amounts of personal information, | Clients are often privy to large amounts of personal information, | |||||
| including both information provided by the user to interact with resources | including both information provided by the user to interact with resources | |||||
| (e.g., the user's name, location, mail address, passwords, encryption | (e.g., the user's name, location, mail address, passwords, encryption | |||||
| keys, etc.) and information about the user's browsing activity over | keys, etc.) and information about the user's browsing activity over | |||||
| time (e.g., history, bookmarks, etc.). Implementations need to | time (e.g., history, bookmarks, etc.). Implementations need to | |||||
| skipping to change at line 10778 ¶ | skipping to change at line 10778 ¶ | |||||
| which might lead to some confusion if an application mistakenly reads the | which might lead to some confusion if an application mistakenly reads the | |||||
| protocol-specific meta-variable instead of the default one. (This historical practice | protocol-specific meta-variable instead of the default one. (This historical practice | |||||
| is why <xref/> discourages the creation | is why <xref/> discourages the creation | |||||
| of new field names that contain an underscore.) | of new field names that contain an underscore.) | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Unfortunately, mapping field names to different interface names can lead to | Unfortunately, mapping field names to different interface names can lead to | |||||
| security vulnerabilities if the mapping is incomplete or ambiguous. For example, | security vulnerabilities if the mapping is incomplete or ambiguous. For example, | |||||
| if an attacker were to send a field named "Transfer_Encoding", a naive interface | if an attacker were to send a field named "Transfer_Encoding", a naive interface | |||||
| might map that to the same variable name as the "Transfer-Encoding" field, resulting | might map that to the same variable name as the "Transfer-Encoding" field, resulting | |||||
| in a potential request smuggling vulnerability (<xref section="11.2"/>). | in a potential request smuggling vulnerability (<xref section="11.2"/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| To mitigate the associated risks, implementations that perform such | To mitigate the associated risks, implementations that perform such | |||||
| mappings are advised to make the mapping unambiguous and complete | mappings are advised to make the mapping unambiguous and complete | |||||
| for the full range of potential octets received as a name (including those | for the full range of potential octets received as a name (including those | |||||
| that are discouraged or forbidden by the HTTP grammar). | that are discouraged or forbidden by the HTTP grammar). | |||||
| For example, a field with an unusual name character might | For example, a field with an unusual name character might | |||||
| result in the request being blocked, the specific field being removed, | result in the request being blocked, the specific field being removed, | |||||
| or the name being passed with a different prefix to distinguish it from | or the name being passed with a different prefix to distinguish it from | |||||
| other fields. | other fields. | |||||
| skipping to change at line 12071 ¶ | skipping to change at line 12071 ¶ | |||||
| <td> | <td> | |||||
| <xref format="counter"/> | <xref format="counter"/> | |||||
| </td> | </td> | |||||
| </tr> | </tr> | |||||
| </tbody> | </tbody> | |||||
| </table> | </table> | |||||
| </section> | </section> | |||||
| </section> | </section> | |||||
| </middle> | </middle> | |||||
| <back> | <back> | |||||
| <displayreferencetarget="HTTP10" to="HTTP/1.0"/> | ||||||
| <displayreferencetarget="RFC9111" to="CACHING"/> | <displayreferencetarget="HTTP11" to="HTTP/1.1"/> | |||||
| <displayreference to="TCP"/> | <displayreferencetarget="HTTP2" to="HTTP/2"/> | |||||
| <displayreference to="TLS13"/> | <displayreferencetarget="HTTP3" to="HTTP/3"/> | |||||
| <displayreference to="URI"/> | ||||||
| <displayreference to="ALTSVC"/> | ||||||
| <displayreference to="COOKIE"/> | ||||||
| <displayreference to="HPACK"/> | ||||||
| <displayreference to="HTTP/1.0"/> | ||||||
| <displayreferencetarget="RFC9112" to="HTTP/1.1"/> | ||||||
| <displayreferencetarget="RFC7540" to="HTTP/2"/> | ||||||
| <displayreferencetarget="RFC9113" to="HTTP/3"/> | ||||||
| <displayreference to="WEBDAV"/> | ||||||
| <references> | <references> | |||||
| <name>References</name> | <name>References</name> | |||||
| <references> | <references> | |||||
| <name>Normative References</name> | <name>Normative References</name> | |||||
| <!--[I-D.ietf-httpbis-cache] in EDIT state as of 09/29/21; companion documentR | <!--[I-D.ietf-httpbis-cache]; companion documentRFC 9111 --> | |||||
| FC 9111 | <referenceanchor='CACHING' target='https://www.rfc-editor.org/info/r | |||||
| fc9111'> | ||||||
| --> | <front> | |||||
| <title>HTTP Caching</title> | ||||||
| <referenceanchor='RFC9111' target='https://www.rfc-editor.org/info/rfc9111'> | <author initials='R' surname='Fielding' fullname='Roy Fielding' | |||||
| <front> | role='editor'> | |||||
| <title>HTTP Caching</title> | <organization /> | |||||
| <author initials='R' surname='Fielding' fullname='Roy Fielding'role='edit | </author> | |||||
| or'> | <author initials='M' surname='Nottingham' fullname='MarkNottin | |||||
| <organization /> | gham' role='editor'> | |||||
| </author> | <organization /> | |||||
| <author initials='M' surname='Nottingham' fullname='MarkNottingham' role= | </author> | |||||
| 'editor'> | <author initials='J' surname='Reschke' fullname='JulianReschke | |||||
| <organization /> | ' role='editor'> | |||||
| </author> | <organization /> | |||||
| <author initials='J' surname='Reschke' fullname='JulianReschke' role='edi | </author> | |||||
| tor'> | <date year='2022' month='January' /> | |||||
| <organization /> | </front> | |||||
| </author> | <seriesInfo name="RFC" value="9111"/> | |||||
| <date year='2022' month='January' /> | <seriesInfo name="DOI" value="10.17487/RFC9111"/> | |||||
| </front> | </reference> | |||||
| <seriesInfo name="RFC" value="9111"/> | ||||||
| <seriesInfo name="DOI" value="10.17487/RFC9111"/> | ||||||
| </reference> | ||||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2046.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2046.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3986. | ||||||
| xml"/> | <reference anchor="URI"https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.0793. | 986"> | ||||
| xml"/> | <front> | |||||
| <title abbrev="URI Generic Syntax">Uniform Resource Identifier | ||||||
| (URI): Generic Syntax</title> | ||||||
| <author initials="T." surname="Berners-Lee" fullname="Tim Bern | ||||||
| ers-Lee"/> | ||||||
| <author initials="R." surname="Fielding" fullname="Roy T. Fiel | ||||||
| ding"/> | ||||||
| <author initials="L." surname="Masinter" fullname="Larry Masin | ||||||
| ter"/> | ||||||
| <date month="January" year="2005"/> | ||||||
| </front> | ||||||
| <seriesInfo name="STD" value="66"/> | ||||||
| <seriesInfo name="RFC" value="3986"/> | ||||||
| <seriesInfo name="DOI" value="10.17487/RFC3986"/> | ||||||
| </reference> | ||||||
| <reference anchor="TCP"> | ||||||
| <front> | ||||||
| <title>Transmission Control Protocol</title> | ||||||
| <author initials="J." surname="Postel" fullname="Jon Postel"/> | ||||||
| <date year="1981" month="September"/> | ||||||
| </front> | ||||||
| <seriesInfo name="STD" value="7"/> | ||||||
| <seriesInfo name="RFC" value="793"/> | ||||||
| <seriesInfo name="DOI" value="10.17487/RFC0793"/> | ||||||
| </reference> | ||||||
| <!-- [rfced] FYI - xml2rfc is not generating the reference for RFC | <!-- [rfced] FYI - xml2rfc is not generating the reference for RFC | |||||
| 4647 correctly. Both authors are actually editors. We have | 4647 correctly. Both authors are actually editors. We have | |||||
| included the full reference in the XML instead. | included the full reference in the XML instead. | |||||
| As produced by the xi:include: | As produced by the xi:include: | |||||
| [RFC4647] Phillips, A. and M. Davis, "Matching of Language Tags", | [RFC4647] Phillips, A. and M. Davis, "Matching of Language Tags", | |||||
| BCP 47, RFC 4647, DOI 10.17487/RFC4647, September 2006, | BCP 47, RFC 4647, DOI 10.17487/RFC4647, September 2006, | |||||
| <https://www.rfc-editor.org/info/rfc4647>. | <https://www.rfc-editor.org/info/rfc4647>. | |||||
| Current: | Current: | |||||
| skipping to change at line 12154 ¶ | skipping to change at line 12163 ¶ | |||||
| <seriesInfo name="DOI" value="10.17487/RFC4647"/> | <seriesInfo name="DOI" value="10.17487/RFC4647"/> | |||||
| </reference> | </reference> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4648.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4648.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5322.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5322.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5646.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5646.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6125.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6125.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6365.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6365.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7405.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7405.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8446. | ||||||
| xml"/> | <reference anchor="TLS13"> | |||||
| <front> | ||||||
| <title>The Transport Layer Security (TLS) Protocol Version 1.3 | ||||||
| </title> | ||||||
| <author initials="E." surname="Rescorla" fullname="Eric Rescor | ||||||
| la"/> | ||||||
| <date year="2018" month="August"/> | ||||||
| </front> | ||||||
| <seriesInfo name="RFC" value="8446"/> | ||||||
| <seriesInfo name="DOI" value="10.17487/RFC8446"/> | ||||||
| </reference> | ||||||
| <reference anchor="USASCII"> | <reference anchor="USASCII"> | |||||
| <front> | <front> | |||||
| <title>Coded Character Set -- 7-bit American Standard Code for Information Interchange</title> | <title>Coded Character Set -- 7-bit American Standard Code for Information Interchange</title> | |||||
| <author> | <author> | |||||
| <organization>American National Standards Institute</organization> | <organization>American National Standards Institute</organization> | |||||
| </author> | </author> | |||||
| <date year="1986"/> | <date year="1986"/> | |||||
| </front> | </front> | |||||
| <seriesInfo name="ANSI" value="X3.4"/> | <seriesInfo name="ANSI" value="X3.4"/> | |||||
| skipping to change at line 12188 ¶ | skipping to change at line 12206 ¶ | |||||
| <seriesInfo name="DOI" value="10.1109/MC.1984.1659158"/> | <seriesInfo name="DOI" value="10.1109/MC.1984.1659158"/> | |||||
| </reference> | </reference> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml"/> | |||||
| </references> | </references> | |||||
| <references> | <references> | |||||
| <name>Informative References</name> | <name>Informative References</name> | |||||
| <!-- [HTTP11] [I-D.ietf-httpbis-messaging]; companion document RFC 9112 --> | <!-- [HTTP11] [I-D.ietf-httpbis-messaging]; companion document RFC 9112 --> | |||||
| <referenceanchor="HTTP11" target='https://www.rfc-editor.org/info/r | ||||||
| <referenceanchor="RFC9112" target='https://www.rfc-editor.org/info/rfc9112'> | fc9112'> | |||||
| <front> | <front> | |||||
| <title>HTTP/1.1</title> | <title>HTTP/1.1</title> | |||||
| <author initials="R." fullname="Roy Fielding" role="editor"> | <author initials="R." fullname="Roy Fielding" role="editor"> | |||||
| <organization>Adobe</organization> | <organization>Adobe</organization> | |||||
| </author> | </author> | |||||
| <author fullname="Mark Nottingham" role="editor"> | <author fullname="Mark Nottingham" role="editor"> | |||||
| <organization>Fastly</organization> | <organization>Fastly</organization> | |||||
| </author> | </author> | |||||
| <author fullname="Julian Reschke" role="editor"> | <author fullname="Julian Reschke" role="editor"> | |||||
| <organization>greenbytes GmbH</organization> | <organization>greenbytes GmbH</organization> | |||||
| </author> | </author> | |||||
| <date month="January" year="2022"/> | <date month="January" year="2022"/> | |||||
| </front> | </front> | |||||
| <seriesInfo name="RFC" value="9112"/> | <seriesInfo name="RFC" value="9112"/> | |||||
| <seriesInfo name="DOI" value="10.17487/RFC9112"/> | <seriesInfo name="DOI" value="10.17487/RFC9112"/> | |||||
| </reference> | </reference> | |||||
| <reference anchor="Err1912" | <reference anchor="Err1912" | |||||
| quote-title="false"> | quote-title="false"> | |||||
| <front> | <front> | |||||
| <title>Erratum ID 1912</title> | <title>Erratum ID 1912</title> | |||||
| <author> | <author> | |||||
| <organization>RFC Errata</organization> | <organization>RFC Errata</organization> | |||||
| </author> | </author> | |||||
| <date/> | <date/> | |||||
| </front> | </front> | |||||
| skipping to change at line 12316 ¶ | skipping to change at line 12332 ¶ | |||||
| <reference anchor="REST"> | <reference anchor="REST"> | |||||
| <front> | <front> | |||||
| <title>Architectural Styles and the Design of Network-based Software Architectures</title> | <title>Architectural Styles and the Design of Network-based Software Architectures</title> | |||||
| <author initials="R.T." surname="Fielding" fullname="Roy T. Fielding"/> | <author initials="R.T." surname="Fielding" fullname="Roy T. Fielding"/> | |||||
| <date month="September" year="2000"/> | <date month="September" year="2000"/> | |||||
| </front> | </front> | |||||
| <refcontent>Doctoral Dissertation, University of California, Irvine</refcontent> | <refcontent>Doctoral Dissertation, University of California, Irvine</refcontent> | |||||
| </reference> | </reference> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1919.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1919.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1945. | <reference anchor="HTTP10"/> | fc1945"> | ||||
| <front> | ||||||
| <title abbrev="HTTP/1.0">Hypertext Transfer Protocol -- HTTP/1 | ||||||
| .0</title> | ||||||
| <author initials="T." surname="Berners-Lee" fullname="T. Berne | ||||||
| rs-Lee"/> | ||||||
| <author initials="R." surname="Fielding" fullname="R. Fielding | ||||||
| "/> | ||||||
| <author initials="H." surname="Frystyk" fullname="H. Frystyk"/ | ||||||
| > | ||||||
| <date month="May" year="1996"/> | ||||||
| </front> | ||||||
| <seriesInfo name="RFC" value="1945"/> | ||||||
| <seriesInfo name="DOI" value="10.17487/RFC1945"/> | ||||||
| </reference> | ||||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2047.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2047.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2068.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2068.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2145.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2145.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2295.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2295.xml"/> | |||||
| <!-- long way to include the Day attribute because this is an April 1st RFC --> | <!-- long way to include the Day attribute because this is an April 1st RFC --> | |||||
| <reference anchor="RFC2324"target="https://www.rfc-editor.org/info/rfc2324"> | <reference anchor="RFC2324"target="https://www.rfc-editor.org/info/ | |||||
| <front> | rfc2324"> | |||||
| <title> | <front> | |||||
| Hyper Text Coffee Pot Control Protocol(HTCPCP/1.0) | <title>Hyper Text Coffee Pot Control Protocol(HTCPCP/1.0)</ti | |||||
| </title> | tle> | |||||
| <author initials="L." surname="Masinter" fullname="L.Masinter"> | <author initials="L." surname="Masinter" fullname="L.Masinter | |||||
| <organization/> | "/> | |||||
| </author> | <date year="1998" month="April" day="1"/> | |||||
| <date year="1998" month="April" day="1"/> | </front> | |||||
| </front> | <seriesInfo name="RFC" value="2324"/> | |||||
| <seriesInfo name="RFC" value="2324"/> | <seriesInfo name="DOI" value="10.17487/RFC2324"/> | |||||
| <seriesInfo name="DOI" value="10.17487/RFC2324"/> | </reference> | |||||
| </reference> | ||||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2557.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2557.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2616.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2616.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2617.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2617.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2774.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2774.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2818.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2818.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2978.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2978.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3040.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3040.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4033.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4033.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4559.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4559.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4918. | <reference anchor="WEBDAV"/> | fc4918"> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7540. | <front> | |||||
| xml"/> | <title>HTTP Extensions for Web Distributed Authoring and Versi | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7541. | oning (WebDAV)</title> | |||||
| xml"/> | <author initials="L." surname="Dusseault" fullname="L. Dusseau | |||||
| lt" role="editor"/> | ||||||
| <date month="June" year="2007"/> | ||||||
| </front> | ||||||
| <seriesInfo name="RFC" value="4918"/> | ||||||
| <seriesInfo name="DOI" value="10.17487/RFC4918"/> | ||||||
| </reference> | ||||||
| <reference anchor="HTTP2"> | ||||||
| <front> | ||||||
| <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title> | ||||||
| <author initials="M." surname="Belshe" fullname="M. Belshe"/> | ||||||
| <author initials="R." surname="Peon" fullname="R. Peon"/> | ||||||
| <author initials="M." | ||||||
| surname="Thomson" | ||||||
| fullname="M. Thomson" | ||||||
| role="editor"/> | ||||||
| <date year="2015" month="May"/> | ||||||
| </front> | ||||||
| <seriesInfo name="RFC" value="7540"/> | ||||||
| <seriesInfo name="DOI" value="10.17487/RFC7540"/> | ||||||
| </reference> | ||||||
| <reference anchor="HPACK"> | ||||||
| <front> | ||||||
| <title>HPACK: Header Compression for HTTP/2</title> | ||||||
| <author initials="R." surname="Peon" fullname="R. Peon"/> | ||||||
| <author initials="H." surname="Ruellan" fullname="H. Ruellan"/ | ||||||
| > | ||||||
| <date year="2015" month="May"/> | ||||||
| </front> | ||||||
| <seriesInfo name="RFC" value="7541"/> | ||||||
| <seriesInfo name="DOI" value="10.17487/RFC7541"/> | ||||||
| </reference> | ||||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5905.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5905.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6454.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6454.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7230.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7230.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7231.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7231.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7232.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7232.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7233.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7233.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7234.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7234.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7235.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7235.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7578.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7578.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7615.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7615.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7838. | <reference anchor="ALTSVC"/> | fc7838"> | ||||
| <front> | ||||||
| <title>HTTP Alternative Services</title> | ||||||
| <author initials="M." surname="Nottingham" fullname="M. Nottin | ||||||
| gham"/> | ||||||
| <author initials="P." surname="McManus" fullname="P. McManus"/ | ||||||
| > | ||||||
| <author initials="J." surname="Reschke" fullname="J. Reschke"/ | ||||||
| > | ||||||
| <date year="2016" month="April"/> | ||||||
| </front> | ||||||
| <seriesInfo name="RFC" value="7838"/> | ||||||
| <seriesInfo name="DOI" value="10.17487/RFC7838"/> | ||||||
| </reference> | ||||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8336.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8336.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8615.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8615.xml"/> | |||||
| <!-- [HTTP3][I-D.ietf-quic-http] in RFC-EDIOTR*R state as of 12/17/21; companion document RFC 9113 --> | <!-- [HTTP3][I-D.ietf-quic-http] in RFC-EDITOR*R state as of 1/6/2022; companion document RFC 9113 --> | |||||
| <!--[rfced] FYI - we have updated the reference for I-D.ietf-quic-http | <!--[rfced] FYI - we have updated the reference for I-D.ietf-quic-http | |||||
| to point to RFC-to-be 9113. Note that keeping the reference in | to point to RFC-to-be 9113. Note that keeping the reference in | |||||
| that form will depend on that document's movement through our | that form will depend on that document's movement through our | |||||
| queue. If not ready to be published simultaneously with this | queue. If not ready to be published simultaneously with this | |||||
| document, we will revert to pointing to the I-D form.--> | document, we will revert to pointing to the I-D form.--> | |||||
| <referenceanchor='HTTP3' target='https://www.rfc-editor.org/info/rf | ||||||
| <referenceanchor='RFC9113' target='https://www.rfc-editor.org/info/rfc9113'> | c9113'> | |||||
| <front> | <front> | |||||
| <title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title> | <title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title> | |||||
| <author initials='M' surname='Bishop' fullname='Mike Bishop'role="editor"> | <author initials='M' surname='Bishop' fullname='Mike Bishop'r | |||||
| <organization /> | ole="editor"> | |||||
| </author> | <organization /> | |||||
| <date year='2022' month='January' /> | </author> | |||||
| </front> | <date year='2022' month='January' /> | |||||
| <seriesInfo name="RFC" value="9113"/> | </front> | |||||
| <seriesInfo name="DOI" value="10.17487/RFC9113"/> | <seriesInfo name="RFC" value="9113"/> | |||||
| </reference> | <seriesInfo name="DOI" value="10.17487/RFC9113"/> | |||||
| </reference> | ||||||
| <!-- [rfced] Section 8.3.1 and Informative References. The current | <!-- [rfced] Section 8.3.1 and Informative References. The current | |||||
| reference entry in this document for [BCP13] includes only RFC | reference entry in this document for [BCP13] includes only RFC | |||||
| 6838. However, BCP 13 also includes RFC 4289. Should the | 6838. However, BCP 13 also includes RFC 4289. Should the | |||||
| reference include both RFCs? Or should [BCP13] be changed to | reference include both RFCs? Or should [BCP13] be changed to | |||||
| [RFC6838]? | [RFC6838]? | |||||
| Current: | Current: | |||||
| Media types ought to be registered with IANA according to the | Media types ought to be registered with IANA according to the | |||||
| procedures defined in [BCP13]. | procedures defined in [BCP13]. | |||||
| skipping to change at line 12439 ¶ | skipping to change at line 12499 ¶ | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7595.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7595.xml"/> | |||||
| </referencegroup> | </referencegroup> | |||||
| <referencegroup anchor="BCP178"> | <referencegroup anchor="BCP178"> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6648.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6648.xml"/> | |||||
| </referencegroup> | </referencegroup> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3864.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3864.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3875.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3875.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5789.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5789.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6265. | <reference anchor="COOKIE"/> | fc6265"> | ||||
| <front> | ||||||
| <title>HTTP State Management Mechanism</title> | ||||||
| <author initials="A." surname="Barth" fullname="Adam Barth"/> | ||||||
| <date year="2011" month="April"/> | ||||||
| </front> | ||||||
| <seriesInfo name="RFC" value="6265"/> | ||||||
| <seriesInfo name="DOI" value="10.17487/RFC6265"/> | ||||||
| </reference> | ||||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6585.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6585.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7538.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7538.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7616.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7616.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7617.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7617.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7694.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7694.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8187.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8187.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8246.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8246.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8288.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8288.xml"/> | |||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8941.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8941.xml"/> | |||||
| skipping to change at line 12775 ¶ | skipping to change at line 12843 ¶ | |||||
| (<xref/>). | (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The priority of the absolute form of the request URI over the Host | The priority of the absolute form of the request URI over the Host | |||||
| header field by origin servers has been made explicit to align with proxy handling | header field by origin servers has been made explicit to align with proxy handling | |||||
| (<xref/>). | (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The grammar definition for the Via field's "received-by" was | The grammar definition for the Via field's "received-by" was | |||||
| expanded in RFC 7230 due to changes in the URI grammar for host | expanded in RFC 7230 due to changes in the URI grammar for host | |||||
| <xref/> that are not desirable for Via. For simplicity, | <xref/> that are not desirable for Via. For simplicity, | |||||
| we have removed uri-host from the received-by production because it can | we have removed uri-host from the received-by production because it can | |||||
| be encompassed by the existing grammar for pseudonym. In particular, this | be encompassed by the existing grammar for pseudonym. In particular, this | |||||
| change removed comma from the allowed set of characters for a host name in | change removed comma from the allowed set of characters for a host name in | |||||
| received-by | received-by | |||||
| (<xref/>). | (<xref/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="changes.from.rfc.7231" title="Changes from RFC 7231"> | <section anchor="changes.from.rfc.7231" title="Changes from RFC 7231"> | |||||
| <!-- [rfced] Appendix B.3. Would Section 4.1 (URI References) be a | <!-- [rfced] Appendix B.3. Would Section 4.1 (URI References) be a | |||||
| better cross reference for the following? | better cross reference for the following? | |||||
| skipping to change at line 12810 ¶ | skipping to change at line 12878 ¶ | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Parameters in media type, media range, and expectation can be empty via | Parameters in media type, media range, and expectation can be empty via | |||||
| one or more trailing semicolons | one or more trailing semicolons | |||||
| (<xref/>). | (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| An abstract data type for HTTP messages has been introduced to define the | An abstract data type for HTTP messages has been introduced to define the | |||||
| components of a message and their semantics as an abstraction across | components of a message and their semantics as an abstraction across | |||||
| multiple HTTP versions, rather than in terms of the specific syntax form of | multiple HTTP versions, rather than in terms of the specific syntax form of | |||||
| HTTP/1.1 in <xref/>, and reflect the contents after the | HTTP/1.1 in <xref/>, and reflect the contents after the | |||||
| message is parsed. This makes it easier to distinguish between requirements | message is parsed. This makes it easier to distinguish between requirements | |||||
| on the content (what is conveyed) versus requirements on the messaging | on the content (what is conveyed) versus requirements on the messaging | |||||
| syntax (how it is conveyed) and avoids baking limitations of early protocol | syntax (how it is conveyed) and avoids baking limitations of early protocol | |||||
| versions into the future of HTTP (<xref/>). | versions into the future of HTTP (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| The terms "payload" and "payload body" have been replaced with "content", to better | The terms "payload" and "payload body" have been replaced with "content", to better | |||||
| align with its usage elsewhere (e.g., in field names) and to avoid confusion | align with its usage elsewhere (e.g., in field names) and to avoid confusion | |||||
| with frame payloads in HTTP/2 and HTTP/3 | with frame payloads in HTTP/2 and HTTP/3 | |||||
| (<xref/>). | (<xref/>). | |||||
| skipping to change at line 12893 ¶ | skipping to change at line 12961 ¶ | |||||
| The process of creating a redirected request has been clarified | The process of creating a redirected request has been clarified | |||||
| (<xref/>). | (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Status code 308 (previously defined in <xref/>) | Status code 308 (previously defined in <xref/>) | |||||
| has been added so that it's defined closer to status codes 301, 302, and 307 | has been added so that it's defined closer to status codes 301, 302, and 307 | |||||
| (<xref/>). | (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Status code 421 (previously defined in | Status code 421 (previously defined in | |||||
| <xref section="9.1.2"/>) has been added because of its general | <xref section="9.1.2"/>) has been added because of its general | |||||
| applicability. 421 is no longer defined as heuristically cacheable since | applicability. 421 is no longer defined as heuristically cacheable since | |||||
| the response is specific to the connection (not the target resource) | the response is specific to the connection (not the target resource) | |||||
| (<xref/>). | (<xref/>). | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| Status code 422 (previously defined in | Status code 422 (previously defined in | |||||
| <xref section="11.2"/>) has been added because of its general | <xref section="11.2"/>) has been added because of its general | |||||
| applicability | applicability | |||||
| (<xref/>). | (<xref/>). | |||||
| </t> | </t> | |||||
| </section> | </section> | |||||
| <section anchor="changes.from.rfc.7232" title="Changes from RFC 7232"> | <section anchor="changes.from.rfc.7232" title="Changes from RFC 7232"> | |||||
| <t> | <t> | |||||
| Previous revisions of HTTP imposed an arbitrary 60-second limit on the | Previous revisions of HTTP imposed an arbitrary 60-second limit on the | |||||
| determination of whether Last-Modified was a strong validator to guard | determination of whether Last-Modified was a strong validator to guard | |||||
| against the possibility that the Date and Last-Modified values are | against the possibility that the Date and Last-Modified values are | |||||
| generated from different clocks or at somewhat different times during the | generated from different clocks or at somewhat different times during the | |||||
| skipping to change at line 13015 ¶ | skipping to change at line 13083 ¶ | |||||
| <contact fullname="Ari Luotonen"/>, <contact fullname="Larry Masinter"/>, <contact fullname="Rob McCool"/>, | <contact fullname="Ari Luotonen"/>, <contact fullname="Larry Masinter"/>, <contact fullname="Rob McCool"/>, | |||||
| <contact fullname="Jeffrey C. Mogul"/>, <contact fullname="Lou Montulli"/>, | <contact fullname="Jeffrey C. Mogul"/>, <contact fullname="Lou Montulli"/>, | |||||
| <contact fullname="David Morris"/>, <contact fullname="Henrik Frystyk Nielsen"/>, <contact fullname="Dave Raggett"/>, <contact fullname="Eric Rescorla"/>, | <contact fullname="David Morris"/>, <contact fullname="Henrik Frystyk Nielsen"/>, <contact fullname="Dave Raggett"/>, <contact fullname="Eric Rescorla"/>, | |||||
| <contact fullname="Tony Sanders"/>, <contact fullname="Lawrence C. Stewart"/>, | <contact fullname="Tony Sanders"/>, <contact fullname="Lawrence C. Stewart"/>, | |||||
| <contact fullname="Marc VanHeyningen"/>, and <contact fullname="Steve Zilles"/>. | <contact fullname="Marc VanHeyningen"/>, and <contact fullname="Steve Zilles"/>. | |||||
| </t> | </t> | |||||
| <t> | <t> | |||||
| This document builds on the many contributions | This document builds on the many contributions | |||||
| that went into past specifications of HTTP, including | that went into past specifications of HTTP, including | |||||
| <xref format="default">RFC 1945</xref>, | <xref format="default">RFC 1945</xref>, | |||||
| <xref format="default">RFC 2068</xref>, | <xref format="default">RFC 2068</xref>, | |||||
| <xref format="default">RFC 2145</xref>, | <xref format="default">RFC 2145</xref>, | |||||
| <xref format="default">RFC 2616</xref>, | <xref format="default">RFC 2616</xref>, | |||||
| <xref format="default">RFC 2617</xref>, | <xref format="default">RFC 2617</xref>, | |||||
| <xref format="default">RFC 2818</xref>, | <xref format="default">RFC 2818</xref>, | |||||
| <xref format="default">RFC 7230</xref>, | <xref format="default">RFC 7230</xref>, | |||||
| <xref format="default">RFC 7231</xref>, | <xref format="default">RFC 7231</xref>, | |||||
| <xref format="default">RFC 7232</xref>, | <xref format="default">RFC 7232</xref>, | |||||
| <xref format="default">RFC 7233</xref>, | <xref format="default">RFC 7233</xref>, | |||||
| <xref format="default">RFC 7234</xref>, and | <xref format="default">RFC 7234</xref>, and | |||||
| End of changes. 123 change blocks. | ||||||
| 225 lines changed or deleted | 315 lines changed or added | |||||
This html diff was produced by rfcdiff 1.48. The latest version is available fromhttp://tools.ietf.org/tools/rfcdiff/ | ||||||