rfc9110v3.xml | rfc9110.xml | |||
---|---|---|---|---|
skipping to change at line 57 ¶ | skipping to change at line 57 ¶ | |||
<title abbrev="HTTP Semantics">HTTP Semantics</title> | <title abbrev="HTTP Semantics">HTTP Semantics</title> | |||
<seriesInfo name="RFC" value="9110"/> | <seriesInfo name="RFC" value="9110"/> | |||
<seriesInfo name="STD" value="97"/> | <seriesInfo name="STD" value="97"/> | |||
<author fullname="Roy T. Fielding" | <author fullname="Roy T. Fielding" | |||
initials="R." | initials="R." | |||
surname="Fielding" | surname="Fielding" | |||
role="editor"> | role="editor"> | |||
<organization>Adobe</organization> | <organization>Adobe</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>345 Park Ave</street> | <postalLine>345 Park Ave</postalLine> | |||
<city>San Jose</city> | <postalLine>San Jose, CA 95110</postalLine> | |||
<region>CA</region> | <postalLine>United States of America</postalLine> | |||
<code>95110</code> | ||||
<country>United States of America</country> | ||||
</postal> | </postal> | |||
<email>fielding@gbiv.com</email> | <email>fielding@gbiv.com</email> | |||
<uri>https://roy.gbiv.com/</uri> | <uri>https://roy.gbiv.com/</uri> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Mark Nottingham" | <author fullname="Mark Nottingham" | |||
initials="M." | initials="M." | |||
surname="Nottingham" | surname="Nottingham" | |||
role="editor"> | role="editor"> | |||
<organization>Fastly</organization> | <organization>Fastly</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<city>Prahran VIC</city> | <postalLine>Prahran</postalLine> | |||
<country>Australia</country> | <postalLine>Australia</postalLine> | |||
</postal> | </postal> | |||
<email>mnot@mnot.net</email> | <email>mnot@mnot.net</email> | |||
<uri>https://www.mnot.net/</uri> | <uri>https://www.mnot.net/</uri> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Julian Reschke" | <author fullname="Julian Reschke" | |||
initials="J." | initials="J." | |||
surname="Reschke" | surname="Reschke" | |||
role="editor"> | role="editor"> | |||
<organization abbrev="greenbytes">greenbytes GmbH</organizati on> | <organization abbrev="greenbytes">greenbytes GmbH</organizati on> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Hafenweg 16</street> | <postalLine>Hafenweg 16</postalLine> | |||
<city>Münster</city> | <postalLine>48155 Münster</postalLine> | |||
<code>48155</code> | <postalLine>Germany</postalLine> | |||
<country>Germany</country> | ||||
</postal> | </postal> | |||
<email>julian.reschke@greenbytes.de</email> | <email>julian.reschke@greenbytes.de</email> | |||
<uri>https://greenbytes.de/tech/webdav/</uri> | <uri>https://greenbytes.de/tech/webdav/</uri> | |||
</address> | </address> | |||
</author> | </author> | |||
<date year="2022" month="January"/> | <date year="2022" month="January"/> | |||
<area>Applications and Real-Time</area> | <area>Applications and Real-Time</area> | |||
<workgroup>HTTP Working Group</workgroup> | <workgroup>HTTP Working Group</workgroup> | |||
<keyword>Hypertext Transfer Protocol</keyword> | <keyword>Hypertext Transfer Protocol</keyword> | |||
<keyword>HTTP</keyword> | <keyword>HTTP</keyword> | |||
skipping to change at line 186 ¶ | skipping to change at line 183 ¶ | |||
This included length-based data delimiters for both fixed and dynam ic | This included length-based data delimiters for both fixed and dynam ic | |||
(chunked) content, a consistent framework for content negotiation, | (chunked) content, a consistent framework for content negotiation, | |||
opaque validators for conditional requests, cache controls for bett er | opaque validators for conditional requests, cache controls for bett er | |||
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 publish ed on | persistent connections. HTTP/1.1 was introduced in 1995 and publish ed 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="HTTP2"/> introduced a multiplexed session laye r | HTTP/2 (<xref target="HTTP2"/>) introduced a multiplexed session la yer | |||
on top of the existing TLS and TCP protocols for exchanging concurr ent | on top of the existing TLS and TCP protocols for exchanging concurr ent | |||
HTTP messages with efficient field compression and server push. | HTTP messages with efficient field compression and server push. | |||
HTTP/3 <xref target="HTTP3"/> provides greater independence for con current | HTTP/3 (<xref target="HTTP3"/>) provides greater independence for c oncurrent | |||
messages by using QUIC as a secure multiplexed transport over UDP i nstead of | messages by using QUIC as a secure multiplexed transport over UDP i nstead 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 transpo rt and | Implementations are expected to choose the most appropriate transpo rt 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 d ocument) | This revision of HTTP separates the definition of semantics (this d ocument) | |||
and caching <xref target="CACHING"/> from the current HTTP/1.1 mess | and caching (<xref target="CACHING"/>) from the current HTTP/1.1 me | |||
aging | ssaging | |||
syntax <xref target="HTTP11"/> to allow each major protocol version | syntax (<xref target="HTTP11"/>) to allow each major protocol versi | |||
on | ||||
to progress independently while referring to the same core semantic s. | to progress independently while referring to the same core semantic s. | |||
</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 1011 ¶ | skipping to change at line 1008 ¶ | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="URI-reference "/> | <iref primary="true" item="Grammar" subitem="URI-reference "/> | |||
<iref primary="true" item="Grammar" subitem="absolute-URI" /> | <iref primary="true" item="Grammar" subitem="absolute-URI" /> | |||
<iref primary="true" item="Grammar" subitem="authority"/> | <iref primary="true" item="Grammar" subitem="authority"/> | |||
<iref primary="true" item="Grammar" subitem="absolute-path "/> | <iref primary="true" item="Grammar" subitem="absolute-path "/> | |||
<iref primary="true" item="Grammar" subitem="port"/> | <iref primary="true" item="Grammar" subitem="port"/> | |||
<iref primary="true" item="Grammar" subitem="query"/> | <iref primary="true" item="Grammar" subitem="query"/> | |||
<iref primary="true" item="Grammar" subitem="segment"/> | <iref primary="true" item="Grammar" subitem="segment"/> | |||
<iref primary="true" item="Grammar" subitem="uri-host"/> | <iref primary="true" item="Grammar" subitem="uri-host"/> | |||
<iref primary="true" item="Grammar" subitem="partial-URI"/ > | <iref primary="true" item="Grammar" subitem="partial-URI"/ > | |||
<sourcecode type="abnf7230"><![CDATA[ URI-reference = <UR I-reference, see [URI], Section 4.1> | <sourcecode type="abnf9110"><![CDATA[ URI-reference = <UR I-reference, see [URI], Section 4.1> | |||
absolute-URI = <absolute-URI, see [URI], Section 4.3> | absolute-URI = <absolute-URI, see [URI], Section 4.3> | |||
relative-part = <relative-part, see [URI], Section 4.2> | relative-part = <relative-part, see [URI], Section 4.2> | |||
authority = <authority, see [URI], Section 3.2> | authority = <authority, see [URI], Section 3.2> | |||
uri-host = <host, see [URI], Section 3.2.2> | uri-host = <host, see [URI], Section 3.2.2> | |||
port = <port, see [URI], Section 3.2.3> | port = <port, see [URI], Section 3.2.3> | |||
path-abempty = <path-abempty, see [URI], Section 3.3> | path-abempty = <path-abempty, see [URI], Section 3.3> | |||
segment = <segment, see [URI], Section 3.3> | segment = <segment, see [URI], Section 3.3> | |||
query = <query, see [URI], Section 3.4> | query = <query, see [URI], Section 3.4> | |||
absolute-path = 1*( "/" segment ) | absolute-path = 1*( "/" segment ) | |||
skipping to change at line 1120 ¶ | skipping to change at line 1117 ¶ | |||
whether or not that server currently maps that identifier to a reso urce. | whether or not that server currently maps that identifier to a reso urce. | |||
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 wit hin the | The "http" URI scheme is hereby defined for minting identifiers wit hin the | |||
hierarchical namespace governed by a potential HTTP origin server | hierarchical namespace governed by a potential HTTP origin server | |||
listening for TCP <xref target="TCP"/> connections on a given port. | listening for TCP (<xref target="TCP"/>) connections on a given por t. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="http-URI"/ > | <iref primary="true" item="Grammar" subitem="http-URI"/ > | |||
<sourcecode type="abnf7230"><![CDATA[ http-URI = "http " "://" authority path-abempty [ "?" query ] | <sourcecode type="abnf9110"><![CDATA[ http-URI = "http " "://" authority path-abempty [ "?" query ] | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The origin server for an "http" URI is identified by the | The origin server for an "http" URI is identified by the | |||
<xref target="uri.references" format="none">authority</xref> compon ent, which includes a host identifier | <xref target="uri.references" format="none">authority</xref> compon ent, which includes a host identifier | |||
(<xref target="URI" sectionFormat="comma" section="3.2.2"/>) | (<xref target="URI" sectionFormat="comma" section="3.2.2"/>) | |||
and optional port number (<xref target="URI" sectionFormat="comma" section="3.2.3"/>). | and optional port number (<xref target="URI" sectionFormat="comma" section="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 | |||
skipping to change at line 1154 ¶ | skipping to change at line 1151 ¶ | |||
</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 wi thin the | The "https" URI scheme is hereby defined for minting identifiers wi thin the | |||
hierarchical namespace governed by a potential origin server listen ing for | hierarchical namespace governed by a potential origin server listen ing 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="TLS13"/> 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 ha s | identified authority and all HTTP communication with that server ha s | |||
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 = "htt ps" "://" authority path-abempty [ "?" query ] | <sourcecode type="abnf9110"><![CDATA[ https-URI = "htt ps" "://" 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> compon ent, which includes a host identifier | <xref target="uri.references" format="none">authority</xref> compon ent, which includes a host identifier | |||
(<xref target="URI" sectionFormat="comma" section="3.2.2"/>) | (<xref target="URI" sectionFormat="comma" section="3.2.2"/>) | |||
and optional port number (<xref target="URI" sectionFormat="comma" section="3.2.3"/>). | and optional port number (<xref target="URI" sectionFormat="comma" section="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 | |||
skipping to change at line 1575 ¶ | skipping to change at line 1572 ¶ | |||
(<xref target="message.abstraction"/>). | (<xref target="message.abstraction"/>). | |||
</t> | </t> | |||
<section anchor="fields.names" title="Field Names"> | <section anchor="fields.names" title="Field Names"> | |||
<t> | <t> | |||
A field name labels the corresponding field value as having the | A field name labels the corresponding field value as having the | |||
semantics defined by that name. For example, the <xref target="fie ld.date" format="none">Date</xref> | semantics defined by that name. For example, the <xref target="fie ld.date" format="none">Date</xref> | |||
header field is defined in <xref target="field.date"/> as containin g the | header field is defined in <xref target="field.date"/> as containin g the | |||
origination timestamp for the message in which it appears. | origination timestamp for the message in which it appears. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="field-name"/> | <iref primary="true" item="Grammar" subitem="field-name"/> | |||
<sourcecode type="abnf7230"><![CDATA[ field-name = to ken | <sourcecode type="abnf9110"><![CDATA[ field-name = to ken | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Field names are case-insensitive and ought to be registered within the | Field names are case-insensitive and ought to be registered within the | |||
"Hypertext Transfer Protocol (HTTP) Field Name Registry"; see <xref target="fields.registry"/>. | "Hypertext Transfer Protocol (HTTP) Field Name Registry"; see <xref target="fields.registry"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
The interpretation of a field does not change between minor | The interpretation of a field does not change between minor | |||
versions of the same major HTTP version, though the default behavio r of a | versions of the same major HTTP version, though the default behavio r of a | |||
recipient in the absence of such a field can change. Unless specifi ed | recipient in the absence of such a field can change. Unless specifi ed | |||
otherwise, fields are defined for all versions of HTTP. | otherwise, fields are defined for all versions of HTTP. | |||
skipping to change at line 1665 ¶ | skipping to change at line 1662 ¶ | |||
<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 fi eld's | line of the same name already exists in the message, unless that fi eld'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 field <xref target="COOKIE"/> | <strong>Note:</strong> In practice, the "Set-Cookie" header field (<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 f ield lines | use the list syntax, violating the above requirements on multiple f ield 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 wh ile | value, recipients ought to handle "Set-Cookie" as a special case wh ile | |||
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 recei ved in a | The order in which field lines with differing field names are recei ved in a | |||
skipping to change at line 1715 ¶ | skipping to change at line 1712 ¶ | |||
A client <bcp14>MAY</bcp14> discard or truncate received field line s that are larger | A client <bcp14>MAY</bcp14> discard or truncate received field line s that are larger | |||
than the client wishes to process if the field semantics are such t hat the | than the client wishes to process if the field semantics are such t hat 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> | |||
HTTP field values consist of a sequence of characters in a format d efined | HTTP field values consist of a sequence of characters in a format d efined | |||
by the field's grammar. Each field's grammar is usually defined usi ng | by the field's grammar. Each field's grammar is usually defined usi ng | |||
ABNF <xref target="RFC5234"/>. | ABNF (<xref target="RFC5234"/>). | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="field-value"/ > | <iref primary="true" item="Grammar" subitem="field-value"/ > | |||
<iref primary="true" item="Grammar" subitem="field-vchar"/ > | <iref primary="true" item="Grammar" subitem="field-vchar"/ > | |||
<iref primary="true" item="Grammar" subitem="field-content "/> | <iref primary="true" item="Grammar" subitem="field-content "/> | |||
<iref primary="true" item="Grammar" subitem="obs-text"/> | <iref primary="true" item="Grammar" subitem="obs-text"/> | |||
<sourcecode type="abnf7230"><![CDATA[ field-value = *f ield-content | <sourcecode type="abnf9110"><![CDATA[ field-value = *f ield-content | |||
field-content = field-vchar | field-content = field-vchar | |||
[ 1*( SP / HTAB / field-vchar ) field-vchar ] | [ 1*( SP / HTAB / field-vchar ) field-vchar ] | |||
field-vchar = VCHAR / obs-text | field-vchar = VCHAR / obs-text | |||
obs-text = %x80-FF | obs-text = %x80-FF | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A field value does not include leading or trailing whitespace. When a | A field value does not include leading or trailing whitespace. When a | |||
specific version of HTTP allows such whitespace to appear in a mess age, | specific version of HTTP allows such whitespace to appear in a mess age, | |||
a field parsing implementation <bcp14>MUST</bcp14> exclude such whi tespace prior to | a field parsing implementation <bcp14>MUST</bcp14> exclude such whi tespace prior to | |||
evaluating the field value. | evaluating the field value. | |||
skipping to change at line 1903 ¶ | skipping to change at line 1900 ¶ | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="tokens" title="Tokens"> | <section anchor="tokens" title="Tokens"> | |||
<t anchor="rule.token.separators"> | <t anchor="rule.token.separators"> | |||
Tokens are short textual identifiers that do not include whitespace or | Tokens are short textual identifiers that do not include whitespace or | |||
delimiters. | delimiters. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="token"/> | <iref primary="true" item="Grammar" subitem="token"/> | |||
<iref primary="true" item="Grammar" subitem="tchar"/> | <iref primary="true" item="Grammar" subitem="tchar"/> | |||
<sourcecode type="abnf7230"><![CDATA[ token = 1*tchar | <sourcecode type="abnf9110"><![CDATA[ token = 1*tchar | |||
tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" | tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" | |||
/ "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" | / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" | |||
/ DIGIT / ALPHA | / DIGIT / ALPHA | |||
; any VCHAR, except delimiters | ; any VCHAR, except delimiters | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t anchor="delimiters"> | <t anchor="delimiters"> | |||
<iref item="Delimiters"/> | <iref item="Delimiters"/> | |||
Many HTTP field values are defined using common syntax | Many HTTP field values are defined using common syntax | |||
components, separated by whitespace or specific delimiting characte rs. | components, separated by whitespace or specific delimiting characte rs. | |||
skipping to change at line 1955 ¶ | skipping to change at line 1952 ¶ | |||
interpreting the protocol element. | interpreting the protocol element. | |||
</t> | </t> | |||
<t> | <t> | |||
BWS has no semantics. Any content known to be | BWS has no semantics. Any content known to be | |||
defined as BWS <bcp14>MAY</bcp14> be removed before interpreting it or forwarding the | defined as BWS <bcp14>MAY</bcp14> be removed before interpreting it or forwarding the | |||
message downstream. | message downstream. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="OWS"/> | <iref primary="true" item="Grammar" subitem="OWS"/> | |||
<iref primary="true" item="Grammar" subitem="RWS"/> | <iref primary="true" item="Grammar" subitem="RWS"/> | |||
<iref primary="true" item="Grammar" subitem="BWS"/> | <iref primary="true" item="Grammar" subitem="BWS"/> | |||
<sourcecode type="abnf7230"><![CDATA[ OWS = *( SP / HTAB ) | <sourcecode type="abnf9110"><![CDATA[ OWS = *( SP / HTAB ) | |||
; optional whitespace | ; optional whitespace | |||
RWS = 1*( SP / HTAB ) | RWS = 1*( SP / HTAB ) | |||
; required whitespace | ; required whitespace | |||
BWS = OWS | BWS = OWS | |||
; "bad" whitespace | ; "bad" whitespace | |||
]]></sourcecode> | ]]></sourcecode> | |||
</section> | </section> | |||
<section anchor="quoted.strings" title="Quoted Strings"> | <section anchor="quoted.strings" title="Quoted Strings"> | |||
<t anchor="rule.quoted-string"> | <t anchor="rule.quoted-string"> | |||
A string of text is parsed as a single value if it is quoted using | A string of text is parsed as a single value if it is quoted using | |||
double-quote marks. | double-quote marks. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="quoted-str ing"/> | <iref primary="true" item="Grammar" subitem="quoted-str ing"/> | |||
<iref primary="true" item="Grammar" subitem="qdtext"/> | <iref primary="true" item="Grammar" subitem="qdtext"/> | |||
<sourcecode type="abnf7230"><![CDATA[ quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE | <sourcecode type="abnf9110"><![CDATA[ quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE | |||
qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text | qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t anchor="rule.quoted-pair"> | <t anchor="rule.quoted-pair"> | |||
The backslash octet ("\") can be used as a single-octet | The backslash octet ("\") can be used as a single-octet | |||
quoting mechanism within quoted-string and comment constructs. | quoting mechanism within quoted-string and comment constructs. | |||
Recipients that process the value of a quoted-string <bcp14>MUST</b cp14> handle a | Recipients that process the value of a quoted-string <bcp14>MUST</b cp14> handle a | |||
quoted-pair as if it were replaced by the octet following the backs lash. | quoted-pair as if it were replaced by the octet following the backs lash. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="quoted-pai r"/> | <iref primary="true" item="Grammar" subitem="quoted-pai r"/> | |||
<sourcecode type="abnf7230"><![CDATA[ quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) | <sourcecode type="abnf9110"><![CDATA[ quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A sender <bcp14>SHOULD NOT</bcp14> generate a quoted-pair in a quot ed-string except | A sender <bcp14>SHOULD NOT</bcp14> generate a quoted-pair in a quot ed-string except | |||
where necessary to quote DQUOTE and backslash octets occurring with in that | where necessary to quote DQUOTE and backslash octets occurring with in that | |||
string. | string. | |||
A sender <bcp14>SHOULD NOT</bcp14> generate a quoted-pair in a comm ent except | A sender <bcp14>SHOULD NOT</bcp14> generate a quoted-pair in a comm ent except | |||
where necessary to quote parentheses ["(" and ")"] and backslash oc tets | where necessary to quote parentheses ["(" and ")"] and backslash oc tets | |||
occurring within that comment. | occurring within that comment. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="comments" title="Comments"> | <section anchor="comments" title="Comments"> | |||
<t anchor="rule.comment"> | <t anchor="rule.comment"> | |||
Comments can be included in some HTTP fields by surrounding | Comments can be included in some HTTP fields by surrounding | |||
the comment text with parentheses. Comments are only allowed in | the comment text with parentheses. Comments are only allowed in | |||
fields containing "comment" as part of their field value definition . | fields containing "comment" as part of their field value definition . | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="comment"/> | <iref primary="true" item="Grammar" subitem="comment"/> | |||
<iref primary="true" item="Grammar" subitem="ctext"/> | <iref primary="true" item="Grammar" subitem="ctext"/> | |||
<sourcecode type="abnf7230"><![CDATA[ comment = "(" *( ctext / quoted-pair / comment ) ")" | <sourcecode type="abnf9110"><![CDATA[ comment = "(" *( ctext / quoted-pair / comment ) ")" | |||
ctext = HTAB / SP / %x21-27 / %x2A-5B / %x5D-7E / obs-text | ctext = HTAB / SP / %x21-27 / %x2A-5B / %x5D-7E / obs-text | |||
]]></sourcecode> | ]]></sourcecode> | |||
</section> | </section> | |||
<section anchor="parameter" title="Parameters"> | <section anchor="parameter" title="Parameters"> | |||
<t anchor="rule.parameter"> | <t anchor="rule.parameter"> | |||
Parameters are instances of name=value pairs; they are often used i n field | Parameters are instances of name=value pairs; they are often used i n field | |||
values as a common syntax for appending auxiliary information to an item. | values as a common syntax for appending auxiliary information to an item. | |||
Each parameter is usually delimited by an immediately preceding sem icolon. | Each parameter is usually delimited by an immediately preceding sem icolon. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="parameters "/> | <iref primary="true" item="Grammar" subitem="parameters "/> | |||
<iref primary="true" item="Grammar" subitem="parameter" /> | <iref primary="true" item="Grammar" subitem="parameter" /> | |||
<iref primary="true" item="Grammar" subitem="parameter- name"/> | <iref primary="true" item="Grammar" subitem="parameter- name"/> | |||
<iref primary="true" item="Grammar" subitem="parameter- value"/> | <iref primary="true" item="Grammar" subitem="parameter- value"/> | |||
<sourcecode type="abnf7230"><![CDATA[ parameters = *( OWS ";" OWS [ parameter ] ) | <sourcecode type="abnf9110"><![CDATA[ parameters = *( OWS ";" OWS [ parameter ] ) | |||
parameter = parameter-name "=" parameter-value | parameter = parameter-name "=" parameter-value | |||
parameter-name = token | parameter-name = token | |||
parameter-value = ( token / quoted-string ) | parameter-value = ( token / quoted-string ) | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Parameter names are case-insensitive. Parameter values might or mig ht | Parameter names are case-insensitive. Parameter values might or mig ht | |||
not be case-sensitive, depending on the semantics of the parameter | not be case-sensitive, depending on the semantics of the parameter | |||
name. Examples of parameters and some equivalent forms can be seen in | name. Examples of parameters and some equivalent forms can be seen in | |||
media types (<xref target="media.type"/>) and the Accept header fie ld | media types (<xref target="media.type"/>) and the Accept header fie ld | |||
(<xref target="field.accept"/>). | (<xref target="field.accept"/>). | |||
skipping to change at line 2051 ¶ | skipping to change at line 2048 ¶ | |||
<section anchor="http.date" title="Date/Time Formats"> | <section anchor="http.date" title="Date/Time Formats"> | |||
<iref primary="true" item="clock"/> | <iref primary="true" item="clock"/> | |||
<t> | <t> | |||
Prior to 1995, there were three different formats commonly used by servers | Prior to 1995, there were three different formats commonly used by servers | |||
to communicate timestamps. For compatibility with old implementati ons, all | to communicate timestamps. For compatibility with old implementati ons, all | |||
three are defined here. The preferred format is a fixed-length and | three are defined here. The preferred format is a fixed-length and | |||
single-zone subset of the date and time specification used by the | single-zone subset of the date and time specification used by the | |||
Internet Message Format <xref target="RFC5322"/>. | Internet Message Format <xref target="RFC5322"/>. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="HTTP-date" /> | <iref primary="true" item="Grammar" subitem="HTTP-date" /> | |||
<sourcecode type="abnf7230"><![CDATA[ HTTP-date = I MF-fixdate / obs-date | <sourcecode type="abnf9110"><![CDATA[ HTTP-date = I MF-fixdate / obs-date | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
An example of the preferred format is | An example of the preferred format is | |||
</t> | </t> | |||
<artwork type="example"><![CDATA[ | <artwork type="example"><![CDATA[ | |||
Sun, 06 Nov 1994 08:49:37 GMT ; IMF-fixdate | Sun, 06 Nov 1994 08:49:37 GMT ; IMF-fixdate | |||
]]></artwork> | ]]></artwork> | |||
<t> | <t> | |||
Examples of the two obsolete formats are | Examples of the two obsolete formats are | |||
</t> | </t> | |||
skipping to change at line 2099 ¶ | skipping to change at line 2096 ¶ | |||
</t> | </t> | |||
<t> | <t> | |||
An HTTP-date value represents time as an instance of Coordinated | An HTTP-date value represents time as an instance of Coordinated | |||
Universal Time (UTC). The first two formats indicate UTC by the | Universal Time (UTC). The first two formats indicate UTC by the | |||
three-letter abbreviation for Greenwich Mean Time, "GMT", a predece ssor | three-letter abbreviation for Greenwich Mean Time, "GMT", a predece ssor | |||
of the UTC name; values in the asctime format are assumed to be in UTC. | of the UTC name; values in the asctime format are assumed to be in UTC. | |||
</t> | </t> | |||
<t> | <t> | |||
A <em>clock</em> is an implementation capable of providing a | A <em>clock</em> is an implementation capable of providing a | |||
reasonable approximation of the current instant in UTC. | reasonable approximation of the current instant in UTC. | |||
A clock implementation ought to use NTP <xref target="RFC5905"/>, | A clock implementation ought to use NTP (<xref target="RFC5905"/>), | |||
or some similar protocol, to synchronize with UTC. | or some similar protocol, to synchronize with UTC. | |||
</t> | </t> | |||
<t anchor="preferred.date.format"> | <t anchor="preferred.date.format"> | |||
Preferred format: | Preferred format: | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="IMF-fixdat e"/> | <iref primary="true" item="Grammar" subitem="IMF-fixdat e"/> | |||
<iref primary="true" item="Grammar" subitem="date1"/> | <iref primary="true" item="Grammar" subitem="date1"/> | |||
<iref primary="true" item="Grammar" subitem="time-of-da y"/> | <iref primary="true" item="Grammar" subitem="time-of-da y"/> | |||
<iref primary="true" item="Grammar" subitem="hour"/> | <iref primary="true" item="Grammar" subitem="hour"/> | |||
<iref primary="true" item="Grammar" subitem="minute"/> | <iref primary="true" item="Grammar" subitem="minute"/> | |||
<iref primary="true" item="Grammar" subitem="second"/> | <iref primary="true" item="Grammar" subitem="second"/> | |||
<iref primary="true" item="Grammar" subitem="day-name"/ > | <iref primary="true" item="Grammar" subitem="day-name"/ > | |||
<iref primary="true" item="Grammar" subitem="day-name-l "/> | <iref primary="true" item="Grammar" subitem="day-name-l "/> | |||
<iref primary="true" item="Grammar" subitem="day"/> | <iref primary="true" item="Grammar" subitem="day"/> | |||
<iref primary="true" item="Grammar" subitem="month"/> | <iref primary="true" item="Grammar" subitem="month"/> | |||
<iref primary="true" item="Grammar" subitem="year"/> | <iref primary="true" item="Grammar" subitem="year"/> | |||
<iref primary="true" item="Grammar" subitem="GMT"/> | <iref primary="true" item="Grammar" subitem="GMT"/> | |||
<sourcecode type="abnf7230"><![CDATA[ IMF-fixdate = d ay-name "," SP date1 SP time-of-day SP GMT | <sourcecode type="abnf9110"><![CDATA[ IMF-fixdate = d ay-name "," SP date1 SP time-of-day SP GMT | |||
; fixed length/zone/capitalization subset of the format | ; fixed length/zone/capitalization subset of the format | |||
; see Section 3.3 of [RFC5322] | ; see Section 3.3 of [RFC5322] | |||
day-name = %s"Mon" / %s"Tue" / %s"Wed" | day-name = %s"Mon" / %s"Tue" / %s"Wed" | |||
/ %s"Thu" / %s"Fri" / %s"Sat" / %s"Sun" | / %s"Thu" / %s"Fri" / %s"Sat" / %s"Sun" | |||
date1 = day SP month SP year | date1 = day SP month SP year | |||
; e.g., 02 Jun 1982 | ; e.g., 02 Jun 1982 | |||
day = 2DIGIT | day = 2DIGIT | |||
skipping to change at line 2148 ¶ | skipping to change at line 2145 ¶ | |||
hour = 2DIGIT | hour = 2DIGIT | |||
minute = 2DIGIT | minute = 2DIGIT | |||
second = 2DIGIT | second = 2DIGIT | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t anchor="obsolete.date.formats"> | <t anchor="obsolete.date.formats"> | |||
Obsolete formats: | Obsolete formats: | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="obs-date"/ > | <iref primary="true" item="Grammar" subitem="obs-date"/ > | |||
<sourcecode type="abnf7230"><![CDATA[ obs-date = r fc850-date / asctime-date | <sourcecode type="abnf9110"><![CDATA[ obs-date = r fc850-date / asctime-date | |||
]]></sourcecode> | ]]></sourcecode> | |||
<iref primary="true" item="Grammar" subitem="rfc850-dat e"/> | <iref primary="true" item="Grammar" subitem="rfc850-dat e"/> | |||
<sourcecode type="abnf7230"><![CDATA[ rfc850-date = d ay-name-l "," SP date2 SP time-of-day SP GMT | <sourcecode type="abnf9110"><![CDATA[ rfc850-date = d ay-name-l "," SP date2 SP time-of-day SP GMT | |||
date2 = day "-" month "-" 2DIGIT | date2 = day "-" month "-" 2DIGIT | |||
; e.g., 02-Jun-82 | ; e.g., 02-Jun-82 | |||
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-da te"/> | <iref primary="true" item="Grammar" subitem="asctime-da te"/> | |||
<sourcecode type="abnf7230"><![CDATA[ asctime-date = d ay-name SP date3 SP time-of-day SP year | <sourcecode type="abnf9110"><![CDATA[ asctime-date = d ay-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="CACHING" secti on="4.2"/> relaxes this for cache recipients. | HTTP-date is case sensitive. Note that <xref target="CACHING" secti on="4.2"/> relaxes this for cache recipients. | |||
</t> | </t> | |||
<t> | <t> | |||
A sender <bcp14>MUST NOT</bcp14> generate additional whitespace in an HTTP-date beyond | A sender <bcp14>MUST NOT</bcp14> generate additional whitespace in an HTTP-date beyond | |||
that specifically included as SP in the grammar. | that specifically included as SP in the grammar. | |||
The semantics of <xref target="preferred.date.format" format="none" >day-name</xref>, <xref target="preferred.date.format" format="none">d ay</xref>, | The semantics of <xref target="preferred.date.format" format="none" >day-name</xref>, <xref target="preferred.date.format" format="none">d ay</xref>, | |||
skipping to change at line 2315 ¶ | skipping to change at line 2312 ¶ | |||
<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="metho ds"/>), | message control data includes a request method (<xref target="metho ds"/>), | |||
request target (<xref target="target.resource"/>), and protocol ver sion | request target (<xref target="target.resource"/>), and protocol ver sion | |||
(<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 phra se, and | a status code (<xref target="status.codes"/>), optional reason phra se, and | |||
protocol version. | protocol version. | |||
</t> | </t> | |||
<t> | <t> | |||
In HTTP/1.1 <xref target="HTTP11"/> and earlier, control data is se | In HTTP/1.1 (<xref target="HTTP11"/>) and earlier, control data is | |||
nt | sent | |||
as the first line of a message. In HTTP/2 <xref target="HTTP2"/> an | as the first line of a message. In HTTP/2 (<xref target="HTTP2"/>) | |||
d | and | |||
HTTP/3 <xref target="HTTP3"/>, control data is sent as pseudo-heade | HTTP/3 (<xref target="HTTP3"/>), control data is sent as pseudo-hea | |||
r | der | |||
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 communi cation | information to determine limitations or potential for later communi cation | |||
with that sender. | with that sender. | |||
</t> | </t> | |||
<t> | <t> | |||
skipping to change at line 2630 ¶ | skipping to change at line 2627 ¶ | |||
<iref primary="true" item="Fields" subitem="Date"/> | <iref primary="true" item="Fields" subitem="Date"/> | |||
<iref primary="true" item="Header Fields" subitem="Date "/> | <iref primary="true" item="Header Fields" subitem="Date "/> | |||
<iref primary="true" item="Date header field"/> | <iref primary="true" item="Date header field"/> | |||
<t> | <t> | |||
The "Date" header field represents the date and time at which | The "Date" header field represents the date and time at which | |||
the message was originated, having the same semantics as the Origin ation | the message was originated, having the same semantics as the Origin ation | |||
Date Field (orig-date) defined in <xref target="RFC5322" section="3 .6.1"/>. | Date Field (orig-date) defined in <xref target="RFC5322" section="3 .6.1"/>. | |||
The field value is an HTTP-date, as defined in <xref target="http.d ate"/>. | The field value is an HTTP-date, as defined in <xref target="http.d ate"/>. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Date"/> | <iref primary="true" item="Grammar" subitem="Date"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Date = HTTP-date | <sourcecode type="abnf9110"><![CDATA[ Date = HTTP-date | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
An example is | An example is | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[Date: Tue, 15 Nov 1994 08:12:31 GMT | <sourcecode type="http-message"><![CDATA[Date: Tue, 15 Nov 1994 08:12:31 GMT | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A sender that generates a Date header field <bcp14>SHOULD</bcp14> g enerate its | A sender that generates a Date header field <bcp14>SHOULD</bcp14> g enerate its | |||
field value as the best available approximation of the date and tim e of | field value as the best available approximation of the date and tim e of | |||
message generation. In theory, the date ought to represent the mome nt just | message generation. In theory, the date ought to represent the mome nt just | |||
skipping to change at line 2687 ¶ | skipping to change at line 2684 ¶ | |||
<iref primary="true" item="Header Fields" subitem="Trai ler"/> | <iref primary="true" item="Header Fields" subitem="Trai ler"/> | |||
<iref primary="true" item="Trailer header field"/> | <iref primary="true" item="Trailer header field"/> | |||
<t> | <t> | |||
The "Trailer" header field provides a list of field names that the sender | The "Trailer" header field provides a list of field names that the sender | |||
anticipates sending as trailer fields within that message. This all ows a | anticipates sending as trailer fields within that message. This all ows a | |||
recipient to prepare for receipt of the indicated metadata before i t starts | recipient to prepare for receipt of the indicated metadata before i t starts | |||
processing the content. | processing the content. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Trailer"/> | <iref primary="true" item="Grammar" subitem="Trailer"/> | |||
<iref primary="false" item="Grammar" subitem="field-nam e"/> | <iref primary="false" item="Grammar" subitem="field-nam e"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Trailer = #field -name | <sourcecode type="abnf9110"><![CDATA[ Trailer = #field -name | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
For example, a sender might indicate that a signature will | For example, a sender might indicate that a signature will | |||
be computed as the content is being streamed and provide the final | be computed as the content is being streamed and provide the final | |||
signature as a trailer field. This allows a recipient to perform th e same | signature as a trailer field. This allows a recipient to perform th e same | |||
check on the fly as it receives the content. | check on the fly as it receives the content. | |||
</t> | </t> | |||
<t> | <t> | |||
A sender that intends to generate one or more trailer fields in a m essage | A sender that intends to generate one or more trailer fields in a m essage | |||
<bcp14>SHOULD</bcp14> generate a <xref target="field.trailer" forma t="none">Trailer</xref> header field in the header | <bcp14>SHOULD</bcp14> generate a <xref target="field.trailer" forma t="none">Trailer</xref> header field in the header | |||
skipping to change at line 2792 ¶ | skipping to change at line 2789 ¶ | |||
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="HTTP2"/> and HTTP/3 <xref target="HTTP3"/>, 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="abnf9110"><![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 fi eld in a request | request. A user agent <bcp14>MUST</bcp14> generate a Host header fi eld in a request | |||
unless it sends that information as an ":authority" pseudo-header f ield. | unless it sends that information as an ":authority" pseudo-header f ield. | |||
A user agent that sends Host <bcp14>SHOULD</bcp14> send it as the f irst field in the | A user agent that sends Host <bcp14>SHOULD</bcp14> send it as the f irst field in the | |||
header section of a request. | header section of a request. | |||
</t> | </t> | |||
<t> | <t> | |||
For example, a GET request to the origin server for | For example, a GET request to the origin server for | |||
skipping to change at line 3011 ¶ | skipping to change at line 3008 ¶ | |||
<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="HTTP11" 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 = #connection-option | <sourcecode type="abnf9110"><![CDATA[ Connection = #connection-option | |||
connection-option = token | connection-option = token | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Connection options are case-insensitive. | Connection options are case-insensitive. | |||
</t> | </t> | |||
<t> | <t> | |||
A sender <bcp14>MUST NOT</bcp14> send a connection option correspon ding to a | A sender <bcp14>MUST NOT</bcp14> send a connection option correspon ding 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="CACHING" section="5.2"/>). | connection option (<xref target="CACHING" section="5.2"/>). | |||
skipping to change at line 3066 ¶ | skipping to change at line 3063 ¶ | |||
<iref primary="true" item="Header Fields" subitem="Max- Forwards"/> | <iref primary="true" item="Header Fields" subitem="Max- Forwards"/> | |||
<iref primary="true" item="Max-Forwards header field"/> | <iref primary="true" item="Max-Forwards header field"/> | |||
<t> | <t> | |||
The "Max-Forwards" header field provides a mechanism with the | The "Max-Forwards" header field provides a mechanism with the | |||
TRACE (<xref target="TRACE"/>) and OPTIONS (<xref target="OPTIONS"/ >) | TRACE (<xref target="TRACE"/>) and OPTIONS (<xref target="OPTIONS"/ >) | |||
request methods to limit the number of times that the request is fo rwarded by | request methods to limit the number of times that the request is fo rwarded by | |||
proxies. This can be useful when the client is attempting to | proxies. This can be useful when the client is attempting to | |||
trace a request that appears to be failing or looping mid-chain. | trace a request that appears to be failing or looping mid-chain. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Max-Forwar ds"/> | <iref primary="true" item="Grammar" subitem="Max-Forwar ds"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Max-Forwards = 1 *DIGIT | <sourcecode type="abnf9110"><![CDATA[ Max-Forwards = 1 *DIGIT | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The Max-Forwards value is a decimal integer indicating the remainin g | The Max-Forwards value is a decimal integer indicating the remainin g | |||
number of times this request message can be forwarded. | number of times this request message can be forwarded. | |||
</t> | </t> | |||
<t> | <t> | |||
Each intermediary that receives a TRACE or OPTIONS request containi ng a | Each intermediary that receives a TRACE or OPTIONS request containi ng a | |||
Max-Forwards header field <bcp14>MUST</bcp14> check and update its value prior to | Max-Forwards header field <bcp14>MUST</bcp14> check and update its value prior to | |||
forwarding the request. If the received value is zero (0), the inte rmediary | forwarding the request. If the received value is zero (0), the inte rmediary | |||
<bcp14>MUST NOT</bcp14> forward the request; instead, the intermedi ary <bcp14>MUST</bcp14> respond as | <bcp14>MUST NOT</bcp14> forward the request; instead, the intermedi ary <bcp14>MUST</bcp14> respond as | |||
skipping to change at line 3108 ¶ | skipping to change at line 3105 ¶ | |||
Via can be used for tracking message forwards, | Via can be used for tracking message forwards, | |||
avoiding request loops, and identifying the protocol capabilities o f | avoiding request loops, and identifying the protocol capabilities o f | |||
senders along the request/response chain. | senders along the request/response chain. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Via"/> | <iref primary="true" item="Grammar" subitem="Via"/> | |||
<iref primary="true" item="Grammar" subitem="received-p rotocol"/> | <iref primary="true" item="Grammar" subitem="received-p rotocol"/> | |||
<iref primary="true" item="Grammar" subitem="protocol-n ame"/> | <iref primary="true" item="Grammar" subitem="protocol-n ame"/> | |||
<iref primary="true" item="Grammar" subitem="protocol-v ersion"/> | <iref primary="true" item="Grammar" subitem="protocol-v ersion"/> | |||
<iref primary="true" item="Grammar" subitem="received-b y"/> | <iref primary="true" item="Grammar" subitem="received-b y"/> | |||
<iref primary="true" item="Grammar" subitem="pseudonym" /> | <iref primary="true" item="Grammar" subitem="pseudonym" /> | |||
<sourcecode type="abnf7230"><![CDATA[ Via = #( receive d-protocol RWS received-by [ RWS comment ] ) | <sourcecode type="abnf9110"><![CDATA[ Via = #( receive d-protocol RWS received-by [ RWS comment ] ) | |||
received-protocol = [ protocol-name "/" ] protocol-version | received-protocol = [ protocol-name "/" ] protocol-version | |||
; see Section 7.8 | ; see Section 7.8 | |||
received-by = pseudonym [ ":" port ] | received-by = pseudonym [ ":" port ] | |||
pseudonym = token | pseudonym = token | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Each member of the Via field value represents a proxy or gateway th at has | Each member of the Via field value represents a proxy or gateway th at has | |||
forwarded the message. Each intermediary appends its own informatio n | forwarded the message. Each intermediary appends its own informatio n | |||
about how the message was received, such that the end result is ord ered | about how the message was received, such that the end result is ord ered | |||
skipping to change at line 3271 ¶ | skipping to change at line 3268 ¶ | |||
</t> | </t> | |||
<t> | <t> | |||
A client <bcp14>MAY</bcp14> send a list of protocol names in the Up grade header field | A client <bcp14>MAY</bcp14> send a list of protocol names in the Up grade header field | |||
of a request to invite the server to switch to one or more of the n amed | of a request to invite the server to switch to one or more of the n amed | |||
protocols, in order of descending preference, before sending | protocols, in order of descending preference, before sending | |||
the final response. A server <bcp14>MAY</bcp14> ignore a received U pgrade header field | the final response. A server <bcp14>MAY</bcp14> ignore a received U pgrade header field | |||
if it wishes to continue using the current protocol on that connect ion. | if it wishes to continue using the current protocol on that connect ion. | |||
Upgrade cannot be used to insist on a protocol change. | Upgrade cannot be used to insist on a protocol change. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Upgrade"/> | <iref primary="true" item="Grammar" subitem="Upgrade"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Upgrade = #protocol | <sourcecode type="abnf9110"><![CDATA[ Upgrade = #protocol | |||
protocol = protocol-name ["/" protocol-version] | protocol = protocol-name ["/" protocol-version] | |||
protocol-name = token | protocol-name = token | |||
protocol-version = token | protocol-version = token | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Although protocol names are registered with a preferred case, | Although protocol names are registered with a preferred case, | |||
recipients <bcp14>SHOULD</bcp14> use case-insensitive comparison wh en matching each | recipients <bcp14>SHOULD</bcp14> use case-insensitive comparison wh en matching each | |||
protocol-name to supported protocols. | protocol-name to supported protocols. | |||
</t> | </t> | |||
skipping to change at line 3417 ¶ | skipping to change at line 3414 ¶ | |||
<t> | <t> | |||
The "Content-Type" header field indicates the media type of the | The "Content-Type" header field indicates the media type of the | |||
associated representation: either the representation enclosed in | associated representation: either the representation enclosed in | |||
the message content or the <xref target="selected.representation" f ormat="none">selected representation</xref>, as determined by the | the message content or the <xref target="selected.representation" f ormat="none">selected representation</xref>, as determined by the | |||
message semantics. The indicated media type defines both the data format | message semantics. The indicated media type defines both the data format | |||
and how that data is intended to be processed by a recipient, withi n the | and how that data is intended to be processed by a recipient, withi n the | |||
scope of the received message semantics, after any content codings | scope of the received message semantics, after any content codings | |||
indicated by <xref target="field.content-encoding" format="none">Co ntent-Encoding</xref> are decoded. | indicated by <xref target="field.content-encoding" format="none">Co ntent-Encoding</xref> are decoded. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Content-Type" /> | <iref primary="true" item="Grammar" subitem="Content-Type" /> | |||
<sourcecode type="abnf7230"><![CDATA[ Content-Type = medi a-type | <sourcecode type="abnf9110"><![CDATA[ Content-Type = medi a-type | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Media types are defined in <xref target="media.type"/>. An example of the | Media types are defined in <xref target="media.type"/>. An example of the | |||
field is | field is | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[Content-Type: tex t/html; charset=ISO-8859-4 | <sourcecode type="http-message"><![CDATA[Content-Type: tex t/html; charset=ISO-8859-4 | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A sender that generates a message containing content <bcp14>SHOULD< /bcp14> | A sender that generates a message containing content <bcp14>SHOULD< /bcp14> | |||
generate a Content-Type header field in that message unless the int ended | generate a Content-Type header field in that message unless the int ended | |||
skipping to change at line 3469 ¶ | skipping to change at line 3466 ¶ | |||
HTTP uses media types <xref target="RFC2046"/> in the | HTTP uses media types <xref target="RFC2046"/> in the | |||
<xref target="field.content-type" format="none">Content-Type</xref> (<xref target="field.content-type"/>) | <xref target="field.content-type" format="none">Content-Type</xref> (<xref target="field.content-type"/>) | |||
and <xref target="field.accept" format="none">Accept</xref> (<xref target="field.accept"/>) header fields in | and <xref target="field.accept" format="none">Accept</xref> (<xref target="field.accept"/>) header fields in | |||
order to provide open and extensible data typing and type negotiati on. | order to provide open and extensible data typing and type negotiati on. | |||
Media types define both a data format and various processing models : | Media types define both a data format and various processing models : | |||
how to process that data in accordance with the message context. | how to process that data in accordance with the message context. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="media-type "/> | <iref primary="true" item="Grammar" subitem="media-type "/> | |||
<iref primary="true" item="Grammar" subitem="type"/> | <iref primary="true" item="Grammar" subitem="type"/> | |||
<iref primary="true" item="Grammar" subitem="subtype"/> | <iref primary="true" item="Grammar" subitem="subtype"/> | |||
<sourcecode type="abnf7230"><![CDATA[ media-type = typ e "/" subtype parameters | <sourcecode type="abnf9110"><![CDATA[ media-type = typ e "/" subtype parameters | |||
type = token | type = token | |||
subtype = token | subtype = token | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The type and subtype tokens are case-insensitive. | The type and subtype tokens are case-insensitive. | |||
</t> | </t> | |||
<t> | <t> | |||
The type/subtype <bcp14>MAY</bcp14> be followed by semicolon-delimi ted parameters | The type/subtype <bcp14>MAY</bcp14> be followed by semicolon-delimi ted parameters | |||
(<xref target="parameter"/>) in the form of name=value pairs. | (<xref target="parameter"/>) in the form of name=value pairs. | |||
The presence or absence of a parameter might be significant to the | The presence or absence of a parameter might be significant to the | |||
skipping to change at line 3570 ¶ | skipping to change at line 3567 ¶ | |||
<t> | <t> | |||
The "Content-Encoding" header field indicates what content codings | The "Content-Encoding" header field indicates what content codings | |||
have been applied to the representation, beyond those inherent in t he media | have been applied to the representation, beyond those inherent in t he media | |||
type, and thus what decoding mechanisms have to be applied in order to | type, and thus what decoding mechanisms have to be applied in order to | |||
obtain data in the media type referenced by the <xref target="field .content-type" format="none">Content-Type</xref> | obtain data in the media type referenced by the <xref target="field .content-type" format="none">Content-Type</xref> | |||
header field. | header field. | |||
Content-Encoding is primarily used to allow a representation's data to be | Content-Encoding is primarily used to allow a representation's data to be | |||
compressed without losing the identity of its underlying media type . | compressed without losing the identity of its underlying media type . | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Content-Encod ing"/> | <iref primary="true" item="Grammar" subitem="Content-Encod ing"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Content-Encoding = #content-coding | <sourcecode type="abnf9110"><![CDATA[ Content-Encoding = #content-coding | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
An example of its use is | An example of its use is | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[Content-Encoding: gzip | <sourcecode type="http-message"><![CDATA[Content-Encoding: gzip | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
If one or more encodings have been applied to a representation, the sender | If one or more encodings have been applied to a representation, the sender | |||
that applied the encodings <bcp14>MUST</bcp14> generate a Content-E ncoding header field | that applied the encodings <bcp14>MUST</bcp14> generate a Content-E ncoding header field | |||
that lists the content codings in the order in which they were appl ied. | that lists the content codings in the order in which they were appl ied. | |||
skipping to change at line 3630 ¶ | skipping to change at line 3627 ¶ | |||
<iref primary="true" item="x-gzip (content coding)"/> | <iref primary="true" item="x-gzip (content coding)"/> | |||
<t> | <t> | |||
Content coding values indicate an encoding transformation that has | Content coding values indicate an encoding transformation that has | |||
been or can be applied to a representation. Content codings are pri marily | been or can be applied to a representation. Content codings are pri marily | |||
used to allow a representation to be compressed or otherwise useful ly | used to allow a representation to be compressed or otherwise useful ly | |||
transformed without losing the identity of its underlying media typ e | transformed without losing the identity of its underlying media typ e | |||
and without loss of information. Frequently, the representation is stored | and without loss of information. Frequently, the representation is stored | |||
in coded form, transmitted directly, and only decoded by the final recipient. | in coded form, transmitted directly, and only decoded by the final recipient. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="content-co ding"/> | <iref primary="true" item="Grammar" subitem="content-co ding"/> | |||
<sourcecode type="abnf7230"><![CDATA[ content-coding = token | <sourcecode type="abnf9110"><![CDATA[ content-coding = token | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
All content codings are case-insensitive and ought to be registered | All content codings are case-insensitive and ought to be registered | |||
within the "HTTP Content Coding Registry", as described in | within the "HTTP Content Coding Registry", as described in | |||
<xref target="content.coding.extensibility"/> | <xref target="content.coding.extensibility"/> | |||
</t> | </t> | |||
<t> | <t> | |||
Content-coding values are used in the | Content-coding values are used in the | |||
<xref target="field.accept-encoding" format="none">Accept-Encoding< /xref> (<xref target="field.accept-encoding"/>) | <xref target="field.accept-encoding" format="none">Accept-Encoding< /xref> (<xref target="field.accept-encoding"/>) | |||
and <xref target="field.content-encoding" format="none">Content-Enc oding</xref> (<xref target="field.content-encoding"/>) | and <xref target="field.content-encoding" format="none">Content-Enc oding</xref> (<xref target="field.content-encoding"/>) | |||
skipping to change at line 3688 ¶ | skipping to change at line 3685 ¶ | |||
<section anchor="field.content-language" title="Content-Langu age"> | <section anchor="field.content-language" title="Content-Langu age"> | |||
<iref primary="true" item="Fields" subitem="Content-Langua ge"/> | <iref primary="true" item="Fields" subitem="Content-Langua ge"/> | |||
<iref primary="true" item="Header Fields" subitem="Content -Language"/> | <iref primary="true" item="Header Fields" subitem="Content -Language"/> | |||
<iref primary="true" item="Content-Language header field"/ > | <iref primary="true" item="Content-Language header field"/ > | |||
<t> | <t> | |||
The "Content-Language" header field describes the natural | The "Content-Language" header field describes the natural | |||
language(s) of the intended audience for the representation. Note t hat this might | language(s) of the intended audience for the representation. Note t hat this might | |||
not be equivalent to all the languages used within the representati on. | not be equivalent to all the languages used within the representati on. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Content-Langu age"/> | <iref primary="true" item="Grammar" subitem="Content-Langu age"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Content-Language = #language-tag | <sourcecode type="abnf9110"><![CDATA[ Content-Language = #language-tag | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Language tags are defined in <xref target="language.tags"/>. The pr imary purpose of | Language tags are defined in <xref target="language.tags"/>. The pr imary purpose of | |||
Content-Language is to allow a user to identify and differentiate | Content-Language is to allow a user to identify and differentiate | |||
representations according to the users' own preferred language. Thu s, if the | representations according to the users' own preferred language. Thu s, if the | |||
content is intended only for a Danish-literate audience, the | content is intended only for a Danish-literate audience, the | |||
appropriate field is | appropriate field is | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[Content-Language: da | <sourcecode type="http-message"><![CDATA[Content-Language: da | |||
]]></sourcecode> | ]]></sourcecode> | |||
skipping to change at line 3741 ¶ | skipping to change at line 3738 ¶ | |||
</t> | </t> | |||
<t> | <t> | |||
HTTP uses language tags within the <xref target="field.accept-langu age" format="none">Accept-Language</xref> and | HTTP uses language tags within the <xref target="field.accept-langu age" format="none">Accept-Language</xref> and | |||
<xref target="field.content-language" format="none">Content-Languag e</xref> header fields. | <xref target="field.content-language" format="none">Content-Languag e</xref> header fields. | |||
<xref target="field.accept-language" format="none">Accept-Language< /xref> uses the broader language-range production | <xref target="field.accept-language" format="none">Accept-Language< /xref> uses the broader language-range production | |||
defined in <xref target="field.accept-language"/>, whereas | defined in <xref target="field.accept-language"/>, whereas | |||
<xref target="field.content-language" format="none">Content-Languag e</xref> uses the language-tag production defined | <xref target="field.content-language" format="none">Content-Languag e</xref> uses the language-tag production defined | |||
below. | below. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="language-t ag"/> | <iref primary="true" item="Grammar" subitem="language-t ag"/> | |||
<sourcecode type="abnf7230"><![CDATA[ language-tag = < Language-Tag, see [RFC5646], Section 2.1> | <sourcecode type="abnf9110"><![CDATA[ language-tag = < Language-Tag, see [RFC5646], Section 2.1> | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A language tag is a sequence of one or more case-insensitive subtag s, each | A language tag is a sequence of one or more case-insensitive subtag s, each | |||
separated by a hyphen character ("-", %x2D). In most cases, a lang uage tag | separated by a hyphen character ("-", %x2D). In most cases, a lang uage tag | |||
consists of a primary language subtag that identifies a broad famil y of | consists of a primary language subtag that identifies a broad famil y of | |||
related languages (e.g., "en" = English), which is optionally follo wed by a | related languages (e.g., "en" = English), which is optionally follo wed by a | |||
series of subtags that refine or narrow that language's range (e.g. , | series of subtags that refine or narrow that language's range (e.g. , | |||
"en-CA" = the variety of English as communicated in Canada). | "en-CA" = the variety of English as communicated in Canada). | |||
Whitespace is not allowed within a language tag. | Whitespace is not allowed within a language tag. | |||
Example tags include: | Example tags include: | |||
skipping to change at line 3776 ¶ | skipping to change at line 3773 ¶ | |||
The "Content-Length" header field indicates the associated represen tation's | The "Content-Length" header field indicates the associated represen tation'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 refer s | When transferring a representation as content, Content-Length refer s | |||
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="HTTP11" section="6.2"/>). | delimit framing (e.g., <xref target="HTTP11" section="6.2"/>). | |||
In other cases, Content-Length indicates the selected representatio n's | In other cases, Content-Length indicates the selected representatio n's | |||
current length, which can be used by recipients to estimate transfe r time | current length, which can be used by recipients to estimate transfe r time | |||
or to compare to previously stored representations. | or to compare to previously stored representations. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Content-Lengt h"/> | <iref primary="true" item="Grammar" subitem="Content-Lengt h"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Content-Length = 1* DIGIT | <sourcecode type="abnf9110"><![CDATA[ Content-Length = 1* DIGIT | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
An example is | An example is | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[Content-Length: 3 495 | <sourcecode type="http-message"><![CDATA[Content-Length: 3 495 | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A user agent <bcp14>SHOULD</bcp14> send Content-Length in a request when the method | A user agent <bcp14>SHOULD</bcp14> send Content-Length in a request when the method | |||
defines a meaning for enclosed content and it is not sending | defines a meaning for enclosed content and it is not sending | |||
Transfer-Encoding. | Transfer-Encoding. | |||
skipping to change at line 3867 ¶ | skipping to change at line 3864 ¶ | |||
<iref primary="true" item="Content-Location header field"/ > | <iref primary="true" item="Content-Location header field"/ > | |||
<t> | <t> | |||
The "Content-Location" header field references a URI that can be us ed | The "Content-Location" header field references a URI that can be us ed | |||
as an identifier for a specific resource corresponding to the | as an identifier for a specific resource corresponding to the | |||
representation in this message's content. | representation in this message's content. | |||
In other words, if one were to perform a GET request on this URI at the time | In other words, if one were to perform a GET request on this URI at the time | |||
of this message's generation, then a <xref target="status.200" form at="none">200 (OK)</xref> response would | of this message's generation, then a <xref target="status.200" form at="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-Locat ion"/> | <iref primary="true" item="Grammar" subitem="Content-Locat ion"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Content-Location = absolute-URI / partial-URI | <sourcecode type="abnf9110"><![CDATA[ Content-Location = absolute-URI / partial-URI | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The field value is either an <xref target="uri.references" format=" none">absolute-URI</xref> or a | The field value is either an <xref target="uri.references" format=" none">absolute-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="URI" 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. | |||
skipping to change at line 4103 ¶ | skipping to change at line 4100 ¶ | |||
<iref primary="true" item="Fields" subitem="Last-Modifi ed"/> | <iref primary="true" item="Fields" subitem="Last-Modifi ed"/> | |||
<iref primary="true" item="Header Fields" subitem="Last -Modified"/> | <iref primary="true" item="Header Fields" subitem="Last -Modified"/> | |||
<iref primary="true" item="Last-Modified header field"/ > | <iref primary="true" item="Last-Modified header field"/ > | |||
<t> | <t> | |||
The "Last-Modified" header field in a response provides a timestamp | The "Last-Modified" header field in a response provides a timestamp | |||
indicating the date and time at which the origin server believes th e | indicating the date and time at which the origin server believes th e | |||
<xref target="selected.representation" format="none">selected repre sentation</xref> was last modified, as determined at the conclusion | <xref target="selected.representation" format="none">selected repre sentation</xref> was last modified, as determined at the conclusion | |||
of handling the request. | of handling the request. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Last-Modif ied"/> | <iref primary="true" item="Grammar" subitem="Last-Modif ied"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Last-Modified = HTTP-date | <sourcecode type="abnf9110"><![CDATA[ Last-Modified = HTTP-date | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
An example of its use is | An example of its use is | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT | <sourcecode type="http-message"><![CDATA[Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT | |||
]]></sourcecode> | ]]></sourcecode> | |||
<section anchor="lastmod.generation" title="Generation" > | <section anchor="lastmod.generation" title="Generation" > | |||
<t> | <t> | |||
An origin server <bcp14>SHOULD</bcp14> send Last-Modified for any s elected | An origin server <bcp14>SHOULD</bcp14> send Last-Modified for any s elected | |||
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="CACHING"/> 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 4220 ¶ | skipping to change at line 4217 ¶ | |||
those multiple representations are due to resource state changes ov er | those multiple representations are due to resource state changes ov er | |||
time, content negotiation resulting in multiple representations bei ng | time, content negotiation resulting in multiple representations bei ng | |||
valid at the same time, or both. An entity-tag consists of an opaqu e | valid at the same time, or both. An entity-tag consists of an opaqu e | |||
quoted string, possibly prefixed by a weakness indicator. | quoted string, possibly prefixed by a weakness indicator. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="ETag"/> | <iref primary="true" item="Grammar" subitem="ETag"/> | |||
<iref primary="true" item="Grammar" subitem="entity-tag "/> | <iref primary="true" item="Grammar" subitem="entity-tag "/> | |||
<iref primary="true" item="Grammar" subitem="weak"/> | <iref primary="true" item="Grammar" subitem="weak"/> | |||
<iref primary="true" item="Grammar" subitem="opaque-tag "/> | <iref primary="true" item="Grammar" subitem="opaque-tag "/> | |||
<iref primary="true" item="Grammar" subitem="etagc"/> | <iref primary="true" item="Grammar" subitem="etagc"/> | |||
<sourcecode type="abnf7230"><![CDATA[ ETag = ent ity-tag | <sourcecode type="abnf9110"><![CDATA[ ETag = ent ity-tag | |||
entity-tag = [ weak ] opaque-tag | entity-tag = [ weak ] opaque-tag | |||
weak = %s"W/" | weak = %s"W/" | |||
opaque-tag = DQUOTE *etagc DQUOTE | opaque-tag = DQUOTE *etagc DQUOTE | |||
etagc = %x21 / %x23-7E / obs-text | etagc = %x21 / %x23-7E / obs-text | |||
; VCHAR except double quotes, plus obs-text | ; VCHAR except double quotes, plus obs-text | |||
]]></sourcecode> | ]]></sourcecode> | |||
<aside> | <aside> | |||
<t> | <t> | |||
<strong>Note:</strong> Previously, opaque-tag was defined to be a quoted-string | <strong>Note:</strong> Previously, opaque-tag was defined to be a quoted-string | |||
skipping to change at line 4286 ¶ | skipping to change at line 4283 ¶ | |||
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, o r | representation content, a combination of various file attributes, o r | |||
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 selecte d representation | An origin server <bcp14>SHOULD</bcp14> send an ETag for any selecte d representation | |||
for which detection of changes can be reasonably and consistently | for which detection of changes can be reasonably and consistently | |||
determined, since the entity-tag's use in conditional requests and | determined, since the entity-tag's use in conditional requests and | |||
evaluating cache freshness <xref target="CACHING"/> 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="Comparis on"> | <section anchor="entity.tag.comparison" title="Comparis on"> | |||
<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 4440 ¶ | skipping to change at line 4437 ¶ | |||
(<xref target="preconditions"/>) to make the requested | (<xref target="preconditions"/>) to make the requested | |||
action conditional on the current state of the target resource. | action conditional on the current state of the target resource. | |||
</t> | </t> | |||
<t> | <t> | |||
HTTP is designed to be usable as an interface to distributed | HTTP is designed to be usable as an interface to distributed | |||
object systems. The request method invokes an action to be applied to | object systems. The request method invokes an action to be applied to | |||
a <xref target="target.resource" format="none">target resource</xre f> in much the same way that a remote | a <xref target="target.resource" format="none">target resource</xre f> in much the same way that a remote | |||
method invocation can be sent to an identified object. | method invocation can be sent to an identified object. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="method"/> | <iref primary="true" item="Grammar" subitem="method"/> | |||
<sourcecode type="abnf7230"><![CDATA[ method = token | <sourcecode type="abnf9110"><![CDATA[ method = token | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The method token is case-sensitive because it might be used as a ga teway | The method token is case-sensitive because it might be used as a ga teway | |||
to object-based systems with case-sensitive method names. By conven tion, | to object-based systems with case-sensitive method names. By conven tion, | |||
standardized methods are defined in all-uppercase US-ASCII letters. | standardized methods are defined in all-uppercase US-ASCII letters. | |||
</t> | </t> | |||
<t> | <t> | |||
Unlike distributed objects, the standardized request methods in HTT P are | Unlike distributed objects, the standardized request methods in HTT P are | |||
not resource-specific, since uniform interfaces provide for better | not resource-specific, since uniform interfaces provide for better | |||
visibility and reuse in network-based systems <xref target="REST"/> . | visibility and reuse in network-based systems <xref target="REST"/> . | |||
skipping to change at line 5264 ¶ | skipping to change at line 5261 ¶ | |||
<iref primary="true" item="Fields" subitem="Expect"/> | <iref primary="true" item="Fields" subitem="Expect"/> | |||
<iref primary="true" item="Header Fields" subitem="Expe ct"/> | <iref primary="true" item="Header Fields" subitem="Expe ct"/> | |||
<iref primary="true" item="Expect header field"/> | <iref primary="true" item="Expect header field"/> | |||
<iref primary="true" item="100-continue (expect value)" /> | <iref primary="true" item="100-continue (expect value)" /> | |||
<t> | <t> | |||
The "Expect" header field in a request indicates a certain set of | The "Expect" header field in a request indicates a certain set of | |||
behaviors (expectations) that need to be supported by the server in | behaviors (expectations) that need to be supported by the server in | |||
order to properly handle this request. | order to properly handle this request. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Expect"/> | <iref primary="true" item="Grammar" subitem="Expect"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Expect = #e xpectation | <sourcecode type="abnf9110"><![CDATA[ Expect = #e xpectation | |||
expectation = token [ "=" ( token / quoted-string ) parameters ] | expectation = token [ "=" ( token / quoted-string ) parameters ] | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The Expect field value is case-insensitive. | The Expect field value is case-insensitive. | |||
</t> | </t> | |||
<t> | <t> | |||
The only expectation defined by this specification is "100-continue " | The only expectation defined by this specification is "100-continue " | |||
(with no defined parameters). | (with no defined parameters). | |||
</t> | </t> | |||
<t> | <t> | |||
skipping to change at line 5451 ¶ | skipping to change at line 5448 ¶ | |||
<iref primary="true" item="Fields" subitem="From"/> | <iref primary="true" item="Fields" subitem="From"/> | |||
<iref primary="true" item="Header Fields" subitem="From "/> | <iref primary="true" item="Header Fields" subitem="From "/> | |||
<iref primary="true" item="From header field"/> | <iref primary="true" item="From header field"/> | |||
<t> | <t> | |||
The "From" header field contains an Internet email address for a hu man | The "From" header field contains an Internet email address for a hu man | |||
user who controls the requesting user agent. The address ought to b e | user who controls the requesting user agent. The address ought to b e | |||
machine-usable, as defined by "mailbox" | machine-usable, as defined by "mailbox" | |||
in <xref target="RFC5322" section="3.4"/>: | in <xref target="RFC5322" section="3.4"/>: | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="From"/> | <iref primary="true" item="Grammar" subitem="From"/> | |||
<sourcecode type="abnf7230"><![CDATA[ From = mailbo x | <sourcecode type="abnf9110"><![CDATA[ From = mailbo x | |||
mailbox = <mailbox, see [RFC5322], Section 3.4> | mailbox = <mailbox, see [RFC5322], Section 3.4> | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
An example is: | An example is: | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[From: webmaste r@example.org | <sourcecode type="http-message"><![CDATA[From: webmaste r@example.org | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The From header field is rarely sent by non-robotic user agents. | The From header field is rarely sent by non-robotic user agents. | |||
skipping to change at line 5492 ¶ | skipping to change at line 5489 ¶ | |||
<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.reso urce" format="none">target URI</xref> was | reference for the resource from which the <xref target="target.reso urce" format="none">target URI</xref> was | |||
obtained (i.e., the "referrer", though the field name is misspelled ). | obtained (i.e., the "referrer", though the field name is misspelled ). | |||
A user agent <bcp14>MUST NOT</bcp14> include the fragment and useri nfo components | A user agent <bcp14>MUST NOT</bcp14> include the fragment and useri nfo components | |||
of the URI reference <xref target="URI"/>, 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 = absolu te-URI / partial-URI | <sourcecode type="abnf9110"><![CDATA[ Referer = absolu te-URI / partial-URI | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The field value is either an <xref target="uri.references" format=" none">absolute-URI</xref> or a | The field value is either an <xref target="uri.references" format=" none">absolute-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="URI" 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 o ther | The Referer header field allows servers to generate back-links to o ther | |||
resources for simple analytics, logging, optimized caching, etc. It also | resources for simple analytics, logging, optimized caching, etc. It also | |||
skipping to change at line 5582 ¶ | skipping to change at line 5579 ¶ | |||
The TE field value is a list of members, with each member (aside fr om | The TE field value is a list of members, with each member (aside fr om | |||
"trailers") consisting of a transfer coding name token with an opti onal | "trailers") consisting of a transfer coding name token with an opti onal | |||
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" /> | |||
<iref primary="true" item="Grammar" subitem="transfer-c oding"/> | <iref primary="true" item="Grammar" subitem="transfer-c oding"/> | |||
<iref primary="true" item="Grammar" subitem="transfer-p arameter"/> | <iref primary="true" item="Grammar" subitem="transfer-p arameter"/> | |||
<sourcecode type="abnf7230"><![CDATA[ TE = #t-codings | <sourcecode type="abnf9110"><![CDATA[ TE = #t-codings | |||
t-codings = "trailers" / ( transfer-coding [ weight ] ) | t-codings = "trailers" / ( transfer-coding [ weight ] ) | |||
transfer-coding = token *( OWS ";" OWS transfer-parameter ) | transfer-coding = token *( OWS ";" OWS transfer-parameter ) | |||
transfer-parameter = token BWS "=" BWS ( token / quoted-string ) | transfer-parameter = token BWS "=" BWS ( token / quoted-string ) | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A sender of TE <bcp14>MUST</bcp14> also send a "TE" connection opti on within the | A sender of TE <bcp14>MUST</bcp14> also send a "TE" connection opti on within the | |||
<xref target="field.connection" format="none">Connection</xref> hea der field (<xref target="field.connection"/>) | <xref target="field.connection" format="none">Connection</xref> hea der field (<xref target="field.connection"/>) | |||
to inform intermediaries not to forward this field. | to inform intermediaries not to forward this field. | |||
</t> | </t> | |||
</section> | </section> | |||
skipping to change at line 5607 ¶ | skipping to change at line 5604 ¶ | |||
<t> | <t> | |||
The "User-Agent" header field contains information about the user a gent | The "User-Agent" header field contains information about the user a gent | |||
originating the request, which is often used by servers to help ide ntify | originating the request, which is often used by servers to help ide ntify | |||
the scope of reported interoperability problems, to work around or tailor | the scope of reported interoperability problems, to work around or tailor | |||
responses to avoid particular user agent limitations, and for analy tics | responses to avoid particular user agent limitations, and for analy tics | |||
regarding browser or operating system use. A user agent <bcp14>SHOU LD</bcp14> send | regarding browser or operating system use. A user agent <bcp14>SHOU LD</bcp14> send | |||
a User-Agent header field in each request unless specifically confi gured not | a User-Agent header field in each request unless specifically confi gured not | |||
to do so. | to do so. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="User-Agent "/> | <iref primary="true" item="Grammar" subitem="User-Agent "/> | |||
<sourcecode type="abnf7230"><![CDATA[ User-Agent = pro duct *( RWS ( product / comment ) ) | <sourcecode type="abnf9110"><![CDATA[ User-Agent = pro duct *( RWS ( product / comment ) ) | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The User-Agent field value consists of one or more product identifi ers, | The User-Agent field value consists of one or more product identifi ers, | |||
each followed by zero or more comments (<xref target="comments"/>), which together | each followed by zero or more comments (<xref target="comments"/>), which together | |||
identify the user agent software and its significant subproducts. | identify the user agent software and its significant subproducts. | |||
By convention, the product identifiers are listed in decreasing ord er of | By convention, the product identifiers are listed in decreasing ord er of | |||
their significance for identifying the user agent software. Each pr oduct | their significance for identifying the user agent software. Each pr oduct | |||
identifier consists of a name and optional version. | identifier consists of a name and optional version. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="product"/> | <iref primary="true" item="Grammar" subitem="product"/> | |||
<iref primary="true" item="Grammar" subitem="product-ve rsion"/> | <iref primary="true" item="Grammar" subitem="product-ve rsion"/> | |||
<sourcecode type="abnf7230"><![CDATA[ product = token ["/" product-version] | <sourcecode type="abnf9110"><![CDATA[ product = token ["/" product-version] | |||
product-version = token | product-version = token | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A sender <bcp14>SHOULD</bcp14> limit generated product identifiers to what is necessary | A sender <bcp14>SHOULD</bcp14> limit generated product identifiers to what is necessary | |||
to identify the product; a sender <bcp14>MUST NOT</bcp14> generate advertising or other | to identify the product; a sender <bcp14>MUST NOT</bcp14> generate advertising or other | |||
nonessential information within the product identifier. | nonessential information within the product identifier. | |||
A sender <bcp14>SHOULD NOT</bcp14> generate information in <xref ta rget="field.user-agent" format="none">product-version</xref> | A sender <bcp14>SHOULD NOT</bcp14> generate information in <xref ta rget="field.user-agent" format="none">product-version</xref> | |||
that is not a version identifier (i.e., successive versions of the same | that is not a version identifier (i.e., successive versions of the same | |||
product name ought to differ only in the product-version portion of the | product name ought to differ only in the product-version portion of the | |||
product identifier). | product identifier). | |||
skipping to change at line 5671 ¶ | skipping to change at line 5668 ¶ | |||
<iref primary="true" item="Fields" subitem="Allow"/> | <iref primary="true" item="Fields" subitem="Allow"/> | |||
<iref primary="true" item="Header Fields" subitem="Allo w"/> | <iref primary="true" item="Header Fields" subitem="Allo w"/> | |||
<iref primary="true" item="Allow header field"/> | <iref primary="true" item="Allow header field"/> | |||
<t> | <t> | |||
The "Allow" header field lists the set of methods advertised as | The "Allow" header field lists the set of methods advertised as | |||
supported by the <xref target="target.resource" format="none">targe t resource</xref>. The purpose of this field | supported by the <xref target="target.resource" format="none">targe t resource</xref>. The purpose of this field | |||
is strictly to inform the recipient of valid request methods associ ated | is strictly to inform the recipient of valid request methods associ ated | |||
with the resource. | with the resource. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Allow"/> | <iref primary="true" item="Grammar" subitem="Allow"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Allow = #method | <sourcecode type="abnf9110"><![CDATA[ Allow = #method | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Example of use: | Example of use: | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[Allow: GET, HE AD, PUT | <sourcecode type="http-message"><![CDATA[Allow: GET, HE AD, PUT | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The actual set of allowed methods is defined by the origin server a t the | The actual set of allowed methods is defined by the origin server a t the | |||
time of each request. An origin server <bcp14>MUST</bcp14> generate an Allow header field in a | time of each request. An origin server <bcp14>MUST</bcp14> generate an Allow header field in a | |||
<xref target="status.405" format="none">405 (Method Not Allowed)</x ref> response and <bcp14>MAY</bcp14> do so in any | <xref target="status.405" format="none">405 (Method Not Allowed)</x ref> response and <bcp14>MAY</bcp14> do so in any | |||
skipping to change at line 5702 ¶ | skipping to change at line 5699 ¶ | |||
<section anchor="field.location" title="Location"> | <section anchor="field.location" title="Location"> | |||
<iref primary="true" item="Fields" subitem="Location"/> | <iref primary="true" item="Fields" subitem="Location"/> | |||
<iref primary="true" item="Header Fields" subitem="Loca tion"/> | <iref primary="true" item="Header Fields" subitem="Loca tion"/> | |||
<iref primary="true" item="Location header field"/> | <iref primary="true" item="Location header field"/> | |||
<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 relation ship is | specific resource in relation to the response. The type of relation ship is | |||
defined by the combination of request method and status code semant ics. | defined by the combination of request method and status code semant ics. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Location"/ > | <iref primary="true" item="Grammar" subitem="Location"/ > | |||
<sourcecode type="abnf7230"><![CDATA[ Location = URI-r eference | <sourcecode type="abnf9110"><![CDATA[ Location = URI-r eference | |||
]]></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="URI" sectionFormat="comma" s ection="4.2"/>), | of a relative reference (<xref target="URI" sectionFormat="comma" s ection="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="URI" 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> re sponses, the Location value refers to | For <xref target="status.201" format="none">201 (Created)</xref> re sponses, the Location value refers to | |||
the primary resource created by the request. | the primary resource created by the request. | |||
skipping to change at line 5793 ¶ | skipping to change at line 5790 ¶ | |||
how long the service is expected to be unavailable to the client. | how long the service is expected to be unavailable to the client. | |||
When sent with any <xref target="status.3xx" format="none">3xx (Red irection)</xref> response, Retry-After | When sent with any <xref target="status.3xx" format="none">3xx (Red irection)</xref> response, Retry-After | |||
indicates the minimum time that the user agent is asked to wait bef ore | indicates the minimum time that the user agent is asked to wait bef ore | |||
issuing the redirected request. | issuing the redirected request. | |||
</t> | </t> | |||
<t> | <t> | |||
The Retry-After field value can be either an HTTP-date or a number | The Retry-After field value can be either an HTTP-date or a number | |||
of seconds to delay after receiving the response. | of seconds to delay after receiving the response. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Retry-Afte r"/> | <iref primary="true" item="Grammar" subitem="Retry-Afte r"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Retry-After = HT TP-date / delay-seconds | <sourcecode type="abnf9110"><![CDATA[ Retry-After = HT TP-date / delay-seconds | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t anchor="rule.delay-seconds"> | <t anchor="rule.delay-seconds"> | |||
A delay-seconds value is a non-negative decimal integer, representi ng time | A delay-seconds value is a non-negative decimal integer, representi ng time | |||
in seconds. | in seconds. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="delay-seco nds"/> | <iref primary="true" item="Grammar" subitem="delay-seco nds"/> | |||
<sourcecode type="abnf7230"><![CDATA[ delay-seconds = 1*DIGIT | <sourcecode type="abnf9110"><![CDATA[ delay-seconds = 1*DIGIT | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Two examples of its use are | Two examples of its use are | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[Retry-After: F ri, 31 Dec 1999 23:59:59 GMT | <sourcecode type="http-message"><![CDATA[Retry-After: F ri, 31 Dec 1999 23:59:59 GMT | |||
Retry-After: 120 | Retry-After: 120 | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
In the latter example, the delay is 2 minutes. | In the latter example, the delay is 2 minutes. | |||
</t> | </t> | |||
skipping to change at line 5826 ¶ | skipping to change at line 5823 ¶ | |||
<iref primary="true" item="Server header field"/> | <iref primary="true" item="Server header field"/> | |||
<t> | <t> | |||
The "Server" header field contains information about the | The "Server" header field contains information about the | |||
software used by the origin server to handle the request, which is often | software used by the origin server to handle the request, which is often | |||
used by clients to help identify the scope of reported interoperabi lity | used by clients to help identify the scope of reported interoperabi lity | |||
problems, to work around or tailor requests to avoid particular ser ver | problems, to work around or tailor requests to avoid particular ser ver | |||
limitations, and for analytics regarding server or operating system use. | limitations, and for analytics regarding server or operating system use. | |||
An origin server <bcp14>MAY</bcp14> generate a Server header field in its responses. | An origin server <bcp14>MAY</bcp14> generate a Server header field in its responses. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Server"/> | <iref primary="true" item="Grammar" subitem="Server"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Server = product *( RWS ( product / comment ) ) | <sourcecode type="abnf9110"><![CDATA[ Server = product *( RWS ( product / comment ) ) | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The Server header field value consists of one or more product ident ifiers, each | The Server header field value consists of one or more product ident ifiers, each | |||
followed by zero or more comments (<xref target="comments"/>), whic h together | followed by zero or more comments (<xref target="comments"/>), whic h together | |||
identify the origin server software and its significant subproducts . | identify the origin server software and its significant subproducts . | |||
By convention, the product identifiers are listed in decreasing ord er of | By convention, the product identifiers are listed in decreasing ord er of | |||
their significance for identifying the origin server software. Each product | their significance for identifying the origin server software. Each product | |||
identifier consists of a name and optional version, as defined in | identifier consists of a name and optional version, as defined in | |||
<xref target="field.user-agent"/>. | <xref target="field.user-agent"/>. | |||
</t> | </t> | |||
skipping to change at line 5863 ¶ | skipping to change at line 5860 ¶ | |||
<section anchor="authentication" title="HTTP Authentication"> | <section anchor="authentication" title="HTTP Authentication"> | |||
<section anchor="auth.scheme" title="Authentication Scheme"> | <section anchor="auth.scheme" title="Authentication Scheme"> | |||
<t> | <t> | |||
HTTP provides a general framework for access control and authentica tion, | HTTP provides a general framework for access control and authentica tion, | |||
via an extensible set of challenge-response authentication schemes, which | via an extensible set of challenge-response authentication schemes, which | |||
can be used by a server to challenge a client request and by a clie nt to | can be used by a server to challenge a client request and by a clie nt to | |||
provide authentication information. It uses a case-insensitive | provide authentication information. It uses a case-insensitive | |||
token to identify the authentication scheme: | token to identify the authentication scheme: | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="auth-scheme"/ > | <iref primary="true" item="Grammar" subitem="auth-scheme"/ > | |||
<sourcecode type="abnf7230"><![CDATA[ auth-scheme = to ken | <sourcecode type="abnf9110"><![CDATA[ auth-scheme = to ken | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Aside from the general framework, this document does not specify an y | Aside from the general framework, this document does not specify an y | |||
authentication schemes. New and existing authentication schemes are | authentication schemes. New and existing authentication schemes are | |||
specified independently and ought to be registered within the | specified independently and ought to be registered within the | |||
"Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry" . | "Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry" . | |||
For example, the "basic" and "digest" authentication schemes are de fined by | For example, the "basic" and "digest" authentication schemes are de fined by | |||
<xref target="RFC7617">RFC 7617</xref> and | <xref target="RFC7617">RFC 7617</xref> and | |||
<xref target="RFC7616">RFC 7616</xref>, respectively. | <xref target="RFC7616">RFC 7616</xref>, respectively. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="auth.params" title="Authentication Parameter s"> | <section anchor="auth.params" title="Authentication Parameter s"> | |||
<t> | <t> | |||
The authentication scheme is followed by additional information nec essary | The authentication scheme is followed by additional information nec essary | |||
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 characte rs | comma-separated list of parameters or a single sequence of characte rs | |||
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="abnf9110"><![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="URI"/>, 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 base 16 (hex) | base64, base64url (URL and filename safe alphabet), base32, or base 16 (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 toke n is | Authentication parameters are name=value pairs, where the name toke n is | |||
matched case-insensitively | matched case-insensitively | |||
and each parameter name <bcp14>MUST</bcp14> only occur once per cha llenge. | and each parameter name <bcp14>MUST</bcp14> only occur once per cha llenge. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="auth-param"/> | <iref primary="true" item="Grammar" subitem="auth-param"/> | |||
<sourcecode type="abnf7230"><![CDATA[ auth-param = to ken BWS "=" BWS ( token / quoted-string ) | <sourcecode type="abnf9110"><![CDATA[ auth-param = to ken BWS "=" BWS ( token / quoted-string ) | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Parameter values can be expressed either as "token" or as "quoted-s tring" | Parameter values can be expressed either as "token" or as "quoted-s tring" | |||
(<xref target="fields.components"/>). | (<xref target="fields.components"/>). | |||
Authentication scheme definitions need to accept both notations, bo th for | Authentication scheme definitions need to accept both notations, bo th for | |||
senders and recipients, to allow recipients to use generic parsing | senders and recipients, to allow recipients to use generic parsing | |||
components regardless of the authentication scheme. | components regardless of the authentication scheme. | |||
</t> | </t> | |||
<t> | <t> | |||
For backwards compatibility, authentication scheme definitions can restrict | For backwards compatibility, authentication scheme definitions can restrict | |||
skipping to change at line 5929 ¶ | skipping to change at line 5926 ¶ | |||
<xref target="field.www-authenticate" format="none">WWW-Authenticat e</xref> header field containing at least one | <xref target="field.www-authenticate" format="none">WWW-Authenticat e</xref> header field containing at least one | |||
challenge applicable to the requested resource. | challenge applicable to the requested resource. | |||
</t> | </t> | |||
<t> | <t> | |||
A <xref target="status.407" format="none">407 (Proxy Authentication Required)</xref> response message is | A <xref target="status.407" format="none">407 (Proxy Authentication Required)</xref> response message is | |||
used by a proxy to challenge the authorization of a client, includi ng a | used by a proxy to challenge the authorization of a client, includi ng a | |||
<xref target="field.proxy-authenticate" format="none">Proxy-Authent icate</xref> header field containing at least one | <xref target="field.proxy-authenticate" format="none">Proxy-Authent icate</xref> header field containing at least one | |||
challenge applicable to the proxy for the requested resource. | challenge applicable to the proxy for the requested resource. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="challenge"/> | <iref primary="true" item="Grammar" subitem="challenge"/> | |||
<sourcecode type="abnf7230"><![CDATA[ challenge = auth- scheme [ 1*SP ( token68 / #auth-param ) ] | <sourcecode type="abnf9110"><![CDATA[ challenge = auth- scheme [ 1*SP ( token68 / #auth-param ) ] | |||
]]></sourcecode> | ]]></sourcecode> | |||
<aside> | <aside> | |||
<t> | <t> | |||
<strong>Note:</strong> Many clients fail to parse a challenge that contains an unknown | <strong>Note:</strong> Many clients fail to parse a challenge that contains an unknown | |||
scheme. A workaround for this problem is to list well-supported s chemes | scheme. A workaround for this problem is to list well-supported s chemes | |||
(such as "basic") first.<!-- [auth] see https://greenbytes.de/tec h/tc/httpauth/#multibasicunknown2 --> | (such as "basic") first.<!-- [auth] see https://greenbytes.de/tec h/tc/httpauth/#multibasicunknown2 --> | |||
</t> | </t> | |||
</aside> | </aside> | |||
<t> | <t> | |||
A user agent that wishes to authenticate itself with an origin serv er | A user agent that wishes to authenticate itself with an origin serv er | |||
skipping to change at line 5967 ¶ | skipping to change at line 5964 ¶ | |||
challenge received in a response (possibly at some point in the pas t). | challenge received in a response (possibly at some point in the pas t). | |||
When creating their values, the user agent ought to do so by select ing the | When creating their values, the user agent ought to do so by select ing the | |||
challenge with what it considers to be the most secure auth-scheme that it | challenge with what it considers to be the most secure auth-scheme that it | |||
understands, obtaining credentials from the user as appropriate. | understands, obtaining credentials from the user as appropriate. | |||
Transmission of credentials within header field values implies sign ificant | Transmission of credentials within header field values implies sign ificant | |||
security considerations regarding the confidentiality of the underl ying | security considerations regarding the confidentiality of the underl ying | |||
connection, as described in | connection, as described in | |||
<xref target="confidentiality.of.credentials"/>. | <xref target="confidentiality.of.credentials"/>. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="credentials"/ > | <iref primary="true" item="Grammar" subitem="credentials"/ > | |||
<sourcecode type="abnf7230"><![CDATA[ credentials = auth- scheme [ 1*SP ( token68 / #auth-param ) ] | <sourcecode type="abnf9110"><![CDATA[ credentials = auth- scheme [ 1*SP ( token68 / #auth-param ) ] | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Upon receipt of a request for a protected resource that omits crede ntials, | Upon receipt of a request for a protected resource that omits crede ntials, | |||
contains invalid credentials (e.g., a bad password) or partial cred entials | contains invalid credentials (e.g., a bad password) or partial cred entials | |||
(e.g., when the authentication scheme requires more than one round trip), | (e.g., when the authentication scheme requires more than one round trip), | |||
an origin server <bcp14>SHOULD</bcp14> send a <xref target="status. 401" format="none">401 (Unauthorized)</xref> response | an origin server <bcp14>SHOULD</bcp14> send a <xref target="status. 401" format="none">401 (Unauthorized)</xref> response | |||
that contains a <xref target="field.www-authenticate" format="none" >WWW-Authenticate</xref> header field with at least | that contains a <xref target="field.www-authenticate" format="none" >WWW-Authenticate</xref> header field with at least | |||
one (possibly new) challenge applicable to the requested resource. | one (possibly new) challenge applicable to the requested resource. | |||
</t> | </t> | |||
<t> | <t> | |||
skipping to change at line 6062 ¶ | skipping to change at line 6059 ¶ | |||
title="Authenticating Users to Origin Servers"> | title="Authenticating Users to Origin Servers"> | |||
<section anchor="field.www-authenticate" title="WWW-Authen ticate"> | <section anchor="field.www-authenticate" title="WWW-Authen ticate"> | |||
<iref primary="true" item="Fields" subitem="WWW-Authent icate"/> | <iref primary="true" item="Fields" subitem="WWW-Authent icate"/> | |||
<iref primary="true" item="Header Fields" subitem="WWW- Authenticate"/> | <iref primary="true" item="Header Fields" subitem="WWW- Authenticate"/> | |||
<iref primary="true" item="WWW-Authenticate header fiel d"/> | <iref primary="true" item="WWW-Authenticate header fiel d"/> | |||
<t> | <t> | |||
The "WWW-Authenticate" response header field indicates the authenti cation | The "WWW-Authenticate" response header field indicates the authenti cation | |||
scheme(s) and parameters applicable to the target resource. | scheme(s) and parameters applicable to the target resource. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="WWW-Authen ticate"/> | <iref primary="true" item="Grammar" subitem="WWW-Authen ticate"/> | |||
<sourcecode type="abnf7230"><![CDATA[ WWW-Authenticate = #challenge | <sourcecode type="abnf9110"><![CDATA[ WWW-Authenticate = #challenge | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A server generating a <xref target="status.401" format="none">401 ( Unauthorized)</xref> response | A server generating a <xref target="status.401" format="none">401 ( Unauthorized)</xref> response | |||
<bcp14>MUST</bcp14> send a WWW-Authenticate header field containing at least one | <bcp14>MUST</bcp14> send a WWW-Authenticate header field containing at least one | |||
challenge. A server <bcp14>MAY</bcp14> generate a WWW-Authenticate header field | challenge. A server <bcp14>MAY</bcp14> generate a WWW-Authenticate header field | |||
in other response messages to indicate that supplying credentials | in other response messages to indicate that supplying credentials | |||
(or different credentials) might affect the response. | (or different credentials) might affect the response. | |||
</t> | </t> | |||
<t> | <t> | |||
A proxy forwarding a response <bcp14>MUST NOT</bcp14> modify any | A proxy forwarding a response <bcp14>MUST NOT</bcp14> modify any | |||
skipping to change at line 6120 ¶ | skipping to change at line 6117 ¶ | |||
<iref primary="true" item="Header Fields" subitem="Auth orization"/> | <iref primary="true" item="Header Fields" subitem="Auth orization"/> | |||
<iref primary="true" item="Authorization header field"/ > | <iref primary="true" item="Authorization header field"/ > | |||
<t> | <t> | |||
The "Authorization" header field allows a user agent to authenticat e itself | The "Authorization" header field allows a user agent to authenticat e itself | |||
with an origin server -- usually, but not necessarily, after receiv ing | with an origin server -- usually, but not necessarily, after receiv ing | |||
a <xref target="status.401" format="none">401 (Unauthorized)</xref> response. Its value consists of | a <xref target="status.401" format="none">401 (Unauthorized)</xref> response. Its value consists of | |||
credentials containing the authentication information of the user a gent for | credentials containing the authentication information of the user a gent for | |||
the realm of the resource being requested. | the realm of the resource being requested. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Authorizat ion"/> | <iref primary="true" item="Grammar" subitem="Authorizat ion"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Authorization = credentials | <sourcecode type="abnf9110"><![CDATA[ Authorization = credentials | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
If a request is authenticated and a realm specified, the same crede ntials | If a request is authenticated and a realm specified, the same crede ntials | |||
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, s uch as | that the authentication scheme itself does not require otherwise, s uch as | |||
credentials that vary according to a challenge value or using synch ronized | credentials that vary according to a challenge value or using synch ronized | |||
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 | |||
skipping to change at line 6155 ¶ | skipping to change at line 6152 ¶ | |||
</t> | </t> | |||
<t> | <t> | |||
The field value is a list of parameters (name/value pairs), using t he "auth-param" | The field value is a list of parameters (name/value pairs), using t he "auth-param" | |||
syntax defined in <xref target="challenge.and.response"/>. | syntax defined in <xref target="challenge.and.response"/>. | |||
This specification only describes the generic format; authenticatio n schemes | This specification only describes the generic format; authenticatio n schemes | |||
using Authentication-Info will define the individual parameters. Th e "Digest" | using Authentication-Info will define the individual parameters. Th e "Digest" | |||
Authentication Scheme, for instance, defines multiple parameters in | Authentication Scheme, for instance, defines multiple parameters in | |||
<xref target="RFC7616" section="3.5"/>. | <xref target="RFC7616" section="3.5"/>. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Authentica tion-Info"/> | <iref primary="true" item="Grammar" subitem="Authentica tion-Info"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Authentication-I nfo = #auth-param | <sourcecode type="abnf9110"><![CDATA[ Authentication-I nfo = #auth-param | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The Authentication-Info field can be used in any HTTP response, | The Authentication-Info field can be used in any HTTP response, | |||
independently of request method and status code. Its semantics are defined | independently of request method and status code. Its semantics are defined | |||
by the authentication scheme indicated by the <xref target="field.a uthorization" format="none">Authorization</xref> header field | by the authentication scheme indicated by the <xref target="field.a uthorization" format="none">Authorization</xref> header field | |||
(<xref target="field.authorization"/>) of the corresponding request . | (<xref target="field.authorization"/>) of the corresponding request . | |||
</t> | </t> | |||
<t> | <t> | |||
A proxy forwarding a response is not allowed to modify the field va lue in any | A proxy forwarding a response is not allowed to modify the field va lue in any | |||
way. | way. | |||
skipping to change at line 6188 ¶ | skipping to change at line 6185 ¶ | |||
<iref primary="true" item="Proxy-Authenticate header fi eld"/> | <iref primary="true" item="Proxy-Authenticate header fi eld"/> | |||
<t> | <t> | |||
The "Proxy-Authenticate" header field consists of at least one | The "Proxy-Authenticate" header field consists of at least one | |||
challenge that indicates the authentication scheme(s) and parameter s | challenge that indicates the authentication scheme(s) and parameter s | |||
applicable to the proxy for this request. | applicable to the proxy for this request. | |||
A proxy <bcp14>MUST</bcp14> send at least one Proxy-Authenticate he ader field in | A proxy <bcp14>MUST</bcp14> send at least one Proxy-Authenticate he ader field in | |||
each <xref target="status.407" format="none">407 (Proxy Authenticat ion Required)</xref> response that it | each <xref target="status.407" format="none">407 (Proxy Authenticat ion Required)</xref> response that it | |||
generates. | generates. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Proxy-Auth enticate"/> | <iref primary="true" item="Grammar" subitem="Proxy-Auth enticate"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Proxy-Authentica te = #challenge | <sourcecode type="abnf9110"><![CDATA[ Proxy-Authentica te = #challenge | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Unlike <xref target="field.www-authenticate" format="none">WWW-Auth enticate</xref>, the Proxy-Authenticate header field | Unlike <xref target="field.www-authenticate" format="none">WWW-Auth enticate</xref>, the Proxy-Authenticate header field | |||
applies only to the next outbound client on the response chain. | applies only to the next outbound client on the response chain. | |||
This is because only the client that chose a given proxy is likely to have | This is because only the client that chose a given proxy is likely to have | |||
the credentials necessary for authentication. However, when multip le | the credentials necessary for authentication. However, when multip le | |||
proxies are used within the same administrative domain, such as off ice and | proxies are used within the same administrative domain, such as off ice and | |||
regional caching proxies within a large corporate network, it is co mmon | regional caching proxies within a large corporate network, it is co mmon | |||
for credentials to be generated by the user agent and passed throug h the | for credentials to be generated by the user agent and passed throug h the | |||
hierarchy until consumed. Hence, in such a configuration, it will appear | hierarchy until consumed. Hence, in such a configuration, it will appear | |||
skipping to change at line 6220 ¶ | skipping to change at line 6217 ¶ | |||
<iref primary="true" item="Header Fields" subitem="Prox y-Authorization"/> | <iref primary="true" item="Header Fields" subitem="Prox y-Authorization"/> | |||
<iref primary="true" item="Proxy-Authorization header f ield"/> | <iref primary="true" item="Proxy-Authorization header f ield"/> | |||
<t> | <t> | |||
The "Proxy-Authorization" header field allows the client to | The "Proxy-Authorization" header field allows the client to | |||
identify itself (or its user) to a proxy that requires | identify itself (or its user) to a proxy that requires | |||
authentication. Its value consists of credentials containing the | authentication. Its value consists of credentials containing the | |||
authentication information of the client for the proxy and/or realm of the | authentication information of the client for the proxy and/or realm of the | |||
resource being requested. | resource being requested. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Proxy-Auth orization"/> | <iref primary="true" item="Grammar" subitem="Proxy-Auth orization"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Proxy-Authorizat ion = credentials | <sourcecode type="abnf9110"><![CDATA[ Proxy-Authorizat ion = credentials | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Unlike <xref target="field.authorization" format="none">Authorizati on</xref>, the Proxy-Authorization header field | Unlike <xref target="field.authorization" format="none">Authorizati on</xref>, the Proxy-Authorization header field | |||
applies only to the next inbound proxy that demanded authentication using | applies only to the next inbound proxy that demanded authentication using | |||
the <xref target="field.proxy-authenticate" format="none">Proxy-Aut henticate</xref> header field. When multiple proxies are used | the <xref target="field.proxy-authenticate" format="none">Proxy-Aut henticate</xref> header field. When multiple proxies are used | |||
in a chain, the Proxy-Authorization header field is consumed by the first | in a chain, the Proxy-Authorization header field is consumed by the first | |||
inbound proxy that was expecting to receive credentials. A proxy <b cp14>MAY</bcp14> | inbound proxy that was expecting to receive credentials. A proxy <b cp14>MAY</bcp14> | |||
relay the credentials from the client request to the next proxy if that is | relay the credentials from the client request to the next proxy if that is | |||
the mechanism by which the proxies cooperatively authenticate a giv en | the mechanism by which the proxies cooperatively authenticate a giv en | |||
request. | request. | |||
skipping to change at line 6249 ¶ | skipping to change at line 6246 ¶ | |||
<iref primary="true" item="Proxy-Authentication-Info he ader field"/> | <iref primary="true" item="Proxy-Authentication-Info he ader field"/> | |||
<t> | <t> | |||
The "Proxy-Authentication-Info" response header field is equivalent to | The "Proxy-Authentication-Info" response header field is equivalent to | |||
<xref target="field.authentication-info" format="none">Authenticati on-Info</xref>, except that it applies to proxy authentication (<xref target="challenge.and.response"/>) | <xref target="field.authentication-info" format="none">Authenticati on-Info</xref>, except that it applies to proxy authentication (<xref target="challenge.and.response"/>) | |||
and its semantics are defined by the | and its semantics are defined by the | |||
authentication scheme indicated by the Proxy-Authorization header f ield | authentication scheme indicated by the Proxy-Authorization header f ield | |||
(<xref target="field.proxy-authorization"/>) | (<xref target="field.proxy-authorization"/>) | |||
of the corresponding request: | of the corresponding request: | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Proxy-Auth entication-Info"/> | <iref primary="true" item="Grammar" subitem="Proxy-Auth entication-Info"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Proxy-Authentica tion-Info = #auth-param | <sourcecode type="abnf9110"><![CDATA[ Proxy-Authentica tion-Info = #auth-param | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
However, unlike <xref target="field.authentication-info" format="no ne">Authentication-Info</xref>, the Proxy-Authentication-Info header | However, unlike <xref target="field.authentication-info" format="no ne">Authentication-Info</xref>, the Proxy-Authentication-Info header | |||
field applies only to the next outbound client on the response chai n. This is | field applies only to the next outbound client on the response chai n. This is | |||
because only the client that chose a given proxy is likely to have the | because only the client that chose a given proxy is likely to have the | |||
credentials necessary for authentication. However, when multiple pr oxies are | credentials necessary for authentication. However, when multiple pr oxies are | |||
used within the same administrative domain, such as office and regi onal | used within the same administrative domain, such as office and regi onal | |||
caching proxies within a large corporate network, it is common for | caching proxies within a large corporate network, it is common for | |||
credentials to be generated by the user agent and passed through th e | credentials to be generated by the user agent and passed through th e | |||
hierarchy until consumed. Hence, in such a configuration, it will a ppear as | hierarchy until consumed. Hence, in such a configuration, it will a ppear as | |||
skipping to change at line 6485 ¶ | skipping to change at line 6482 ¶ | |||
that can be selected for a resource. | that can be selected for a resource. | |||
</t> | </t> | |||
<t> | <t> | |||
The weight is normalized to a real number in the range 0 through 1, | The weight is normalized to a real number in the range 0 through 1, | |||
where 0.001 is the least preferred and 1 is the most preferred; | where 0.001 is the least preferred and 1 is the most preferred; | |||
a value of 0 means "not acceptable". If no "q" parameter is present , | a value of 0 means "not acceptable". If no "q" parameter is present , | |||
the default weight is 1. | the default weight is 1. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="weight"/> | <iref primary="true" item="Grammar" subitem="weight"/> | |||
<iref primary="true" item="Grammar" subitem="qvalue"/> | <iref primary="true" item="Grammar" subitem="qvalue"/> | |||
<sourcecode type="abnf7230"><![CDATA[ weight = OWS ";" OWS "q=" qvalue | <sourcecode type="abnf9110"><![CDATA[ weight = OWS ";" OWS "q=" qvalue | |||
qvalue = ( "0" [ "." 0*3DIGIT ] ) | qvalue = ( "0" [ "." 0*3DIGIT ] ) | |||
/ ( "1" [ "." 0*3("0") ] ) | / ( "1" [ "." 0*3("0") ] ) | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A sender of qvalue <bcp14>MUST NOT</bcp14> generate more than three digits after the | A sender of qvalue <bcp14>MUST NOT</bcp14> generate more than three digits after the | |||
decimal point. User configuration of these values ought to be limit ed in | decimal point. User configuration of these values ought to be limit ed in | |||
the same fashion. | the same fashion. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="wildcard.values" title="Wildcard Values"> | <section anchor="wildcard.values" title="Wildcard Values"> | |||
skipping to change at line 6535 ¶ | skipping to change at line 6532 ¶ | |||
a small set of desired types, as in the case of a request for an in -line | a small set of desired types, as in the case of a request for an in -line | |||
image. | image. | |||
</t> | </t> | |||
<t> | <t> | |||
When sent by a server in a response, Accept provides information | When sent by a server in a response, Accept provides information | |||
about which content types are preferred in the content of a subsequ ent | about which content types are preferred in the content of a subsequ ent | |||
request to the same resource. | request to the same resource. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Accept"/> | <iref primary="true" item="Grammar" subitem="Accept"/> | |||
<iref primary="true" item="Grammar" subitem="media-rang e"/> | <iref primary="true" item="Grammar" subitem="media-rang e"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Accept = #( medi a-range [ weight ] ) | <sourcecode type="abnf9110"><![CDATA[ Accept = #( medi a-range [ weight ] ) | |||
media-range = ( "*/*" | media-range = ( "*/*" | |||
/ ( type "/" "*" ) | / ( type "/" "*" ) | |||
/ ( type "/" subtype ) | / ( type "/" subtype ) | |||
) parameters | ) parameters | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
The asterisk "*" character is used to group media types into ranges , | The asterisk "*" character is used to group media types into ranges , | |||
with "*/*" indicating all media types and "type/*" indicating all | with "*/*" indicating all media types and "type/*" indicating all | |||
subtypes of that type. The media-range can include media type | subtypes of that type. The media-range can include media type | |||
skipping to change at line 6672 ¶ | skipping to change at line 6669 ¶ | |||
<iref primary="true" item="Header Fields" subitem="Acce pt-Charset"/> | <iref primary="true" item="Header Fields" subitem="Acce pt-Charset"/> | |||
<iref primary="true" item="Accept-Charset header field" /> | <iref primary="true" item="Accept-Charset header field" /> | |||
<t> | <t> | |||
The "Accept-Charset" header field can be sent by a user agent to in dicate | The "Accept-Charset" header field can be sent by a user agent to in dicate | |||
its preferences for charsets in textual response content. For examp le, | its preferences for charsets in textual response content. For examp le, | |||
this field allows user agents capable of understanding more compreh ensive | this field allows user agents capable of understanding more compreh ensive | |||
or special-purpose charsets to signal that capability to an origin server | or special-purpose charsets to signal that capability to an origin server | |||
that is capable of representing information in those charsets. | that is capable of representing information in those charsets. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Accept-Cha rset"/> | <iref primary="true" item="Grammar" subitem="Accept-Cha rset"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Accept-Charset = #( ( token / "*" ) [ weight ] ) | <sourcecode type="abnf9110"><![CDATA[ Accept-Charset = #( ( token / "*" ) [ weight ] ) | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Charset names are defined in <xref target="charset"/>. | Charset names are defined in <xref target="charset"/>. | |||
A user agent <bcp14>MAY</bcp14> associate a quality value with each charset to indicate | A user agent <bcp14>MAY</bcp14> associate a quality value with each charset to indicate | |||
the user's relative preference for that charset, as defined in <xre f target="quality.values"/>. | the user's relative preference for that charset, as defined in <xre f target="quality.values"/>. | |||
An example is | An example is | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[Accept-Charset : iso-8859-5, unicode-1-1;q=0.8 | <sourcecode type="http-message"><![CDATA[Accept-Charset : iso-8859-5, unicode-1-1;q=0.8 | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
skipping to change at line 6720 ¶ | skipping to change at line 6717 ¶ | |||
When sent by a server in a response, Accept-Encoding provides infor mation | When sent by a server in a response, Accept-Encoding provides infor mation | |||
about which content codings are preferred in the content of a subse quent | about which content codings are preferred in the content of a subse quent | |||
request to the same resource. | request to the same resource. | |||
</t> | </t> | |||
<t> | <t> | |||
An "identity" token is used as a synonym for | An "identity" token is used as a synonym for | |||
"no encoding" in order to communicate when no encoding is preferred . | "no encoding" in order to communicate when no encoding is preferred . | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Accept-Enc oding"/> | <iref primary="true" item="Grammar" subitem="Accept-Enc oding"/> | |||
<iref primary="true" item="Grammar" subitem="codings"/> | <iref primary="true" item="Grammar" subitem="codings"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Accept-Encoding = #( codings [ weight ] ) | <sourcecode type="abnf9110"><![CDATA[ Accept-Encoding = #( codings [ weight ] ) | |||
codings = content-coding / "identity" / "*" | codings = content-coding / "identity" / "*" | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Each codings value <bcp14>MAY</bcp14> be given an associated qualit y value (weight) | Each codings value <bcp14>MAY</bcp14> be given an associated qualit y value (weight) | |||
representing the preference for that encoding, as defined in <xref target="quality.values"/>. | representing the preference for that encoding, as defined in <xref target="quality.values"/>. | |||
The asterisk "*" symbol in an Accept-Encoding field matches any ava ilable | The asterisk "*" symbol in an Accept-Encoding field matches any ava ilable | |||
content coding not explicitly listed in the field. | content coding not explicitly listed in the field. | |||
</t> | </t> | |||
<t> | <t> | |||
Examples: | Examples: | |||
skipping to change at line 6812 ¶ | skipping to change at line 6809 ¶ | |||
<iref primary="true" item="Fields" subitem="Accept-Lang uage"/> | <iref primary="true" item="Fields" subitem="Accept-Lang uage"/> | |||
<iref primary="true" item="Header Fields" subitem="Acce pt-Language"/> | <iref primary="true" item="Header Fields" subitem="Acce pt-Language"/> | |||
<iref primary="true" item="Accept-Language header field "/> | <iref primary="true" item="Accept-Language header field "/> | |||
<t> | <t> | |||
The "Accept-Language" header field can be used by user agents to | The "Accept-Language" header field can be used by user agents to | |||
indicate the set of natural languages that are preferred in the res ponse. | indicate the set of natural languages that are preferred in the res ponse. | |||
Language tags are defined in <xref target="language.tags"/>. | Language tags are defined in <xref target="language.tags"/>. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Accept-Lan guage"/> | <iref primary="true" item="Grammar" subitem="Accept-Lan guage"/> | |||
<iref primary="true" item="Grammar" subitem="language-r ange"/> | <iref primary="true" item="Grammar" subitem="language-r ange"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Accept-Language = #( language-range [ weight ] ) | <sourcecode type="abnf9110"><![CDATA[ Accept-Language = #( language-range [ weight ] ) | |||
language-range = | language-range = | |||
<language-range, see [RFC4647], Section 2.1> | <language-range, see [RFC4647], Section 2.1> | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Each language-range can be given an associated quality value | Each language-range can be given an associated quality value | |||
representing an estimate of the user's preference for the languages | representing an estimate of the user's preference for the languages | |||
specified by that range, as defined in <xref target="quality.values "/>. For example, | specified by that range, as defined in <xref target="quality.values "/>. For example, | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[Accept-Languag e: da, en-gb;q=0.8, en;q=0.7 | <sourcecode type="http-message"><![CDATA[Accept-Languag e: da, en-gb;q=0.8, en;q=0.7 | |||
]]></sourcecode> | ]]></sourcecode> | |||
skipping to change at line 6879 ¶ | skipping to change at line 6876 ¶ | |||
<section anchor="field.vary" title="Vary"> | <section anchor="field.vary" title="Vary"> | |||
<iref primary="true" item="Fields" subitem="Vary"/> | <iref primary="true" item="Fields" subitem="Vary"/> | |||
<iref primary="true" item="Header Fields" subitem="Vary "/> | <iref primary="true" item="Header Fields" subitem="Vary "/> | |||
<iref item="Vary header field" primary="true"/> | <iref item="Vary header field" primary="true"/> | |||
<t> | <t> | |||
The "Vary" header field in a response describes what parts of a req uest | The "Vary" header field in a response describes what parts of a req uest | |||
message, aside from the method and target URI, might have influence d the | message, aside from the method and target URI, might have influence d the | |||
origin server's process for selecting the content of this response. | origin server's process for selecting the content of this response. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Vary"/> | <iref primary="true" item="Grammar" subitem="Vary"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Vary = #( "*" / field-name ) | <sourcecode type="abnf9110"><![CDATA[ Vary = #( "*" / field-name ) | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A Vary field value is either the wildcard member "*" or a list of | A Vary field value is either the wildcard member "*" or a list of | |||
request field names, known as the selecting header fields, that mig ht | request field names, known as the selecting header fields, that mig ht | |||
have had a role in selecting the representation for this response. | have had a role in selecting the representation for this response. | |||
Potential selecting header fields are not limited to fields defined by | Potential selecting header fields are not limited to fields defined by | |||
this specification. | this specification. | |||
</t> | </t> | |||
<t> | <t> | |||
A list containing the member "*" signals that other aspects of the | A list containing the member "*" signals that other aspects of the | |||
skipping to change at line 7034 ¶ | skipping to change at line 7031 ¶ | |||
entity-tag matching a member of the list of entity-tags provided in the | entity-tag matching a member of the list of entity-tags provided in the | |||
field value. | field value. | |||
</t> | </t> | |||
<t> | <t> | |||
An origin server <bcp14>MUST</bcp14> use the strong comparison func tion when comparing | An origin server <bcp14>MUST</bcp14> use the strong comparison func tion when comparing | |||
entity-tags for If-Match (<xref target="entity.tag.comparison"/>), since | entity-tags for If-Match (<xref target="entity.tag.comparison"/>), since | |||
the client intends this precondition to prevent the method from bei ng | the client intends this precondition to prevent the method from bei ng | |||
applied if there have been any changes to the representation data. | applied if there have been any changes to the representation data. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="If-Match"/ > | <iref primary="true" item="Grammar" subitem="If-Match"/ > | |||
<sourcecode type="abnf7230"><![CDATA[ If-Match = "*" / #entity-tag | <sourcecode type="abnf9110"><![CDATA[ If-Match = "*" / #entity-tag | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Examples: | Examples: | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[If-Match: "xyz zy" | <sourcecode type="http-message"><![CDATA[If-Match: "xyz zy" | |||
If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" | If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" | |||
If-Match: * | If-Match: * | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
If-Match is most often used with state-changing methods (e.g., POST , PUT, | If-Match is most often used with state-changing methods (e.g., POST , PUT, | |||
skipping to change at line 7141 ¶ | skipping to change at line 7138 ¶ | |||
having a <xref target="selected.representation" format="none">selec ted representation</xref> with an entity-tag that does not match any | having a <xref target="selected.representation" format="none">selec ted representation</xref> with an entity-tag that does not match any | |||
of those listed in the field value. | of those listed in the field value. | |||
</t> | </t> | |||
<t> | <t> | |||
A recipient <bcp14>MUST</bcp14> use the weak comparison function wh en comparing | A recipient <bcp14>MUST</bcp14> use the weak comparison function wh en comparing | |||
entity-tags for If-None-Match (<xref target="entity.tag.comparison" />), | entity-tags for If-None-Match (<xref target="entity.tag.comparison" />), | |||
since weak entity-tags can be used for cache validation even if the re have | since weak entity-tags can be used for cache validation even if the re have | |||
been changes to the representation data. | been changes to the representation data. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="If-None-Ma tch"/> | <iref primary="true" item="Grammar" subitem="If-None-Ma tch"/> | |||
<sourcecode type="abnf7230"><![CDATA[ If-None-Match = "*" / #entity-tag | <sourcecode type="abnf9110"><![CDATA[ If-None-Match = "*" / #entity-tag | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
Examples: | Examples: | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[If-None-Match: "xyzzy" | <sourcecode type="http-message"><![CDATA[If-None-Match: "xyzzy" | |||
If-None-Match: W/"xyzzy" | If-None-Match: W/"xyzzy" | |||
If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" | If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" | |||
If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz" | If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz" | |||
If-None-Match: * | If-None-Match: * | |||
]]></sourcecode> | ]]></sourcecode> | |||
skipping to change at line 7224 ¶ | skipping to change at line 7221 ¶ | |||
<iref primary="true" item="Header Fields" subitem="If-M odified-Since"/> | <iref primary="true" item="Header Fields" subitem="If-M odified-Since"/> | |||
<iref primary="true" item="If-Modified-Since header fie ld"/> | <iref primary="true" item="If-Modified-Since header fie ld"/> | |||
<t> | <t> | |||
The "If-Modified-Since" header field makes a GET or HEAD request me thod | The "If-Modified-Since" header field makes a GET or HEAD request me thod | |||
conditional on the <xref target="selected.representation" format="n one">selected representation</xref>'s modification | conditional on the <xref target="selected.representation" format="n one">selected representation</xref>'s modification | |||
date being more | date being more | |||
recent than the date provided in the field value. Transfer of the s elected | recent than the date provided in the field value. Transfer of the s elected | |||
representation's data is avoided if that data has not changed. | representation's data is avoided if that data has not changed. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="If-Modifie d-Since"/> | <iref primary="true" item="Grammar" subitem="If-Modifie d-Since"/> | |||
<sourcecode type="abnf7230"><![CDATA[ If-Modified-Sinc e = HTTP-date | <sourcecode type="abnf9110"><![CDATA[ If-Modified-Sinc e = HTTP-date | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
An example of the field is: | An example of the field is: | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[If-Modified-Si nce: Sat, 29 Oct 1994 19:43:31 GMT | <sourcecode type="http-message"><![CDATA[If-Modified-Si nce: Sat, 29 Oct 1994 19:43:31 GMT | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A recipient <bcp14>MUST</bcp14> ignore If-Modified-Since if the req uest contains an | A recipient <bcp14>MUST</bcp14> ignore If-Modified-Since if the req uest contains an | |||
<xref target="field.if-none-match" format="none">If-None-Match</xre f> header field; the condition in | <xref target="field.if-none-match" format="none">If-None-Match</xre f> header field; the condition in | |||
<xref target="field.if-none-match" format="none">If-None-Match</xre f> is considered to be a more accurate | <xref target="field.if-none-match" format="none">If-None-Match</xre f> is considered to be a more accurate | |||
skipping to change at line 7326 ¶ | skipping to change at line 7323 ¶ | |||
<iref primary="true" item="If-Unmodified-Since header f ield"/> | <iref primary="true" item="If-Unmodified-Since header f ield"/> | |||
<t> | <t> | |||
The "If-Unmodified-Since" header field makes the request method con ditional | The "If-Unmodified-Since" header field makes the request method con ditional | |||
on the <xref target="selected.representation" format="none">selecte d representation</xref>'s last modification date being | on the <xref target="selected.representation" format="none">selecte d representation</xref>'s last modification date being | |||
earlier than or equal to the date provided in the field value. | earlier than or equal to the date provided in the field value. | |||
This field accomplishes the | This field accomplishes the | |||
same purpose as <xref target="field.if-match" format="none">If-Matc h</xref> for cases where the user agent does | same purpose as <xref target="field.if-match" format="none">If-Matc h</xref> for cases where the user agent does | |||
not have an entity-tag for the representation. | not have an entity-tag for the representation. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="If-Unmodif ied-Since"/> | <iref primary="true" item="Grammar" subitem="If-Unmodif ied-Since"/> | |||
<sourcecode type="abnf7230"><![CDATA[ If-Unmodified-Si nce = HTTP-date | <sourcecode type="abnf9110"><![CDATA[ If-Unmodified-Si nce = HTTP-date | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
An example of the field is: | An example of the field is: | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[If-Unmodified- Since: Sat, 29 Oct 1994 19:43:31 GMT | <sourcecode type="http-message"><![CDATA[If-Unmodified- Since: Sat, 29 Oct 1994 19:43:31 GMT | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A recipient <bcp14>MUST</bcp14> ignore If-Unmodified-Since if the r equest contains an | A recipient <bcp14>MUST</bcp14> ignore If-Unmodified-Since if the r equest contains an | |||
<xref target="field.if-match" format="none">If-Match</xref> header field; the condition in | <xref target="field.if-match" format="none">If-Match</xref> header field; the condition in | |||
<xref target="field.if-match" format="none">If-Match</xref> is cons idered to be a more accurate replacement for | <xref target="field.if-match" format="none">If-Match</xref> is cons idered to be a more accurate replacement for | |||
skipping to change at line 7449 ¶ | skipping to change at line 7446 ¶ | |||
representation has been modified, the client would then have to mak e a | representation has been modified, the client would then have to mak e a | |||
second request to obtain the entire current representation. | second request to obtain the entire current representation. | |||
</t> | </t> | |||
<t> | <t> | |||
The "If-Range" header field allows a client to "short-circuit" the second | The "If-Range" header field allows a client to "short-circuit" the second | |||
request. Informally, its meaning is as follows: if the representati on is unchanged, | request. Informally, its meaning is as follows: if the representati on is unchanged, | |||
send me the part(s) that I am requesting in Range; otherwise, send me the | send me the part(s) that I am requesting in Range; otherwise, send me the | |||
entire representation. | entire representation. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="If-Range"/ > | <iref primary="true" item="Grammar" subitem="If-Range"/ > | |||
<sourcecode type="abnf7230"><![CDATA[ If-Range = entit y-tag / HTTP-date | <sourcecode type="abnf9110"><![CDATA[ If-Range = entit y-tag / HTTP-date | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A valid <xref target="field.etag" format="none">entity-tag</xref> c an be distinguished from a valid | A valid <xref target="field.etag" format="none">entity-tag</xref> c an be distinguished from a valid | |||
<xref target="http.date" format="none">HTTP-date</xref> by examinin g the first three characters for a | <xref target="http.date" format="none">HTTP-date</xref> by examinin g the first three characters for a | |||
DQUOTE. | DQUOTE. | |||
</t> | </t> | |||
<t> | <t> | |||
A client <bcp14>MUST NOT</bcp14> generate an If-Range header field in a request that | A client <bcp14>MUST NOT</bcp14> generate an If-Range header field in a request that | |||
does not contain a <xref target="field.range" format="none">Range</ xref> header field. | does not contain a <xref target="field.range" format="none">Range</ xref> header field. | |||
A server <bcp14>MUST</bcp14> ignore an If-Range header field receiv ed in a request that | A server <bcp14>MUST</bcp14> ignore an If-Range header field receiv ed in a request that | |||
skipping to change at line 7707 ¶ | skipping to change at line 7704 ¶ | |||
This general notion of a <em>range unit</em> is used | This general notion of a <em>range unit</em> is used | |||
in the <xref target="field.accept-ranges" format="none">Accept-Rang es</xref> (<xref target="field.accept-ranges"/>) | in the <xref target="field.accept-ranges" format="none">Accept-Rang es</xref> (<xref target="field.accept-ranges"/>) | |||
response header field to advertise support for range requests, the | response header field to advertise support for range requests, the | |||
<xref target="field.range" format="none">Range</xref> (<xref target ="field.range"/>) request header field | <xref target="field.range" format="none">Range</xref> (<xref target ="field.range"/>) request header field | |||
to delineate the parts of a representation that are requested, and the | to delineate the parts of a representation that are requested, and the | |||
<xref target="field.content-range" format="none">Content-Range</xre f> (<xref target="field.content-range"/>) | <xref target="field.content-range" format="none">Content-Range</xre f> (<xref target="field.content-range"/>) | |||
header field to describe which part of a representation is being | header field to describe which part of a representation is being | |||
transferred. | transferred. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="range-unit"/> | <iref primary="true" item="Grammar" subitem="range-unit"/> | |||
<sourcecode type="abnf7230"><![CDATA[ range-unit = token | <sourcecode type="abnf9110"><![CDATA[ range-unit = token | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
All range unit names are case-insensitive and ought to be registere d | All range unit names are case-insensitive and ought to be registere d | |||
within the "HTTP Range Unit Registry", as defined in | within the "HTTP Range Unit Registry", as defined in | |||
<xref target="range.unit.registry"/>. | <xref target="range.unit.registry"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
Range units are intended to be extensible, as described in | Range units are intended to be extensible, as described in | |||
<xref target="range.unit.extensibility"/>. | <xref target="range.unit.extensibility"/>. | |||
</t> | </t> | |||
skipping to change at line 7735 ¶ | skipping to change at line 7732 ¶ | |||
<xref target="rule.other-range" format="none">other-range</xref> ar e allowed. | <xref target="rule.other-range" format="none">other-range</xref> ar e allowed. | |||
</t> | </t> | |||
<t anchor="rule.ranges-specifier"> | <t anchor="rule.ranges-specifier"> | |||
A range request can specify a single range or a set | A range request can specify a single range or a set | |||
of ranges within a single representation. | of ranges within a single representation. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="ranges-spe cifier"/> | <iref primary="true" item="Grammar" subitem="ranges-spe cifier"/> | |||
<iref primary="true" item="Grammar" subitem="range-set" /> | <iref primary="true" item="Grammar" subitem="range-set" /> | |||
<iref primary="true" item="Grammar" subitem="range-spec "/> | <iref primary="true" item="Grammar" subitem="range-spec "/> | |||
<sourcecode type="abnf7230"><![CDATA[ ranges-specifier = range-unit "=" range-set | <sourcecode type="abnf9110"><![CDATA[ ranges-specifier = range-unit "=" range-set | |||
range-set = 1#range-spec | range-set = 1#range-spec | |||
range-spec = int-range | range-spec = int-range | |||
/ suffix-range | / suffix-range | |||
/ other-range | / other-range | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t anchor="rule.int-range"> | <t anchor="rule.int-range"> | |||
An <xref target="rule.int-range" format="none">int-range</xref> is a range expressed as two non-negative | An <xref target="rule.int-range" format="none">int-range</xref> is a range expressed as two non-negative | |||
integers or as one non-negative integer through to the end of the | integers or as one non-negative integer through to the end of the | |||
representation data. | representation data. | |||
The range unit specifies what the integers mean (e.g., they might i ndicate | The range unit specifies what the integers mean (e.g., they might i ndicate | |||
unit offsets from the beginning, inclusive numbered parts, etc.). | unit offsets from the beginning, inclusive numbered parts, etc.). | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="int-range" /> | <iref primary="true" item="Grammar" subitem="int-range" /> | |||
<iref primary="true" item="Grammar" subitem="first-pos" /> | <iref primary="true" item="Grammar" subitem="first-pos" /> | |||
<iref primary="true" item="Grammar" subitem="last-pos"/ > | <iref primary="true" item="Grammar" subitem="last-pos"/ > | |||
<sourcecode type="abnf7230"><![CDATA[ int-range = first-pos "-" [ last-pos ] | <sourcecode type="abnf9110"><![CDATA[ int-range = first-pos "-" [ last-pos ] | |||
first-pos = 1*DIGIT | first-pos = 1*DIGIT | |||
last-pos = 1*DIGIT | last-pos = 1*DIGIT | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
An <xref target="rule.int-range" format="none">int-range</xref> is invalid if the | An <xref target="rule.int-range" format="none">int-range</xref> is invalid if the | |||
<xref target="rule.int-range" format="none">last-pos</xref> value i s present and less than the | <xref target="rule.int-range" format="none">last-pos</xref> value i s present and less than the | |||
<xref target="rule.int-range" format="none">first-pos</xref>. | <xref target="rule.int-range" format="none">first-pos</xref>. | |||
</t> | </t> | |||
<t anchor="rule.suffix-range"> | <t anchor="rule.suffix-range"> | |||
A <xref target="rule.suffix-range" format="none">suffix-range</xref > is a range expressed as a suffix of the | A <xref target="rule.suffix-range" format="none">suffix-range</xref > is a range expressed as a suffix of the | |||
representation data with the provided non-negative integer maximum length | representation data with the provided non-negative integer maximum length | |||
(in range units). In other words, the last N units of the represent ation | (in range units). In other words, the last N units of the represent ation | |||
data. | data. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="suffix-ran ge"/> | <iref primary="true" item="Grammar" subitem="suffix-ran ge"/> | |||
<iref primary="true" item="Grammar" subitem="suffix-len gth"/> | <iref primary="true" item="Grammar" subitem="suffix-len gth"/> | |||
<sourcecode type="abnf7230"><![CDATA[ suffix-range = "-" suffix-length | <sourcecode type="abnf9110"><![CDATA[ suffix-range = "-" suffix-length | |||
suffix-length = 1*DIGIT | suffix-length = 1*DIGIT | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t anchor="rule.other-range"> | <t anchor="rule.other-range"> | |||
To provide for extensibility, the <xref target="rule.other-range" f ormat="none">other-range</xref> rule is a | To provide for extensibility, the <xref target="rule.other-range" f ormat="none">other-range</xref> rule is a | |||
mostly unconstrained grammar that allows application-specific or fu ture | mostly unconstrained grammar that allows application-specific or fu ture | |||
range units to define additional range specifiers. | range units to define additional range specifiers. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="other-rang e"/> | <iref primary="true" item="Grammar" subitem="other-rang e"/> | |||
<sourcecode type="abnf7230"><![CDATA[ other-range = 1*( %x21-2B / %x2D-7E ) | <sourcecode type="abnf9110"><![CDATA[ other-range = 1*( %x21-2B / %x2D-7E ) | |||
; 1*(VCHAR excluding comma) | ; 1*(VCHAR excluding comma) | |||
]]></sourcecode> | ]]></sourcecode> | |||
</section> | </section> | |||
<section anchor="byte.ranges" title="Byte Ranges"> | <section anchor="byte.ranges" title="Byte Ranges"> | |||
<t> | <t> | |||
The "bytes" range unit is used to express subranges of a representa tion | The "bytes" range unit is used to express subranges of a representa tion | |||
data's octet sequence. | data's octet sequence. | |||
Each byte range is expressed as an integer range at some offset, re lative | Each byte range is expressed as an integer range at some offset, re lative | |||
to either the beginning (<xref target="rule.int-range" format="none ">int-range</xref>) or end | to either the beginning (<xref target="rule.int-range" format="none ">int-range</xref>) or end | |||
(<xref target="rule.suffix-range" format="none">suffix-range</xref> ) of the representation data. | (<xref target="rule.suffix-range" format="none">suffix-range</xref> ) of the representation data. | |||
skipping to change at line 7906 ¶ | skipping to change at line 7903 ¶ | |||
<iref primary="true" item="Fields" subitem="Range"/> | <iref primary="true" item="Fields" subitem="Range"/> | |||
<iref primary="true" item="Header Fields" subitem="Range"/ > | <iref primary="true" item="Header Fields" subitem="Range"/ > | |||
<iref primary="true" item="Range header field"/> | <iref primary="true" item="Range header field"/> | |||
<t> | <t> | |||
The "Range" header field on a GET request modifies the method seman tics to | The "Range" header field on a GET request modifies the method seman tics to | |||
request transfer of only one or more subranges of the | request transfer of only one or more subranges of the | |||
selected representation data (<xref target="representation.data"/>) , | selected representation data (<xref target="representation.data"/>) , | |||
rather than the entire <xref target="selected.representation" forma t="none">selected representation</xref>. | rather than the entire <xref target="selected.representation" forma t="none">selected representation</xref>. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Range"/> | <iref primary="true" item="Grammar" subitem="Range"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Range = ranges-spec ifier | <sourcecode type="abnf9110"><![CDATA[ Range = ranges-spec ifier | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
A server <bcp14>MAY</bcp14> ignore the Range header field. However, origin servers and | A server <bcp14>MAY</bcp14> ignore the Range header field. However, origin servers and | |||
intermediate caches ought to support byte ranges when possible, sin ce they | intermediate caches ought to support byte ranges when possible, sin ce they | |||
support efficient recovery from partially failed transfers and part ial | support efficient recovery from partially failed transfers and part ial | |||
retrieval of large representations. | retrieval of large representations. | |||
</t> | </t> | |||
<t> | <t> | |||
A server <bcp14>MUST</bcp14> ignore a Range header field received w ith a request method | A server <bcp14>MUST</bcp14> ignore a Range header field received w ith a request method | |||
that is unrecognized or for which range handling is not defined. Fo r this | that is unrecognized or for which range handling is not defined. Fo r this | |||
skipping to change at line 7992 ¶ | skipping to change at line 7989 ¶ | |||
<section anchor="field.accept-ranges" title="Accept-Ranges"> | <section anchor="field.accept-ranges" title="Accept-Ranges"> | |||
<iref primary="true" item="Fields" subitem="Accept-Ranges" /> | <iref primary="true" item="Fields" subitem="Accept-Ranges" /> | |||
<iref primary="true" item="Header Fields" subitem="Accept- Ranges"/> | <iref primary="true" item="Header Fields" subitem="Accept- Ranges"/> | |||
<iref primary="true" item="Accept-Ranges header field"/> | <iref primary="true" item="Accept-Ranges header field"/> | |||
<t> | <t> | |||
The "Accept-Ranges" field in a response indicates whether an upstre am | The "Accept-Ranges" field in a response indicates whether an upstre am | |||
server supports range requests for the target resource. | server supports range requests for the target resource. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Accept-Ranges "/> | <iref primary="true" item="Grammar" subitem="Accept-Ranges "/> | |||
<iref primary="true" item="Grammar" subitem="acceptable-ra nges"/> | <iref primary="true" item="Grammar" subitem="acceptable-ra nges"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Accept-Ranges = acceptable-ranges | <sourcecode type="abnf9110"><![CDATA[ Accept-Ranges = acceptable-ranges | |||
acceptable-ranges = 1#range-unit | acceptable-ranges = 1#range-unit | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
For example, a server that supports | For example, a server that supports | |||
<xref target="byte.ranges">byte-range requests</xref> can send the field | <xref target="byte.ranges">byte-range requests</xref> can send the field | |||
</t> | </t> | |||
<sourcecode type="http-message"><![CDATA[Accept-Ranges: by tes | <sourcecode type="http-message"><![CDATA[Accept-Ranges: by tes | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
to indicate that it supports byte range requests for that target re source, | to indicate that it supports byte range requests for that target re source, | |||
skipping to change at line 8070 ¶ | skipping to change at line 8067 ¶ | |||
each body part, and sent in <xref target="status.416" format="none" >416 (Range Not Satisfiable)</xref> | each body part, and sent in <xref target="status.416" format="none" >416 (Range Not Satisfiable)</xref> | |||
responses to provide information about the selected representation. | responses to provide information about the selected representation. | |||
</t> | </t> | |||
<iref primary="true" item="Grammar" subitem="Content-Range "/> | <iref primary="true" item="Grammar" subitem="Content-Range "/> | |||
<iref primary="true" item="Grammar" subitem="range-resp"/> | <iref primary="true" item="Grammar" subitem="range-resp"/> | |||
<iref primary="true" item="Grammar" subitem="incl-range"/> | <iref primary="true" item="Grammar" subitem="incl-range"/> | |||
<iref primary="true" item="Grammar" subitem="unsatisfied-r ange"/> | <iref primary="true" item="Grammar" subitem="unsatisfied-r ange"/> | |||
<iref primary="true" item="Grammar" subitem="complete-leng th"/> | <iref primary="true" item="Grammar" subitem="complete-leng th"/> | |||
<iref primary="false" item="Grammar" subitem="first-pos"/> | <iref primary="false" item="Grammar" subitem="first-pos"/> | |||
<iref primary="false" item="Grammar" subitem="last-pos"/> | <iref primary="false" item="Grammar" subitem="last-pos"/> | |||
<sourcecode type="abnf7230"><![CDATA[ Content-Range = range-unit SP | <sourcecode type="abnf9110"><![CDATA[ Content-Range = range-unit SP | |||
( range-resp / unsatisfied-range ) | ( range-resp / unsatisfied-range ) | |||
range-resp = incl-range "/" ( complete-length / "*" ) | range-resp = incl-range "/" ( complete-length / "*" ) | |||
incl-range = first-pos "-" last-pos | incl-range = first-pos "-" last-pos | |||
unsatisfied-range = "*/" complete-length | unsatisfied-range = "*/" complete-length | |||
complete-length = 1*DIGIT | complete-length = 1*DIGIT | |||
]]></sourcecode> | ]]></sourcecode> | |||
<t> | <t> | |||
If a <xref target="status.206" format="none">206 (Partial Content)< /xref> response contains a | If a <xref target="status.206" format="none">206 (Partial Content)< /xref> response contains a | |||
skipping to change at line 9805 ¶ | skipping to change at line 9802 ¶ | |||
<!-- [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 extens ibility | Additionally, specific versions of HTTP might have their own extens ibility | |||
points, such as transfer-codings in HTTP/1.1 (<xref target="HTTP11" section="6.1"/>) and HTTP/2 | points, such as transfer-codings in HTTP/1.1 (<xref target="HTTP11" section="6.1"/>) and HTTP/2 | |||
SETTINGS or frame types <xref target="HTTP2"/>. These extension poi nts are specific to the | SETTINGS or frame types (<xref target="HTTP2"/>). These extension p oints are specific 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 o r | a version-independent mechanism or extension point (like a method o r | |||
header field) without explicitly being allowed by that protocol ele ment. For | header field) without explicitly being allowed by that protocol ele ment. 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 10671 ¶ | skipping to change at line 10668 ¶ | |||
<t> | <t> | |||
HTTP messages can be compressed in a number of ways, including usin g TLS | HTTP messages can be compressed in a number of ways, including usin g 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 compressi on on | The most effective mitigation for this risk is to disable compressi on on | |||
sensitive data, or to strictly separate sensitive data from attacke r-controlled | sensitive data, or to strictly separate sensitive data from attacke r-controlled | |||
data so that they cannot share the same compression dictionary. Wit h | data so that they cannot share the same compression dictionary. Wit h | |||
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 ta rget="HPACK"/>. | considered exploitable in limited use cases, such as HPACK (<xref t arget="HPACK"/>). | |||
</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 re sources | including both information provided by the user to interact with re sources | |||
(e.g., the user's name, location, mail address, passwords, encrypti on | (e.g., the user's name, location, mail address, passwords, encrypti on | |||
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 10834 ¶ | skipping to change at line 10831 ¶ | |||
<section anchor="fingerprinting" title="Browser Fingerprintin g"> | <section anchor="fingerprinting" title="Browser Fingerprintin g"> | |||
<t> | <t> | |||
Browser fingerprinting is a set of techniques for identifying a spe cific | Browser fingerprinting is a set of techniques for identifying a spe cific | |||
user agent over time through its unique set of characteristics. The se | user agent over time through its unique set of characteristics. The se | |||
characteristics might include information related to how it uses th e underlying | characteristics might include information related to how it uses th e underlying | |||
transport protocol, | transport protocol, | |||
feature capabilities, and scripting environment, though of particul ar | feature capabilities, and scripting environment, though of particul ar | |||
interest here is the set of unique characteristics that might be | interest here is the set of unique characteristics that might be | |||
communicated via HTTP. Fingerprinting is considered a privacy conce rn | communicated via HTTP. Fingerprinting is considered a privacy conce rn | |||
because it enables tracking of a user agent's behavior over time | because it enables tracking of a user agent's behavior over time | |||
<xref target="Bujlow"/> without | (<xref target="Bujlow"/>) without | |||
the corresponding controls that the user might have over other form s of | the corresponding controls that the user might have over other form s of | |||
data collection (e.g., cookies). Many general-purpose user agents | data collection (e.g., cookies). Many general-purpose user agents | |||
(i.e., Web browsers) have taken steps to reduce their fingerprints. | (i.e., Web browsers) have taken steps to reduce their fingerprints. | |||
</t> | </t> | |||
<t> | <t> | |||
There are a number of request header fields that might reveal infor mation | There are a number of request header fields that might reveal infor mation | |||
to servers that is sufficiently unique to enable fingerprinting. | to servers that is sufficiently unique to enable fingerprinting. | |||
The <xref target="field.from" format="none">From</xref> header fiel d is the most obvious, though it is | The <xref target="field.from" format="none">From</xref> header fiel d is the most obvious, though it is | |||
expected that From will only be sent when self-identification is de sired by | expected that From will only be sent when self-identification is de sired by | |||
the user. Likewise, Cookie header fields are deliberately designed to | the user. Likewise, Cookie header fields are deliberately designed to | |||
skipping to change at line 11936 ¶ | skipping to change at line 11933 ¶ | |||
<tr> | <tr> | |||
<td>compress</td> | <td>compress</td> | |||
<td>UNIX "compress" data format <xref target="Wel ch"/> | <td>UNIX "compress" data format <xref target="Wel ch"/> | |||
</td> | </td> | |||
<td> | <td> | |||
<xref target="compress.coding" format="counter "/> | <xref target="compress.coding" format="counter "/> | |||
</td> | </td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td>deflate</td> | <td>deflate</td> | |||
<td>"deflate" compressed data <xref target="RFC19 | <td>"deflate" compressed data (<xref target="RFC1 | |||
51"/> inside | 951"/>) inside | |||
the "zlib" data format <xref target="RFC1950"/> | the "zlib" data format (<xref target="RFC1950"/>) | |||
</td> | </td> | |||
<td> | <td> | |||
<xref target="deflate.coding" format="counter" /> | <xref target="deflate.coding" format="counter" /> | |||
</td> | </td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td>gzip</td> | <td>gzip</td> | |||
<td>GZIP file format <xref target="RFC1952"/> | <td>GZIP file format <xref target="RFC1952"/> | |||
</td> | </td> | |||
<td> | <td> | |||
skipping to change at line 12799 ¶ | skipping to change at line 12796 ¶ | |||
remove field links in this section? | remove field links in this section? | |||
--> | --> | |||
<section anchor="changes.from.rfc.7230" title="Changes from R FC 7230"> | <section anchor="changes.from.rfc.7230" title="Changes from R FC 7230"> | |||
<t> | <t> | |||
The sections introducing HTTP's design goals, history, architecture , | The sections introducing HTTP's design goals, history, architecture , | |||
conformance criteria, protocol versioning, URIs, message routing, a nd | conformance criteria, protocol versioning, URIs, message routing, a nd | |||
header fields have been moved here. | header fields have been moved here. | |||
</t> | </t> | |||
<t> | <t> | |||
The requirement on semantic conformance has been replaced with perm ission to | The requirement on semantic conformance has been replaced with perm ission to | |||
ignore or work around implementation-specific failures | ignore or work around implementation-specific failures. | |||
(<xref target="requirements.notation"/>). | (<xref target="requirements.notation"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
The description of an origin and authoritative access to origin ser vers has | The description of an origin and authoritative access to origin ser vers has | |||
been extended for both "http" and "https" URIs to account for alter native | been extended for both "http" and "https" URIs to account for alter native | |||
services and secured connections that are not necessarily based on TCP | services and secured connections that are not necessarily based on TCP. | |||
(Sections <xref target="http.uri" format="counter"/>, <xref target= "https.uri" format="counter"/>, | (Sections <xref target="http.uri" format="counter"/>, <xref target= "https.uri" format="counter"/>, | |||
<xref target="origin" format="counter"/>, and <xref target="routing .origin" format="counter"/>). | <xref target="origin" format="counter"/>, and <xref target="routing .origin" format="counter"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
Explicit requirements have been added to check the target URI schem e's semantics | Explicit requirements have been added to check the target URI schem e's semantics | |||
and reject requests that don't meet any associated requirements | and reject requests that don't meet any associated requirements. | |||
(<xref target="routing.reject"/>). | (<xref target="routing.reject"/>) | |||
</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> | |||
"Field value" now refers to the value after multiple field lines ar e combined | "Field value" now refers to the value after multiple field lines ar e combined | |||
with commas -- by far the most common use. To refer to a single hea der | with commas -- by far the most common use. To refer to a single hea der | |||
line's value, use "field line value" | line's value, use "field line value". | |||
(<xref target="header.fields"/>). | (<xref target="header.fields"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
Trailer field semantics now transcend the specifics of chunked enco ding. | Trailer field semantics now transcend the specifics of chunked enco ding. | |||
The use of trailer fields has been further limited to allow generat ion | The use of trailer fields has been further limited to allow generat ion | |||
as a trailer field only when the sender knows the field defines tha t usage and | as a trailer field only when the sender knows the field defines tha t usage and | |||
to allow merging into the header section only if the recipient know s the | to allow merging into the header section only if the recipient know s the | |||
corresponding field definition permits and defines how to merge. In all | corresponding field definition permits and defines how to merge. In all | |||
other cases, implementations are encouraged either to store the tra iler | other cases, implementations are encouraged either to store the tra iler | |||
fields separately or to discard them instead of merging | fields separately or to discard them instead of merging. | |||
(<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 | header field by origin servers has been made explicit to align with | |||
proxy handling | proxy handling. | |||
(<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="URI"/> 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 R FC 7231"> | <section anchor="changes.from.rfc.7231" title="Changes from R FC 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? | |||
Current: | Current: | |||
Minimum URI lengths to be supported by implementations are now | Minimum URI lengths to be supported by implementations are now | |||
recommended (Section 3.1). | recommended (Section 3.1). | |||
--> | --> | |||
<t> | <t> | |||
Minimum URI lengths to be supported by implementations are now reco | Minimum URI lengths to be supported by implementations are now reco | |||
mmended | mmended. | |||
(<xref target="resources"/>). | (<xref target="resources"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
The following have been clarified: CR and NUL in field values are t o be rejected or | The following have been clarified: CR and NUL in field values are t o be rejected or | |||
mapped to SP, and leading and trailing whitespaces need to be | mapped to SP, and leading and trailing whitespaces need to be | |||
stripped from field values before they are consumed | stripped from field values before they are consumed. | |||
(<xref target="fields.values"/>). | (<xref target="fields.values"/>) | |||
</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 defi ne the | An abstract data type for HTTP messages has been introduced to defi ne the | |||
components of a message and their semantics as an abstraction acros s | components of a message and their semantics as an abstraction acros s | |||
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="HTTP11"/>, 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 requ irements | message is parsed. This makes it easier to distinguish between requ irements | |||
on the content (what is conveyed) versus requirements on the messag ing | on the content (what is conveyed) versus requirements on the messag ing | |||
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.abstractio n"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
The terms "payload" and "payload body" have been replaced with "con tent", to better | The terms "payload" and "payload body" have been replaced with "con tent", 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"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
The term "effective request URI" has been replaced with "target URI | The term "effective request URI" has been replaced with "target URI | |||
" | ". | |||
(<xref target="target.resource"/>). | (<xref target="target.resource"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
Restrictions on client retries have been loosened to reflect implem entation | Restrictions on client retries have been loosened to reflect implem entation | |||
behavior | behavior. | |||
(<xref target="idempotent.methods"/>). | (<xref target="idempotent.methods"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
The fact that request bodies on GET, HEAD, and DELETE are not inter | The fact that request bodies on GET, HEAD, and DELETE are not inter | |||
operable has been clarified | operable has been clarified. | |||
(Sections <xref target="GET" format="counter"/>, <xref target="HEAD | (Sections <xref target="GET" format="counter"/>, <xref target="HEAD | |||
" format="counter"/>, and <xref target="DELETE" format="counter"/>). | " format="counter"/>, and <xref target="DELETE" format="counter"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
The use of the <xref target="field.content-range" format="none">Con tent-Range</xref> header field | The use of the <xref target="field.content-range" format="none">Con tent-Range</xref> header field | |||
(<xref target="field.content-range"/>) as a request modifier on PUT | (<xref target="field.content-range"/>) as a request modifier on PUT | |||
is allowed | is allowed. | |||
(<xref target="PUT"/>). | (<xref target="PUT"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
A superfluous requirement about setting <xref target="field.content -length" format="none">Content-Length</xref> | A superfluous requirement about setting <xref target="field.content -length" format="none">Content-Length</xref> | |||
has been removed from the description of the OPTIONS method | has been removed from the description of the OPTIONS method. | |||
(<xref target="OPTIONS"/>). | (<xref target="OPTIONS"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
The normative requirement to use the message/http media type in | The normative requirement to use the message/http media type in | |||
TRACE responses has been removed | TRACE responses has been removed. | |||
(<xref target="TRACE"/>). | (<xref target="TRACE"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
List-based grammar for <xref target="field.expect" format="none">Ex pect</xref> has been restored for compatibility with | List-based grammar for <xref target="field.expect" format="none">Ex pect</xref> has been restored for compatibility with | |||
RFC 2616 | RFC 2616. | |||
(<xref target="field.expect"/>). | (<xref target="field.expect"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
<xref target="field.accept" format="none">Accept</xref> and <xref t arget="field.accept-encoding" format="none">Accept-Encoding</xref> are allowed in response | <xref target="field.accept" format="none">Accept</xref> and <xref t arget="field.accept-encoding" format="none">Accept-Encoding</xref> are allowed in response | |||
messages; the latter was introduced by <xref target="RFC7694"/> | messages; the latter was introduced by <xref target="RFC7694"/>. | |||
(<xref target="request.content.negotiation"/>). | (<xref target="request.content.negotiation"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
"Accept Parameters" (accept-params and accept-ext ABNF production) have | "Accept Parameters" (accept-params and accept-ext ABNF production) have | |||
been removed from the definition of the Accept field | been removed from the definition of the Accept field. | |||
(<xref target="field.accept"/>). | (<xref target="field.accept"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
The Accept-Charset field now is deprecated | The Accept-Charset field now is deprecated. | |||
(<xref target="field.accept-charset"/>). | (<xref target="field.accept-charset"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
The semantics of "*" in the <xref target="field.vary" format="none" >Vary</xref> header field when other | The semantics of "*" in the <xref target="field.vary" format="none" >Vary</xref> header field when other | |||
values are present was clarified | values are present was clarified. | |||
(<xref target="field.vary"/>). | (<xref target="field.vary"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
Range units are compared in a case-insensitive fashion | Range units are compared in a case-insensitive fashion. | |||
(<xref target="range.units"/>). | (<xref target="range.units"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
The use of the Accept-Ranges field is not restricted to origin serv | The use of the Accept-Ranges field is not restricted to origin serv | |||
ers | ers. | |||
(<xref target="field.accept-ranges"/>). | (<xref target="field.accept-ranges"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
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 | has been added so that it's defined closer to status codes 301, 302 | |||
, and 307 | , 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="HTTP2" section="9.1.2"/>) has been added because of i ts general | <xref target="HTTP2" section="9.1.2"/>) has been added because of i ts 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="WEBDAV" section="11.2"/>) has been added because of i ts general | <xref target="WEBDAV" section="11.2"/>) has been added because of i ts general | |||
applicability | applicability. | |||
(<xref target="status.422"/>). | (<xref target="status.422"/>) | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="changes.from.rfc.7232" title="Changes from R FC 7232"> | <section anchor="changes.from.rfc.7232" title="Changes from R FC 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 gu ard | determination of whether Last-Modified was a strong validator to gu ard | |||
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 duri ng the | generated from different clocks or at somewhat different times duri ng the | |||
preparation of the response. This specification has relaxed that to allow | preparation of the response. This specification has relaxed that to allow | |||
reasonable discretion | reasonable discretion. | |||
(<xref target="lastmod.comparison"/>). | (<xref target="lastmod.comparison"/>) | |||
</t> | </t> | |||
<!-- [rfced] Section B.4. Does the following reordering improve | <!-- [rfced] Section B.4. Does the following reordering improve | |||
readability? | readability? | |||
Current: | Current: | |||
Removed edge-case requirement on If-Match and If-Unmodified-Since | Removed edge-case requirement on If-Match and If-Unmodified-Since | |||
that a validator not be sent in a 2xx response when validation fail s | that a validator not be sent in a 2xx response when validation fail s | |||
and the server decides that the same change request has already bee n | and the server decides that the same change request has already bee n | |||
applied. (Sections 13.1.1 and 13.1.4) | applied. (Sections 13.1.1 and 13.1.4) | |||
Perhaps: | Perhaps: | |||
The following edge-case requirement on If-Match and If-Unmodified-S ince | The following edge-case requirement on If-Match and If-Unmodified-S ince | |||
has been removed: the server does not send a validator in a 2xx res ponse | has been removed: the server does not send a validator in a 2xx res ponse | |||
when validation fails and the server decides that the same change | when validation fails and the server decides that the same change | |||
request has already been applied. (Sections 13.1.1 and S13.1.4) | request has already been applied. (Sections 13.1.1 and S13.1.4) | |||
--> | --> | |||
<t> | <t> | |||
Removed edge-case requirement on If-Match and If-Unmodified-Since t hat a | Removed edge-case requirement on If-Match and If-Unmodified-Since t hat a | |||
validator not be sent in a 2xx response when validation fails and t he server | validator not be sent in a 2xx response when validation fails and t he server | |||
decides that the same change request has already been applied | decides that the same change request has already been applied. | |||
(Sections <xref target="field.if-match" format="counter"/> and | (Sections <xref target="field.if-match" format="counter"/> and | |||
<xref target="field.if-unmodified-since" format="counter"/>). | <xref target="field.if-unmodified-since" format="counter"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
The fact that If-Unmodified-Since does not apply to a resource with out a | The fact that If-Unmodified-Since does not apply to a resource with out a | |||
concept of modification time has been clarified | concept of modification time has been clarified. | |||
(<xref target="field.if-unmodified-since"/>). | (<xref target="field.if-unmodified-since"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
Preconditions can now be evaluated before the request content is pr ocessed | Preconditions can now be evaluated before the request content is pr ocessed | |||
rather than waiting until the response would otherwise be successfu | rather than waiting until the response would otherwise be successfu | |||
l | l. | |||
(<xref target="evaluation"/>). | (<xref target="evaluation"/>) | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="changes.from.rfc.7233" title="Changes from R FC 7233"> | <section anchor="changes.from.rfc.7233" title="Changes from R FC 7233"> | |||
<t> | <t> | |||
Refactored the range-unit and ranges-specifier grammars to simplify | Refactored the range-unit and ranges-specifier grammars to simplify | |||
and reduce artificial distinctions between bytes and other | and reduce artificial distinctions between bytes and other | |||
(extension) range units, removing the overlapping grammar of | (extension) range units, removing the overlapping grammar of | |||
other-range-unit by defining range units generically as a token and | other-range-unit by defining range units generically as a token and | |||
placing extensions within the scope of a range-spec (other-range). | placing extensions within the scope of a range-spec (other-range). | |||
This disambiguates the role of list syntax (commas) in all range se ts, | This disambiguates the role of list syntax (commas) in all range se ts, | |||
including extension range units, for indicating a range-set of more than | including extension range units, for indicating a range-set of more than | |||
one range. Moving the extension grammar into range specifiers also allows | one range. Moving the extension grammar into range specifiers also allows | |||
protocol specific to byte ranges to be specified separately. | protocol specific to byte ranges to be specified separately. | |||
</t> | </t> | |||
<t> | <t> | |||
It is now possible to define Range handling on extension methods | It is now possible to define Range handling on extension methods. | |||
(<xref target="field.range"/>). | (<xref target="field.range"/>) | |||
</t> | </t> | |||
<t> | <t> | |||
Described use of the <xref target="field.content-range" format="non e">Content-Range</xref> header field | Described use of the <xref target="field.content-range" format="non e">Content-Range</xref> header field | |||
(<xref target="field.content-range"/>) as a request modifier to per form a | (<xref target="field.content-range"/>) as a request modifier to per form a | |||
partial PUT | partial PUT. | |||
(<xref target="partial.PUT"/>). | (<xref target="partial.PUT"/>) | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="changes.from.rfc.7235" title="Changes from R FC 7235"> | <section anchor="changes.from.rfc.7235" title="Changes from R FC 7235"> | |||
<t> | <t> | |||
None. | None. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="changes.from.rfc.7538" title="Changes from R FC 7538"> | <section anchor="changes.from.rfc.7538" title="Changes from R FC 7538"> | |||
<t> | <t> | |||
None. | None. | |||
End of changes. 133 change blocks. | ||||
193 lines changed or deleted | 191 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/ |