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 pathn ame. | request transfer of a presumed hypertext document identified by a given pathn ame. | |||
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 target="RFC1945"/>). | defined as HTTP/0.9 and HTTP/1.0 (see <xref target="HTTP10"/>). | |||
</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 target="RFC2068"/>, revised in | the Standards Track in 1997 <xref target="RFC2068"/>, revised in | |||
1999 <xref target="RFC2616"/>, and revised again in 2014 | 1999 <xref target="RFC2616"/>, and revised again in 2014 | |||
(<xref target="RFC7230"/> through <xref target="RFC7235"/>). | (<xref target="RFC7230"/> through <xref target="RFC7235"/>). | |||
</t> | </t> | |||
<t> | <t> | |||
HTTP/2 <xref target="RFC7540"/> introduced a multiplexed session layer | HTTP/2 <xref target="HTTP2"/> 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 target="RFC9113"/> provides greater independence for concurrent | HTTP/3 <xref target="HTTP3"/> 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 <xref target="RFC9111"/> from the current HTTP/1.1 messaging | and caching <xref target="CACHING"/> from the current HTTP/1.1 messaging | |||
syntax <xref target="RFC9112"/> to allow each major protocol version | syntax <xref target="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 target="resources"/>) -- regardless of its type, nature, or | (<xref target="resources"/>) -- regardless of its type, nature, or | |||
implementation -- by sending messages that manipulate or transfer | implementation -- by sending messages that manipulate or transfer | |||
representations (<xref target="representations"/>). | representations (<xref target="representations"/>). | |||
</t> | </t> | |||
skipping to change at line 344 ¶ | skipping to change at line 344 ¶ | |||
<xref target="changes.from.rfc.7694" format="counter"/> | <xref target="changes.from.rfc.7694" 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 target="RFC7230" format="none">RFC 7230</xref> that are independent of | <xref target="RFC7230" 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 target="RFC7230" format="none">RFC 7230</xref> are | bits of <xref target="RFC7230" format="none">RFC 7230</xref> are | |||
obsoleted by "HTTP/1.1" <xref target="RFC9112"/>. | obsoleted by "HTTP/1.1" <xref target="HTTP11"/>. | |||
</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 target="extending"/>). | the use of defined extension points (<xref target="extending"/>). | |||
</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" <xref target="RFC9111"/>, | specifications of this document, "HTTP Caching" <xref target="CACHING"/>, | |||
and "HTTP/1.1" <xref target="RFC9112"/>. | and "HTTP/1.1" <xref target="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 target="methods"/>) and a few | semantics in the request method (<xref target="methods"/>) 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 target="safe.methods"/>). | safe method (see <xref target="safe.methods"/>). | |||
</t> | </t> | |||
<t> | <t> | |||
HTTP relies upon the Uniform Resource Identifier (URI) | HTTP relies upon the Uniform Resource Identifier (URI) | |||
standard <xref target="RFC3986"/> to indicate the target resource | standard <xref target="URI"/> to indicate the target resource | |||
(<xref target="target.resource"/>) and relationships between resources. | (<xref target="target.resource"/>) 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 target="RFC8446"/>) is used to | Transport Layer Security (TLS, <xref target="TLS13"/>) 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 target="RFC9111"/>. | defined in <xref target="CACHING"/>. | |||
</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 distributio n of popular sites, | networks that use gateway caching to optimize regional and global distributio n 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 target="RFC3986"/> are used | Uniform Resource Identifiers (URIs) <xref target="URI"/> are used | |||
throughout HTTP as the means for identifying resources (<xref target="resourc es"/>). | throughout HTTP as the means for identifying resources (<xref target="resourc es"/>). | |||
</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 target="RFC0793"/> connections on a given port. | listening for TCP <xref target="TCP"/> 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" "://" au thority path-abempty [ "?" query ] | <sourcecode type="abnf7230"><![CDATA[ http-URI = "http" "://" au thority 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 target="uri.references" format="none">authority</xref> component, which includes a host identifier | <xref target="uri.references" format="none">authority</xref> component, which includes a host identifier | |||
(<xref target="RFC3986" sectionFormat="comma" section="3.2.2"/>) | (<xref target="URI" sectionFormat="comma" section="3.2.2"/>) | |||
and optional port number (<xref target="RFC3986" sectionFormat="comma" sectio | and optional port number (<xref target="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 target="http.origin"/>. | <xref target="http.origin"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
A sender <bcp14>MUST NOT</bcp14> generate an "http" URI with an empty host id entifier. | A sender <bcp14>MUST NOT</bcp14> generate an "http" URI with an empty host id entifier. | |||
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 target="RFC8446"/> connection that has been secured for HTTP | <xref target="TLS13"/> 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 target="uri.references" format="none">authority</xref> component, which includes a host identifier | <xref target="uri.references" format="none">authority</xref> component, which includes a host identifier | |||
(<xref target="RFC3986" sectionFormat="comma" section="3.2.2"/>) | (<xref target="URI" sectionFormat="comma" section="3.2.2"/>) | |||
and optional port number (<xref target="RFC3986" sectionFormat="comma" sectio | and optional port number (<xref target="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 target="https.origin"/>. | <xref target="https.origin"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
A sender <bcp14>MUST NOT</bcp14> generate an "https" URI with an empty host i dentifier. | A sender <bcp14>MUST NOT</bcp14> generate an "https" URI with an empty host i dentifier. | |||
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" res ource are | A client <bcp14>MUST</bcp14> ensure that its HTTP requests for an "https" res ource 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 target="RFC6265"/>, | the same host, such as the Cookie protocol <xref target="COOKIE"/>, | |||
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 Co mparison"> | <section anchor="uri.comparison" title="http(s) Normalization and Co mparison"> | |||
<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 target="RFC3986" section="6"/>, using | methods defined in <xref target="URI" 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 target="RFC3986" section="6.2.3"/>) of "htt p" and "https" URIs involves the following | Scheme-based normalization (<xref target="URI" section="6.2.3"/>) of "http" a nd "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, a n empty path | <li>When not being used as the target of an OPTIONS request, a n 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 prov ided in | <li>The scheme and host are case-insensitive and normally prov ided 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 equi valent to | <li>Characters other than those in the "reserved" set are equi valent 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 target="RFC3986" sectionFormat="bare" section="2.1"/> and <xre f target="RFC3986" sectionFormat="bare" section="2.2"/> of <xref target="RFC3986 "/>).</li> | Sections <xref target="URI" sectionFormat="bare" section="2.1"/> and <xref ta rget="URI" sectionFormat="bare" section="2.2"/> of <xref target="URI"/>).</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>M AY</bcp14> | can be assumed to identify the same resource, and any HTTP component <bcp14>M AY</bcp14> | |||
perform normalization. As a result, distinct resources <bcp14>SHOULD NOT</bcp 14> be | perform normalization. As a result, distinct resources <bcp14>SHOULD NOT</bcp 14> 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 target="RFC3986" section="6.2"/>). | method defined in <xref target="URI" section="6.2"/>). | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="http.userinfo" title="Deprecation of userinfo in ht tp(s) URIs"> | <section anchor="http.userinfo" title="Deprecation of userinfo in ht tp(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 target="RFC3986" sectionFormat="comma" section="3.2.1"/>) for includin g user | (<xref target="URI" sectionFormat="comma" section="3.2.1"/>) for including us er | |||
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 target="RFC3986" section="3.5"/>. | <xref target="URI" 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 target="RFC3986" section="4.3"/>), | definition for a URI scheme (see <xref target="URI" 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="target.resource"/>). | target URI (<xref target="target.resource"/>). | |||
</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 target="status.codes"/>, then that response | message, as described in <xref target="status.codes"/>, 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 target="RFC9111"/>). | is always necessary (see <xref target="CACHING"/>). | |||
For example, the Alt-Svc header field <xref target="RFC7838"/> allows an | For example, the Alt-Svc header field <xref target="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 target="https.uri"/>) associates authority based | The "https" scheme (<xref target="https.uri"/>) 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 target="target.resource"/>). | (<xref target="target.resource"/>). | |||
</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 target="status.codes"/>, then that response | message, as described in <xref target="status.codes"/>, 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 target="RFC9111"/>). | is always necessary (see <xref target="CACHING"/>). | |||
</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 target="https.uri" format="none">secured</xref> connecti on to dereference a URI, | To establish a <xref target="https.uri" format="none">secured</xref> connecti on to dereference a URI, | |||
a client <bcp14>MUST</bcp14> verify that the service's identity is an accepta ble | a client <bcp14>MUST</bcp14> verify that the service's identity is an accepta ble | |||
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 dis ables | Automated clients <bcp14>MAY</bcp14> provide a configuration setting that dis ables | |||
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 target="RFC3986" section="3.2.2"/>. A reference identity of | <xref target="URI" 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 target="RFC5280" section="4.2.1.6"/>. | <xref target="RFC5280" 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 target="abnf.extension"/>). | #(values) defined in <xref target="abnf.extension"/>). | |||
</t> | </t> | |||
<aside> | <aside> | |||
<t> | <t> | |||
<strong>Note:</strong> In practice, the "Set-Cookie" header fi eld <xref target="RFC6265"/> | <strong>Note:</strong> In practice, the "Set-Cookie" header fi eld <xref target="COOKIE"/> | |||
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 target="Kri2001"/> for | processing fields. (See Appendix A.2.3 of <xref target="Kri2001"/> 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 target="conformance"/>. Various ad hoc limitations on individual | <xref target="conformance"/>. 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 a ppropriate | fields larger than it wishes to process <bcp14>MUST</bcp14> respond with an a ppropriate | |||
<xref target="status.4xx" format="none">4xx (Client Error)</xref> status code . Ignoring such header fields | <xref target="status.4xx" 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 target="RFC9112" section="11.2"/>). | (<xref target="HTTP11" 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 target="RFC9111" section="4.2"/> relaxes this for cache recipients. | HTTP-date is case sensitive. Note that <xref target="CACHING" section="4.2"/> relaxes this for cache recipients. | |||
</t> | </t> | |||
<t> | <t> | |||
A sender <bcp14>MUST NOT</bcp14> generate additional whitespace in an HTTP-da te beyond | A sender <bcp14>MUST NOT</bcp14> generate additional whitespace in an HTTP-da te beyond | |||
that specifically included as SP in the grammar. | that specifically included as SP in the grammar. | |||
The semantics of <xref target="preferred.date.format" format="none">day-name< /xref>, <xref target="preferred.date.format" format="none">day</xref>, | The semantics of <xref target="preferred.date.format" format="none">day-name< /xref>, <xref target="preferred.date.format" format="none">day</xref>, | |||
<xref target="preferred.date.format" format="none">month</xref>, <xref target ="preferred.date.format" format="none">year</xref>, and <xref target="preferred. date.format" format="none">time-of-day</xref> | <xref target="preferred.date.format" format="none">month</xref>, <xref target ="preferred.date.format" format="none">year</xref>, and <xref target="preferred. date.format" 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 target="RFC5322" sectionFormat="comma" sec tion="3.3"/>). | with the corresponding name (<xref target="RFC5322" sectionFormat="comma" sec tion="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 target="methods"/>), | message control data includes a request method (<xref target="methods"/>), | |||
request target (<xref target="target.resource"/>), and protocol version | request target (<xref target="target.resource"/>), and protocol version | |||
(<xref target="protocol.version"/>). Response message control data includes | (<xref target="protocol.version"/>). Response message control data includes | |||
a status code (<xref target="status.codes"/>), optional reason phrase, and | a status code (<xref target="status.codes"/>), optional reason phrase, and | |||
protocol version. | protocol version. | |||
</t> | </t> | |||
<t> | <t> | |||
In HTTP/1.1 <xref target="RFC9112"/> and earlier, control data is sent | In HTTP/1.1 <xref target="HTTP11"/> and earlier, control data is sent | |||
as the first line of a message. In HTTP/2 <xref target="RFC7540"/> and | as the first line of a message. In HTTP/2 <xref target="HTTP2"/> and | |||
HTTP/3 <xref target="RFC9113"/>, control data is sent as pseudo-header | HTTP/3 <xref target="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 target="RFC9112" section="6"/>) might consist of a stream of data enco ded | (<xref target="HTTP11" section="6"/>) might consist of a stream of data encod ed | |||
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 target="trailer.fields"/>). | trailer fields (<xref target="trailer.fields"/>). | |||
</t> | </t> | |||
<aside> | <aside> | |||
<t> | <t> | |||
<strong>Note:</strong> Some field names have a "Content-" pref ix. This is an informal | <strong>Note:</strong> Some field names have a "Content-" pref ix. 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 target="RFC9112" section="7.1.2"/>). | sent after the content (<xref target="HTTP11" 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 k nows the | A sender <bcp14>MUST NOT</bcp14> generate a trailer field unless the sender k nows 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 target="uri.references"/>). | effect as a URI reference (<xref target="uri.references"/>). | |||
</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 target="RFC3986" sectionFormat="comma" section= "3.5"/>). | client-side processing (<xref target="URI" 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 target="field.host" format="none">Host</xref> header field (<xr ef target="field.host"/>). | and the <xref target="field.host" format="none">Host</xref> header field (<xr ef target="field.host"/>). | |||
</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 NO T</bcp14> | See the respective method definitions for details. These forms <bcp14>MUST NO T</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 target="RFC9112" section="3.3"/> defines how a server | <xref target="HTTP11" 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 rec omposed target URI as a | <strong>Note:</strong> Previous specifications defined the rec omposed 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 target="RFC7540"/> and HTTP/3 <xref target="RFC9113"/>, the | In HTTP/2 <xref target="HTTP2"/> and HTTP/3 <xref target="HTTP3"/>, 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 r equest | request. A user agent <bcp14>MUST</bcp14> generate a Host header field in a r equest | |||
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 target="RFC9111"/> and the request can be | If the client has a cache <xref target="CACHING"/> 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 target="message.framing"/>). Likewis e, clients are not expected | corresponding request is complete (<xref target="message.framing"/>). Likewis e, 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 receive s | request <bcp14>SHOULD</bcp14> continue sending that request unless it receive s | |||
an explicit indication to the contrary (see, e.g., <xref target="RFC9112" sec tion="9.5"/> and <xref target="RFC7540" section="6.4"/>). | an explicit indication to the contrary (see, e.g., <xref target="HTTP11" sect ion="9.5"/> and <xref target="HTTP2" 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 target="intermediaries"/>, intermediaries can serve | As described in <xref target="intermediaries"/>, 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 limi ted to: | option, after applying those fields' semantics. This includes but is not limi ted to: | |||
</t> | </t> | |||
<ul> | <ul> | |||
<li>Proxy-Connection (<xref target="RFC9112" section="C.2.2"/> )</li> | <li>Proxy-Connection (<xref target="HTTP11" section="C.2.2"/>) </li> | |||
<li>Keep-Alive (<xref target="RFC2068" section="19.7.1"/>)</li > | <li>Keep-Alive (<xref target="RFC2068" section="19.7.1"/>)</li > | |||
<li>TE (<xref target="field.te"/>)</li> | <li>TE (<xref target="field.te"/>)</li> | |||
<li>Transfer-Encoding (<xref target="RFC9112" section="6.1"/>) </li> | <li>Transfer-Encoding (<xref target="HTTP11" section="6.1"/>)< /li> | |||
<li>Upgrade (<xref target="field.upgrade"/>)</li> | <li>Upgrade (<xref target="field.upgrade"/>)</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 = #conne ction-option | <sourcecode type="abnf7230"><![CDATA[ Connection = #conne ction-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 target="RFC9111" section="5.2"/>). | connection option (<xref target="CACHING" 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> cha nge the | it received when forwarding the request. A proxy <bcp14>MUST NOT</bcp14> cha nge 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 target="RFC9112" section="3.2.1"/>) or "*" (<xref target="RFC9112" section="3.2.4"/>), | "/" (<xref target="HTTP11" section="3.2.1"/>) or "*" (<xref target="HTTP11" s ection="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 target="content" />) of a message that | A proxy <bcp14>MUST NOT</bcp14> transform the content (<xref target="content" />) of a message that | |||
contains a "no-transform" Cache-Control response directive (<xref target="RFC 9111" section="5.2"/>). | contains a "no-transform" Cache-Control response directive (<xref target="CAC HING" section="5.2"/>). | |||
Note that this does not include changes to the message body that do not affec t | Note that this does not include changes to the message body that do not affec t | |||
the content, such as transfer codings (<xref target="RFC9112" section="7"/>). | the content, such as transfer codings (<xref target="HTTP11" 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 target="status.200" format="no ne">200 (OK)</xref> response | A proxy that transforms the content of a <xref target="status.200" format="no ne">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 target="status.203" format="none">203 (Non-Authoritative Information)</ xref> (<xref target="status.203"/>). | <xref target="status.203" format="none">203 (Non-Authoritative Information)</ xref> (<xref target="status.203"/>). | |||
</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 he ader field | that applied the encodings <bcp14>MUST</bcp14> generate a Content-Encoding he ader 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 target="field.accept-encoding" format="none">Accept-Encoding</xref> and thus <bcp14>SHOULD NOT</bcp14> be included. | in <xref target="field.accept-encoding" 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 target="RFC9112" section="6.1"/>), the coding s listed | Unlike Transfer-Encoding (<xref target="HTTP11" 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 target="RFC9112" section="6.2"/>). | delimit framing (e.g., <xref target="HTTP11" 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 target="status.200" format="none"> 200 (OK)</xref> response would | of this message's generation, then a <xref target="status.200" 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-U RI / partial-URI | <sourcecode type="abnf7230"><![CDATA[ Content-Location = absolute-U RI / partial-URI | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The field value is either an <xref target="uri.references" format="none">abso lute-URI</xref> or a | The field value is either an <xref target="uri.references" format="none">abso lute-URI</xref> or a | |||
<xref target="uri.references" format="none">partial-URI</xref>. In the latter case (<xref target="uri"/>), | <xref target="uri.references" format="none">partial-URI</xref>. In the latter case (<xref target="uri"/>), | |||
the referenced URI is relative to the target URI | the referenced URI is relative to the target URI | |||
(<xref target="RFC3986" sectionFormat="comma" section="5"/>). | (<xref target="URI" 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 target="target.resource"/>). It is representation metadata. | (<xref target="target.resource"/>). 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 target="RFC2557" section="4"/>. | defined for MIME body parts in <xref target="RFC2557" 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 target="field.last-modified"/>) and opaque entity tags | (<xref target="field.last-modified"/>) and opaque entity tags | |||
(<xref target="field.etag"/>). | (<xref target="field.etag"/>). | |||
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 target="RFC4918"/>, that are beyond the | Authoring and Versioning <xref target="WEBDAV"/>, that are beyond the | |||
scope of this specification. | scope of this specification. | |||
</t> | </t> | |||
<section anchor="weak.and.strong.validators" title="Weak versus Stro ng"> | <section anchor="weak.and.strong.validators" title="Weak versus Stro ng"> | |||
<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 N ov 1994 12:45:26 GMT | <sourcecode type="http-message"><![CDATA[Last-Modified: Tue, 15 N ov 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 target="RFC9111"/> can | and evaluating cache freshness <xref target="CACHING"/> 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 represen tation | An origin server <bcp14>SHOULD</bcp14> send an ETag for any selected represen tation | |||
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 target="RFC9111"/> can | evaluating cache freshness <xref target="CACHING"/> 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 target="RFC9112" section="7"/>) apply only during me ssage transfer | transfer codings (<xref target="HTTP11" section="7"/>) apply only during mes sage 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 ret ry. | A client <bcp14>SHOULD NOT</bcp14> automatically retry a failed automatic ret ry. | |||
</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 target="RFC9111 "/>. | do so cannot be cached. For additional requirements see <xref target="CACHING "/>. | |||
</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 target="selected.representation" format="none">selected representation< /xref> for the | <xref target="selected.representation" format="none">selected representation< /xref> for the | |||
<xref target="target.resource" format="none">target resource</xref>. | <xref target="target.resource" 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 target="RFC3986" section="1.2.2"/>). Hence, | the target URI (<xref target="URI" 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 target="status.200" format="none">200 ( OK)</xref> response. | providing that information in a <xref target="status.200" 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 target="field.range" format="none">Range</xref> header field in the req uest (<xref target="field.range"/>). | <xref target="field.range" format="none">Range</xref> header field in the req uest (<xref target="field.range"/>). | |||
</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 target="RFC9112" section="11.2"/>). | (<xref target="HTTP11" section="11.2"/>). | |||
A client <bcp14>SHOULD NOT</bcp14> generate content in a GET request unless i t is | A client <bcp14>SHOULD NOT</bcp14> generate content in a GET request unless i t 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 agreeme nts to | supported. An origin server <bcp14>SHOULD NOT</bcp14> rely on private agreeme nts 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 target="RFC9111" section="5.2"/>). | Cache-Control header field (<xref target="CACHING" 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 target="sensitive.information.in.uris"/>). In some cases, the | (see <xref target="sensitive.information.in.uris"/>). 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 target="POST"/>) instead of GET | a response, using the POST method (<xref target="POST"/>) 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 target="RFC9112" section="11.2"/>). | (<xref target="HTTP11" 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 agreeme nts to | supported. An origin server <bcp14>SHOULD NOT</bcp14> rely on private agreeme nts 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 i t to | The response to a HEAD request is cacheable; a cache <bcp14>MAY</bcp14> use i t to | |||
satisfy subsequent HEAD requests unless otherwise indicated by the | satisfy subsequent HEAD requests unless otherwise indicated by the | |||
Cache-Control header field (<xref target="RFC9111" section="5.2"/>). | Cache-Control header field (<xref target="CACHING" 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 target="RFC9111" section="4.3.5"/>. | see <xref target="CACHING" 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 target="target.resource" format="none ">target resource</xref> process | The POST method requests that the <xref target="target.resource" 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 target="RFC9111" section="4.2.1"/>) and a | freshness information (see <xref target="CACHING" section="4.2.1"/>) and a | |||
<xref target="field.content-location" format="none">Content-Location</xref> h eader field that has the same value as | <xref target="field.content-location" format="none">Content-Location</xref> h eader field that has the same value as | |||
the POST's target URI (<xref target="field.content-location"/>). A cached POS T response can be reused | the POST's target URI (<xref target="field.content-location"/>). A cached POS T 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 target="RFC9111" section="4"/>. | unsafe; see <xref target="CACHING" 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 use r agent to | of an existing resource, an origin server <bcp14>MAY</bcp14> redirect the use r agent to | |||
that resource by sending a <xref target="status.303" format="none">303 (See O ther)</xref> response with the | that resource by sending a <xref target="status.303" format="none">303 (See O ther)</xref> response with the | |||
existing resource's identifier in the <xref target="field.location" format="n one">Location</xref> field. | existing resource's identifier in the <xref target="field.location" format="n one">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 target="field.content-range" for mat="none">Content-Range</xref> header | Some origin servers support use of the <xref target="field.content-range" for mat="none">Content-Range</xref> header | |||
field (<xref target="field.content-range"/>) as a request modifier to | field (<xref target="field.content-range"/>) as a request modifier to | |||
perform a partial PUT, as described in <xref target="partial.PUT"/>. | perform a partial PUT, as described in <xref target="partial.PUT"/>. | |||
</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 target="RFC9111" section="4.4"/>). | (see <xref target="CACHING" 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 target="target.resource" format="none">target resource</xre f> and its current functionality. | between the <xref target="target.resource" format="none">target resource</xre f> 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 target="status.200" format="none">200 (OK)</xref> status code if the action has been enacted and | <li>a <xref target="status.200" 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 target="RFC9112" section="11.2"/>). | (<xref target="HTTP11" section="11.2"/>). | |||
A client <bcp14>SHOULD NOT</bcp14> generate content in a DELETE request unles s it is | A client <bcp14>SHOULD NOT</bcp14> generate content in a DELETE request unles s 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 agreeme nts to | supported. An origin server <bcp14>SHOULD NOT</bcp14> rely on private agreeme nts 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 target="RFC9111" section="4.4"/>). | <xref target="CACHING" 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 target="RFC8446"/>). | (Transport Layer Security, <xref target="TLS13"/>). | |||
</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 target="uri.references"/>). For example, | (<xref target="uri.references"/>). For example, | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[CONNECT server.example.c om:80 HTTP/1.1 | <sourcecode type="http-message"><![CDATA[CONNECT server.example.c om: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> ref lect the | request message. The final recipient of the request <bcp14>SHOULD</bcp14> ref lect 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 target="status.200" format="none">200 (OK)</xref> r esponse. The "message/http" | as the content of a <xref target="status.200" format="none">200 (OK)</xref> r esponse. The "message/http" | |||
format (<xref target="RFC9112" section="10.1"/>) is one way to do so. | format (<xref target="HTTP11" 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 target="field.max-forwards" format="none">Max-Forwards</xref> value of zero (0) in the request | receive a <xref target="field.max-forwards" format="none">Max-Forwards</xref> value of zero (0) in the request | |||
(<xref target="field.max-forwards"/>). | (<xref target="field.max-forwards"/>). | |||
</t> | </t> | |||
<t> | <t> | |||
A client <bcp14>MUST NOT</bcp14> generate fields in a TRACE request containin g | A client <bcp14>MUST NOT</bcp14> generate fields in a TRACE request containin g | |||
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 target="authentication"/>) or cookies <xref target="RFC6265"/> in a TR ACE | (<xref target="authentication"/>) or cookies <xref target="COOKIE"/> in a TRA CE | |||
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 target="field.via" format="none">Via</xre f> header field (<xref target="field.via"/>) | information. The value of the <xref target="field.via" format="none">Via</xre f> header field (<xref target="field.via"/>) | |||
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 target="field.max-forwards" format="none">Max-Forwards</xref > header field allows the client to | Use of the <xref target="field.max-forwards" 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 target="status.100" format="none">100 (Continue) </xref> response <bcp14>MUST</bcp14> | A server that sends a <xref target="status.100" 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 target="RFC9112" section="9.6"/>) or | close the connection (e.g., see <xref target="HTTP11" 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 target="target.resource" form at="none">target URI</xref> was | reference for the resource from which the <xref target="target.resource" form at="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 compon ents | A user agent <bcp14>MUST NOT</bcp14> include the fragment and userinfo compon ents | |||
of the URI reference <xref target="RFC3986"/>, if any, when generating the | of the URI reference <xref target="URI"/>, 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 / p artial-URI | <sourcecode type="abnf7230"><![CDATA[ Referer = absolute-URI / p artial-URI | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The field value is either an <xref target="uri.references" format="none">abso lute-URI</xref> or a | The field value is either an <xref target="uri.references" format="none">abso lute-URI</xref> or a | |||
<xref target="uri.references" format="none">partial-URI</xref>. In the latter case (<xref target="uri"/>), | <xref target="uri.references" format="none">partial-URI</xref>. In the latter case (<xref target="uri"/>), | |||
the referenced URI is relative to the target URI | the referenced URI is relative to the target URI | |||
(<xref target="RFC3986" sectionFormat="comma" section="5"/>). | (<xref target="URI" 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 target="trailer.fields"/>, | As described in <xref target="trailer.fields"/>, | |||
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 target="RFC9112" section="7"/>). | (see <xref target="HTTP11" 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 target="quality.values"/>) and | transfer coding (<xref target="quality.values"/>) 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 target="RFC3986" sectionFormat="comma" section ="4.2"/>), | of a relative reference (<xref target="URI" 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 target="RFC3986" sectionFormat="comma" section="5"/>). | URI (<xref target="URI" sectionFormat="comma" section="5"/>). | |||
</t> | </t> | |||
<t> | <t> | |||
For <xref target="status.201" format="none">201 (Created)</xref> responses, t he Location value refers to | For <xref target="status.201" format="none">201 (Created)</xref> responses, t he Location value refers to | |||
the primary resource created by the request. | the primary resource created by the request. | |||
For <xref target="status.3xx" format="none">3xx (Redirection)</xref> response s, the Location value refers | For <xref target="status.3xx" format="none">3xx (Redirection)</xref> response s, 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 target="status.3xx" format="none">3 xx (Redirection)</xref> | If the Location value provided in a <xref target="status.3xx" format="none">3 xx (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 target="RFC3986"/>, plus a few others, so that it can hold a | <xref target="URI"/>, 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 target="RFC4648"/>. | <xref target="RFC4648"/>. | |||
</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 target="RFC6265"/>, | Set-Cookie and Cookie header fields, defined in <xref target="COOKIE"/>, | |||
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 target="field.authorization" format="none">Authorization</xref> header fields in that request. | <xref target="field.authorization" format="none">Authorization</xref> header fields in that request. | |||
See <xref target="RFC9111" section="3.5"/> for details of and requirements | See <xref target="CACHING" 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-In fo"> | <section anchor="field.authentication-info" title="Authentication-In fo"> | |||
<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 credential s have been accepted. | field to communicate information after the client's authentication credential s 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 res ponse | To inform cache recipients that they <bcp14>MUST NOT</bcp14> use this res ponse | |||
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 target="RFC9111" section="4.1"/>) or reuse of the | (<xref target="CACHING" 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 target="content.negotiation"/>) and a | content negotiation (<xref target="content.negotiation"/>) 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 target="field.accept-language" format="none">Accept-Language</xref> hea der field. | <xref target="field.accept-language" format="none">Accept-Language</xref> hea der 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 target="RFC9111" section="5.2"/>). | response directives (<xref target="CACHING" 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 target="field.authorization"/>). | definition (<xref target="field.authorization"/>). | |||
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 target="evaluation"/> defines when to evaluate preconditions and | <xref target="evaluation"/> 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 target="RFC9111"/>. Conditionals can also be | cache updates <xref target="CACHING"/>. 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 target="evaluation"/>. | defined in <xref target="evaluation"/>. | |||
</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 target="RFC4918" sectionFormat="comma" section=" 10.4"/>). | implements that field (<xref target="WEBDAV" sectionFormat="comma" section="1 0.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 target="field.if-modified-since" for mat="none">If-Modified-Since</xref>), when | be safely ignored if unknown (like <xref target="field.if-modified-since" for mat="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</b cp14> | An origin server that evaluates an If-None-Match condition <bcp14>MUST NOT</b cp14> | |||
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 target="status.304" format="none">304 (Not Modified)</xref> stat us code if the request method | a) the <xref target="status.304" format="none">304 (Not Modified)</xref> stat us code if the request method | |||
is GET or HEAD or b) the <xref target="status.412" format="none">412 (Precond ition Failed)</xref> status | is GET or HEAD or b) the <xref target="status.412" format="none">412 (Precond ition 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 target="RFC9111" section="4.3.2"/>. | are defined in <xref target="CACHING" 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 evalu ates to | <bcp14>SHOULD NOT</bcp14> perform the requested method if the condition evalu ates to | |||
false; instead, | false; instead, | |||
the origin server <bcp14>SHOULD</bcp14> generate a <xref target="status.304" format="none">304 (Not Modified)</xref> | the origin server <bcp14>SHOULD</bcp14> generate a <xref target="status.304" 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 target="RFC9111" section="4.3.2"/>. | are defined in <xref target="CACHING" section="4.3.2"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="field.if-unmodified-since" title="If-Unmodified-Sin ce"> | <section anchor="field.if-unmodified-since" title="If-Unmodified-Sin ce"> | |||
<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 target="selected.representation" format="none">selected represen tation</xref>'s last modification date being | on the <xref target="selected.representation" format="none">selected represen tation</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 target="RFC9111"/>; all other status codes are not heuristically cachea ble. | <xref target="CACHING"/>; all other status codes are not heuristically cachea ble. | |||
</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 target="status.code.extensibility"/>. | as described in <xref target="status.code.extensibility"/>. | |||
</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 b y | A 200 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
the method definition or explicit cache controls (see <xref target="RFC9111" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" 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 target="response.validator"/>) for the | available validator fields (<xref target="response.validator"/>) for the | |||
<xref target="selected.representation" format="none">selected representation< /xref>, with both a strong entity-tag and | <xref target="selected.representation" format="none">selected representation< /xref>, with both a strong entity-tag and | |||
a <xref target="field.last-modified" format="none">Last-Modified</xref> date being preferred. | a <xref target="field.last-modified" 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 target="response.validator"/>) sent in the response convey the | (<xref target="response.validator"/>) 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 target="status.200" format="n one">200 (OK)</xref> response | modified from that of the origin server's <xref target="status.200" format="n one">200 (OK)</xref> response | |||
by a transforming proxy (<xref target="message.transformations"/>). This stat us code allows the | by a transforming proxy (<xref target="message.transformations"/>). This stat us 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 b y | A 203 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
the method definition or explicit cache controls (see <xref target="RFC9111" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" 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 target="target.resource" format="none">targe t resource</xref> and its | header fields refer to the <xref target="target.resource" format="none">targe t resource</xref> and its | |||
<xref target="selected.representation" format="none">selected representation< /xref> after the requested action was applied. | <xref target="selected.representation" 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 b y | A 204 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
the method definition or explicit cache controls (see <xref target="RFC9111" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" 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 target="fie ld.if-range" format="none">If-Range</xref> | A sender that generates a 206 response to a request with an <xref target="fie ld.if-range" 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 he ader | Otherwise, a sender <bcp14>MUST</bcp14> generate all of the representation he ader | |||
fields that would have been sent in a <xref target="status.200" format="none" >200 (OK)</xref> response | fields that would have been sent in a <xref target="status.200" 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 b y | A 206 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
explicit cache controls (see <xref target="RFC9111" section="4.2.2"/>). | explicit cache controls (see <xref target="CACHING" 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 target="field.content-range" fo rmat="none">Content-Range</xref> header field, | response <bcp14>MUST</bcp14> generate a <xref target="field.content-range" fo rmat="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 target="status.304" format="none">304 (Not Modified)</xref> status cod e. | <xref target="status.304" format="none">304 (Not Modified)</xref> status cod e. | |||
</li> | </li> | |||
</ol> | </ol> | |||
<aside> | <aside> | |||
<t> | <t> | |||
<strong>Note:</strong> In HTTP/1.0, the status codes <xref tar get="status.301" format="none">301 (Moved Permanently)</xref> | <strong>Note:</strong> In HTTP/1.0, the status codes <xref tar get="status.301" format="none">301 (Moved Permanently)</xref> | |||
and <xref target="status.302" format="none">302 (Found)</xref> were original ly defined as method-preserving | and <xref target="status.302" format="none">302 (Found)</xref> were original ly defined as method-preserving | |||
(<xref target="RFC1945" sectionFormat="comma" section="9.3"/>) to match thei r implementation | (<xref target="HTTP10" sectionFormat="comma" section="9.3"/>) to match their implementation | |||
at CERN; <xref target="status.303" format="none">303 (See Other)</xref> was defined for a redirection that | at CERN; <xref target="status.303" 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 target="status.307" format="none">307 (Temporary Redirect)</xref> and | <xref target="status.307" format="none">307 (Temporary Redirect)</xref> and | |||
<xref target="status.308" format="none">308 (Permanent Redirect)</xref> | <xref target="status.308" format="none">308 (Permanent Redirect)</xref> | |||
<xref target="RFC7538"/> were | <xref target="RFC7538"/> were | |||
later added to unambiguously indicate method-preserving redirects, and statu s codes | later added to unambiguously indicate method-preserving redirects, and statu s codes | |||
<xref target="status.301" format="none">301</xref> and <xref target="status. 302" format="none">302</xref> have been adjusted to allow a POST | <xref target="status.301" format="none">301</xref> and <xref target="status. 302" 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 b y | A 300 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
the method definition or explicit cache controls (see <xref target="RFC9111" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | |||
</t> | </t> | |||
<aside> | <aside> | |||
<t> | <t> | |||
<strong>Note:</strong> The original proposal for the 300 st atus code defined the URI header field as | <strong>Note:</strong> The original proposal for the 300 st atus 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 target="RFC8288"/> whose members have a relatio nship of | Link header field value <xref target="RFC8288"/> whose members have a relatio nship 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 target="status.308" format="none">308 (Perm anent Redirect)</xref> | behavior is undesired, the <xref target="status.308" format="none">308 (Perm anent 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 b y | A 301 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
the method definition or explicit cache controls (see <xref target="RFC9111" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" 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 target="field.last-modified" fo rmat="none">Last-Modified</xref> might | purpose of guiding cache updates (e.g., <xref target="field.last-modified" fo rmat="none">Last-Modified</xref> might | |||
be useful if the response does not have an <xref target="field.etag" format=" none">ETag</xref> field). | be useful if the response does not have an <xref target="field.etag" 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 target="RFC9111" section="4.3.4"/>. If the conditional request originat ed with an | <xref target="CACHING" section="4.3.4"/>. If the conditional request originat ed 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> forwa rd the | conditional GET to a shared proxy, then the proxy <bcp14>SHOULD</bcp14> forwa rd 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 target="field.location" for mat="none">Location</xref> header field in the | The server <bcp14>SHOULD</bcp14> generate a <xref target="field.location" for mat="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 b y | A 308 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
the method definition or explicit cache controls (see <xref target="RFC9111" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | |||
</t> | </t> | |||
<aside> | <aside> | |||
<t> | <t> | |||
<strong>Note:</strong> This status code is much younger (Ju ne 2014) than its sibling codes and thus | <strong>Note:</strong> This status code is much younger (Ju ne 2014) than its sibling codes and thus | |||
might not be recognized everywhere. See <xref target="RFC7538" section="4"/> | might not be recognized everywhere. See <xref target="RFC7538" 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 target="target.resource" format="none">target resource</xref> or is not willing to disclose that one | <xref target="target.resource" 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 representati on | exists. A 404 status code does not indicate whether this lack of representati on | |||
is temporary or permanent; the <xref target="status.410" format="none">410 (G one)</xref> status code is | is temporary or permanent; the <xref target="status.410" format="none">410 (G one)</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 b y | A 404 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
the method definition or explicit cache controls (see <xref target="RFC9111" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" 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 target="target.resource" format="none">target reso urce</xref>. | not supported by the <xref target="target.resource" format="none">target reso urce</xref>. | |||
The origin server <bcp14>MUST</bcp14> generate an <xref target="field.allow" format="none">Allow</xref> header field in | The origin server <bcp14>MUST</bcp14> generate an <xref target="field.allow" 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 b y | A 405 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
the method definition or explicit cache controls (see <xref target="RFC9111" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" 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 target="target.resource" format="none">target resource</xref> does not have a current representation that | <xref target="target.resource" 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 target="proactive.negotiation" format="none">proactive negotiation</xre f> header fields received in the request | <xref target="proactive.negotiation" format="none">proactive negotiation</xre f> header fields received in the request | |||
(<xref target="proactive.negotiation"/>), and the server is unwilling to supp ly a | (<xref target="proactive.negotiation"/>), and the server is unwilling to supp ly 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 b y | A 410 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
the method definition or explicit cache controls (see <xref target="RFC9111" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" 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 target="field.content-length" format="none">Content-Length</xref> (<xre f target="field.content-length"/>). | <xref target="field.content-length" format="none">Content-Length</xref> (<xre f target="field.content-length"/>). | |||
The client <bcp14>MAY</bcp14> repeat the request if it adds a valid Content-L ength | The client <bcp14>MAY</bcp14> repeat the request if it adds a valid Content-L ength | |||
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 b y | A 414 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
the method definition or explicit cache controls (see <xref target="RFC9111" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" 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 cod e)"/> | <iref primary="true" item="415 Unsupported Media Type (status cod e)"/> | |||
<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 target="target.resource " format="none">target resource</xref>. | in a format not supported by this method on the <xref target="target.resource " 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 target="origin" format="none">origin</xref> for which the server has been | that does not match an <xref target="origin" format="none">origin</xref> for which the server has been | |||
configured (<xref target="origin"/>) or does not match the connection | configured (<xref target="origin"/>) or does not match the connection | |||
context over which the request was received | context over which the request was received | |||
(<xref target="routing.reject"/>). | (<xref target="routing.reject"/>). | |||
</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 target="RFC7838"/>. | origin, or via an alternative service <xref target="ALTSVC"/>. | |||
</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 serve r | The <em>422 (Unprocessable Content)</em> status code indicates that the serve r | |||
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 b y | A 501 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
the method definition or explicit cache controls (see <xref target="RFC9111" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" 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 target="RFC9111" sect ion="5.2.3"/>). Because the semantics of HTTP are | cache directives (see Cache-Control extensions in <xref target="CACHING" sect ion="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 (<xref target="RFC9112" section= | points, such as transfer-codings in HTTP/1.1 (<xref target="HTTP11" section=" | |||
"6.1"/>) and HTTP/2 | 6.1"/>) and HTTP/2 | |||
SETTINGS or frame types <xref target="RFC7540"/>. These extension points are | SETTINGS or frame types <xref target="HTTP2"/>. These extension points are sp | |||
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 target="CONNECT"/>) allows this. | example, the CONNECT method (<xref target="CONNECT"/>) 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 th e response they | heuristically cacheable. Note that all final status codes can be cached if th e 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 exp licit | defined as being heuristically cacheable are allowed to be cached without exp licit | |||
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 u sed. See <xref target="RFC9111"/> for more information. | constraints upon cache behavior if the "must-understand" cache directive is u sed. See <xref target="CACHING"/> 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 an d | HTTP's most widely used extensibility point is the definition of new header an d | |||
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 target="field.www-authenti cate" format="none">WWW-Authenticate</xref>), | origin-server authentication (i.e., using <xref target="field.www-authenti cate" format="none">WWW-Authenticate</xref>), | |||
and/or proxy authentication (i.e., using <xref target="field.proxy-authent icate" format="none">Proxy-Authenticate</xref>). | and/or proxy authentication (i.e., using <xref target="field.proxy-authent icate" format="none">Proxy-Authenticate</xref>). | |||
</t> | </t> | |||
</li> | </li> | |||
<li> | <li> | |||
<t> | <t> | |||
The credentials carried in an <xref target="field.authorization" format="n one">Authorization</xref> header field are specific to | The credentials carried in an <xref target="field.authorization" format="n one">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 target="RFC9111" section ="5.2.2.7"/>), | "private" Cache-Control response directive (<xref target="CACHING" 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 target="field.authorization" format="none">Author ization</xref> header field (e.g., using a newly defined | credentials in the <xref target="field.authorization" format="none">Author ization</xref> header field (e.g., using a newly defined | |||
header field) will need to explicitly disallow caching, by mandating the u se of | header field) will need to explicitly disallow caching, by mandating the u se 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 target="RFC9111" section="7"/>, | to caching are discussed in <xref target="CACHING" 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 target="RFC9112" section="11"/>. | discussed in <xref target="HTTP11" 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 target="RFC3986" section="7"/>. Various organizations maintain | <xref target="URI" 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 target="OWASP"/>). | security (e.g., <xref target="OWASP"/>). | |||
</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 target="https.uri"/>) is intended to prevent | The "https" scheme (<xref target="https.uri"/>) 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 target="https.verify"/>). Correctly implementing such verification | (<xref target="https.verify"/>). Correctly implementing such verification | |||
can be difficult (see <xref target="Georgiev"/>). | can be difficult (see <xref target="Georgiev"/>). | |||
</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 target="RFC7838"/>. Likewise, the set of | extensions; for example, <xref target="ALTSVC"/>. 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 target="RFC8336"/>. | with a protocol extension like <xref target="RFC8336"/>. | |||
</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 target="RFC9111" section="7 "/>. | to cache poisoning attacks, as described in <xref target="CACHING" 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-controll ed | sensitive data, or to strictly separate sensitive data from attacker-controll ed | |||
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 target="RFC7 541"/>. | considered exploitable in limited use cases, such as HPACK <xref target="HPAC K"/>. | |||
</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 target="considerations.for.new.field.names"/> discourages the cr eation | is why <xref target="considerations.for.new.field.names"/> discourages the cr eation | |||
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 examp le, | security vulnerabilities if the mapping is incomplete or ambiguous. For examp le, | |||
if an attacker were to send a field named "Transfer_Encoding", a naive interf ace | if an attacker were to send a field named "Transfer_Encoding", a naive interf ace | |||
might map that to the same variable name as the "Transfer-Encoding" field, re sulting | might map that to the same variable name as the "Transfer-Encoding" field, re sulting | |||
in a potential request smuggling vulnerability (<xref target="RFC9112" sectio n="11.2"/>). | in a potential request smuggling vulnerability (<xref target="HTTP11" 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 target="protocol.version" format="counter"/> | <xref target="protocol.version" format="counter"/> | |||
</td> | </td> | |||
</tr> | </tr> | |||
</tbody> | </tbody> | |||
</table> | </table> | |||
</section> | </section> | |||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<displayreference target="HTTP10" to="HTTP/1.0"/> | ||||
<displayreference target="RFC9111" to="CACHING"/> | <displayreference target="HTTP11" to="HTTP/1.1"/> | |||
<displayreference target="RFC0793" to="TCP"/> | <displayreference target="HTTP2" to="HTTP/2"/> | |||
<displayreference target="RFC8446" to="TLS13"/> | <displayreference target="HTTP3" to="HTTP/3"/> | |||
<displayreference target="RFC3986" to="URI"/> | ||||
<displayreference target="RFC7838" to="ALTSVC"/> | ||||
<displayreference target="RFC6265" to="COOKIE"/> | ||||
<displayreference target="RFC7541" to="HPACK"/> | ||||
<displayreference target="RFC1945" to="HTTP/1.0"/> | ||||
<displayreference target="RFC9112" to="HTTP/1.1"/> | ||||
<displayreference target="RFC7540" to="HTTP/2"/> | ||||
<displayreference target="RFC9113" to="HTTP/3"/> | ||||
<displayreference target="RFC4918" 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 document R | <!-- [I-D.ietf-httpbis-cache]; companion document RFC 9111 --> | |||
FC 9111 | <reference anchor='CACHING' target='https://www.rfc-editor.org/info/r | |||
fc9111'> | ||||
--> | <front> | |||
<title>HTTP Caching</title> | ||||
<reference anchor='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='Mark Nottin | |||
<organization /> | gham' role='editor'> | |||
</author> | <organization /> | |||
<author initials='M' surname='Nottingham' fullname='Mark Nottingham' role= | </author> | |||
'editor'> | <author initials='J' surname='Reschke' fullname='Julian Reschke | |||
<organization /> | ' role='editor'> | |||
</author> | <organization /> | |||
<author initials='J' surname='Reschke' fullname='Julian Reschke' 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" target="https://www.rfc-editor.org/info/rfc3 | |||
<xi:include href="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" target="https://www.rfc-editor.org/info/rfc7 | ||||
93"> | ||||
<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" target="https://www.rfc-editor.org/info/rf | |||
c8446"> | ||||
<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</organi zation> | <organization>American National Standards Institute</organi zation> | |||
</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 --> | |||
<reference anchor="HTTP11" target='https://www.rfc-editor.org/info/r | ||||
<reference anchor="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" | |||
target="https://www.rfc-editor.org/errata/eid1912" | target="https://www.rfc-editor.org/errata/eid1912" | |||
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" target="https://roy.gbiv.com/pubs/dissertat ion/top.htm"> | <reference anchor="REST" target="https://roy.gbiv.com/pubs/dissertat ion/top.htm"> | |||
<front> | <front> | |||
<title>Architectural Styles and the Design of Network-based So ftware Architectures</title> | <title>Architectural Styles and the Design of Network-based So ftware Architectures</title> | |||
<author initials="R.T." surname="Fielding" fullname="Roy T. Fi elding"/> | <author initials="R.T." surname="Fielding" fullname="Roy T. Fi elding"/> | |||
<date month="September" year="2000"/> | <date month="September" year="2000"/> | |||
</front> | </front> | |||
<refcontent>Doctoral Dissertation, University of California, Irvi ne</refcontent> | <refcontent>Doctoral Dissertation, University of California, Irvi ne</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" target="https://www.rfc-editor.org/info/r | |||
xml"/> | 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" target="https://www.rfc-editor.org/info/r | |||
xml"/> | 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" target="https://www.rfc-editor.org/info/rf | ||||
c7540"> | ||||
<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" target="https://www.rfc-editor.org/info/rf | ||||
c7541"> | ||||
<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" target="https://www.rfc-editor.org/info/r | |||
xml"/> | 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.--> | |||
<reference anchor='HTTP3' target='https://www.rfc-editor.org/info/rf | ||||
<reference anchor='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/refe rence.RFC.7595.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/refe rence.RFC.7595.xml"/> | |||
</referencegroup> | </referencegroup> | |||
<referencegroup anchor="BCP178" target="https://www.rfc-editor.org/i nfo/bcp178"> | <referencegroup anchor="BCP178" target="https://www.rfc-editor.org/i nfo/bcp178"> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/refe rence.RFC.6648.xml"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/refe rence.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" target="https://www.rfc-editor.org/info/r | |||
xml"/> | 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 target="trailers.limitations"/>). | (<xref target="trailers.limitations"/>). | |||
</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 han dling | header field by origin servers has been made explicit to align with proxy han dling | |||
(<xref target="field.host"/>). | (<xref target="field.host"/>). | |||
</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 target="RFC3986"/> that are not desirable for Via. For simplicity, | <xref target="URI"/> 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 target="field.via"/>). | (<xref target="field.via"/>). | |||
</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 target="parameter"/>). | (<xref target="parameter"/>). | |||
</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 target="RFC9112"/>, and reflect the contents after the | HTTP/1.1 in <xref target="HTTP11"/>, 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 target="message.abstraction"/>). | versions into the future of HTTP (<xref target="message.abstraction"/>). | |||
</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 target="content"/>). | (<xref target="content"/>). | |||
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 target="status.3xx"/>). | (<xref target="status.3xx"/>). | |||
</t> | </t> | |||
<t> | <t> | |||
Status code 308 (previously defined in <xref target="RFC7538"/>) | Status code 308 (previously defined in <xref target="RFC7538"/>) | |||
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 target="status.308"/>). | (<xref target="status.308"/>). | |||
</t> | </t> | |||
<t> | <t> | |||
Status code 421 (previously defined in | Status code 421 (previously defined in | |||
<xref target="RFC7540" section="9.1.2"/>) has been added because of its gener al | <xref target="HTTP2" 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 target="status.421"/>). | (<xref target="status.421"/>). | |||
</t> | </t> | |||
<t> | <t> | |||
Status code 422 (previously defined in | Status code 422 (previously defined in | |||
<xref target="RFC4918" section="11.2"/>) has been added because of its genera l | <xref target="WEBDAV" section="11.2"/>) has been added because of its general | |||
applicability | applicability | |||
(<xref target="status.422"/>). | (<xref target="status.422"/>). | |||
</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"/>, <co ntact fullname="Rob McCool"/>, | <contact fullname="Ari Luotonen"/>, <contact fullname="Larry Masinter"/>, <co ntact 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 target="RFC1945" format="default">RFC 1945</xref>, | <xref target="HTTP10" format="default">RFC 1945</xref>, | |||
<xref target="RFC2068" format="default">RFC 2068</xref>, | <xref target="RFC2068" format="default">RFC 2068</xref>, | |||
<xref target="RFC2145" format="default">RFC 2145</xref>, | <xref target="RFC2145" format="default">RFC 2145</xref>, | |||
<xref target="RFC2616" format="default">RFC 2616</xref>, | <xref target="RFC2616" format="default">RFC 2616</xref>, | |||
<xref target="RFC2617" format="default">RFC 2617</xref>, | <xref target="RFC2617" format="default">RFC 2617</xref>, | |||
<xref target="RFC2818" format="default">RFC 2818</xref>, | <xref target="RFC2818" format="default">RFC 2818</xref>, | |||
<xref target="RFC7230" format="default">RFC 7230</xref>, | <xref target="RFC7230" format="default">RFC 7230</xref>, | |||
<xref target="RFC7231" format="default">RFC 7231</xref>, | <xref target="RFC7231" format="default">RFC 7231</xref>, | |||
<xref target="RFC7232" format="default">RFC 7232</xref>, | <xref target="RFC7232" format="default">RFC 7232</xref>, | |||
<xref target="RFC7233" format="default">RFC 7233</xref>, | <xref target="RFC7233" format="default">RFC 7233</xref>, | |||
<xref target="RFC7234" format="default">RFC 7234</xref>, and | <xref target="RFC7234" 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 from http://tools.ietf.org/tools/rfcdiff/ |