| rfc9110.original.xml | rfc9110.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!-- | ||||
| This XML document is the output of clean-for-DTD.xslt; a tool that strips | <!DOCTYPE rfc [ | |||
| extensions to RFC 7749 from documents for processing with xml2rfc. | <!ENTITY nbsp " "> | |||
| <!--TARGET-GENERATOR: 202007--> | <!ENTITY zwsp "​"> | |||
| <!--TARGET-VOCABULARY: 3--> | <!ENTITY nbhy "‑"> | |||
| <?xml-stylesheet type='text/xsl' href='lib/myxml2rfc.xslt'?> | <!ENTITY wj "⁠"> | |||
| <?rfc toc="yes" ?> | ]> | |||
| <?rfc symrefs="yes" ?> | ||||
| <?rfc sortrefs="yes" ?> | ||||
| <?rfc compact="yes"?> | ||||
| <?rfc subcompact="no" ?> | ||||
| <?rfc linkmailto="no" ?> | ||||
| <?rfc editing="no" ?> | ||||
| <?rfc comments="yes"?> | ||||
| <?rfc inline="yes"?> | ||||
| <?rfc rfcedstyle="yes"?> | ||||
| <rfc version="3" | <rfc version="3" | |||
| tocDepth="4" | tocDepth="4" | |||
| tocInclude="true" | ||||
| sortRefs="true" | sortRefs="true" | |||
| symRefs="true" | ||||
| submissionType="IETF" | ||||
| category="std" | category="std" | |||
| consensus="true" | ||||
| xmlns:xi="http://www.w3.org/2001/XInclude" | ||||
| xml:lang="en" | ||||
| ipr="pre5378Trust200902" | ipr="pre5378Trust200902" | |||
| obsoletes="2818,7230,7231,7232,7233,7235,7538,7615,7694" | obsoletes="2818, 7230, 7231, 7232, 7233, 7235, 7538, 7615, 7694" | |||
| updates="3864" | updates="3864" | |||
| docName="draft-ietf-httpbis-semantics-19"> | docName="draft-ietf-httpbis-semantics-19" | |||
| <!--see https://trac.tools.ietf.org/tools/xml2rfc/trac/ticket/420--> | number="9110"> | |||
| <?v3xml2rfc silence="Warning: Setting consensus="true" for IETF STD document"?> | ||||
| <?v3xml2rfc silence="Warning: Expected a valid submissionType (stream) setting"? | ||||
| > | ||||
| <front> | <front> | |||
| <title>HTTP Semantics</title> | <title>HTTP Semantics</title> | |||
| <seriesInfo name="RFC" value="9110"/> | ||||
| <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> | |||
| <postalLine>345 Park Ave</postalLine> | <postalLine>345 Park Ave</postalLine> | |||
| <postalLine>San Jose, CA 95110</postalLine> | <postalLine>San Jose, CA 95110</postalLine> | |||
| <postalLine>United States of America</postalLine> | <postalLine>United States of America</postalLine> | |||
| skipping to change at line 54 ¶ | skipping to change at line 53 ¶ | |||
| <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> | |||
| <postalLine>Prahran VIC</postalLine> | <postalLine>Prahran</postalLine> | |||
| <postalLine>Australia</postalLine> | <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"> | |||
| skipping to change at line 76 ¶ | skipping to change at line 75 ¶ | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <postalLine>Hafenweg 16</postalLine> | <postalLine>Hafenweg 16</postalLine> | |||
| <postalLine>48155 Münster</postalLine> | <postalLine>48155 Münster</postalLine> | |||
| <postalLine>Germany</postalLine> | <postalLine>Germany</postalLine> | |||
| </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="2021" month="September" day="10"/> | <date year="2022" month="June"/> | |||
| <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> | |||
| <keyword>HTTP semantics</keyword> | <keyword>HTTP semantics</keyword> | |||
| <keyword>HTTP content</keyword> | <keyword>HTTP content</keyword> | |||
| <keyword>HTTP method</keyword> | <keyword>HTTP method</keyword> | |||
| <keyword>HTTP status code</keyword> | <keyword>HTTP status code</keyword> | |||
| <abstract> | <abstract> | |||
| <t> | <t> | |||
| The Hypertext Transfer Protocol (HTTP) is a stateless application-level | The Hypertext Transfer Protocol (HTTP) is a stateless application-level | |||
| protocol for distributed, collaborative, hypertext information systems. | protocol for distributed, collaborative, hypertext information systems. | |||
| This document describes the overall architecture of HTTP, establishes common | This document describes the overall architecture of HTTP, establishes common | |||
| terminology, and defines aspects of the protocol that are shared by all | terminology, and defines aspects of the protocol that are shared by all | |||
| versions. In this definition are core protocol elements, extensibility | versions. In this definition are core protocol elements, extensibility | |||
| mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) | mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) | |||
| schemes. | schemes. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This document updates RFC 3864 and | This document updates RFC 3864 and | |||
| obsoletes RFC 2818, RFC 7231, RFC 7232, RFC 7233, | obsoletes RFCs 2818, 7231, 7232, 7233, | |||
| RFC 7235, RFC 7538, RFC 7615, RFC 7694, and portions of RFC 7230. | 7235, 7538, 7615, 7694, and portions of 7230. | |||
| </t> | </t> | |||
| </abstract> | </abstract> | |||
| <note title="Editorial Note"> | ||||
| <t>This note is to be removed before publishing as an RFC.</t> | ||||
| <t> | ||||
| Discussion of this draft takes place on the HTTP working group | ||||
| mailing list (ietf-http-wg@w3.org), which is archived at | ||||
| <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/" | ||||
| brackets="angle"/>. | ||||
| </t> | ||||
| <t> | ||||
| Working Group information can be found at <eref target="https://httpwg.org/" | ||||
| brackets="angle"/>; | ||||
| source code and issues list for this draft can be found at | ||||
| <eref target="https://github.com/httpwg/http-core" brackets="angle"/>. | ||||
| </t> | ||||
| <t> | ||||
| The changes in this draft are summarized in <xref target="changes.since.18"/ | ||||
| >. | ||||
| </t> | ||||
| </note> | ||||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="introduction" title="Introduction"> | <section anchor="introduction" title="Introduction"> | |||
| <section anchor="purpose" title="Purpose"> | <section anchor="purpose" title="Purpose"> | |||
| <t> | <t> | |||
| The Hypertext Transfer Protocol (HTTP) is a family of stateless, | The Hypertext Transfer Protocol (HTTP) is a family of stateless, | |||
| application-level, request/response protocols that share a generic interface, | application-level, request/response protocols that share a generic interface, | |||
| extensible semantics, and self-descriptive messages to enable flexible | extensible semantics, and self-descriptive messages to enable flexible | |||
| interaction with network-based hypertext information systems. | interaction with network-based hypertext information systems. | |||
| </t> | </t> | |||
| skipping to change at line 158 ¶ | skipping to change at line 141 ¶ | |||
| If the communication is considered in isolation, then successful | If the communication is considered in isolation, then successful | |||
| actions ought to be reflected in corresponding changes to the | actions ought to be reflected in corresponding changes to the | |||
| observable interface provided by servers. However, since multiple | observable interface provided by servers. However, since multiple | |||
| clients might act in parallel and perhaps at cross-purposes, we | clients might act in parallel and perhaps at cross-purposes, we | |||
| cannot require that such changes be observable beyond the scope | cannot require that such changes be observable beyond the scope | |||
| of a single response. | of a single response. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="history.and.evolution" title="History and Evolution"> | <section anchor="history.and.evolution" title="History and Evolution"> | |||
| <t> | <t> | |||
| HTTP has been the primary information transfer protocol for the World Wide | HTTP has been the primary information transfer protocol for the World | |||
| Web since its introduction in 1990. It began as a trivial mechanism for | Wide Web since its introduction in 1990. It began as a trivial | |||
| low-latency requests, with a single method (GET) to request transfer of a | mechanism for low-latency requests, with a single method (GET) to | |||
| presumed hypertext document identified by a given pathname. | request transfer of a presumed hypertext document identified by a given pathn | |||
| ame. | ||||
| As the Web grew, HTTP was extended to enclose requests and responses within | As the Web grew, HTTP was extended to enclose requests and responses within | |||
| messages, transfer arbitrary data formats using MIME-like media types, and | messages, transfer arbitrary data formats using MIME-like media types, and | |||
| route requests through intermediaries. These protocols were eventually | route requests through intermediaries. These protocols were eventually | |||
| defined as HTTP/0.9 and HTTP/1.0 (see <xref target="HTTP10"/>). | defined as HTTP/0.9 and HTTP/1.0 (see <xref target="HTTP10"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| HTTP/1.1 was designed to refine the protocol's features while retaining | HTTP/1.1 was designed to refine the protocol's features while retaining | |||
| compatibility with the existing text-based messaging syntax, improving | compatibility with the existing text-based messaging syntax, improving | |||
| its interoperability, scalability, and robustness across the Internet. | its interoperability, scalability, and robustness across the Internet. | |||
| This included length-based data delimiters for both fixed and dynamic | This included length-based data delimiters for both fixed and dynamic | |||
| (chunked) content, a consistent framework for content negotiation, | (chunked) content, a consistent framework for content negotiation, | |||
| opaque validators for conditional requests, cache controls for better | opaque validators for conditional requests, cache controls for better | |||
| cache consistency, range requests for partial updates, and default | cache consistency, range requests for partial updates, and default | |||
| persistent connections. HTTP/1.1 was introduced in 1995 and published on | persistent connections. HTTP/1.1 was introduced in 1995 and published on | |||
| the standards track in 1997 <xref target="RFC2068"/>, revised in | the Standards Track in 1997 <xref target="RFC2068"/>, revised in | |||
| 1999 <xref target="RFC2616"/>, and revised again in 2014 | 1999 <xref target="RFC2616"/>, and revised again in 2014 | |||
| (<xref target="RFC7230"/> – <xref target="RFC7235"/>). | (<xref target="RFC7230"/> through <xref target="RFC7235"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| HTTP/2 (<xref target="HTTP2"/>) introduced a multiplexed session layer | HTTP/2 (<xref target="HTTP2"/>) introduced a multiplexed session layer | |||
| on top of the existing TLS and TCP protocols for exchanging concurrent | on top of the existing TLS and TCP protocols for exchanging concurrent | |||
| HTTP messages with efficient field compression and server push. | HTTP messages with efficient field compression and server push. | |||
| HTTP/3 (<xref target="HTTP3"/>) provides greater independence for concurrent | HTTP/3 (<xref target="HTTP3"/>) provides greater independence for concurrent | |||
| messages by using QUIC as a secure multiplexed transport over UDP instead of | messages by using QUIC as a secure multiplexed transport over UDP instead of | |||
| TCP. | TCP. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| skipping to change at line 205 ¶ | skipping to change at line 188 ¶ | |||
| <t> | <t> | |||
| This revision of HTTP separates the definition of semantics (this document) | This revision of HTTP separates the definition of semantics (this document) | |||
| and caching (<xref target="CACHING"/>) from the current HTTP/1.1 messaging | and caching (<xref target="CACHING"/>) from the current HTTP/1.1 messaging | |||
| syntax (<xref target="HTTP11"/>) to allow each major protocol version | syntax (<xref target="HTTP11"/>) to allow each major protocol version | |||
| to progress independently while referring to the same core semantics. | to progress independently while referring to the same core semantics. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="core.semantics" title="Core Semantics"> | <section anchor="core.semantics" title="Core Semantics"> | |||
| <t> | <t> | |||
| HTTP provides a uniform interface for interacting with a resource | HTTP provides a uniform interface for interacting with a resource | |||
| (<xref target="resources"/>) — regardless of its type, nature, or | (<xref target="resources"/>) -- regardless of its type, nature, or | |||
| implementation — by sending messages that manipulate or transfer | implementation -- by sending messages that manipulate or transfer | |||
| representations (<xref target="representations"/>). | representations (<xref target="representations"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Each message is either a request or a response. A client constructs request | Each message is either a request or a response. A client constructs request | |||
| messages that communicate its intentions and routes those messages toward | messages that communicate its intentions and routes those messages toward | |||
| an identified origin server. A server listens for requests, parses each | an identified origin server. A server listens for requests, parses each | |||
| message received, interprets the message semantics in relation to the | message received, interprets the message semantics in relation to the | |||
| identified target resource, and responds to that request with one or more | identified target resource, and responds to that request with one or more | |||
| response messages. The client examines received responses to see if its | response messages. The client examines received responses to see if its | |||
| intentions were carried out, determining what to do next based on the | intentions were carried out, determining what to do next based on the | |||
| skipping to change at line 233 ¶ | skipping to change at line 216 ¶ | |||
| status codes that describe the response (<xref target="status.codes"/>), and | status codes that describe the response (<xref target="status.codes"/>), and | |||
| other control data and resource metadata that might be given in response | other control data and resource metadata that might be given in response | |||
| fields. | fields. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <iref item="content negotiation"/> | <iref item="content negotiation"/> | |||
| Semantics also include representation metadata that describe how | Semantics also include representation metadata that describe how | |||
| content is intended to be interpreted by a recipient, request header | content is intended to be interpreted by a recipient, request header | |||
| fields that might influence content selection, and the various selection | fields that might influence content selection, and the various selection | |||
| algorithms that are collectively referred to as | algorithms that are collectively referred to as | |||
| <em>content negotiation</em> (<xref target="content.negotiation"/>). | "content negotiation" (<xref target="content.negotiation"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="specifications.obsoleted.by.this.document" | <section anchor="specifications.obsoleted.by.this.document" | |||
| title="Specifications Obsoleted by this Document"> | title="Specifications Obsoleted by This Document"> | |||
| <t> | <table align="left"> | |||
| This document obsoletes the following specifications: | <thead> | |||
| </t> | ||||
| <table align="left"> | ||||
| <thead> | ||||
| <tr> | <tr> | |||
| <th>Title</th> | <th>Title</th> | |||
| <th>Reference</th> | <th>Reference</th> | |||
| <th>Changes</th> | <th>See</th> | |||
| </tr> | </tr> | |||
| </thead> | </thead> | |||
| <tbody> | <tbody> | |||
| <tr> | <tr> | |||
| <td>HTTP Over TLS</td> | <td>HTTP Over TLS</td> | |||
| <td> | <td> | |||
| <xref target="RFC2818"/> | <xref target="RFC2818"/> | |||
| </td> | </td> | |||
| <td> | <td> | |||
| <xref target="changes.from.rfc.2818" format="counter"/> | <xref target="changes.from.rfc.2818" format="counter"/> | |||
| skipping to change at line 370 ¶ | skipping to change at line 350 ¶ | |||
| in strings defined in <xref target="RFC7405"/>. | in strings defined in <xref target="RFC7405"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| It also uses a list extension, defined in <xref target="abnf.extension"/>, | It also uses a list extension, defined in <xref target="abnf.extension"/>, | |||
| that allows for compact definition of comma-separated lists using a "#" | that allows for compact definition of comma-separated lists using a "#" | |||
| operator (similar to how the "*" operator indicates repetition). <xref target ="collected.abnf"/> shows the collected grammar with all list | operator (similar to how the "*" operator indicates repetition). <xref target ="collected.abnf"/> shows the collected grammar with all list | |||
| operators expanded to standard ABNF notation. | operators expanded to standard ABNF notation. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| As a convention, ABNF rule names prefixed with "obs-" denote | As a convention, ABNF rule names prefixed with "obs-" denote | |||
| "obsolete" grammar rules that appear for historical reasons. | obsolete grammar rules that appear for historical reasons. | |||
| </t> | </t> | |||
| <t anchor="core.rules"> | <t anchor="core.rules"> | |||
| The following core rules are included by | The following core rules are included by | |||
| reference, as defined in <xref target="RFC5234" section="B.1"/>: | reference, as defined in <xref target="RFC5234" section="B.1"/>: | |||
| ALPHA (letters), CR (carriage return), CRLF (CR LF), CTL (controls), | ALPHA (letters), CR (carriage return), CRLF (CR LF), CTL (controls), | |||
| DIGIT (decimal 0-9), DQUOTE (double quote), | DIGIT (decimal 0-9), DQUOTE (double quote), | |||
| HEXDIG (hexadecimal 0-9/A-F/a-f), HTAB (horizontal tab), LF (line feed), | HEXDIG (hexadecimal 0-9/A-F/a-f), HTAB (horizontal tab), LF (line feed), | |||
| OCTET (any 8-bit sequence of data), SP (space), and | OCTET (any 8-bit sequence of data), SP (space), and | |||
| VCHAR (any visible US-ASCII character). | VCHAR (any visible US-ASCII character). | |||
| skipping to change at line 397 ¶ | skipping to change at line 377 ¶ | |||
| This specification uses the terms | This specification uses the terms | |||
| "character", | "character", | |||
| "character encoding scheme", | "character encoding scheme", | |||
| "charset", and | "charset", and | |||
| "protocol element" | "protocol element" | |||
| as they are defined in <xref target="RFC6365"/>. | as they are defined in <xref target="RFC6365"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="requirements.notation" title="Requirements Notation"> | <section anchor="requirements.notation" title="Requirements Notation"> | |||
| <t> | <t> | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | |||
| "MAY", and "OPTIONAL" in this document are to be interpreted as | ", | |||
| described in BCP 14 <xref target="RFC2119"/> | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| <xref target="RFC8174"/> when, and only when, they | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| appear in all capitals, as shown here. | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
| be | ||||
| interpreted as described in BCP 14 <xref target="RFC2119"/> <xref | ||||
| target="RFC8174"/> when, and only when, they appear in all capitals, as | ||||
| shown here. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| This specification targets conformance criteria according to the role of | This specification targets conformance criteria according to the role of | |||
| a participant in HTTP communication. Hence, requirements are placed | a participant in HTTP communication. Hence, requirements are placed | |||
| on senders, recipients, clients, servers, user agents, intermediaries, | on senders, recipients, clients, servers, user agents, intermediaries, | |||
| origin servers, proxies, gateways, or caches, depending on what behavior | origin servers, proxies, gateways, or caches, depending on what behavior | |||
| is being constrained by the requirement. Additional requirements | is being constrained by the requirement. Additional requirements | |||
| are placed on implementations, resource owners, and protocol element | are placed on implementations, resource owners, and protocol element | |||
| registrations when they apply beyond the scope of a single communication. | registrations when they apply beyond the scope of a single communication. | |||
| </t> | </t> | |||
| skipping to change at line 465 ¶ | skipping to change at line 447 ¶ | |||
| only marginal expectations that the element will conform to its ABNF | only marginal expectations that the element will conform to its ABNF | |||
| grammar and fit within a reasonable buffer size. | grammar and fit within a reasonable buffer size. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| HTTP does not have specific length limitations for many of its protocol | HTTP does not have specific length limitations for many of its protocol | |||
| elements because the lengths that might be appropriate will vary widely, | elements because the lengths that might be appropriate will vary widely, | |||
| depending on the deployment context and purpose of the implementation. | depending on the deployment context and purpose of the implementation. | |||
| Hence, interoperability between senders and recipients depends on shared | Hence, interoperability between senders and recipients depends on shared | |||
| expectations regarding what is a reasonable length for each protocol | expectations regarding what is a reasonable length for each protocol | |||
| element. Furthermore, what is commonly understood to be a reasonable length | element. Furthermore, what is commonly understood to be a reasonable length | |||
| for some protocol elements has changed over the course of the past two | for some protocol elements has changed over the course of the past three | |||
| decades of HTTP use and is expected to continue changing in the future. | decades of HTTP use and is expected to continue changing in the future. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| At a minimum, a recipient <bcp14>MUST</bcp14> be able to parse and process pr otocol | At a minimum, a recipient <bcp14>MUST</bcp14> be able to parse and process pr otocol | |||
| element lengths that are at least as long as the values that it generates | element lengths that are at least as long as the values that it generates | |||
| for those same protocol elements in other messages. For example, an origin | for those same protocol elements in other messages. For example, an origin | |||
| server that publishes very long URI references to its own resources needs | server that publishes very long URI references to its own resources needs | |||
| to be able to parse and process those same references when received as a | to be able to parse and process those same references when received as a | |||
| target URI. | target URI. | |||
| </t> | </t> | |||
| skipping to change at line 515 ¶ | skipping to change at line 497 ¶ | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Some requests can be automatically retried by a client in the event of | Some requests can be automatically retried by a client in the event of | |||
| an underlying connection failure, as described in | an underlying connection failure, as described in | |||
| <xref target="idempotent.methods"/>. | <xref target="idempotent.methods"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="protocol.version" title="Protocol Version"> | <section anchor="protocol.version" title="Protocol Version"> | |||
| <t> | <t> | |||
| HTTP's version number consists of two decimal digits separated by a "." | HTTP's version number consists of two decimal digits separated by a "." | |||
| (period or decimal point). The first digit ("major version") indicates the | (period or decimal point). The first digit (major version) indicates the | |||
| messaging syntax, whereas the second digit ("minor version") | messaging syntax, whereas the second digit (minor version) | |||
| indicates the highest minor version within that major version to which the | indicates the highest minor version within that major version to which the | |||
| sender is conformant (able to understand for future communication). | sender is conformant (able to understand for future communication). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| While HTTP's core semantics don't change between protocol versions, the | While HTTP's core semantics don't change between protocol versions, their | |||
| expression of them "on the wire" can change, and so the | expression "on the wire" can change, and so the | |||
| HTTP version number changes when incompatible changes are made to the wire | HTTP version number changes when incompatible changes are made to the wire | |||
| format. Additionally, HTTP allows incremental, backwards-compatible | format. Additionally, HTTP allows incremental, backwards-compatible | |||
| changes to be made to the protocol without changing its version through | changes to be made to the protocol without changing its version through | |||
| the use of defined extension points (<xref target="extending"/>). | the use of defined extension points (<xref target="extending"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The protocol version as a whole indicates the sender's conformance with | The protocol version as a whole indicates the sender's conformance with | |||
| the set of requirements laid out in that version's corresponding | the set of requirements laid out in that version's corresponding | |||
| specification of HTTP. | specification(s). | |||
| For example, the version "HTTP/1.1" is defined by the combined | For example, the version "HTTP/1.1" is defined by the combined | |||
| specifications of this document, "HTTP Caching" <xref target="CACHING"/>, | specifications of this document, "HTTP Caching" <xref target="CACHING"/>, | |||
| and "HTTP/1.1" <xref target="HTTP11"/>. | and "HTTP/1.1" <xref target="HTTP11"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| HTTP's major version number is incremented when an incompatible message | HTTP's major version number is incremented when an incompatible message | |||
| syntax is introduced. The minor number is incremented when changes made to | syntax is introduced. The minor number is incremented when changes made to | |||
| the protocol have the effect of adding to the message semantics or | the protocol have the effect of adding to the message semantics or | |||
| implying additional capabilities of the sender. | implying additional capabilities of the sender. | |||
| </t> | </t> | |||
| skipping to change at line 565 ¶ | skipping to change at line 547 ¶ | |||
| <section anchor="terminology" title="Terminology and Core Concepts"> | <section anchor="terminology" title="Terminology and Core Concepts"> | |||
| <t> | <t> | |||
| HTTP was created for the World Wide Web (WWW) architecture | HTTP was created for the World Wide Web (WWW) architecture | |||
| and has evolved over time to support the scalability needs of a worldwide | and has evolved over time to support the scalability needs of a worldwide | |||
| hypertext system. Much of that architecture is reflected in the terminology | hypertext system. Much of that architecture is reflected in the terminology | |||
| used to define HTTP. | used to define HTTP. | |||
| </t> | </t> | |||
| <section anchor="resources" title="Resources"> | <section anchor="resources" title="Resources"> | |||
| <iref primary="true" item="resource"/> | <iref primary="true" item="resource"/> | |||
| <t> | <t> | |||
| The target of an HTTP request is called a <em>resource</em>. | The target of an HTTP request is called a "resource". | |||
| HTTP does not limit the nature of a resource; it merely | HTTP does not limit the nature of a resource; it merely | |||
| defines an interface that might be used to interact with resources. | defines an interface that might be used to interact with resources. | |||
| Most resources are identified by a Uniform Resource Identifier (URI), as | Most resources are identified by a Uniform Resource Identifier (URI), as | |||
| described in <xref target="uri"/>. | described in <xref target="uri"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| One design goal of HTTP is to separate resource identification from | One design goal of HTTP is to separate resource identification from | |||
| request semantics, which is made possible by vesting the request | request semantics, which is made possible by vesting the request | |||
| semantics in the request method (<xref target="methods"/>) and a few | semantics in the request method (<xref target="methods"/>) and a few | |||
| request-modifying header fields. | request-modifying header fields. | |||
| skipping to change at line 591 ¶ | skipping to change at line 573 ¶ | |||
| </t> | </t> | |||
| <t> | <t> | |||
| HTTP relies upon the Uniform Resource Identifier (URI) | HTTP relies upon the Uniform Resource Identifier (URI) | |||
| standard <xref target="URI"/> to indicate the target resource | standard <xref target="URI"/> to indicate the target resource | |||
| (<xref target="target.resource"/>) and relationships between resources. | (<xref target="target.resource"/>) and relationships between resources. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="representations" title="Representations"> | <section anchor="representations" title="Representations"> | |||
| <iref primary="true" item="representation"/> | <iref primary="true" item="representation"/> | |||
| <t> | <t> | |||
| A <em>representation</em> is information | A "representation" is information | |||
| that is intended to reflect a past, current, or desired state of a given | that is intended to reflect a past, current, or desired state of a given | |||
| resource, in a format that can be readily communicated via the protocol. | resource, in a format that can be readily communicated via the protocol. | |||
| A representation consists of a set of representation metadata and a | A representation consists of a set of representation metadata and a | |||
| potentially unbounded stream of representation data | potentially unbounded stream of representation data | |||
| (<xref target="representation.data.and.metadata"/>). | (<xref target="representation.data.and.metadata"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| HTTP allows "information hiding" behind its uniform interface by defining | HTTP allows "information hiding" behind its uniform interface by defining | |||
| communication with respect to a transferable representation of the resource | communication with respect to a transferable representation of the resource | |||
| state, rather than transferring the resource itself. This allows the | state, rather than transferring the resource itself. This allows the | |||
| skipping to change at line 624 ¶ | skipping to change at line 606 ¶ | |||
| that help guide the recipient's future interactions. | that help guide the recipient's future interactions. | |||
| </t> | </t> | |||
| <t anchor="selected.representation"> | <t anchor="selected.representation"> | |||
| <iref primary="true" item="selected representation"/> | <iref primary="true" item="selected representation"/> | |||
| A <xref target="target.resource" format="none">target resource</xref> might b e provided with, or be capable of | A <xref target="target.resource" format="none">target resource</xref> might b e provided with, or be capable of | |||
| generating, multiple representations that are each intended to reflect the | generating, multiple representations that are each intended to reflect the | |||
| resource's current state. An algorithm, usually based on | resource's current state. An algorithm, usually based on | |||
| <xref target="content.negotiation" format="none">content negotiation</xref> ( <xref target="content.negotiation"/>), | <xref target="content.negotiation" format="none">content negotiation</xref> ( <xref target="content.negotiation"/>), | |||
| would be used to select one of those representations as being most | would be used to select one of those representations as being most | |||
| applicable to a given request. | applicable to a given request. | |||
| This <em>selected representation</em> provides the data and metadata | This "selected representation" provides the data and metadata | |||
| for evaluating conditional requests (<xref target="conditional.requests"/>) | for evaluating conditional requests (<xref target="conditional.requests"/>) | |||
| and constructing the content for <xref target="status.200" format="none">200 (OK)</xref>, | and constructing the content for <xref target="status.200" format="none">200 (OK)</xref>, | |||
| <xref target="status.206" format="none">206 (Partial Content)</xref>, and | <xref target="status.206" format="none">206 (Partial Content)</xref>, and | |||
| <xref target="status.304" format="none">304 (Not Modified)</xref> responses t o GET (<xref target="GET"/>). | <xref target="status.304" format="none">304 (Not Modified)</xref> responses t o GET (<xref target="GET"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="connections" title="Connections, Clients and Servers"> | <section anchor="connections" title="Connections, Clients, and Servers" > | |||
| <iref primary="true" item="client"/> | <iref primary="true" item="client"/> | |||
| <iref primary="true" item="server"/> | <iref primary="true" item="server"/> | |||
| <iref primary="true" item="connection"/> | <iref primary="true" item="connection"/> | |||
| <t> | <t> | |||
| HTTP is a client/server protocol that operates over a reliable | HTTP is a client/server protocol that operates over a reliable | |||
| transport- or session-layer <em>connection</em>. | transport- or session-layer "connection". | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An HTTP <em>client</em> is a program that establishes a connection | An HTTP "client" is a program that establishes a connection | |||
| to a server for the purpose of sending one or more HTTP requests. | to a server for the purpose of sending one or more HTTP requests. | |||
| An HTTP <em>server</em> is a program that accepts connections | An HTTP "server" is a program that accepts connections | |||
| in order to service HTTP requests by sending HTTP responses. | in order to service HTTP requests by sending HTTP responses. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The terms "client" and "server" refer only to the roles that | The terms client and server refer only to the roles that | |||
| these programs perform for a particular connection. The same program | these programs perform for a particular connection. The same program | |||
| might act as a client on some connections and a server on others. | might act as a client on some connections and a server on others. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| HTTP is defined as a stateless protocol, meaning that each request message's semantics | HTTP is defined as a stateless protocol, meaning that each request message's semantics | |||
| can be understood in isolation, and that the relationship between connections | can be understood in isolation, and that the relationship between connections | |||
| and messages on them has no impact on the interpretation of those messages. | and messages on them has no impact on the interpretation of those messages. | |||
| For example, a CONNECT request (<xref target="CONNECT"/>) or a request with | For example, a CONNECT request (<xref target="CONNECT"/>) or a request with | |||
| the Upgrade header field (<xref target="field.upgrade"/>) can occur at any ti me, | the Upgrade header field (<xref target="field.upgrade"/>) can occur at any ti me, | |||
| not just in the first message on a connection. Many implementations depend on | not just in the first message on a connection. Many implementations depend on | |||
| skipping to change at line 678 ¶ | skipping to change at line 660 ¶ | |||
| </section> | </section> | |||
| <section anchor="messages" title="Messages"> | <section anchor="messages" title="Messages"> | |||
| <iref primary="true" item="messages"/> | <iref primary="true" item="messages"/> | |||
| <iref item="message"/> | <iref item="message"/> | |||
| <iref primary="true" item="sender"/> | <iref primary="true" item="sender"/> | |||
| <iref primary="true" item="recipient"/> | <iref primary="true" item="recipient"/> | |||
| <iref primary="true" item="request"/> | <iref primary="true" item="request"/> | |||
| <iref primary="true" item="response"/> | <iref primary="true" item="response"/> | |||
| <t> | <t> | |||
| HTTP is a stateless request/response protocol for exchanging | HTTP is a stateless request/response protocol for exchanging | |||
| <em>messages</em> across a <xref target="connections" format="none">connectio | "messages" across a <xref target="connections" format="none">connection</xref | |||
| n</xref>. | >. | |||
| The terms <em>sender</em> and <em>recipient</em> refer to | The terms "sender" and "recipient" refer to | |||
| any implementation that sends or receives a given message, respectively. | any implementation that sends or receives a given message, respectively. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A client sends requests to a server in the form of a <em>request</em> | A client sends requests to a server in the form of a "request" | |||
| message with a method (<xref target="methods"/>) and request target | message with a method (<xref target="methods"/>) and request target | |||
| (<xref target="target.resource"/>). The request might also contain | (<xref target="target.resource"/>). The request might also contain | |||
| header fields (<xref target="header.fields"/>) for request modifiers, | header fields (<xref target="header.fields"/>) for request modifiers, | |||
| client information, and representation metadata, | client information, and representation metadata, | |||
| content (<xref target="content"/>) intended for processing | content (<xref target="content"/>) intended for processing | |||
| in accordance with the method, and | in accordance with the method, and | |||
| trailer fields (<xref target="trailer.fields"/>) to communicate information | trailer fields (<xref target="trailer.fields"/>) to communicate information | |||
| collected while sending the content. | collected while sending the content. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A server responds to a client's request by sending one or more | A server responds to a client's request by sending one or more | |||
| <em>response</em> messages, each including a status | "response" messages, each including a status | |||
| code (<xref target="status.codes"/>). The response might also contain | code (<xref target="status.codes"/>). The response might also contain | |||
| header fields for server information, resource metadata, and representation | header fields for server information, resource metadata, and representation | |||
| metadata, content to be interpreted in accordance with the status | metadata, content to be interpreted in accordance with the status | |||
| code, and trailer fields to communicate information | code, and trailer fields to communicate information | |||
| collected while sending the content. | collected while sending the content. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="user.agent" title="User Agents"> | <section anchor="user.agent" title="User Agents"> | |||
| <iref primary="true" item="user agent"/> | <iref primary="true" item="user agent"/> | |||
| <iref primary="true" item="browser"/> | <iref primary="true" item="browser"/> | |||
| <iref primary="true" item="spider"/> | <iref primary="true" item="spider"/> | |||
| <t> | <t> | |||
| The term <em>user agent</em> refers to any of the various | The term "user agent" refers to any of the various | |||
| client programs that initiate a request. | client programs that initiate a request. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The most familiar form of user agent is the general-purpose Web browser, but | The most familiar form of user agent is the general-purpose Web browser, but | |||
| that's only a small percentage of implementations. Other common user agents | that's only a small percentage of implementations. Other common user agents | |||
| include spiders (web-traversing robots), command-line tools, billboard | include spiders (web-traversing robots), command-line tools, billboard | |||
| screens, household appliances, scales, light bulbs, firmware update scripts, | screens, household appliances, scales, light bulbs, firmware update scripts, | |||
| mobile apps, and communication devices in a multitude of shapes and sizes. | mobile apps, and communication devices in a multitude of shapes and sizes. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| skipping to change at line 743 ¶ | skipping to change at line 725 ¶ | |||
| Likewise, requirements that an automated action be confirmed by the user | Likewise, requirements that an automated action be confirmed by the user | |||
| before proceeding might be met via advance configuration choices, | before proceeding might be met via advance configuration choices, | |||
| run-time options, or simple avoidance of the unsafe action; confirmation | run-time options, or simple avoidance of the unsafe action; confirmation | |||
| does not imply any specific user interface or interruption of normal | does not imply any specific user interface or interruption of normal | |||
| processing if the user has already made that choice. | processing if the user has already made that choice. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="origin.server" title="Origin Server"> | <section anchor="origin.server" title="Origin Server"> | |||
| <iref primary="true" item="origin server"/> | <iref primary="true" item="origin server"/> | |||
| <t> | <t> | |||
| The term <em>origin server</em> refers to a program that can | The term "origin server" refers to a program that can | |||
| originate authoritative responses for a given target resource. | originate authoritative responses for a given target resource. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The most familiar form of origin server are large public websites. | The most familiar form of origin server are large public websites. | |||
| However, like user agents being equated with browsers, it is easy to be | However, like user agents being equated with browsers, it is easy to be | |||
| misled into thinking that all origin servers are alike. | misled into thinking that all origin servers are alike. | |||
| Common origin servers also include home automation units, configurable | Common origin servers also include home automation units, configurable | |||
| networking components, office machines, autonomous robots, news feeds, | networking components, office machines, autonomous robots, news feeds, | |||
| traffic cameras, real-time ad selectors, and video-on-demand platforms. | traffic cameras, real-time ad selectors, and video-on-demand platforms. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Most HTTP communication consists of a retrieval request (GET) for | Most HTTP communication consists of a retrieval request (GET) for | |||
| a representation of some resource identified by a URI. In the | a representation of some resource identified by a URI. In the | |||
| simplest case, this might be accomplished via a single bidirectional | simplest case, this might be accomplished via a single bidirectional | |||
| connection (===) between the user agent (UA) and the origin server (O). | connection (===) between the user agent (UA) and the origin server (O). | |||
| </t> | </t> | |||
| <figure> | <figure> | |||
| <artwork type="drawing"><![CDATA[ | <artwork type="ascii-art"><![CDATA[ | |||
| request > | request > | |||
| UA ======================================= O | UA ======================================= O | |||
| < response | < response | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| </section> | </section> | |||
| <section anchor="intermediaries" title="Intermediaries"> | <section anchor="intermediaries" title="Intermediaries"> | |||
| <iref primary="true" item="intermediary"/> | <iref primary="true" item="intermediary"/> | |||
| <t> | <t> | |||
| HTTP enables the use of intermediaries to satisfy requests through | HTTP enables the use of intermediaries to satisfy requests through | |||
| a chain of connections. There are three common forms of HTTP | a chain of connections. There are three common forms of HTTP | |||
| <em>intermediary</em>: proxy, gateway, and tunnel. In some cases, | "intermediary": proxy, gateway, and tunnel. In some cases, | |||
| a single intermediary might act as an origin server, proxy, gateway, | a single intermediary might act as an origin server, proxy, gateway, | |||
| or tunnel, switching behavior based on the nature of each request. | or tunnel, switching behavior based on the nature of each request. | |||
| </t> | </t> | |||
| <figure> | <figure> | |||
| <artwork type="drawing"><![CDATA[ | <artwork type="ascii-art"><![CDATA[ | |||
| > > > > | > > > > | |||
| UA =========== A =========== B =========== C =========== O | UA =========== A =========== B =========== C =========== O | |||
| < < < < | < < < < | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t> | <t> | |||
| The figure above shows three intermediaries (A, B, and C) between the | The figure above shows three intermediaries (A, B, and C) between the | |||
| user agent and origin server. A request or response message that | user agent and origin server. A request or response message that | |||
| travels the whole chain will pass through four separate connections. | travels the whole chain will pass through four separate connections. | |||
| Some HTTP communication options | Some HTTP communication options | |||
| skipping to change at line 804 ¶ | skipping to change at line 786 ¶ | |||
| forwarding requests to servers other than C, at the same time that it | forwarding requests to servers other than C, at the same time that it | |||
| is handling A's request. Likewise, later requests might be sent through a | is handling A's request. Likewise, later requests might be sent through a | |||
| different path of connections, often based on dynamic configuration for | different path of connections, often based on dynamic configuration for | |||
| load balancing. | load balancing. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <iref primary="true" item="upstream"/> | <iref primary="true" item="upstream"/> | |||
| <iref primary="true" item="downstream"/> | <iref primary="true" item="downstream"/> | |||
| <iref primary="true" item="inbound"/> | <iref primary="true" item="inbound"/> | |||
| <iref primary="true" item="outbound"/> | <iref primary="true" item="outbound"/> | |||
| The terms <em>upstream</em> and <em>downstream</em> are | The terms "upstream" and "downstream" are | |||
| used to describe directional requirements in relation to the message flow: | used to describe directional requirements in relation to the message flow: | |||
| all messages flow from upstream to downstream. | all messages flow from upstream to downstream. | |||
| The terms "inbound" and "outbound" are used to describe directional | The terms "inbound" and "outbound" are used to describe directional | |||
| requirements in relation to the request route: | requirements in relation to the request route: | |||
| <em>inbound</em> means toward the origin server and | inbound means "toward the origin server", whereas | |||
| <em>outbound</em> means toward the user agent. | outbound means "toward the user agent". | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <iref primary="true" item="proxy"/> | <iref primary="true" item="proxy"/> | |||
| A <em>proxy</em> is a message-forwarding agent that is chosen by the | A "proxy" is a message-forwarding agent that is chosen by the | |||
| client, usually via local configuration rules, to receive requests | client, usually via local configuration rules, to receive requests | |||
| for some type(s) of absolute URI and attempt to satisfy those | for some type(s) of absolute URI and attempt to satisfy those | |||
| requests via translation through the HTTP interface. Some translations | requests via translation through the HTTP interface. Some translations | |||
| are minimal, such as for proxy requests for "http" URIs, whereas | are minimal, such as for proxy requests for "http" URIs, whereas | |||
| other requests might require translation to and from entirely different | other requests might require translation to and from entirely different | |||
| application-level protocols. Proxies are often used to group an | application-level protocols. Proxies are often used to group an | |||
| organization's HTTP requests through a common intermediary for the | organization's HTTP requests through a common intermediary for the | |||
| sake of security services, annotation services, or shared caching. Some | sake of security services, annotation services, or shared caching. Some | |||
| proxies are designed to apply transformations to selected messages or | proxies are designed to apply transformations to selected messages or | |||
| content while they are being forwarded, as described in | content while they are being forwarded, as described in | |||
| <xref target="message.transformations"/>. | <xref target="message.transformations"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <iref primary="true" item="gateway"/> | <iref primary="true" item="gateway"/> | |||
| <iref primary="true" item="reverse proxy"/> | <iref primary="true" item="reverse proxy"/> | |||
| <iref primary="true" item="accelerator"/> | <iref primary="true" item="accelerator"/> | |||
| A <em>gateway</em> (a.k.a. <em>reverse proxy</em>) is an | A "gateway" (a.k.a. "reverse proxy") is an | |||
| intermediary that acts as an origin server for the outbound connection but | intermediary that acts as an origin server for the outbound connection but | |||
| translates received requests and forwards them inbound to another server or | translates received requests and forwards them inbound to another server or | |||
| servers. Gateways are often used to encapsulate legacy or untrusted | servers. Gateways are often used to encapsulate legacy or untrusted | |||
| information services, to improve server performance through | information services, to improve server performance through | |||
| <em>accelerator</em> caching, and to enable partitioning or load | "accelerator" caching, and to enable partitioning or load | |||
| balancing of HTTP services across multiple machines. | balancing of HTTP services across multiple machines. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| All HTTP requirements applicable to an origin server | All HTTP requirements applicable to an origin server | |||
| also apply to the outbound communication of a gateway. | also apply to the outbound communication of a gateway. | |||
| A gateway communicates with inbound servers using any protocol that | A gateway communicates with inbound servers using any protocol that | |||
| it desires, including private extensions to HTTP that are outside | it desires, including private extensions to HTTP that are outside | |||
| the scope of this specification. However, an HTTP-to-HTTP gateway | the scope of this specification. However, an HTTP-to-HTTP gateway | |||
| that wishes to interoperate with third-party HTTP servers needs to conform | that wishes to interoperate with third-party HTTP servers needs to conform | |||
| to user agent requirements on the gateway's inbound connection. | to user agent requirements on the gateway's inbound connection. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <iref primary="true" item="tunnel"/> | <iref primary="true" item="tunnel"/> | |||
| A <em>tunnel</em> acts as a blind relay between two connections | A "tunnel" acts as a blind relay between two connections | |||
| without changing the messages. Once active, a tunnel is not | without changing the messages. Once active, a tunnel is not | |||
| considered a party to the HTTP communication, though the tunnel might | considered a party to the HTTP communication, though the tunnel might | |||
| have been initiated by an HTTP request. A tunnel ceases to exist when | have been initiated by an HTTP request. A tunnel ceases to exist when | |||
| both ends of the relayed connection are closed. Tunnels are used to | both ends of the relayed connection are closed. Tunnels are used to | |||
| extend a virtual connection through an intermediary, such as when | extend a virtual connection through an intermediary, such as when | |||
| Transport Layer Security (TLS, <xref target="TLS13"/>) is used to | Transport Layer Security (TLS, <xref target="TLS13"/>) is used to | |||
| establish confidential communication through a shared firewall proxy. | establish confidential communication through a shared firewall proxy. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The above categories for intermediary only consider those acting as | The above categories for intermediary only consider those acting as | |||
| skipping to change at line 868 ¶ | skipping to change at line 850 ¶ | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The above categories for intermediary only consider those acting as | The above categories for intermediary only consider those acting as | |||
| participants in the HTTP communication. There are also intermediaries | participants in the HTTP communication. There are also intermediaries | |||
| that can act on lower layers of the network protocol stack, filtering or | that can act on lower layers of the network protocol stack, filtering or | |||
| redirecting HTTP traffic without the knowledge or permission of message | redirecting HTTP traffic without the knowledge or permission of message | |||
| senders. Network intermediaries are indistinguishable (at a protocol level) | senders. Network intermediaries are indistinguishable (at a protocol level) | |||
| from an on-path attacker, often introducing security flaws or | from an on-path attacker, often introducing security flaws or | |||
| interoperability problems due to mistakenly violating HTTP semantics. | interoperability problems due to mistakenly violating HTTP semantics. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <iref primary="true" item="interception proxy"/> | <iref primary="true" item="interception proxy"/> | |||
| <iref primary="true" item="transparent proxy"/> | <iref primary="true" item="transparent proxy"/> | |||
| For example, an | For example, an "interception proxy" <xref target="RFC3040"/> (also commonly | |||
| <em>interception proxy</em> | known as a "transparent proxy" <xref target="RFC1919"/>) | |||
| <xref target="RFC3040"/> (also commonly | ||||
| known as a <em>transparent proxy</em> | ||||
| <xref target="RFC1919"/>) | ||||
| differs from an HTTP proxy because it is not chosen by the client. | differs from an HTTP proxy because it is not chosen by the client. | |||
| Instead, an interception proxy filters or redirects outgoing TCP port 80 | Instead, an interception proxy filters or redirects outgoing TCP port 80 | |||
| packets (and occasionally other common port traffic). | packets (and occasionally other common port traffic). | |||
| Interception proxies are commonly found on public network access points, | Interception proxies are commonly found on public network access points, | |||
| as a means of enforcing account subscription prior to allowing use of | as a means of enforcing account subscription prior to allowing use of | |||
| non-local Internet services, and within corporate firewalls to enforce | non-local Internet services, and within corporate firewalls to enforce | |||
| network usage policies. | network usage policies. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="caches" title="Caches"> | <section anchor="caches" title="Caches"> | |||
| <iref primary="true" item="cache"/> | <iref primary="true" item="cache"/> | |||
| <t> | <t> | |||
| A <em>cache</em> is a local store of previous response messages and the | A "cache" is a local store of previous response messages and the | |||
| subsystem that controls its message storage, retrieval, and deletion. | subsystem that controls its message storage, retrieval, and deletion. | |||
| A cache stores cacheable responses in order to reduce the response | A cache stores cacheable responses in order to reduce the response | |||
| time and network bandwidth consumption on future, equivalent | time and network bandwidth consumption on future, equivalent | |||
| requests. Any client or server <bcp14>MAY</bcp14> employ a cache, though a ca che | requests. Any client or server <bcp14>MAY</bcp14> employ a cache, though a ca che | |||
| cannot be used while acting as a tunnel. | cannot be used while acting as a tunnel. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The effect of a cache is that the request/response chain is shortened | The effect of a cache is that the request/response chain is shortened | |||
| if one of the participants along the chain has a cached response | if one of the participants along the chain has a cached response | |||
| applicable to that request. The following illustrates the resulting | applicable to that request. The following illustrates the resulting | |||
| chain if B has a cached copy of an earlier response from O (via C) | chain if B has a cached copy of an earlier response from O (via C) | |||
| for a request that has not been cached by UA or A. | for a request that has not been cached by UA or A. | |||
| </t> | </t> | |||
| <figure> | <figure> | |||
| <artwork type="drawing"><![CDATA[ | <artwork type="ascii-art"><![CDATA[ | |||
| > > | > > | |||
| UA =========== A =========== B - - - - - - C - - - - - - O | UA =========== A =========== B - - - - - - C - - - - - - O | |||
| < < | < < | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t> | <t> | |||
| <iref primary="true" item="cacheable"/> | <iref primary="true" item="cacheable"/> | |||
| A response is <em>cacheable</em> if a cache is allowed to store a copy of | A response is "cacheable" if a cache is allowed to store a copy of | |||
| the response message for use in answering subsequent requests. | the response message for use in answering subsequent requests. | |||
| Even when a response is cacheable, there might be additional | Even when a response is cacheable, there might be additional | |||
| constraints placed by the client or by the origin server on when | constraints placed by the client or by the origin server on when | |||
| that cached response can be used for a particular request. HTTP | that cached response can be used for a particular request. HTTP | |||
| requirements for cache behavior and cacheable responses are | requirements for cache behavior and cacheable responses are | |||
| defined in <xref target="CACHING"/>. | defined in <xref target="CACHING"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| There is a wide variety of architectures and configurations | There is a wide variety of architectures and configurations | |||
| of caches deployed across the World Wide Web and | of caches deployed across the World Wide Web and | |||
| inside large organizations. These include national hierarchies | inside large organizations. These include national hierarchies | |||
| of proxy caches to save bandwidth and reduce latency, Content Delivery | of proxy caches to save bandwidth and reduce latency, content delivery | |||
| Networks that use gateway caching to optimise regional and global distributio | networks that use gateway caching to optimize regional and global distributio | |||
| n of popular sites, | n of popular sites, | |||
| collaborative systems that | collaborative systems that | |||
| broadcast or multicast cache entries, archives of pre-fetched cache | broadcast or multicast cache entries, archives of pre-fetched cache | |||
| entries for use in off-line or high-latency environments, and so on. | entries for use in off-line or high-latency environments, and so on. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="example" title="Example Message Exchange"> | <section anchor="example" title="Example Message Exchange"> | |||
| <t> | <t> | |||
| The following example illustrates a typical HTTP/1.1 message exchange for a | The following example illustrates a typical HTTP/1.1 message exchange for a | |||
| GET request (<xref target="GET"/>) on the URI "http://www.example.com/hello.t xt": | GET request (<xref target="GET"/>) on the URI "http://www.example.com/hello.t xt": | |||
| </t> | </t> | |||
| skipping to change at line 995 ¶ | skipping to change at line 975 ¶ | |||
| </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 = <URI-referenc e, see [URI], Section 4.1> | <sourcecode type="abnf9110"><![CDATA[ URI-reference = <URI-referenc e, 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 1031 ¶ | skipping to change at line 1011 ¶ | |||
| request line in HTTP/1.1) will necessarily be larger in some cases. | request line in HTTP/1.1) will necessarily be larger in some cases. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="uri.schemes" title="HTTP-Related URI Schemes"> | <section anchor="uri.schemes" title="HTTP-Related URI Schemes"> | |||
| <t> | <t> | |||
| IANA maintains the registry of URI Schemes <xref target="BCP35"/> at | IANA maintains the registry of URI Schemes <xref target="BCP35"/> at | |||
| <eref target="https://www.iana.org/assignments/uri-schemes/" brackets="angle" />. | <eref target="https://www.iana.org/assignments/uri-schemes/" brackets="angle" />. | |||
| Although requests might target any URI scheme, the following schemes are | Although requests might target any URI scheme, the following schemes are | |||
| inherent to HTTP servers: | inherent to HTTP servers: | |||
| </t> | </t> | |||
| <table align="left"> | <table align="left" anchor="uri.scheme.table"> | |||
| <thead> | <thead> | |||
| <tr> | <tr> | |||
| <th>URI Scheme</th> | <th>URI Scheme</th> | |||
| <th>Description</th> | <th>Description</th> | |||
| <th>Ref.</th> | <th>Section</th> | |||
| </tr> | </tr> | |||
| </thead> | </thead> | |||
| <tbody> | <tbody> | |||
| <tr> | <tr> | |||
| <td>http</td> | <td>http</td> | |||
| <td>Hypertext Transfer Protocol</td> | <td>Hypertext Transfer Protocol</td> | |||
| <td> | <td> | |||
| <xref target="http.uri" format="counter"/> | <xref target="http.uri" format="counter"/> | |||
| </td> | </td> | |||
| </tr> | </tr> | |||
| skipping to change at line 1073 ¶ | skipping to change at line 1053 ¶ | |||
| </t> | </t> | |||
| <section anchor="http.uri" title="http URI Scheme"> | <section anchor="http.uri" title="http URI Scheme"> | |||
| <iref item="http URI scheme" primary="true"/> | <iref item="http URI scheme" primary="true"/> | |||
| <iref item="URI scheme" subitem="http" primary="true"/> | <iref item="URI scheme" subitem="http" primary="true"/> | |||
| <t> | <t> | |||
| The "http" URI scheme is hereby defined for minting identifiers within the | The "http" URI scheme is hereby defined for minting identifiers within the | |||
| hierarchical namespace governed by a potential HTTP origin server | hierarchical namespace governed by a potential HTTP origin server | |||
| listening for TCP (<xref target="TCP"/>) connections on a given port. | listening for TCP (<xref target="TCP"/>) connections on a given port. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="http-URI"/> | <iref primary="true" item="Grammar" subitem="http-URI"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ http-URI = "http" "://" au thority path-abempty [ "?" query ] | <sourcecode type="abnf9110"><![CDATA[ http-URI = "http" "://" au thority path-abempty [ "?" query ] | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| The origin server for an "http" URI is identified by the | The origin server for an "http" URI is identified by the | |||
| <xref target="uri.references" format="none">authority</xref> component, which includes a host identifier | <xref target="uri.references" format="none">authority</xref> component, which includes a host identifier | |||
| (<xref target="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 | |||
| requests that target the identified resource, as defined in | requests that target the identified resource, as defined in | |||
| <xref target="http.origin"/>. | <xref target="http.origin"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A sender <bcp14>MUST NOT</bcp14> generate an "http" URI with an empty host id entifier. | A sender <bcp14>MUST NOT</bcp14> generate an "http" URI with an empty host id entifier. | |||
| A recipient that processes such a URI reference <bcp14>MUST</bcp14> reject it as invalid. | A recipient that processes such a URI reference <bcp14>MUST</bcp14> reject it as invalid. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The hierarchical path component and optional query component identify the | The hierarchical path component and optional query component identify the | |||
| target resource within that origin server's name space. | target resource within that origin server's namespace. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="https.uri" title="https URI Scheme"> | <section anchor="https.uri" title="https URI Scheme"> | |||
| <iref item="https URI scheme" primary="true"/> | <iref item="https URI scheme" primary="true"/> | |||
| <iref item="URI scheme" subitem="https" primary="true"/> | <iref item="URI scheme" subitem="https" primary="true"/> | |||
| <iref item="secured" primary="true"/> | <iref item="secured" primary="true"/> | |||
| <t> | <t> | |||
| The "https" URI scheme is hereby defined for minting identifiers within the | The "https" URI scheme is hereby defined for minting identifiers within the | |||
| hierarchical namespace governed by a potential origin server listening for | hierarchical namespace governed by a potential origin server listening for | |||
| TCP connections on a given port and capable of establishing a TLS | TCP connections on a given port and capable of establishing a TLS | |||
| (<xref target="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, "secured" specifically | |||
| means that the server has been authenticated as acting on behalf of the | means that the server has been authenticated as acting on behalf of the | |||
| identified authority and all HTTP communication with that server has | identified authority and all HTTP communication with that server has | |||
| confidentiality and integrity protection that is acceptable to both client | confidentiality and integrity protection that is acceptable to both client | |||
| and server. | and server. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="https-URI"/> | <iref primary="true" item="Grammar" subitem="https-URI"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ https-URI = "https" "://" authority path-abempty [ "?" query ] | <sourcecode type="abnf9110"><![CDATA[ https-URI = "https" "://" authority path-abempty [ "?" query ] | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| The origin server for an "https" URI is identified by the | The origin server for an "https" URI is identified by the | |||
| <xref target="uri.references" format="none">authority</xref> component, which includes a host identifier | <xref target="uri.references" format="none">authority</xref> component, which includes a host identifier | |||
| (<xref target="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 | |||
| requests that target the identified resource, as defined in | requests that target the identified resource, as defined in | |||
| <xref target="https.origin"/>. | <xref target="https.origin"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A sender <bcp14>MUST NOT</bcp14> generate an "https" URI with an empty host i dentifier. | A sender <bcp14>MUST NOT</bcp14> generate an "https" URI with an empty host i dentifier. | |||
| A recipient that processes such a URI reference <bcp14>MUST</bcp14> reject it as invalid. | A recipient that processes such a URI reference <bcp14>MUST</bcp14> reject it as invalid. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The hierarchical path component and optional query component identify the | The hierarchical path component and optional query component identify the | |||
| target resource within that origin server's name space. | target resource within that origin server's namespace. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A client <bcp14>MUST</bcp14> ensure that its HTTP requests for an "https" res ource are | A client <bcp14>MUST</bcp14> ensure that its HTTP requests for an "https" res ource are | |||
| secured, prior to being communicated, and that it only accepts secured | secured, prior to being communicated, and that it only accepts secured | |||
| responses to those requests. Note that the definition of what cryptographic | responses to those requests. Note that the definition of what cryptographic | |||
| mechanisms are acceptable to client and server are usually negotiated and | mechanisms are acceptable to client and server are usually negotiated and | |||
| can change over time. | can change over time. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Resources made available via the "https" scheme have no shared identity | Resources made available via the "https" scheme have no shared identity | |||
| skipping to change at line 1152 ¶ | skipping to change at line 1132 ¶ | |||
| However, extensions to HTTP that are defined as applying to all origins with | However, extensions to HTTP that are defined as applying to all origins with | |||
| the same host, such as the Cookie protocol <xref target="COOKIE"/>, | the same host, such as the Cookie protocol <xref target="COOKIE"/>, | |||
| allow information set by one service to impact communication with other | allow information set by one service to impact communication with other | |||
| services within a matching group of host domains. Such extensions ought to | services within a matching group of host domains. Such extensions ought to | |||
| be designed with great care to prevent information obtained from a secured | be designed with great care to prevent information obtained from a secured | |||
| connection being inadvertently exchanged within an unsecured context. | connection being inadvertently exchanged within an unsecured context. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="uri.comparison" title="http(s) Normalization and Co mparison"> | <section anchor="uri.comparison" title="http(s) Normalization and Co mparison"> | |||
| <t> | <t> | |||
| The "http" and "https" URI are normalized and compared according to the | URIs with an "http" or "https" scheme are normalized and compared according t o the | |||
| methods defined in <xref target="URI" section="6"/>, using | methods defined in <xref target="URI" section="6"/>, using | |||
| the defaults described above for each scheme. | the defaults described above for each scheme. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| HTTP does not require use of a specific method for determining | HTTP does not require the use of a specific method for determining | |||
| equivalence. For example, a cache key might be compared as a simple | equivalence. For example, a cache key might be compared as a simple | |||
| string, after syntax-based normalization, or after scheme-based | string, after syntax-based normalization, or after scheme-based | |||
| normalization. | normalization. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Scheme-based normalization (<xref target="URI" section="6.2.3"/>) of "http" a nd "https" URIs involves the following | Scheme-based normalization (<xref target="URI" section="6.2.3"/>) of "http" a nd "https" URIs involves the following | |||
| additional rules: | additional rules: | |||
| </t> | </t> | |||
| <ul> | <ul> | |||
| <li>If the port is equal to the default port for a scheme, the normal form | <li>If the port is equal to the default port for a scheme, the normal form | |||
| skipping to change at line 1182 ¶ | skipping to change at line 1162 ¶ | |||
| <li>The scheme and host are case-insensitive and normally prov ided in | <li>The scheme and host are case-insensitive and normally prov ided in | |||
| lowercase; all other components are compared in a case-sensitive | lowercase; all other components are compared in a case-sensitive | |||
| manner.</li> | manner.</li> | |||
| <li>Characters other than those in the "reserved" set are equi valent to | <li>Characters other than those in the "reserved" set are equi valent to | |||
| their percent-encoded octets: the normal form is to not encode them (see | their percent-encoded octets: the normal form is to not encode them (see | |||
| Sections <xref target="URI" sectionFormat="bare" section="2.1"/> and <xref ta rget="URI" sectionFormat="bare" section="2.2"/> of <xref target="URI"/>).</li> | Sections <xref target="URI" sectionFormat="bare" section="2.1"/> and <xref ta rget="URI" sectionFormat="bare" section="2.2"/> of <xref target="URI"/>).</li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| For example, the following three URIs are equivalent: | For example, the following three URIs are equivalent: | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| http://example.com:80/~smith/home.html | http://example.com:80/~smith/home.html | |||
| http://EXAMPLE.com/%7Esmith/home.html | http://EXAMPLE.com/%7Esmith/home.html | |||
| http://EXAMPLE.com:/%7esmith/home.html | http://EXAMPLE.com:/%7esmith/home.html | |||
| ]]></artwork> | ]]></artwork> | |||
| <t> | <t> | |||
| Two HTTP URIs that are equivalent after normalization (using any method) | Two HTTP URIs that are equivalent after normalization (using any method) | |||
| can be assumed to identify the same resource, and any HTTP component <bcp14>M AY</bcp14> | can be assumed to identify the same resource, and any HTTP component <bcp14>M AY</bcp14> | |||
| perform normalization. As a result, distinct resources <bcp14>SHOULD NOT</bcp 14> be | perform normalization. As a result, distinct resources <bcp14>SHOULD NOT</bcp 14> be | |||
| identified by HTTP URIs that are equivalent after normalization (using any | identified by HTTP URIs that are equivalent after normalization (using any | |||
| method defined in <xref target="URI" section="6.2"/>). | method defined in <xref target="URI" section="6.2"/>). | |||
| skipping to change at line 1265 ¶ | skipping to change at line 1245 ¶ | |||
| peer has the authority to represent an origin. | peer has the authority to represent an origin. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| See <xref target="establishing.authority"/> for security considerations | See <xref target="establishing.authority"/> for security considerations | |||
| related to establishing authority. | related to establishing authority. | |||
| </t> | </t> | |||
| <section anchor="origin" title="URI Origin"> | <section anchor="origin" title="URI Origin"> | |||
| <iref primary="true" item="origin"/> | <iref primary="true" item="origin"/> | |||
| <iref primary="true" item="URI" subitem="origin"/> | <iref primary="true" item="URI" subitem="origin"/> | |||
| <t> | <t> | |||
| The <em>origin</em> for a given URI is the triple of scheme, host, | The "origin" for a given URI is the triple of scheme, host, | |||
| and port after normalizing the scheme and host to lowercase and | and port after normalizing the scheme and host to lowercase and | |||
| normalizing the port to remove any leading zeros. If port is elided from | normalizing the port to remove any leading zeros. If port is elided from | |||
| the URI, the default port for that scheme is used. For example, the URI | the URI, the default port for that scheme is used. For example, the URI | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| https://Example.Com/happy.js | https://Example.Com/happy.js | |||
| ]]></artwork> | ]]></artwork> | |||
| <t> | <t> | |||
| would have the origin | would have the origin | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| { "https", "example.com", "443" } | { "https", "example.com", "443" } | |||
| ]]></artwork> | ]]></artwork> | |||
| <t> | <t> | |||
| which can also be described as the normalized URI prefix with port always | which can also be described as the normalized URI prefix with port always | |||
| present: | present: | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| https://example.com:443 | https://example.com:443 | |||
| ]]></artwork> | ]]></artwork> | |||
| <t> | <t> | |||
| Each origin defines its own namespace and controls how identifiers | Each origin defines its own namespace and controls how identifiers | |||
| within that namespace are mapped to resources. In turn, how the origin | within that namespace are mapped to resources. In turn, how the origin | |||
| responds to valid requests, consistently over time, determines the | responds to valid requests, consistently over time, determines the | |||
| semantics that users will associate with a URI, and the usefulness of | semantics that users will associate with a URI, and the usefulness of | |||
| those semantics is what ultimately transforms these mechanisms into a | those semantics is what ultimately transforms these mechanisms into a | |||
| "resource" for users to reference and access in the future. | resource for users to reference and access in the future. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Two origins are distinct if they differ in scheme, host, or port. Even | Two origins are distinct if they differ in scheme, host, or port. Even | |||
| when it can be verified that the same entity controls two distinct origins, | when it can be verified that the same entity controls two distinct origins, | |||
| the two namespaces under those origins are distinct unless explicitly | the two namespaces under those origins are distinct unless explicitly | |||
| aliased by a server authoritative for that origin. | aliased by a server authoritative for that origin. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Origin is also used within HTML and related Web protocols, beyond the | Origin is also used within HTML and related Web protocols, beyond the | |||
| scope of this document, as described in <xref target="RFC6454"/>. | scope of this document, as described in <xref target="RFC6454"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="http.origin" title="http origins"> | <section anchor="http.origin" title="http Origins"> | |||
| <t> | <t> | |||
| Although HTTP is independent of the transport protocol, the "http" scheme | Although HTTP is independent of the transport protocol, the "http" scheme | |||
| (<xref target="http.uri"/>) is specific to associating authority with | (<xref target="http.uri"/>) is specific to associating authority with | |||
| whomever controls the origin | whomever controls the origin | |||
| server listening for TCP connections on the indicated port of whatever | server listening for TCP connections on the indicated port of whatever | |||
| host is identified within the authority component. This is a very weak | host is identified within the authority component. This is a very weak | |||
| sense of authority because it depends on both client-specific name | sense of authority because it depends on both client-specific name | |||
| resolution mechanisms and communication that might not be secured from | resolution mechanisms and communication that might not be secured from | |||
| an on-path attacker. Nevertheless, it is a sufficient minimum for | an on-path attacker. Nevertheless, it is a sufficient minimum for | |||
| binding "http" identifiers to an origin server for consistent resolution | binding "http" identifiers to an origin server for consistent resolution | |||
| skipping to change at line 1348 ¶ | skipping to change at line 1328 ¶ | |||
| <t> | <t> | |||
| Note, however, that the above is not the only means for obtaining an | Note, however, that the above is not the only means for obtaining an | |||
| authoritative response, nor does it imply that an authoritative response | authoritative response, nor does it imply that an authoritative response | |||
| is always necessary (see <xref target="CACHING"/>). | is always necessary (see <xref target="CACHING"/>). | |||
| For example, the Alt-Svc header field <xref target="ALTSVC"/> allows an | For example, the Alt-Svc header field <xref target="ALTSVC"/> allows an | |||
| origin server to identify other services that are also authoritative for | origin server to identify other services that are also authoritative for | |||
| that origin. Access to "http" identified resources might also be provided | that origin. Access to "http" identified resources might also be provided | |||
| by protocols outside the scope of this document. | by protocols outside the scope of this document. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="https.origin" title="https origins"> | <section anchor="https.origin" title="https Origins"> | |||
| <t> | <t> | |||
| The "https" scheme (<xref target="https.uri"/>) associates authority based | The "https" scheme (<xref target="https.uri"/>) associates authority based | |||
| on the ability of a server to use the private key corresponding to a | on the ability of a server to use the private key corresponding to a | |||
| certificate that the client considers to be trustworthy for the identified | certificate that the client considers to be trustworthy for the identified | |||
| origin server. The client usually relies upon a chain of trust, conveyed | origin server. The client usually relies upon a chain of trust, conveyed | |||
| from some prearranged or configured trust anchor, to deem a certificate | from some prearranged or configured trust anchor, to deem a certificate | |||
| trustworthy (<xref target="https.verify"/>). | trustworthy (<xref target="https.verify"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In HTTP/1.1 and earlier, a client will only attribute authority to a server | In HTTP/1.1 and earlier, a client will only attribute authority to a server | |||
| skipping to change at line 1379 ¶ | skipping to change at line 1359 ¶ | |||
| check that the origin's host contains the same server IP address as the | check that the origin's host contains the same server IP address as the | |||
| established connection. This restriction can be removed by the origin server | established connection. This restriction can be removed by the origin server | |||
| sending an equivalent ORIGIN frame <xref target="RFC8336"/>. | sending an equivalent ORIGIN frame <xref target="RFC8336"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The request target's host and port value are passed within each HTTP | The request target's host and port value are passed within each HTTP | |||
| request, identifying the origin and distinguishing it from other namespaces | request, identifying the origin and distinguishing it from other namespaces | |||
| that might be controlled by the same server (<xref target="field.host"/>). | that might be controlled by the same server (<xref target="field.host"/>). | |||
| It is the origin's responsibility to ensure that any services provided with | It is the origin's responsibility to ensure that any services provided with | |||
| control over its certificate's private key are equally responsible for | control over its certificate's private key are equally responsible for | |||
| managing the corresponding "https" namespaces, or at least prepared to | managing the corresponding "https" namespaces or at least prepared to | |||
| reject requests that appear to have been misdirected | reject requests that appear to have been misdirected | |||
| (<xref target="routing.reject"/>). | (<xref target="routing.reject"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An origin server might be unwilling to process requests for certain target | An origin server might be unwilling to process requests for certain target | |||
| URIs even when they have the authority to do so. For example, when a host | URIs even when they have the authority to do so. For example, when a host | |||
| operates distinct services on different ports (e.g., 443 and 8000), checking | operates distinct services on different ports (e.g., 443 and 8000), checking | |||
| the target URI at the origin server is necessary (even after the connection | the target URI at the origin server is necessary (even after the connection | |||
| has been secured) because a network attacker might cause connections for one | has been secured) because a network attacker might cause connections for one | |||
| port to be received at some other port. Failing to check the target URI | port to be received at some other port. Failing to check the target URI | |||
| skipping to change at line 1423 ¶ | skipping to change at line 1403 ¶ | |||
| If the server responds to such a request with a non-interim HTTP response | If the server responds to such a request with a non-interim HTTP response | |||
| message, as described in <xref target="status.codes"/>, then that response | message, as described in <xref target="status.codes"/>, then that response | |||
| is considered an authoritative answer to the client's request. | is considered an authoritative answer to the client's request. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Note, however, that the above is not the only means for obtaining an | Note, however, that the above is not the only means for obtaining an | |||
| authoritative response, nor does it imply that an authoritative response | authoritative response, nor does it imply that an authoritative response | |||
| is always necessary (see <xref target="CACHING"/>). | is always necessary (see <xref target="CACHING"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="https.verify" title="https certificate verification "> | <section anchor="https.verify" title="https Certificate Verification "> | |||
| <t> | <t> | |||
| To establish a <xref target="https.uri" format="none">secured</xref> connecti on to dereference a URI, | To establish a <xref target="https.uri" format="none">secured</xref> connecti on to dereference a URI, | |||
| a client <bcp14>MUST</bcp14> verify that the service's identity is an accepta ble | a client <bcp14>MUST</bcp14> verify that the service's identity is an accepta ble | |||
| match for the URI's origin server. Certificate verification is used to | match for the URI's origin server. Certificate verification is used to | |||
| prevent server impersonation by an on-path attacker or by an attacker | prevent server impersonation by an on-path attacker or by an attacker | |||
| that controls name resolution. This process requires that a client be | that controls name resolution. This process requires that a client be | |||
| configured with a set of trust anchors. | configured with a set of trust anchors. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In general, a client <bcp14>MUST</bcp14> verify the service identity using th e | In general, a client <bcp14>MUST</bcp14> verify the service identity using th e | |||
| verification process defined in | verification process defined in | |||
| <xref target="RFC6125" section="6"/>. The client <bcp14>MUST</bcp14> construc t | <xref target="RFC6125" section="6"/>. The client <bcp14>MUST</bcp14> construc t | |||
| a reference identity from the service's host: if the host is a literal IP add ress | a reference identity from the service's host: if the host is a literal IP add ress | |||
| (<xref target="https.ip-id"/>), the reference identity is an IP-ID, otherwise | (<xref target="https.ip-id"/>), the reference identity is an IP-ID, otherwise | |||
| the host is a name and the reference identity is a DNS-ID. | the host is a name and the reference identity is a DNS-ID. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A reference identity of type CN-ID <bcp14>MUST NOT</bcp14> be used by clients . As noted | A reference identity of type CN-ID <bcp14>MUST NOT</bcp14> be used by clients . As noted | |||
| in <xref target="RFC6125" section="6.2.1"/> a reference | in <xref target="RFC6125" section="6.2.1"/>, a reference | |||
| identity of type CN-ID might be used by older clients. | identity of type CN-ID might be used by older clients. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A client might be specially configured to accept an alternative form of | A client might be specially configured to accept an alternative form of | |||
| server identity verification. For example, a client might be connecting | server identity verification. For example, a client might be connecting | |||
| to a server whose address and hostname are dynamic, with an expectation that | to a server whose address and hostname are dynamic, with an expectation that | |||
| the service will present a specific certificate (or a certificate matching | the service will present a specific certificate (or a certificate matching | |||
| some externally defined reference identity) rather than one matching the | some externally defined reference identity) rather than one matching the | |||
| target URI's origin. | target URI's origin. | |||
| </t> | </t> | |||
| skipping to change at line 1469 ¶ | skipping to change at line 1449 ¶ | |||
| If the certificate is not valid for the target URI's origin, | If the certificate is not valid for the target URI's origin, | |||
| a user agent <bcp14>MUST</bcp14> either obtain confirmation from the user | a user agent <bcp14>MUST</bcp14> either obtain confirmation from the user | |||
| before proceeding (see <xref target="user.agent"/>) or | before proceeding (see <xref target="user.agent"/>) or | |||
| terminate the connection with a bad certificate error. Automated | terminate the connection with a bad certificate error. Automated | |||
| clients <bcp14>MUST</bcp14> log the error to an appropriate audit log (if ava ilable) | clients <bcp14>MUST</bcp14> log the error to an appropriate audit log (if ava ilable) | |||
| and <bcp14>SHOULD</bcp14> terminate the connection (with a bad certificate er ror). | and <bcp14>SHOULD</bcp14> terminate the connection (with a bad certificate er ror). | |||
| Automated clients <bcp14>MAY</bcp14> provide a configuration setting that dis ables | Automated clients <bcp14>MAY</bcp14> provide a configuration setting that dis ables | |||
| this check, but <bcp14>MUST</bcp14> provide a setting which enables it. | this check, but <bcp14>MUST</bcp14> provide a setting which enables it. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="https.ip-id" title="IP-ID reference identity"> | <section anchor="https.ip-id" title="IP-ID Reference Identity"> | |||
| <t> | <t> | |||
| A server that is identified using an IP address literal in the "host" field | A server that is identified using an IP address literal in the "host" field | |||
| of an "https" URI has a reference identity of type IP-ID. An IP version 4 | of an "https" URI has a reference identity of type IP-ID. An IP version 4 | |||
| address uses the "IPv4address" ABNF rule and an IP version 6 address uses | address uses the "IPv4address" ABNF rule, and an IP version 6 address uses | |||
| the "IP-literal" production with the "IPv6address" option; see | the "IP-literal" production with the "IPv6address" option; see | |||
| <xref target="URI" section="3.2.2"/>. A reference identity of | <xref target="URI" section="3.2.2"/>. A reference identity of | |||
| IP-ID contains the decoded bytes of the IP address. | IP-ID contains the decoded bytes of the IP address. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An IP version 4 address is 4 octets and an IP version 6 address is 16 octets. | An IP version 4 address is 4 octets, and an IP version 6 address is 16 octets . | |||
| Use of IP-ID is not defined for any other IP version. The iPAddress | Use of IP-ID is not defined for any other IP version. The iPAddress | |||
| choice in the certificate subjectAltName extension does not explicitly | choice in the certificate subjectAltName extension does not explicitly | |||
| include the IP version and so relies on the length of the address to | include the IP version and so relies on the length of the address to | |||
| distinguish versions; see | distinguish versions; see | |||
| <xref target="RFC5280" section="4.2.1.6"/>. | <xref target="RFC5280" section="4.2.1.6"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A reference identity of type IP-ID matches if the address is identical to | A reference identity of type IP-ID matches if the address is identical to | |||
| an iPAddress value of the subjectAltName extension of the certificate. | an iPAddress value of the subjectAltName extension of the certificate. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="fields" title="Fields"> | <section anchor="fields" title="Fields"> | |||
| <iref primary="true" item="field"/> | <iref primary="true" item="field"/> | |||
| <t> | <t> | |||
| HTTP uses <em>fields</em> to provide data in the form of extensible | HTTP uses "fields" to provide data in the form of extensible | |||
| key/value pairs with a registered key namespace. Fields are sent and | name/value pairs with a registered key namespace. Fields are sent and | |||
| received within the header and trailer sections of messages | received within the header and trailer sections of messages | |||
| (<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="field.date" f ormat="none">Date</xref> | semantics defined by that name. For example, the <xref target="field.date" f ormat="none">Date</xref> | |||
| header field is defined in <xref target="field.date"/> as containing the | header field is defined in <xref target="field.date"/> as containing 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 = token | <sourcecode type="abnf9110"><![CDATA[ field-name = token | |||
| ]]></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="f ields.registry"/>. | "Hypertext Transfer Protocol (HTTP) Field Name Registry"; see <xref target="f ields.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 behavior of a | versions of the same major HTTP version, though the default behavior of a | |||
| recipient in the absence of such a field can change. Unless specified | recipient in the absence of such a field can change. Unless specified | |||
| otherwise, fields are defined for all versions of HTTP. | otherwise, fields are defined for all versions of HTTP. | |||
| skipping to change at line 1544 ¶ | skipping to change at line 1524 ¶ | |||
| Other recipients <bcp14>SHOULD</bcp14> ignore unrecognized header and trailer fields. | Other recipients <bcp14>SHOULD</bcp14> ignore unrecognized header and trailer fields. | |||
| Adhering to these requirements allows HTTP's functionality to be extended | Adhering to these requirements allows HTTP's functionality to be extended | |||
| without updating or removing deployed intermediaries. | without updating or removing deployed intermediaries. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="field.lines" title="Field Lines and Combined Field Val ue"> | <section anchor="field.lines" title="Field Lines and Combined Field Val ue"> | |||
| <t> | <t> | |||
| <iref item="field line"/> | <iref item="field line"/> | |||
| <iref item="field name"/> | <iref item="field name"/> | |||
| <iref item="field line value"/> | <iref item="field line value"/> | |||
| Field sections are composed of any number of <em>field lines</em>, | Field sections are composed of any number of "field lines", | |||
| each with a <em>field name</em> (see <xref target="fields.names"/>) | each with a "field name" (see <xref target="fields.names"/>) | |||
| identifying the field, and a <em>field line value</em> that conveys | identifying the field, and a "field line value" that conveys | |||
| data for that instance of the field. | data for that instance of the field. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <iref item="field value"/> | <iref item="field value"/> | |||
| When a field name is only present once in a section, the combined | When a field name is only present once in a section, the combined | |||
| <em>field value</em> for that field consists of the corresponding | "field value" for that field consists of the corresponding | |||
| field line value. | field line value. | |||
| When a field name is repeated within a section, its combined field value | When a field name is repeated within a section, its combined field value | |||
| consists of the list of corresponding field line values within that section, | consists of the list of corresponding field line values within that section, | |||
| concatenated in order, with each field line value separated by a comma. | concatenated in order, with each field line value separated by a comma. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| For example, this section: | For example, this section: | |||
| </t> | </t> | |||
| <sourcecode type="http-message"><![CDATA[Example-Field: Foo, Bar | <sourcecode type="http-message"><![CDATA[Example-Field: Foo, Bar | |||
| Example-Field: Baz | Example-Field: Baz | |||
| skipping to change at line 1590 ¶ | skipping to change at line 1570 ¶ | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The order in which field lines with the | The order in which field lines with the | |||
| same name are received is therefore significant to the interpretation of | same name are received is therefore significant to the interpretation of | |||
| the field value; a proxy <bcp14>MUST NOT</bcp14> change the order of these fi eld line | the field value; a proxy <bcp14>MUST NOT</bcp14> change the order of these fi eld line | |||
| values when forwarding a message. | values when forwarding a message. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This means that, aside from the well-known exception noted below, a sender | This means that, aside from the well-known exception noted below, a sender | |||
| <bcp14>MUST NOT</bcp14> generate multiple field lines with the same name in a message | <bcp14>MUST NOT</bcp14> generate multiple field lines with the same name in a message | |||
| (whether in the headers or trailers), or append a field line when a field | (whether in the headers or trailers) or append a field line when a field | |||
| line of the same name already exists in the message, unless that field's | line of the same name already exists in the message, unless that field's | |||
| definition allows multiple field line values to be recombined as a | definition allows multiple field line values to be recombined as a | |||
| comma-separated list [i.e., at least one alternative of the field's | comma-separated list (i.e., at least one alternative of the field's | |||
| definition allows a comma-separated list, such as an ABNF rule of | definition allows a comma-separated list, such as an ABNF rule of | |||
| #(values) defined in <xref target="abnf.extension"/>]. | #(values) defined in <xref target="abnf.extension"/>). | |||
| </t> | </t> | |||
| <aside> | <aside> | |||
| <t> | <t> | |||
| <strong>Note:</strong> In practice, the "Set-Cookie" header fi eld (<xref target="COOKIE"/>) | <strong>Note:</strong> In practice, the "Set-Cookie" header fi eld (<xref target="COOKIE"/>) | |||
| often appears in a response message across multiple field lines and does not | often appears in a response message across multiple field lines and does not | |||
| use the list syntax, violating the above requirements on multiple field lines | use the list syntax, violating the above requirements on multiple field lines | |||
| with the same field name. Since it cannot be combined into a single field | with the same field name. Since it cannot be combined into a single field | |||
| value, recipients ought to handle "Set-Cookie" as a special case while | value, recipients ought to handle "Set-Cookie" as a special case while | |||
| processing fields. (See Appendix A.2.3 of <xref target="Kri2001"/> for | processing fields. (See Appendix A.2.3 of <xref target="Kri2001"/> for | |||
| details.) | details.) | |||
| skipping to change at line 1655 ¶ | skipping to change at line 1635 ¶ | |||
| <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 defined | HTTP field values consist of a sequence of characters in a format defined | |||
| by the field's grammar. Each field's grammar is usually defined using | by the field's grammar. Each field's grammar is usually defined using | |||
| 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 = *field-conte nt | <sourcecode type="abnf9110"><![CDATA[ field-value = *field-conte nt | |||
| 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 message, | specific version of HTTP allows such whitespace to appear in a message, | |||
| a field parsing implementation <bcp14>MUST</bcp14> exclude such whitespace pr ior to | a field parsing implementation <bcp14>MUST</bcp14> exclude such whitespace pr ior to | |||
| evaluating the field value. | evaluating the field value. | |||
| skipping to change at line 1694 ¶ | skipping to change at line 1674 ¶ | |||
| either reject the message or replace each of those characters with SP | either reject the message or replace each of those characters with SP | |||
| before further processing or forwarding of that message. Field values | before further processing or forwarding of that message. Field values | |||
| containing other CTL characters are also invalid; however, | containing other CTL characters are also invalid; however, | |||
| recipients <bcp14>MAY</bcp14> retain such characters for the sake of robustne ss when | recipients <bcp14>MAY</bcp14> retain such characters for the sake of robustne ss when | |||
| they appear within a safe context (e.g., an application-specific quoted | they appear within a safe context (e.g., an application-specific quoted | |||
| string that will not be processed by any downstream HTTP parser). | string that will not be processed by any downstream HTTP parser). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <iref item="singleton field"/> | <iref item="singleton field"/> | |||
| Fields that only anticipate a single member as the field value are | Fields that only anticipate a single member as the field value are | |||
| referred to as <em>singleton fields</em>. | referred to as "singleton fields". | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <iref item="list-based field"/> | <iref item="list-based field"/> | |||
| Fields that allow multiple members as the field value are referred to as | Fields that allow multiple members as the field value are referred to as | |||
| <em>list-based fields</em>. The list operator extension of | "list-based fields". The list operator extension of | |||
| <xref target="abnf.extension"/> is used as a common notation for defining | <xref target="abnf.extension"/> is used as a common notation for defining | |||
| field values that can contain multiple members. | field values that can contain multiple members. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Because commas (",") are used as the delimiter between members, they need | Because commas (",") are used as the delimiter between members, they need | |||
| to be treated with care if they are allowed as data within a member. This | to be treated with care if they are allowed as data within a member. This | |||
| is true for both list-based and singleton fields, since a singleton field | is true for both list-based and singleton fields, since a singleton field | |||
| might be erroneously sent with multiple members and detecting such errors | might be erroneously sent with multiple members and detecting such errors | |||
| improves interoperability. Fields that expect to contain a | improves interoperability. Fields that expect to contain a | |||
| comma within a member, such as within an <xref target="http.date" format="non e">HTTP-date</xref> or | comma within a member, such as within an <xref target="http.date" format="non e">HTTP-date</xref> or | |||
| skipping to change at line 1765 ¶ | skipping to change at line 1745 ¶ | |||
| at least <n> and at most <m> elements, each separated by a single | at least <n> and at most <m> elements, each separated by a single | |||
| comma (",") and optional whitespace (<xref target="whitespace" format="none"> OWS</xref>, | comma (",") and optional whitespace (<xref target="whitespace" format="none"> OWS</xref>, | |||
| defined in <xref target="whitespace"/>). | defined in <xref target="whitespace"/>). | |||
| </t> | </t> | |||
| <section anchor="abnf.extension.sender" title="Sender Requirement s"> | <section anchor="abnf.extension.sender" title="Sender Requirement s"> | |||
| <t> | <t> | |||
| In any production that uses the list construct, a sender <bcp14>MUST NOT</bcp 14> | In any production that uses the list construct, a sender <bcp14>MUST NOT</bcp 14> | |||
| generate empty list elements. In other words, a sender has to generate | generate empty list elements. In other words, a sender has to generate | |||
| lists that satisfy the following syntax: | lists that satisfy the following syntax: | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| 1#element => element *( OWS "," OWS element ) | 1#element => element *( OWS "," OWS element ) | |||
| ]]></artwork> | ]]></artwork> | |||
| <t> | <t> | |||
| and: | and: | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| #element => [ 1#element ] | #element => [ 1#element ] | |||
| ]]></artwork> | ]]></artwork> | |||
| <t> | <t> | |||
| and for n >= 1 and m > 1: | and for n >= 1 and m > 1: | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| <n>#<m>element => element <n-1>*<m-1>( OWS "," OWS element ) | <n>#<m>element => element <n-1>*<m-1>( OWS "," OWS element ) | |||
| ]]></artwork> | ]]></artwork> | |||
| <t> | <t> | |||
| <xref target="collected.abnf"/> shows the collected ABNF fo r senders | <xref target="collected.abnf"/> shows the collected ABNF fo r senders | |||
| after the list constructs have been expanded. | after the list constructs have been expanded. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="abnf.extension.recipient" title="Recipient Requi rements"> | <section anchor="abnf.extension.recipient" title="Recipient Requi rements"> | |||
| <t> | <t> | |||
| Empty elements do not contribute to the count of elements present. | Empty elements do not contribute to the count of elements present. | |||
| A recipient <bcp14>MUST</bcp14> parse and ignore | A recipient <bcp14>MUST</bcp14> parse and ignore | |||
| a reasonable number of empty list elements: enough to handle common mistakes | a reasonable number of empty list elements: enough to handle common mistakes | |||
| by senders that merge values, but not so much that they could be used as a | by senders that merge values, but not so much that they could be used as a | |||
| denial-of-service mechanism. In other words, a recipient <bcp14>MUST</bcp14> accept lists | denial-of-service mechanism. In other words, a recipient <bcp14>MUST</bcp14> accept lists | |||
| that satisfy the following syntax: | that satisfy the following syntax: | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| #element => [ element ] *( OWS "," OWS [ element ] ) | #element => [ element ] *( OWS "," OWS [ element ] ) | |||
| ]]></artwork> | ]]></artwork> | |||
| <t> | <t> | |||
| Note that because of the potential presence of empty list elements, the | Note that because of the potential presence of empty list elements, the | |||
| RFC 5234 ABNF cannot enforce the cardinality of list elements, and | RFC 5234 ABNF cannot enforce the cardinality of list elements, and | |||
| consequently all cases are mapped as if there was no cardinality specified. | consequently all cases are mapped as if there was no cardinality specified. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| For example, given these ABNF productions: | For example, given these ABNF productions: | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| example-list = 1#example-list-elmt | example-list = 1#example-list-elmt | |||
| example-list-elmt = token ; see Section 5.6.2 | example-list-elmt = token ; see Section 5.6.2 | |||
| ]]></artwork> | ]]></artwork> | |||
| <t> | <t> | |||
| Then the following are valid values for example-list (not including the | Then the following are valid values for example-list (not including the | |||
| double quotes, which are present for delimitation only): | double quotes, which are present for delimitation only): | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| "foo,bar" | "foo,bar" | |||
| "foo ,bar," | "foo ,bar," | |||
| "foo , ,bar,charlie" | "foo , ,bar,charlie" | |||
| ]]></artwork> | ]]></artwork> | |||
| <t> | <t> | |||
| In contrast, the following values would be invalid, since at least one | In contrast, the following values would be invalid, since at least one | |||
| non-empty element is required by the example-list production: | non-empty element is required by the example-list production: | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| "" | "" | |||
| "," | "," | |||
| ", ," | ", ," | |||
| ]]></artwork> | ]]></artwork> | |||
| </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 characters. | components, separated by whitespace or specific delimiting characters. | |||
| skipping to change at line 1889 ¶ | skipping to change at line 1869 ¶ | |||
| 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 forwar ding the | defined as BWS <bcp14>MAY</bcp14> be removed before interpreting it or forwar ding 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 / H TAB ) | <sourcecode type="abnf9110"><![CDATA[ OWS = *( SP / H TAB ) | |||
| ; 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-string"/> | <iref primary="true" item="Grammar" subitem="quoted-string"/> | |||
| <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</bcp14> hand le a | Recipients that process the value of a quoted-string <bcp14>MUST</bcp14> hand le a | |||
| quoted-pair as if it were replaced by the octet following the backslash. | quoted-pair as if it were replaced by the octet following the backslash. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="quoted-pair"/> | <iref primary="true" item="Grammar" subitem="quoted-pair"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ quoted-pair = "\" ( HTA B / SP / VCHAR / obs-text ) | <sourcecode type="abnf9110"><![CDATA[ quoted-pair = "\" ( HTA B / SP / VCHAR / obs-text ) | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| A sender <bcp14>SHOULD NOT</bcp14> generate a quoted-pair in a quoted-string except | A sender <bcp14>SHOULD NOT</bcp14> generate a quoted-pair in a quoted-string except | |||
| where necessary to quote DQUOTE and backslash octets occurring within that | where necessary to quote DQUOTE and backslash octets occurring within that | |||
| string. | string. | |||
| A sender <bcp14>SHOULD NOT</bcp14> generate a quoted-pair in a comment except | A sender <bcp14>SHOULD NOT</bcp14> generate a quoted-pair in a comment except | |||
| where necessary to quote parentheses ["(" and ")"] and backslash octets | where necessary to quote parentheses ["(" and ")"] and backslash octets | |||
| 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 = "(" *( ct ext / quoted-pair / comment ) ")" | <sourcecode type="abnf9110"><![CDATA[ comment = "(" *( ct ext / 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 in field | Parameters are instances of name/value pairs; they are often used in 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 semicolon. | Each parameter is usually delimited by an immediately preceding semicolon. | |||
| </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 might | Parameter names are case-insensitive. Parameter values might or might | |||
| 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 field | media types (<xref target="media.type"/>) and the Accept header field | |||
| (<xref target="field.accept"/>). | (<xref target="field.accept"/>). | |||
| skipping to change at line 1985 ¶ | skipping to change at line 1965 ¶ | |||
| <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 implementations, all | to communicate timestamps. For compatibility with old implementations, 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 = IMF-fixdate / obs-date | <sourcecode type="abnf9110"><![CDATA[ HTTP-date = IMF-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><![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> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 format | Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 format | |||
| Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format | Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format | |||
| ]]></artwork> | ]]></artwork> | |||
| <t> | <t> | |||
| A recipient that parses a timestamp value in an HTTP field <bcp14>MUST</bcp14 > | A recipient that parses a timestamp value in an HTTP field <bcp14>MUST</bcp14 > | |||
| accept all three HTTP-date formats. When a sender generates a field | accept all three HTTP-date formats. When a sender generates a field | |||
| that contains one or more timestamps defined as HTTP-date, | that contains one or more timestamps defined as HTTP-date, | |||
| the sender <bcp14>MUST</bcp14> generate those timestamps in the IMF-fixdate f ormat. | the sender <bcp14>MUST</bcp14> generate those timestamps in the IMF-fixdate f ormat. | |||
| </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 predecessor | three-letter abbreviation for Greenwich Mean Time, "GMT", a predecessor | |||
| of the UTC name; values in the asctime format are assumed to be in UTC. | 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 "clock" 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-fixdate"/> | <iref primary="true" item="Grammar" subitem="IMF-fixdate"/> | |||
| <iref primary="true" item="Grammar" subitem="date1"/> | <iref primary="true" item="Grammar" subitem="date1"/> | |||
| <iref primary="true" item="Grammar" subitem="time-of-day"/> | <iref primary="true" item="Grammar" subitem="time-of-day"/> | |||
| <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 = day-name ", " SP date1 SP time-of-day SP GMT | <sourcecode type="abnf9110"><![CDATA[ IMF-fixdate = day-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 2064 ¶ | skipping to change at line 2044 ¶ | |||
| 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 = rfc850-date / asctime-date | <sourcecode type="abnf9110"><![CDATA[ obs-date = rfc850-date / asctime-date | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <iref primary="true" item="Grammar" subitem="rfc850-date"/> | <iref primary="true" item="Grammar" subitem="rfc850-date"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ rfc850-date = day-name-l "," SP date2 SP time-of-day SP GMT | <sourcecode type="abnf9110"><![CDATA[ rfc850-date = day-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-date"/> | <iref primary="true" item="Grammar" subitem="asctime-date"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ asctime-date = day-name SP date3 SP time-of-day SP year | <sourcecode type="abnf9110"><![CDATA[ asctime-date = day-name SP date3 SP time-of-day SP year | |||
| date3 = month SP ( 2DIGIT / ( SP 1DIGIT )) | date3 = month SP ( 2DIGIT / ( SP 1DIGIT )) | |||
| ; e.g., Jun 2 | ; e.g., Jun 2 | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| HTTP-date is case sensitive. Note that <xref target="CACHING" section="4.2"/> relaxes this for cache recipients. | HTTP-date is case sensitive. Note that <xref target="CACHING" section="4.2"/> relaxes this for cache recipients. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A sender <bcp14>MUST NOT</bcp14> generate additional whitespace in an HTTP-da te beyond | A sender <bcp14>MUST NOT</bcp14> generate additional whitespace in an HTTP-da te beyond | |||
| that specifically included as SP in the grammar. | that specifically included as SP in the grammar. | |||
| The semantics of <xref target="preferred.date.format" format="none">day-name< /xref>, <xref target="preferred.date.format" format="none">day</xref>, | The semantics of <xref target="preferred.date.format" format="none">day-name< /xref>, <xref target="preferred.date.format" format="none">day</xref>, | |||
| skipping to change at line 2106 ¶ | skipping to change at line 2086 ¶ | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Recipients of timestamp values are encouraged to be robust in parsing | Recipients of timestamp values are encouraged to be robust in parsing | |||
| timestamps unless otherwise restricted by the field definition. | timestamps unless otherwise restricted by the field definition. | |||
| For example, messages are occasionally forwarded over HTTP from a non-HTTP | For example, messages are occasionally forwarded over HTTP from a non-HTTP | |||
| source that might generate any of the date and time specifications defined | source that might generate any of the date and time specifications defined | |||
| by the Internet Message Format. | by the Internet Message Format. | |||
| </t> | </t> | |||
| <aside> | <aside> | |||
| <t> | <t> | |||
| <strong>Note:</strong> HTTP requirements for the date/time stamp format apply only | <strong>Note:</strong> HTTP requirements for timestamp form ats apply only | |||
| to their usage within the protocol stream. Implementations are | to their usage within the protocol stream. Implementations are | |||
| not required to use these formats for user presentation, request | not required to use these formats for user presentation, request | |||
| logging, etc. | logging, etc. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="message.abstraction" title="Message Abstraction"> | <section anchor="message.abstraction" title="Message Abstraction"> | |||
| <iref primary="true" item="message abstraction"/> | <iref primary="true" item="message abstraction"/> | |||
| skipping to change at line 2129 ¶ | skipping to change at line 2109 ¶ | |||
| <t> | <t> | |||
| Each major version of HTTP defines its own syntax for communicating | Each major version of HTTP defines its own syntax for communicating | |||
| messages. This section defines an abstract data type for HTTP messages | messages. This section defines an abstract data type for HTTP messages | |||
| based on a generalization of those message characteristics, common structure, | based on a generalization of those message characteristics, common structure, | |||
| and capacity for conveying semantics. This abstraction is used to define | and capacity for conveying semantics. This abstraction is used to define | |||
| requirements on senders and recipients that are independent of the HTTP | requirements on senders and recipients that are independent of the HTTP | |||
| version, such that a message in one version can be relayed through other | version, such that a message in one version can be relayed through other | |||
| versions without changing its meaning. | versions without changing its meaning. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A <em>message</em> consists of control data to describe and route the | A "message" consists of the following: | |||
| message, a headers lookup table of key/value pairs for extending that | ||||
| control data and conveying additional information about the sender, message, | ||||
| content, or context, a potentially unbounded stream of content, and a | ||||
| trailers lookup table of key/value pairs for communicating information | ||||
| obtained while sending the content. | ||||
| </t> | </t> | |||
| <ul> | ||||
| <li>control data to describe and route the message,</li> | ||||
| <li>a headers lookup table of name/value pairs for extending that co | ||||
| ntrol | ||||
| data and conveying additional information about the sender, message, | ||||
| content, or context,</li> | ||||
| <li>a potentially unbounded stream of content, and</li> | ||||
| <li>a trailers lookup table of name/value pairs for communicating in | ||||
| formation | ||||
| obtained while sending the content.</li> | ||||
| </ul> | ||||
| <t> | <t> | |||
| Framing and control data is sent first, followed by a header section | Framing and control data is sent first, followed by a header section | |||
| containing fields for the headers table. When a message includes content, | containing fields for the headers table. When a message includes content, | |||
| the content is sent after the header section, potentially followed by a | the content is sent after the header section, potentially followed by a | |||
| trailer section that might contain fields for the trailers table. | trailer section that might contain fields for the trailers table. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Messages are expected to be processed as a stream, wherein the purpose of | Messages are expected to be processed as a stream, wherein the purpose of | |||
| that stream and its continued processing is revealed while being read. | that stream and its continued processing is revealed while being read. | |||
| Hence, control data describes what the recipient needs to know immediately, | Hence, control data describes what the recipient needs to know immediately, | |||
| header fields describe what needs to be known before receiving content, | header fields describe what needs to be known before receiving content, | |||
| the content (when present) presumably contains what the recipient wants or | the content (when present) presumably contains what the recipient wants or | |||
| needs to fulfill the message semantics, and trailer fields provide | needs to fulfill the message semantics, and trailer fields provide | |||
| optional metadata that was unknown prior to sending the content. | optional metadata that was unknown prior to sending the content. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Messages are intended to be <em>self-descriptive</em>: | Messages are intended to be "self-descriptive": | |||
| everything a recipient needs to know about the message can be determined by | everything a recipient needs to know about the message can be determined by | |||
| looking at the message itself, after decoding or reconstituting parts that | looking at the message itself, after decoding or reconstituting parts that | |||
| have been compressed or elided in transit, without requiring an | have been compressed or elided in transit, without requiring an | |||
| understanding of the sender's current application state (established via | understanding of the sender's current application state (established via | |||
| prior messages). However, a client <bcp14>MUST</bcp14> retain knowledge of th e request when | prior messages). However, a client <bcp14>MUST</bcp14> retain knowledge of th e request when | |||
| parsing, interpreting, or caching a corresponding response. For example, | parsing, interpreting, or caching a corresponding response. For example, | |||
| responses to the <xref target="HEAD" format="none">HEAD</xref> method look ju st like the beginning of a | responses to the <xref target="HEAD" format="none">HEAD</xref> method look ju st like the beginning of a | |||
| response to <xref target="GET" format="none">GET</xref>, but cannot be parsed in the same manner. | response to <xref target="GET" format="none">GET</xref> but cannot be parsed in the same manner. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Note that this message abstraction is a generalization across many versions | Note that this message abstraction is a generalization across many versions | |||
| of HTTP, including features that might not be found in some versions. For | of HTTP, including features that might not be found in some versions. For | |||
| example, trailers were introduced within the HTTP/1.1 chunked transfer | example, trailers were introduced within the HTTP/1.1 chunked transfer | |||
| coding as a trailer section after the content. An equivalent feature is | coding as a trailer section after the content. An equivalent feature is | |||
| present in HTTP/2 and HTTP/3 within the header block that terminates each | present in HTTP/2 and HTTP/3 within the header block that terminates each | |||
| stream. | stream. | |||
| </t> | </t> | |||
| <section anchor="message.framing" title="Framing and Completeness"> | <section anchor="message.framing" title="Framing and Completeness"> | |||
| skipping to change at line 2187 ¶ | skipping to change at line 2171 ¶ | |||
| </t> | </t> | |||
| <t> | <t> | |||
| HTTP/0.9 and early deployments of HTTP/1.0 used closure of the underlying | HTTP/0.9 and early deployments of HTTP/1.0 used closure of the underlying | |||
| connection to end a response. For backwards compatibility, this implicit | connection to end a response. For backwards compatibility, this implicit | |||
| framing is also allowed in HTTP/1.1. However, implicit framing can fail to | framing is also allowed in HTTP/1.1. However, implicit framing can fail to | |||
| distinguish an incomplete response if the connection closes early. For | distinguish an incomplete response if the connection closes early. For | |||
| that reason, almost all modern implementations use explicit framing in | that reason, almost all modern implementations use explicit framing in | |||
| the form of length-delimited sequences of message data. | the form of length-delimited sequences of message data. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A message is considered <em>complete</em> when all of the octets | A message is considered "complete" when all of the octets | |||
| indicated by its framing are available. Note that, | indicated by its framing are available. Note that, | |||
| when no explicit framing is used, a response message that is ended | when no explicit framing is used, a response message that is ended | |||
| by the underlying connection's close is considered complete even though it | by the underlying connection's close is considered complete even though it | |||
| might be indistinguishable from an incomplete response, unless a | might be indistinguishable from an incomplete response, unless a | |||
| transport-level error indicates that it is not complete. | transport-level error indicates that it is not complete. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="message.control.data" title="Control Data"> | <section anchor="message.control.data" title="Control Data"> | |||
| <iref primary="true" item="control data"/> | <iref primary="true" item="control data"/> | |||
| <t> | <t> | |||
| skipping to change at line 2262 ¶ | skipping to change at line 2246 ¶ | |||
| recipient is conformant. A recipient can assume that a message with a | recipient is conformant. A recipient can assume that a message with a | |||
| higher minor version, when sent to a recipient that has not yet indicated | higher minor version, when sent to a recipient that has not yet indicated | |||
| support for that higher version, is sufficiently backwards-compatible to be | support for that higher version, is sufficiently backwards-compatible to be | |||
| safely processed by any implementation of the same major version. | safely processed by any implementation of the same major version. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="header.fields" title="Header Fields"> | <section anchor="header.fields" title="Header Fields"> | |||
| <iref primary="true" item="header section"/> | <iref primary="true" item="header section"/> | |||
| <iref item="field"/> | <iref item="field"/> | |||
| <t> | <t> | |||
| Fields (<xref target="fields"/>) that are sent/received before the content | Fields (<xref target="fields"/>) that are sent or received before the content | |||
| are referred to as "header fields" (or just "headers", colloquially). | are referred to as "header fields" (or just "headers", colloquially). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The <em>header section</em> of a message consists of a sequence of | The "header section" of a message consists of a sequence of | |||
| header field lines. Each header field might modify or extend message | header field lines. Each header field might modify or extend message | |||
| semantics, describe the sender, define the content, or provide additional | semantics, describe the sender, define the content, or provide additional | |||
| context. | context. | |||
| </t> | </t> | |||
| <aside> | <aside> | |||
| <t> | <t> | |||
| <strong>Note:</strong> We refer to named fields specifically a s a "header field" when they | <strong>Note:</strong> We refer to named fields specifically a s a "header field" when they | |||
| are only allowed to be sent in the header section. | are only allowed to be sent in the header section. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| </section> | </section> | |||
| <section anchor="content" title="Content"> | <section anchor="content" title="Content"> | |||
| <iref item="content"/> | <iref item="content"/> | |||
| <t> | <t> | |||
| HTTP messages often transfer a complete or partial representation as the | HTTP messages often transfer a complete or partial representation as the | |||
| message <em>content</em>: a stream of octets sent after the header | message "content": a stream of octets sent after the header | |||
| section, as delineated by the message framing. | section, as delineated by the message framing. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This abstract definition of content reflects the data after it has been | This abstract definition of content reflects the data after it has been | |||
| extracted from the message framing. For example, an HTTP/1.1 message body | extracted from the message framing. For example, an HTTP/1.1 message body | |||
| (<xref target="HTTP11" section="6"/>) might consist of a stream of data encod ed | (<xref target="HTTP11" section="6"/>) might consist of a stream of data encod ed | |||
| with the chunked transfer coding — a sequence of data chunks, one | with the chunked transfer coding -- a sequence of data chunks, one | |||
| zero-length chunk, and a trailer section — whereas | zero-length chunk, and a trailer section -- whereas | |||
| the content of that same message | the content of that same message | |||
| includes only the data stream after the transfer coding has been decoded; | includes only the data stream after the transfer coding has been decoded; | |||
| it does not include the chunk lengths, chunked framing syntax, nor the | it does not include the chunk lengths, chunked framing syntax, nor the | |||
| trailer fields (<xref target="trailer.fields"/>). | trailer fields (<xref target="trailer.fields"/>). | |||
| </t> | </t> | |||
| <aside> | <aside> | |||
| <t> | <t> | |||
| <strong>Note:</strong> Some field names have a "Content-" pref ix. This is an informal | <strong>Note:</strong> Some field names have a "Content-" pref ix. This is an informal | |||
| convention; while some of these fields refer to the content of the | convention; while some of these fields refer to the content of the | |||
| message, as defined above, others are scoped to the selected representatio n | message, as defined above, others are scoped to the selected representatio n | |||
| skipping to change at line 2420 ¶ | skipping to change at line 2404 ¶ | |||
| representation of the resource identified by the Content-Location | representation of the resource identified by the Content-Location | |||
| field value. However, such an assertion cannot be trusted unless | field value. However, such an assertion cannot be trusted unless | |||
| it can be verified by other means (not defined by this specification).</l i> | it can be verified by other means (not defined by this specification).</l i> | |||
| <li>Otherwise, the content is unidentified by HTTP, but a more specific | <li>Otherwise, the content is unidentified by HTTP, but a more specific | |||
| identifier might be supplied within the content itself.</li> | identifier might be supplied within the content itself.</li> | |||
| </ol> | </ol> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="trailer.fields" title="Trailer Fields"> | <section anchor="trailer.fields" title="Trailer Fields"> | |||
| <iref primary="true" item="trailer section"/> | <iref primary="true" item="trailer section"/> | |||
| <iref primary="true" item="trailer fields"/> | <iref primary="true" item="Trailer Fields"/> | |||
| <iref primary="true" item="trailers"/> | <iref primary="true" item="trailers"/> | |||
| <t> | <t> | |||
| Fields (<xref target="fields"/>) that are located within a | Fields (<xref target="fields"/>) that are located within a | |||
| <em>trailer section</em> are referred to as "trailer fields" | "trailer section" are referred to as "trailer fields" | |||
| (or just "trailers", colloquially). | (or just "trailers", colloquially). | |||
| Trailer fields can be useful for supplying message integrity checks, digital | Trailer fields can be useful for supplying message integrity checks, digital | |||
| signatures, delivery metrics, or post-processing status information. | signatures, delivery metrics, or post-processing status information. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Trailer fields ought to be processed and stored separately from the fields | Trailer fields ought to be processed and stored separately from the fields | |||
| in the header section to avoid contradicting message semantics known at | in the header section to avoid contradicting message semantics known at | |||
| the time the header section was complete. The presence or absence of | the time the header section was complete. The presence or absence of | |||
| certain header fields might impact choices made for the routing or | certain header fields might impact choices made for the routing or | |||
| processing of the message as a whole before the trailers are received; | processing of the message as a whole before the trailers are received; | |||
| those choices cannot be unmade by the later discovery of trailer fields. | those choices cannot be unmade by the later discovery of trailer fields. | |||
| </t> | </t> | |||
| <section anchor="trailers.limitations" title="Limitations on use of Trailers"> | <section anchor="trailers.limitations" title="Limitations on Use of Trailers"> | |||
| <t> | <t> | |||
| A trailer section is only possible when supported by the version | A trailer section is only possible when supported by the version | |||
| of HTTP in use and enabled by an explicit framing mechanism. | of HTTP in use and enabled by an explicit framing mechanism. | |||
| For example, the chunked coding in HTTP/1.1 allows a trailer section to be | For example, the chunked transfer coding in HTTP/1.1 allows a trailer section to be | |||
| sent after the content (<xref target="HTTP11" section="7.1.2"/>). | sent after the content (<xref target="HTTP11" section="7.1.2"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Many fields cannot be processed outside the header section because | Many fields cannot be processed outside the header section because | |||
| their evaluation is necessary prior to receiving the content, such as | their evaluation is necessary prior to receiving the content, such as | |||
| those that describe message framing, routing, authentication, | those that describe message framing, routing, authentication, | |||
| request modifiers, response controls, or content format. | request modifiers, response controls, or content format. | |||
| A sender <bcp14>MUST NOT</bcp14> generate a trailer field unless the sender k nows the | A sender <bcp14>MUST NOT</bcp14> generate a trailer field unless the sender k nows the | |||
| corresponding header field name's definition permits the field to be sent | corresponding header field name's definition permits the field to be sent | |||
| in trailers. | in trailers. | |||
| skipping to change at line 2498 ¶ | skipping to change at line 2482 ¶ | |||
| <t> | <t> | |||
| Like header fields, trailer fields with the same name are processed in the | Like header fields, trailer fields with the same name are processed in the | |||
| order received; multiple trailer field lines with the same name have the | order received; multiple trailer field lines with the same name have the | |||
| equivalent semantics as appending the multiple values as a list of members. | equivalent semantics as appending the multiple values as a list of members. | |||
| Trailer fields that might be generated more than once during a message | Trailer fields that might be generated more than once during a message | |||
| <bcp14>MUST</bcp14> be defined as a list-based field even if each member valu e is only | <bcp14>MUST</bcp14> be defined as a list-based field even if each member valu e is only | |||
| processed once per field line received. | processed once per field line received. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| At the end of a message, a recipient <bcp14>MAY</bcp14> treat the set of rece ived | At the end of a message, a recipient <bcp14>MAY</bcp14> treat the set of rece ived | |||
| trailer fields as a data structure of key/value pairs, similar to (but | trailer fields as a data structure of name/value pairs, similar to (but | |||
| separate from) the header fields. Additional processing expectations, if | separate from) the header fields. Additional processing expectations, if | |||
| any, can be defined within the field specification for a field intended | any, can be defined within the field specification for a field intended | |||
| for use in trailers. | for use in trailers. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="message.metadata" title="Message Metadata"> | <section anchor="message.metadata" title="Message Metadata"> | |||
| <t> | <t> | |||
| Fields that describe the message itself, such as when and how the | Fields that describe the message itself, such as when and how the | |||
| message has been generated, can appear in both requests and responses. | message has been generated, can appear in both requests and responses. | |||
| skipping to change at line 2521 ¶ | skipping to change at line 2505 ¶ | |||
| <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 Origination | the message was originated, having the same semantics as the Origination | |||
| 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.date"/>. | The field value is an HTTP-date, as defined in <xref target="http.date"/>. | |||
| </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 0 8:12:31 GMT | <sourcecode type="http-message"><![CDATA[Date: Tue, 15 Nov 1994 0 8:12:31 GMT | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| A sender that generates a Date header field <bcp14>SHOULD</bcp14> generate it s | A sender that generates a Date header field <bcp14>SHOULD</bcp14> generate it s | |||
| field value as the best available approximation of the date and time of | field value as the best available approximation of the date and time of | |||
| message generation. In theory, the date ought to represent the moment just | message generation. In theory, the date ought to represent the moment just | |||
| skipping to change at line 2578 ¶ | skipping to change at line 2562 ¶ | |||
| <iref primary="true" item="Header Fields" subitem="Trailer"/> | <iref primary="true" item="Header Fields" subitem="Trailer"/> | |||
| <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 allows a | anticipates sending as trailer fields within that message. This allows a | |||
| recipient to prepare for receipt of the indicated metadata before it starts | recipient to prepare for receipt of the indicated metadata before it 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-name"/> | <iref primary="false" item="Grammar" subitem="field-name"/> | |||
| <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 the same | signature as a trailer field. This allows a recipient to perform the 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 message | A sender that intends to generate one or more trailer fields in a message | |||
| <bcp14>SHOULD</bcp14> generate a <xref target="field.trailer" format="none">T railer</xref> header field in the header | <bcp14>SHOULD</bcp14> generate a <xref target="field.trailer" format="none">T railer</xref> header field in the header | |||
| skipping to change at line 2621 ¶ | skipping to change at line 2605 ¶ | |||
| <iref primary="true" item="request target"/> | <iref primary="true" item="request target"/> | |||
| <t> | <t> | |||
| Although HTTP is used in a wide variety of applications, most clients rely | Although HTTP is used in a wide variety of applications, most clients rely | |||
| on the same resource identification mechanism and configuration techniques | on the same resource identification mechanism and configuration techniques | |||
| as general-purpose Web browsers. Even when communication options are | as general-purpose Web browsers. Even when communication options are | |||
| hard-coded in a client's configuration, we can think of their combined | hard-coded in a client's configuration, we can think of their combined | |||
| effect as a URI reference (<xref target="uri.references"/>). | effect as a URI reference (<xref target="uri.references"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A URI reference is resolved to its absolute form in order to obtain the | A URI reference is resolved to its absolute form in order to obtain the | |||
| <em>target URI</em>. The target URI excludes the reference's | "target URI". The target URI excludes the reference's | |||
| fragment component, if any, since fragment identifiers are reserved for | fragment component, if any, since fragment identifiers are reserved for | |||
| client-side processing (<xref target="URI" sectionFormat="comma" section="3.5 "/>). | client-side processing (<xref target="URI" sectionFormat="comma" section="3.5 "/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| To perform an action on a <em>target resource</em>, the client sends | To perform an action on a "target resource", the client sends | |||
| a request message containing enough components of its parsed target URI to | a request message containing enough components of its parsed target URI to | |||
| enable recipients to identify that same resource. For historical reasons, | enable recipients to identify that same resource. For historical reasons, | |||
| the parsed target URI components, collectively referred to as the | the parsed target URI components, collectively referred to as the | |||
| <em>request target</em>, are sent within the message control data | "request target", are sent within the message control data | |||
| and the <xref target="field.host" format="none">Host</xref> header field (<xr ef target="field.host"/>). | and the <xref target="field.host" format="none">Host</xref> header field (<xr ef target="field.host"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| There are two unusual cases for which the request target components are in | There are two unusual cases for which the request target components are in | |||
| a method-specific form: | a method-specific form: | |||
| </t> | </t> | |||
| <ul> | <ul> | |||
| <li> | <li> | |||
| For CONNECT (<xref target="CONNECT"/>), the request target is the host | For CONNECT (<xref target="CONNECT"/>), the request target is the host | |||
| name and port number of the tunnel destination, separated by a colon. | name and port number of the tunnel destination, separated by a colon. | |||
| skipping to change at line 2663 ¶ | skipping to change at line 2647 ¶ | |||
| from the received components in accordance with their local configuration | from the received components in accordance with their local configuration | |||
| and incoming connection context. This reconstruction is specific to each | and incoming connection context. This reconstruction is specific to each | |||
| major protocol version. For example, | major protocol version. For example, | |||
| <xref target="HTTP11" section="3.3"/> defines how a server | <xref target="HTTP11" section="3.3"/> defines how a server | |||
| determines the target URI of an HTTP/1.1 request. | determines the target URI of an HTTP/1.1 request. | |||
| </t> | </t> | |||
| <aside anchor="effective.request.uri"> | <aside anchor="effective.request.uri"> | |||
| <t> | <t> | |||
| <iref primary="true" item="effective request URI"/> | <iref primary="true" item="effective request URI"/> | |||
| <strong>Note:</strong> Previous specifications defined the rec omposed target URI as a | <strong>Note:</strong> Previous specifications defined the rec omposed target URI as a | |||
| distinct concept, the <em>effective request URI</em>. | distinct concept, the "effective request URI". | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| </section> | </section> | |||
| <section anchor="field.host" title="Host and :authority"> | <section anchor="field.host" title="Host and :authority"> | |||
| <iref primary="true" item="Fields" subitem="Host"/> | <iref primary="true" item="Fields" subitem="Host"/> | |||
| <iref primary="true" item="Header Fields" subitem="Host"/> | <iref primary="true" item="Header Fields" subitem="Host"/> | |||
| <iref primary="true" item="Host header field"/> | <iref primary="true" item="Host header field"/> | |||
| <t> | <t> | |||
| The "Host" header field in a request provides the host and port | The "Host" header field in a request provides the host and port | |||
| information from the target URI, enabling the origin | information from the target URI, enabling the origin | |||
| server to distinguish among resources while servicing requests | server to distinguish among resources while servicing requests | |||
| for multiple host names. | for multiple host names. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In HTTP/2 <xref target="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 field in a r equest | request. A user agent <bcp14>MUST</bcp14> generate a Host header field in a r equest | |||
| unless it sends that information as an ":authority" pseudo-header field. | unless it sends that information as an ":authority" pseudo-header field. | |||
| A user agent that sends Host <bcp14>SHOULD</bcp14> send it as the first field in the | A user agent that sends Host <bcp14>SHOULD</bcp14> send it as the first 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 2810 ¶ | skipping to change at line 2794 ¶ | |||
| version dependent; some versions of HTTP use implicit ordering of | version dependent; some versions of HTTP use implicit ordering of | |||
| messages, while others use an explicit identifier. | messages, while others use an explicit identifier. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| All responses, regardless of the status code (including <xref target="final.i nterim" format="none">interim</xref> | All responses, regardless of the status code (including <xref target="final.i nterim" format="none">interim</xref> | |||
| responses) can be sent at any time after a request is received, even if the | responses) can be sent at any time after a request is received, even if the | |||
| request is not yet complete. A response can complete before its | request is not yet complete. A response can complete before its | |||
| corresponding request is complete (<xref target="message.framing"/>). Likewis e, clients are not expected | corresponding request is complete (<xref target="message.framing"/>). Likewis e, clients are not expected | |||
| to wait any specific amount of time for a response. Clients | to wait any specific amount of time for a response. Clients | |||
| (including intermediaries) might abandon a request if the response is not | (including intermediaries) might abandon a request if the response is not | |||
| forthcoming within a reasonable period of time. | received within a reasonable period of time. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A client that receives a response while it is still sending the associated | A client that receives a response while it is still sending the associated | |||
| request <bcp14>SHOULD</bcp14> continue sending that request, unless it receiv es | request <bcp14>SHOULD</bcp14> continue sending that request unless it receive s | |||
| an explicit indication to the contrary (see, e.g., <xref target="HTTP11" sect ion="9.5"/> and <xref target="HTTP2" section="6.4"/>). | an explicit indication to the contrary (see, e.g., <xref target="HTTP11" sect ion="9.5"/> and <xref target="HTTP2" section="6.4"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="message.forwarding" title="Message Forwarding"> | <section anchor="message.forwarding" title="Message Forwarding"> | |||
| <t> | <t> | |||
| As described in <xref target="intermediaries"/>, intermediaries can serve | As described in <xref target="intermediaries"/>, intermediaries can serve | |||
| a variety of roles in the processing of HTTP requests and responses. | a variety of roles in the processing of HTTP requests and responses. | |||
| Some intermediaries are used to improve performance or availability. | Some intermediaries are used to improve performance or availability. | |||
| Others are used for access control or to filter content. | Others are used for access control or to filter content. | |||
| Since an HTTP stream has characteristics similar to a pipe-and-filter | Since an HTTP stream has characteristics similar to a pipe-and-filter | |||
| architecture, there are no inherent limits to the extent an intermediary | architecture, there are no inherent limits to the extent an intermediary | |||
| can enhance (or interfere) with either direction of the stream. | can enhance (or interfere) with either direction of the stream. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Intermediaries are expected to forward messages even when protocol elements | Intermediaries are expected to forward messages even when protocol elements | |||
| are not recognized (e.g., new methods, status codes, or field names), since t hat | are not recognized (e.g., new methods, status codes, or field names) since th at | |||
| preserves extensibility for downstream recipients. | preserves extensibility for downstream recipients. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An intermediary not acting as a tunnel <bcp14>MUST</bcp14> implement the | An intermediary not acting as a tunnel <bcp14>MUST</bcp14> implement the | |||
| <xref target="field.connection" format="none">Connection</xref> header field, as specified in | <xref target="field.connection" format="none">Connection</xref> header field, as specified in | |||
| <xref target="field.connection"/>, and exclude fields from being forwarded | <xref target="field.connection"/>, and exclude fields from being forwarded | |||
| that are only intended for the incoming connection. | that are only intended for the incoming connection. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An intermediary <bcp14>MUST NOT</bcp14> forward a message to itself unless it is | An intermediary <bcp14>MUST NOT</bcp14> forward a message to itself unless it is | |||
| skipping to change at line 2857 ¶ | skipping to change at line 2841 ¶ | |||
| forwarding downstream. | forwarding downstream. | |||
| However, senders and recipients cannot rely on incremental | However, senders and recipients cannot rely on incremental | |||
| delivery of partial messages, since some implementations will buffer or | delivery of partial messages, since some implementations will buffer or | |||
| delay message forwarding for the sake of network efficiency, security | delay message forwarding for the sake of network efficiency, security | |||
| checks, or content transformations. | checks, or content transformations. | |||
| </t> | </t> | |||
| <section anchor="field.connection" title="Connection"> | <section anchor="field.connection" title="Connection"> | |||
| <iref primary="true" item="Fields" subitem="Connection"/> | <iref primary="true" item="Fields" subitem="Connection"/> | |||
| <iref primary="true" item="Header Fields" subitem="Connection"/> | <iref primary="true" item="Header Fields" subitem="Connection"/> | |||
| <iref primary="true" item="Connection header field"/> | <iref primary="true" item="Connection header field"/> | |||
| <iref primary="true" item="Grammar" subitem="Connection"/> | ||||
| <iref primary="true" item="Grammar" subitem="connection-option"/> | ||||
| <t> | <t> | |||
| The "Connection" header field allows the sender to list desired | The "Connection" header field allows the sender to list desired | |||
| control options for the current connection. | control options for the current connection. | |||
| </t> | </t> | |||
| <sourcecode type="abnf9110"><![CDATA[ Connection = #conne | ||||
| ction-option | ||||
| connection-option = token | ||||
| ]]></sourcecode> | ||||
| <t> | ||||
| Connection options are case-insensitive. | ||||
| </t> | ||||
| <t> | <t> | |||
| When a field aside from Connection is used to supply control | When a field aside from Connection is used to supply control | |||
| information for or about the current connection, the sender <bcp14>MUST</bcp1 4> list | information for or about the current connection, the sender <bcp14>MUST</bcp1 4> list | |||
| the corresponding field name within the Connection header field. | the corresponding field name within the Connection header field. | |||
| Note that some versions of HTTP prohibit the use of fields for such | Note that some versions of HTTP prohibit the use of fields for such | |||
| information, and therefore do not allow the Connection field. | information, and therefore do not allow the Connection field. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Intermediaries <bcp14>MUST</bcp14> parse a received Connection | Intermediaries <bcp14>MUST</bcp14> parse a received Connection | |||
| header field before a message is forwarded and, for each | header field before a message is forwarded and, for each | |||
| connection-option in this field, remove any header or trailer field(s) from | connection-option in this field, remove any header or trailer field(s) from | |||
| the message with the same name as the connection-option, and then | the message with the same name as the connection-option, and then | |||
| remove the Connection header field itself (or replace it with the | remove the Connection header field itself (or replace it with the | |||
| intermediary's own connection options for the forwarded message). | intermediary's own control options for the forwarded message). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Hence, the Connection header field provides a declarative way of | Hence, the Connection header field provides a declarative way of | |||
| distinguishing fields that are only intended for the | distinguishing fields that are only intended for the | |||
| immediate recipient ("hop-by-hop") from those fields that are | immediate recipient ("hop-by-hop") from those fields that are | |||
| intended for all recipients on the chain ("end-to-end"), enabling the | intended for all recipients on the chain ("end-to-end"), enabling the | |||
| message to be self-descriptive and allowing future connection-specific | message to be self-descriptive and allowing future connection-specific | |||
| extensions to be deployed without fear that they will be blindly | extensions to be deployed without fear that they will be blindly | |||
| forwarded by older intermediaries. | forwarded by older intermediaries. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Furthermore, intermediaries <bcp14>SHOULD</bcp14> remove or replace field(s) | Furthermore, intermediaries <bcp14>SHOULD</bcp14> remove or replace fields | |||
| whose | that are known to require removal before forwarding, whether or not they appe | |||
| semantics are known to require removal before forwarding, whether or not they | ar as a | |||
| appear as a Connection | connection-option, after applying those fields' semantics. This includes but | |||
| option, after applying those fields' semantics. This includes but is not limi | is not limited to: | |||
| ted to: | ||||
| </t> | </t> | |||
| <ul> | <ul> | |||
| <li>Proxy-Connection (<xref target="HTTP11" section="C.2.2"/>) </li> | <li>Proxy-Connection (<xref target="HTTP11" section="C.2.2"/>) </li> | |||
| <li>Keep-Alive (<xref target="RFC2068" section="19.7.1"/>)</li > | <li>Keep-Alive (<xref target="RFC2068" section="19.7.1"/>)</li > | |||
| <li>TE (<xref target="field.te"/>)</li> | <li>TE (<xref target="field.te"/>)</li> | |||
| <li>Transfer-Encoding (<xref target="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: | ||||
| </t> | ||||
| <iref primary="true" item="Grammar" subitem="Connection"/> | ||||
| <iref primary="true" item="Grammar" subitem="connection-option"/> | ||||
| <sourcecode type="abnf7230"><![CDATA[ Connection = #conne | ||||
| ction-option | ||||
| connection-option = token | ||||
| ]]></sourcecode> | ||||
| <t> | ||||
| Connection options are case-insensitive. | ||||
| </t> | ||||
| <t> | ||||
| A sender <bcp14>MUST NOT</bcp14> send a connection option corresponding to a | A sender <bcp14>MUST NOT</bcp14> send a connection option corresponding to a | |||
| field that is intended for all recipients of the content. | field that is intended for all recipients of the content. | |||
| For example, Cache-Control is never appropriate as a | For example, Cache-Control is never appropriate as a | |||
| connection option (<xref target="CACHING" section="5.2"/>). | connection option (<xref target="CACHING" section="5.2"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Connection options do not always correspond to a field | Connection options do not always correspond to a field | |||
| present in the message, since a connection-specific field | present in the message, since a connection-specific field | |||
| might not be needed if there are no parameters associated with a | might not be needed if there are no parameters associated with a | |||
| connection option. In contrast, a connection-specific field | connection option. In contrast, a connection-specific field | |||
| received without a corresponding connection option usually indicates | received without a corresponding connection option usually indicates | |||
| that the field has been improperly forwarded by an intermediary and | that the field has been improperly forwarded by an intermediary and | |||
| ought to be ignored by the recipient. | ought to be ignored by the recipient. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When defining a new connection option that does not correspond to a field, | When defining a new connection option that does not correspond to a field, | |||
| specification authors ought to reserve the corresponding field name | specification authors ought to reserve the corresponding field name | |||
| anyway in order to avoid later collisions. Such reserved field names are | anyway in order to avoid later collisions. Such reserved field names are | |||
| registered in the Hypertext Transfer Protocol (HTTP) Field Name Registry | registered in the "Hypertext Transfer Protocol (HTTP) Field Name Registry" | |||
| (<xref target="fields.registry"/>). | (<xref target="fields.registry"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="field.max-forwards" title="Max-Forwards"> | <section anchor="field.max-forwards" title="Max-Forwards"> | |||
| <iref primary="true" item="Fields" subitem="Max-Forwards"/> | <iref primary="true" item="Fields" subitem="Max-Forwards"/> | |||
| <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 forwarded by | request methods to limit the number of times that the request is forwarded by | |||
| proxies. This can be useful when the client is attempting to | 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-Forwards"/> | <iref primary="true" item="Grammar" subitem="Max-Forwards"/> | |||
| <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 remaining | The Max-Forwards value is a decimal integer indicating the remaining | |||
| 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 containing a | Each intermediary that receives a TRACE or OPTIONS request containing a | |||
| Max-Forwards header field <bcp14>MUST</bcp14> check and update its value prio r to | Max-Forwards header field <bcp14>MUST</bcp14> check and update its value prio r to | |||
| forwarding the request. If the received value is zero (0), the intermediary | forwarding the request. If the received value is zero (0), the intermediary | |||
| <bcp14>MUST NOT</bcp14> forward the request; instead, the intermediary <bcp14 >MUST</bcp14> respond as | <bcp14>MUST NOT</bcp14> forward the request; instead, the intermediary <bcp14 >MUST</bcp14> respond as | |||
| skipping to change at line 2985 ¶ | skipping to change at line 2966 ¶ | |||
| Via can be used for tracking message forwards, | Via can be used for tracking message forwards, | |||
| avoiding request loops, and identifying the protocol capabilities of | avoiding request loops, and identifying the protocol capabilities of | |||
| 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-protocol"/> | <iref primary="true" item="Grammar" subitem="received-protocol"/> | |||
| <iref primary="true" item="Grammar" subitem="protocol-name"/> | <iref primary="true" item="Grammar" subitem="protocol-name"/> | |||
| <iref primary="true" item="Grammar" subitem="protocol-version"/> | <iref primary="true" item="Grammar" subitem="protocol-version"/> | |||
| <iref primary="true" item="Grammar" subitem="received-by"/> | <iref primary="true" item="Grammar" subitem="received-by"/> | |||
| <iref primary="true" item="Grammar" subitem="pseudonym"/> | <iref primary="true" item="Grammar" subitem="pseudonym"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Via = #( received-protocol RWS received-by [ RWS comment ] ) | <sourcecode type="abnf9110"><![CDATA[ Via = #( received-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 that has | Each member of the Via field value represents a proxy or gateway that has | |||
| forwarded the message. Each intermediary appends its own information | forwarded the message. Each intermediary appends its own information | |||
| about how the message was received, such that the end result is ordered | about how the message was received, such that the end result is ordered | |||
| skipping to change at line 3082 ¶ | skipping to change at line 3063 ¶ | |||
| Some intermediaries include features for transforming messages and their | Some intermediaries include features for transforming messages and their | |||
| content. A proxy might, for example, convert between image formats in | content. A proxy might, for example, convert between image formats in | |||
| order to save cache space or to reduce the amount of traffic on a slow | order to save cache space or to reduce the amount of traffic on a slow | |||
| link. However, operational problems might occur when these transformations | link. However, operational problems might occur when these transformations | |||
| are applied to content intended for critical applications, such as medical | are applied to content intended for critical applications, such as medical | |||
| imaging or scientific data analysis, particularly when integrity checks or | imaging or scientific data analysis, particularly when integrity checks or | |||
| digital signatures are used to ensure that the content received is | digital signatures are used to ensure that the content received is | |||
| identical to the original. | identical to the original. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An HTTP-to-HTTP proxy is called a <em>transforming proxy</em> | An HTTP-to-HTTP proxy is called a "transforming proxy" | |||
| if it is designed or configured to modify messages in a semantically | if it is designed or configured to modify messages in a semantically | |||
| meaningful way (i.e., modifications, beyond those required by normal | meaningful way (i.e., modifications, beyond those required by normal | |||
| HTTP processing, that change the message in a way that would be | HTTP processing, that change the message in a way that would be | |||
| significant to the original sender or potentially significant to | significant to the original sender or potentially significant to | |||
| downstream recipients). For example, a transforming proxy might be | downstream recipients). For example, a transforming proxy might be | |||
| acting as a shared annotation server (modifying responses to include | acting as a shared annotation server (modifying responses to include | |||
| references to a local annotation database), a malware filter, a | references to a local annotation database), a malware filter, a | |||
| format transcoder, or a privacy filter. Such transformations are presumed | format transcoder, or a privacy filter. Such transformations are presumed | |||
| to be desired by whichever client (or client organization) chose the | to be desired by whichever client (or client organization) chose the | |||
| proxy. | proxy. | |||
| skipping to change at line 3109 ¶ | skipping to change at line 3090 ¶ | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A proxy <bcp14>MUST NOT</bcp14> modify the "absolute-path" and "query" parts of the | A proxy <bcp14>MUST NOT</bcp14> modify the "absolute-path" and "query" parts of the | |||
| received target URI when forwarding it to the next inbound server except | received target URI when forwarding it to the next inbound server except | |||
| as required by that forwarding protocol. For example, a proxy forwarding | as required by that forwarding protocol. For example, a proxy forwarding | |||
| a request to an origin server via HTTP/1.1 will replace an empty path with | a request to an origin server via HTTP/1.1 will replace an empty path with | |||
| "/" (<xref target="HTTP11" section="3.2.1"/>) or "*" (<xref target="HTTP11" s ection="3.2.4"/>), | "/" (<xref target="HTTP11" section="3.2.1"/>) or "*" (<xref target="HTTP11" s ection="3.2.4"/>), | |||
| depending on the request method. | depending on the request method. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A proxy <bcp14>MUST NOT</bcp14> transform the content (<xref target="content" | A proxy <bcp14>MUST NOT</bcp14> transform the content (<xref target="content" | |||
| />) of a message that | />) of a | |||
| contains a no-transform cache-control response directive (<xref target="CACHI | response message that contains a no-transform cache directive | |||
| NG" section="5.2"/>). | (<xref target="CACHING" section="5.2.2.6"/>). Note that this | |||
| Note that this does not include changes to the message body that do not affec | does not apply to message transformations that do not change the content, | |||
| t | such as the addition or removal of transfer codings | |||
| the content, such as transfer codings (<xref target="HTTP11" section="7"/>). | (<xref target="HTTP11" section="7"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A proxy <bcp14>MAY</bcp14> transform the content of a message | A proxy <bcp14>MAY</bcp14> transform the content of a message | |||
| that does not contain a no-transform cache-control directive. | that does not contain a no-transform cache directive. | |||
| A proxy that transforms the content of a <xref target="status.200" format="no ne">200 (OK)</xref> response | A proxy that transforms the content of a <xref target="status.200" format="no ne">200 (OK)</xref> response | |||
| can inform downstream recipients that a transformation has been | can inform downstream recipients that a transformation has been | |||
| applied by changing the response status code to | applied by changing the response status code to | |||
| <xref target="status.203" format="none">203 (Non-Authoritative Information)</ xref> (<xref target="status.203"/>). | <xref target="status.203" format="none">203 (Non-Authoritative Information)</ xref> (<xref target="status.203"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A proxy <bcp14>SHOULD NOT</bcp14> modify header fields that provide informati on about | A proxy <bcp14>SHOULD NOT</bcp14> modify header fields that provide informati on about | |||
| the endpoints of the communication chain, the resource state, or the | the endpoints of the communication chain, the resource state, or the | |||
| <xref target="selected.representation" format="none">selected representation< /xref> (other than the content) unless the field's | <xref target="selected.representation" format="none">selected representation< /xref> (other than the content) unless the field's | |||
| definition specifically allows such modification or the modification is | definition specifically allows such modification or the modification is | |||
| skipping to change at line 3148 ¶ | skipping to change at line 3131 ¶ | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A client <bcp14>MAY</bcp14> send a list of protocol names in the Upgrade head er field | A client <bcp14>MAY</bcp14> send a list of protocol names in the Upgrade head er field | |||
| of a request to invite the server to switch to one or more of the named | of a request to invite the server to switch to one or more of the named | |||
| 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 Upgrade hea der field | the final response. A server <bcp14>MAY</bcp14> ignore a received Upgrade hea der field | |||
| if it wishes to continue using the current protocol on that connection. | if it wishes to continue using the current protocol on that connection. | |||
| 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 when matchin g each | recipients <bcp14>SHOULD</bcp14> use case-insensitive comparison when matchin g each | |||
| protocol-name to supported protocols. | protocol-name to supported protocols. | |||
| </t> | </t> | |||
| skipping to change at line 3267 ¶ | skipping to change at line 3250 ¶ | |||
| either provided as the content of the message or | either provided as the content of the message or | |||
| referred to by the message semantics and the target | referred to by the message semantics and the target | |||
| URI. The representation data is in a format and encoding defined by | URI. The representation data is in a format and encoding defined by | |||
| the representation metadata header fields. | the representation metadata header fields. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The data type of the representation data is determined via the header fields | The data type of the representation data is determined via the header fields | |||
| <xref target="field.content-type" format="none">Content-Type</xref> and <xref target="field.content-encoding" format="none">Content-Encoding</xref>. | <xref target="field.content-type" format="none">Content-Type</xref> and <xref target="field.content-encoding" format="none">Content-Encoding</xref>. | |||
| These define a two-layer, ordered encoding model: | These define a two-layer, ordered encoding model: | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| representation-data := Content-Encoding( Content-Type( data ) ) | representation-data := Content-Encoding( Content-Type( data ) ) | |||
| ]]></artwork> | ]]></artwork> | |||
| </section> | </section> | |||
| <section anchor="representation.metadata" title="Representation Metadat a"> | <section anchor="representation.metadata" title="Representation Metadat a"> | |||
| <t> | <t> | |||
| Representation header fields provide metadata about the representation. | Representation header fields provide metadata about the representation. | |||
| When a message includes content, the representation header fields | When a message includes content, the representation header fields | |||
| describe how to interpret that data. In a response to a HEAD request, the | describe how to interpret that data. In a response to a HEAD request, the | |||
| representation header fields describe the representation data that would | representation header fields describe the representation data that would | |||
| have been enclosed in the content if the same request had been a GET. | have been enclosed in the content if the same request had been a GET. | |||
| skipping to change at line 3294 ¶ | skipping to change at line 3277 ¶ | |||
| <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" format="non e">selected representation</xref>, as determined by the | the message content or the <xref target="selected.representation" format="non e">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, within the | and how that data is intended to be processed by a recipient, within 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">Content-Enco ding</xref> are decoded. | indicated by <xref target="field.content-encoding" format="none">Content-Enco ding</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 = media-type | <sourcecode type="abnf9110"><![CDATA[ Content-Type = media-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: text/html; ch arset=ISO-8859-4 | <sourcecode type="http-message"><![CDATA[Content-Type: text/html; ch arset=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 intended | generate a Content-Type header field in that message unless the intended | |||
| skipping to change at line 3346 ¶ | skipping to change at line 3329 ¶ | |||
| 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 ta rget="field.content-type"/>) | <xref target="field.content-type" format="none">Content-Type</xref> (<xref ta rget="field.content-type"/>) | |||
| and <xref target="field.accept" format="none">Accept</xref> (<xref target="fi eld.accept"/>) header fields in | and <xref target="field.accept" format="none">Accept</xref> (<xref target="fi eld.accept"/>) header fields in | |||
| order to provide open and extensible data typing and type negotiation. | order to provide open and extensible data typing and type negotiation. | |||
| 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 = type "/" subt ype parameters | <sourcecode type="abnf9110"><![CDATA[ media-type = type "/" subt ype 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-delimited parame ters | The type/subtype <bcp14>MAY</bcp14> be followed by semicolon-delimited parame ters | |||
| (<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 | |||
| processing of a media type, depending on its definition within the media | processing of a media type, depending on its definition within the media | |||
| type registry. | type registry. | |||
| Parameter values might or might not be case-sensitive, depending on the | Parameter values might or might not be case-sensitive, depending on the | |||
| semantics of the parameter name. | semantics of the parameter name. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| For example, the following media types are equivalent in describing HTML | For example, the following media types are equivalent in describing HTML | |||
| text data encoded in the UTF-8 character encoding scheme, but the first is | text data encoded in the UTF-8 character encoding scheme, but the first is | |||
| preferred for consistency (the "charset" parameter value is defined as | preferred for consistency (the "charset" parameter value is defined as | |||
| being case-insensitive in <xref target="RFC2046" sectionFormat="comma" sectio n="4.1.2"/>): | being case-insensitive in <xref target="RFC2046" sectionFormat="comma" sectio n="4.1.2"/>): | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| text/html;charset=utf-8 | text/html;charset=utf-8 | |||
| Text/HTML;Charset="utf-8" | Text/HTML;Charset="utf-8" | |||
| text/html; charset="utf-8" | text/html; charset="utf-8" | |||
| text/html;charset=UTF-8 | text/html;charset=UTF-8 | |||
| ]]></artwork> | ]]></artwork> | |||
| <t> | <t> | |||
| Media types ought to be registered with IANA according to the | Media types ought to be registered with IANA according to the | |||
| procedures defined in <xref target="BCP13"/>. | procedures defined in <xref target="BCP13"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="charset" title="Charset"> | <section anchor="charset" title="Charset"> | |||
| <t> | <t> | |||
| HTTP uses <em>charset</em> names to indicate or negotiate the | HTTP uses "charset" names to indicate or negotiate the | |||
| character encoding scheme (<xref target="RFC6365" sectionFormat="comma" secti | character encoding scheme (<xref target="RFC6365" sectionFormat="comma" secti | |||
| on="1.3"/>) | on="2"/>) | |||
| of a textual representation. In the fields defined by this document, | of a textual representation. In the fields defined by this document, | |||
| charset names appear either in parameters (<xref target="field.content-type" format="none">Content-Type</xref>), | charset names appear either in parameters (<xref target="field.content-type" format="none">Content-Type</xref>), | |||
| or, for <xref target="field.accept-encoding" format="none">Accept-Encoding</x ref>, in the form of a plain <xref target="rule.token.separators" format="none"> token</xref>. | or, for <xref target="field.accept-encoding" format="none">Accept-Encoding</x ref>, in the form of a plain <xref target="rule.token.separators" format="none"> token</xref>. | |||
| In both cases, charset names are matched case-insensitively. | In both cases, charset names are matched case-insensitively. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Charset names ought to be registered in the IANA "Character Sets" registry | Charset names ought to be registered in the IANA "Character Sets" registry | |||
| (<eref target="https://www.iana.org/assignments/character-sets" | (<eref target="https://www.iana.org/assignments/character-sets" | |||
| brackets="angle"/>) | brackets="angle"/>) | |||
| according to the procedures defined in <xref target="RFC2978" section="2"/>. | according to the procedures defined in <xref target="RFC2978" section="2"/>. | |||
| skipping to change at line 3407 ¶ | skipping to change at line 3390 ¶ | |||
| rule defined in <xref target="RFC2978" section="2.3"/> (as | rule defined in <xref target="RFC2978" section="2.3"/> (as | |||
| corrected in <xref target="Err1912"/>). That rule allows two characters | corrected in <xref target="Err1912"/>). That rule allows two characters | |||
| that are not included in "token" ("{" and "}"), but no charset name | that are not included in "token" ("{" and "}"), but no charset name | |||
| registered at the time of this writing includes braces | registered at the time of this writing includes braces | |||
| (see <xref target="Err5433"/>). | (see <xref target="Err5433"/>). | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| </section> | </section> | |||
| <section anchor="multipart.types" title="Multipart Types"> | <section anchor="multipart.types" title="Multipart Types"> | |||
| <t> | <t> | |||
| MIME provides for a number of "multipart" types — encapsulations of | MIME provides for a number of "multipart" types -- encapsulations of | |||
| one or more representations within a single message body. All multipart | one or more representations within a single message body. All multipart | |||
| types share a common syntax, as defined in <xref target="RFC2046" section="5. 1.1"/>, | types share a common syntax, as defined in <xref target="RFC2046" section="5. 1.1"/>, | |||
| and include a boundary parameter as part of the media type | and include a boundary parameter as part of the media type | |||
| value. The message body is itself a protocol element; a sender <bcp14>MUST</b cp14> | value. The message body is itself a protocol element; a sender <bcp14>MUST</b cp14> | |||
| generate only CRLF to represent line breaks between body parts. | generate only CRLF to represent line breaks between body parts. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| HTTP message framing does not use the multipart boundary as an indicator | HTTP message framing does not use the multipart boundary as an indicator | |||
| of message body length, though it might be used by implementations that | of message body length, though it might be used by implementations that | |||
| generate or process the content. For example, the "multipart/form-data" | generate or process the content. For example, the "multipart/form-data" | |||
| skipping to change at line 3439 ¶ | skipping to change at line 3422 ¶ | |||
| <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 the media | have been applied to the representation, beyond those inherent in the media | |||
| type, and thus what decoding mechanisms have to be applied in order to | 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-t ype" format="none">Content-Type</xref> | obtain data in the media type referenced by the <xref target="field.content-t ype" 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-Encoding"/> | <iref primary="true" item="Grammar" subitem="Content-Encoding"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Content-Encoding = #content-c oding | <sourcecode type="abnf9110"><![CDATA[ Content-Encoding = #content-c oding | |||
| ]]></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-Encoding he ader field | that applied the encodings <bcp14>MUST</bcp14> generate a Content-Encoding he ader field | |||
| that lists the content codings in the order in which they were applied. | that lists the content codings in the order in which they were applied. | |||
| Note that the coding named "identity" is reserved for its special role | Note that the coding named "identity" is reserved for its special role | |||
| in <xref target="field.accept-encoding" format="none">Accept-Encoding</xref>, and thus <bcp14>SHOULD NOT</bcp14> be included. | in <xref target="field.accept-encoding" format="none">Accept-Encoding</xref> and thus <bcp14>SHOULD NOT</bcp14> be included. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Additional information about the encoding parameters can be provided | Additional information about the encoding parameters can be provided | |||
| by other header fields not defined by this specification. | by other header fields not defined by this specification. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Unlike Transfer-Encoding (<xref target="HTTP11" section="6.1"/>), the codings listed | Unlike Transfer-Encoding (<xref target="HTTP11" section="6.1"/>), the codings listed | |||
| in Content-Encoding are a characteristic of the representation; the | in Content-Encoding are a characteristic of the representation; the | |||
| representation is defined in terms of the coded form, and all other | representation is defined in terms of the coded form, and all other | |||
| metadata about the representation is about the coded form unless otherwise | metadata about the representation is about the coded form unless otherwise | |||
| skipping to change at line 3499 ¶ | skipping to change at line 3482 ¶ | |||
| <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 primarily | been or can be applied to a representation. Content codings are primarily | |||
| used to allow a representation to be compressed or otherwise usefully | used to allow a representation to be compressed or otherwise usefully | |||
| transformed without losing the identity of its underlying media type | transformed without losing the identity of its underlying media type | |||
| 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-coding"/> | <iref primary="true" item="Grammar" subitem="content-coding"/> | |||
| <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> (<x ref target="field.accept-encoding"/>) | <xref target="field.accept-encoding" format="none">Accept-Encoding</xref> (<x ref target="field.accept-encoding"/>) | |||
| and <xref target="field.content-encoding" format="none">Content-Encoding</xre f> (<xref target="field.content-encoding"/>) | and <xref target="field.content-encoding" format="none">Content-Encoding</xre f> (<xref target="field.content-encoding"/>) | |||
| skipping to change at line 3557 ¶ | skipping to change at line 3540 ¶ | |||
| <section anchor="field.content-language" title="Content-Language"> | <section anchor="field.content-language" title="Content-Language"> | |||
| <iref primary="true" item="Fields" subitem="Content-Language"/> | <iref primary="true" item="Fields" subitem="Content-Language"/> | |||
| <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 that this m ight | language(s) of the intended audience for the representation. Note that this m ight | |||
| not be equivalent to all the languages used within the representation. | not be equivalent to all the languages used within the representation. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="Content-Language"/> | <iref primary="true" item="Grammar" subitem="Content-Language"/> | |||
| <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 primary purp ose of | Language tags are defined in <xref target="language.tags"/>. The primary purp ose 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. Thus, if the | representations according to the users' own preferred language. Thus, 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 3591 ¶ | skipping to change at line 3574 ¶ | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| However, just because multiple languages are present within a representation | However, just because multiple languages are present within a representation | |||
| does not mean that it is intended for multiple linguistic audiences. | does not mean that it is intended for multiple linguistic audiences. | |||
| An example would be a beginner's language primer, such as "A First | An example would be a beginner's language primer, such as "A First | |||
| Lesson in Latin", which is clearly intended to be used by an | Lesson in Latin", which is clearly intended to be used by an | |||
| English-literate audience. In this case, the Content-Language would | English-literate audience. In this case, the Content-Language would | |||
| properly only include "en". | properly only include "en". | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Content-Language <bcp14>MAY</bcp14> be applied to any media type — it is not | Content-Language <bcp14>MAY</bcp14> be applied to any media type -- it is not | |||
| limited to textual documents. | limited to textual documents. | |||
| </t> | </t> | |||
| <section anchor="language.tags" title="Language Tags"> | <section anchor="language.tags" title="Language Tags"> | |||
| <t> | <t> | |||
| A language tag, as defined in <xref target="RFC5646"/>, identifies a | A language tag, as defined in <xref target="RFC5646"/>, identifies a | |||
| natural language spoken, written, or otherwise conveyed by human beings for | natural language spoken, written, or otherwise conveyed by human beings for | |||
| communication of information to other human beings. Computer languages are | communication of information to other human beings. Computer languages are | |||
| explicitly excluded. | explicitly excluded. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| HTTP uses language tags within the <xref target="field.accept-language" forma t="none">Accept-Language</xref> and | HTTP uses language tags within the <xref target="field.accept-language" forma t="none">Accept-Language</xref> and | |||
| <xref target="field.content-language" format="none">Content-Language</xref> h eader fields. | <xref target="field.content-language" format="none">Content-Language</xref> h eader fields. | |||
| <xref target="field.accept-language" format="none">Accept-Language</xref> use s the broader language-range production | <xref target="field.accept-language" format="none">Accept-Language</xref> use s 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-Language</xref> u ses the language-tag production defined | <xref target="field.content-language" format="none">Content-Language</xref> u ses the language-tag production defined | |||
| below. | below. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="language-tag"/> | <iref primary="true" item="Grammar" subitem="language-tag"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ language-tag = <Language-T ag, see [RFC5646], Section 2.1> | <sourcecode type="abnf9110"><![CDATA[ language-tag = <Language-T ag, see [RFC5646], Section 2.1> | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| A language tag is a sequence of one or more case-insensitive subtags, each | A language tag is a sequence of one or more case-insensitive subtags, each | |||
| separated by a hyphen character ("-", %x2D). In most cases, a language tag | separated by a hyphen character ("-", %x2D). In most cases, a language tag | |||
| consists of a primary language subtag that identifies a broad family of | consists of a primary language subtag that identifies a broad family of | |||
| related languages (e.g., "en" = English), which is optionally followed by a | related languages (e.g., "en" = English), which is optionally followed by a | |||
| series of subtags that refine or narrow that language's range (e.g., | 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: | |||
| </t> | </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| fr, en-US, es-419, az-Arab, x-pig-latin, man-Nkoo-GN | fr, en-US, es-419, az-Arab, x-pig-latin, man-Nkoo-GN | |||
| ]]></artwork> | ]]></artwork> | |||
| <t> | <t> | |||
| See <xref target="RFC5646"/> for further information. | See <xref target="RFC5646"/> for further information. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="field.content-length" title="Content-Length"> | <section anchor="field.content-length" title="Content-Length"> | |||
| <iref primary="true" item="Fields" subitem="Content-Length"/> | <iref primary="true" item="Fields" subitem="Content-Length"/> | |||
| <iref primary="true" item="Header Fields" subitem="Content-Length"/> | <iref primary="true" item="Header Fields" subitem="Content-Length"/> | |||
| <iref primary="true" item="Content-Length header field"/> | <iref primary="true" item="Content-Length header field"/> | |||
| <t> | <t> | |||
| The "Content-Length" header field indicates the associated representation's | The "Content-Length" header field indicates the associated representation's | |||
| data length as a decimal non-negative integer number of octets. | data length as a decimal non-negative integer number of octets. | |||
| When transferring a representation as content, Content-Length refers | When transferring a representation as content, Content-Length refers | |||
| specifically to the amount of data enclosed so that it can be used to | specifically to the amount of data enclosed so that it can be used to | |||
| delimit framing (e.g., <xref target="HTTP11" section="6.2"/>). | delimit framing (e.g., <xref target="HTTP11" section="6.2"/>). | |||
| In other cases, Content-Length indicates the selected representation's | In other cases, Content-Length indicates the selected representation's | |||
| current length, which can be used by recipients to estimate transfer time | current length, which can be used by recipients to estimate transfer time | |||
| or compare to previously stored representations. | or to compare with previously stored representations. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="Content-Length"/> | <iref primary="true" item="Grammar" subitem="Content-Length"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Content-Length = 1*DIGIT | <sourcecode type="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: 3495 | <sourcecode type="http-message"><![CDATA[Content-Length: 3495 | |||
| ]]></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 3715 ¶ | skipping to change at line 3698 ¶ | |||
| field value that is inconsistent with the received message framing might | field value that is inconsistent with the received message framing might | |||
| cause a security failure due to request smuggling or response splitting. | cause a security failure due to request smuggling or response splitting. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| As a result, a sender <bcp14>MUST NOT</bcp14> forward a message with a | As a result, a sender <bcp14>MUST NOT</bcp14> forward a message with a | |||
| Content-Length header field value that is known to be incorrect. | Content-Length header field value that is known to be incorrect. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Likewise, a sender <bcp14>MUST NOT</bcp14> forward a message with a Content-L ength | Likewise, a sender <bcp14>MUST NOT</bcp14> forward a message with a Content-L ength | |||
| header field value that does not match the ABNF above, with one exception: | header field value that does not match the ABNF above, with one exception: | |||
| A recipient of a Content-Length header field value consisting of the same | a recipient of a Content-Length header field value consisting of the same | |||
| decimal value repeated as a comma-separated list (e.g, | decimal value repeated as a comma-separated list (e.g, | |||
| "Content-Length: 42, 42"), <bcp14>MAY</bcp14> either reject the message as in valid or | "Content-Length: 42, 42") <bcp14>MAY</bcp14> either reject the message as inv alid or | |||
| replace that invalid field value with a single instance of the decimal | replace that invalid field value with a single instance of the decimal | |||
| value, since this likely indicates that a duplicate was generated or | value, since this likely indicates that a duplicate was generated or | |||
| combined by an upstream message processor. | combined by an upstream message processor. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="field.content-location" title="Content-Location"> | <section anchor="field.content-location" title="Content-Location"> | |||
| <iref primary="true" item="Fields" subitem="Content-Location"/> | <iref primary="true" item="Fields" subitem="Content-Location"/> | |||
| <iref primary="true" item="Header Fields" subitem="Content-Location" /> | <iref primary="true" item="Header Fields" subitem="Content-Location" /> | |||
| <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 used | The "Content-Location" header field references a URI that can be used | |||
| 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" format="none"> 200 (OK)</xref> response would | of this message's generation, then a <xref target="status.200" format="none"> 200 (OK)</xref> response would | |||
| contain the same representation that is enclosed as content in this message. | contain the same representation that is enclosed as content in this message. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="Content-Location"/> | <iref primary="true" item="Grammar" subitem="Content-Location"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Content-Location = absolute-U RI / partial-URI | <sourcecode type="abnf9110"><![CDATA[ Content-Location = absolute-U RI / partial-URI | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| The field value is either an <xref target="uri.references" format="none">abso lute-URI</xref> or a | The field value is either an <xref target="uri.references" format="none">abso lute-URI</xref> or a | |||
| <xref target="uri.references" format="none">partial-URI</xref>. In the latter case (<xref target="uri"/>), | <xref target="uri.references" format="none">partial-URI</xref>. In the latter case (<xref target="uri"/>), | |||
| the referenced URI is relative to the target URI | the referenced URI is relative to the target URI | |||
| (<xref target="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 3827 ¶ | skipping to change at line 3810 ¶ | |||
| negotiated representations. If the user agent had wanted the latter | negotiated representations. If the user agent had wanted the latter | |||
| semantics, it would have applied the PUT directly to the Content-Location | semantics, it would have applied the PUT directly to the Content-Location | |||
| URI. | URI. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="response.validator" title="Validator Fields"> | <section anchor="response.validator" title="Validator Fields"> | |||
| <iref primary="true" item="metadata"/> | <iref primary="true" item="metadata"/> | |||
| <iref primary="true" item="validator"/> | <iref primary="true" item="validator"/> | |||
| <iref item="selected representation"/> | <iref item="selected representation"/> | |||
| <t> | <t> | |||
| Resource metadata is referred to as a <em>validator</em> if it | Resource metadata is referred to as a "validator" if it | |||
| can be used within a precondition (<xref target="preconditions"/>) to | can be used within a precondition (<xref target="preconditions"/>) to | |||
| make a conditional request (<xref target="conditional.requests"/>). | make a conditional request (<xref target="conditional.requests"/>). | |||
| Validator fields convey a current validator for the | Validator fields convey a current validator for the | |||
| <xref target="selected.representation" format="none">selected representation< /xref> | <xref target="selected.representation" format="none">selected representation< /xref> | |||
| (<xref target="representations"/>). | (<xref target="representations"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In responses to safe requests, validator fields describe the selected | In responses to safe requests, validator fields describe the selected | |||
| representation chosen by the origin server while handling the response. | representation chosen by the origin server while handling the response. | |||
| Note that, depending on the method and status code semantics, the | Note that, depending on the method and status code semantics, the | |||
| skipping to change at line 3849 ¶ | skipping to change at line 3832 ¶ | |||
| necessarily the same as the representation enclosed as response content. | necessarily the same as the representation enclosed as response content. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In a successful response to a state-changing request, validator fields | In a successful response to a state-changing request, validator fields | |||
| describe the new representation that has replaced the prior | describe the new representation that has replaced the prior | |||
| <xref target="selected.representation" format="none">selected representation< /xref> as a result of processing the | <xref target="selected.representation" format="none">selected representation< /xref> as a result of processing the | |||
| request. | request. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| For example, an ETag field in a <xref target="status.201" format="none">201 ( Created)</xref> response | For example, an ETag field in a <xref target="status.201" format="none">201 ( Created)</xref> response | |||
| communicates the entity-tag of the newly created resource's | communicates the entity tag of the newly created resource's | |||
| representation, so that the entity-tag can be used as a validator in | representation, so that the entity tag can be used as a validator in | |||
| later conditional requests to prevent the "lost update" problem. | later conditional requests to prevent the "lost update" problem. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This specification defines two forms of metadata that are commonly used | This specification defines two forms of metadata that are commonly used | |||
| to observe resource state and test for preconditions: modification dates | to observe resource state and test for preconditions: modification dates | |||
| (<xref target="field.last-modified"/>) and opaque entity tags | (<xref target="field.last-modified"/>) and opaque entity tags | |||
| (<xref target="field.etag"/>). | (<xref target="field.etag"/>). | |||
| Additional metadata that reflects resource state | Additional metadata that reflects resource state | |||
| has been defined by various extensions of HTTP, such as Web Distributed | has been defined by various extensions of HTTP, such as Web Distributed | |||
| Authoring and Versioning <xref target="WEBDAV"/>, that are beyond the | Authoring and Versioning <xref target="WEBDAV"/>, that are beyond the | |||
| skipping to change at line 3876 ¶ | skipping to change at line 3859 ¶ | |||
| <t> | <t> | |||
| Validators come in two flavors: strong or weak. Weak validators are easy | Validators come in two flavors: strong or weak. Weak validators are easy | |||
| to generate but are far less useful for comparisons. Strong validators | to generate but are far less useful for comparisons. Strong validators | |||
| are ideal for comparisons but can be very difficult (and occasionally | are ideal for comparisons but can be very difficult (and occasionally | |||
| impossible) to generate efficiently. Rather than impose that all forms | impossible) to generate efficiently. Rather than impose that all forms | |||
| of resource adhere to the same strength of validator, HTTP exposes the | of resource adhere to the same strength of validator, HTTP exposes the | |||
| type of validator in use and imposes restrictions on when weak validators | type of validator in use and imposes restrictions on when weak validators | |||
| can be used as preconditions. | can be used as preconditions. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A <em>strong validator</em> is representation metadata that changes value whe never | A "strong validator" is representation metadata that changes value whenever | |||
| a change occurs to the representation data that would be observable in the | a change occurs to the representation data that would be observable in the | |||
| content of a <xref target="status.200" format="none">200 (OK)</xref> response to GET. | content of a <xref target="status.200" format="none">200 (OK)</xref> response to GET. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A strong validator might change for reasons other than a change to the | A strong validator might change for reasons other than a change to the | |||
| representation data, such as when a | representation data, such as when a | |||
| semantically significant part of the representation metadata is changed | semantically significant part of the representation metadata is changed | |||
| (e.g., <xref target="field.content-type" format="none">Content-Type</xref>), but it is in the best interests of the | (e.g., <xref target="field.content-type" format="none">Content-Type</xref>), but it is in the best interests of the | |||
| origin server to only change the value when it is necessary to invalidate | origin server to only change the value when it is necessary to invalidate | |||
| the stored responses held by remote caches and authoring tools. | the stored responses held by remote caches and authoring tools. | |||
| skipping to change at line 3915 ¶ | skipping to change at line 3898 ¶ | |||
| function applied to the representation data is also sufficient if the data | function applied to the representation data is also sufficient if the data | |||
| is available prior to the response header fields being sent and the digest | is available prior to the response header fields being sent and the digest | |||
| does not need to be recalculated every time a validation request is | does not need to be recalculated every time a validation request is | |||
| received. However, if a resource has distinct representations that differ | received. However, if a resource has distinct representations that differ | |||
| only in their metadata, such as might occur with content negotiation over | only in their metadata, such as might occur with content negotiation over | |||
| media types that happen to share the same data format, then the origin | media types that happen to share the same data format, then the origin | |||
| server needs to incorporate additional information in the validator to | server needs to incorporate additional information in the validator to | |||
| distinguish those representations. | distinguish those representations. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In contrast, a <em>weak validator</em> is representation metadata | In contrast, a "weak validator" is representation metadata | |||
| that might not change for every change to the representation data. This | that might not change for every change to the representation data. This | |||
| weakness might be due to limitations in how the value is calculated | weakness might be due to limitations in how the value is calculated | |||
| (e.g., clock resolution), an inability to ensure uniqueness for all | (e.g., clock resolution), an inability to ensure uniqueness for all | |||
| possible representations of the resource, or a desire of the resource | possible representations of the resource, or a desire of the resource | |||
| owner to group representations by some self-determined set of | owner to group representations by some self-determined set of | |||
| equivalency rather than unique sequences of data. | equivalency rather than unique sequences of data. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An origin server <bcp14>SHOULD</bcp14> change a weak entity-tag whenever it | An origin server <bcp14>SHOULD</bcp14> change a weak entity tag whenever it | |||
| considers prior representations to be unacceptable as a substitute for | considers prior representations to be unacceptable as a substitute for | |||
| the current representation. In other words, a weak entity-tag ought to | the current representation. In other words, a weak entity tag ought to | |||
| change whenever the origin server wants caches to invalidate old | change whenever the origin server wants caches to invalidate old | |||
| responses. | responses. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| For example, the representation of a weather report that changes in | For example, the representation of a weather report that changes in | |||
| content every second, based on dynamic measurements, might be grouped | content every second, based on dynamic measurements, might be grouped | |||
| into sets of equivalent representations (from the origin server's | into sets of equivalent representations (from the origin server's | |||
| perspective) with the same weak validator in order to allow cached | perspective) with the same weak validator in order to allow cached | |||
| representations to be valid for a reasonable period of time (perhaps | representations to be valid for a reasonable period of time (perhaps | |||
| adjusted dynamically based on server load or weather quality). | adjusted dynamically based on server load or weather quality). | |||
| skipping to change at line 3972 ¶ | skipping to change at line 3955 ¶ | |||
| <iref primary="true" item="Fields" subitem="Last-Modified"/> | <iref primary="true" item="Fields" subitem="Last-Modified"/> | |||
| <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 the | indicating the date and time at which the origin server believes the | |||
| <xref target="selected.representation" format="none">selected representation< /xref> was last modified, as determined at the conclusion | <xref target="selected.representation" format="none">selected representation< /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-Modified"/> | <iref primary="true" item="Grammar" subitem="Last-Modified"/> | |||
| <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 N ov 1994 12:45:26 GMT | <sourcecode type="http-message"><![CDATA[Last-Modified: Tue, 15 N ov 1994 12:45:26 GMT | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <section anchor="lastmod.generation" title="Generation"> | <section anchor="lastmod.generation" title="Generation"> | |||
| <t> | <t> | |||
| An origin server <bcp14>SHOULD</bcp14> send Last-Modified for any selected | An origin server <bcp14>SHOULD</bcp14> send Last-Modified for any selected | |||
| representation for which a last modification date can be reasonably | representation for which a last modification date can be reasonably | |||
| skipping to change at line 4074 ¶ | skipping to change at line 4057 ¶ | |||
| have a <xref target="field.date" format="none">Date</xref> value equal to its Last-Modified time. | have a <xref target="field.date" format="none">Date</xref> value equal to its Last-Modified time. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="field.etag" title="ETag"> | <section anchor="field.etag" title="ETag"> | |||
| <iref primary="true" item="Fields" subitem="ETag"/> | <iref primary="true" item="Fields" subitem="ETag"/> | |||
| <iref primary="true" item="Header Fields" subitem="ETag"/> | <iref primary="true" item="Header Fields" subitem="ETag"/> | |||
| <iref primary="true" item="Trailer Fields" subitem="ETag"/> | <iref primary="true" item="Trailer Fields" subitem="ETag"/> | |||
| <iref primary="true" item="ETag field"/> | <iref primary="true" item="ETag field"/> | |||
| <t> | <t> | |||
| The "ETag" field in a response provides the current entity-tag for | The "ETag" field in a response provides the current entity tag for | |||
| the <xref target="selected.representation" format="none">selected representat ion</xref>, as determined at the conclusion of handling | the <xref target="selected.representation" format="none">selected representat ion</xref>, as determined at the conclusion of handling | |||
| the request. | the request. | |||
| An entity-tag is an opaque validator for differentiating between | An entity tag is an opaque validator for differentiating between | |||
| multiple representations of the same resource, regardless of whether | multiple representations of the same resource, regardless of whether | |||
| those multiple representations are due to resource state changes over | those multiple representations are due to resource state changes over | |||
| time, content negotiation resulting in multiple representations being | time, content negotiation resulting in multiple representations being | |||
| valid at the same time, or both. An entity-tag consists of an opaque | valid at the same time, or both. An entity tag consists of an opaque | |||
| 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 = entity-tag | <sourcecode type="abnf9110"><![CDATA[ ETag = entity-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 t o be a quoted-string | <strong>Note:</strong> Previously, opaque-tag was defined t o be a quoted-string | |||
| (<xref target="RFC2616" sectionFormat="comma" section="3.11"/>); thus, some recipients | (<xref target="RFC2616" sectionFormat="comma" section="3.11"/>); thus, some recipients | |||
| might perform backslash unescaping. Servers therefore ought to avoid | might perform backslash unescaping. Servers therefore ought to avoid | |||
| backslash characters in entity tags. | backslash characters in entity tags. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| <t> | <t> | |||
| An entity-tag can be more reliable for validation than a modification | An entity tag can be more reliable for validation than a modification | |||
| date in situations where it is inconvenient to store modification | date in situations where it is inconvenient to store modification | |||
| dates, where the one-second resolution of HTTP date values is not | dates, where the one-second resolution of HTTP-date values is not | |||
| sufficient, or where modification dates are not consistently maintained. | sufficient, or where modification dates are not consistently maintained. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Examples: | Examples: | |||
| </t> | </t> | |||
| <sourcecode type="http-message"><![CDATA[ETag: "xyzzy" | <sourcecode type="http-message"><![CDATA[ETag: "xyzzy" | |||
| ETag: W/"xyzzy" | ETag: W/"xyzzy" | |||
| ETag: "" | ETag: "" | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| An entity-tag can be either a weak or strong validator, with | An entity tag can be either a weak or strong validator, with | |||
| strong being the default. If an origin server provides an entity-tag | strong being the default. If an origin server provides an entity tag | |||
| for a representation and the generation of that entity-tag does not satisfy | for a representation and the generation of that entity tag does not satisfy | |||
| all of the characteristics of a strong validator | all of the characteristics of a strong validator | |||
| (<xref target="weak.and.strong.validators"/>), then the origin server | (<xref target="weak.and.strong.validators"/>), then the origin server | |||
| <bcp14>MUST</bcp14> mark the entity-tag as weak by prefixing its opaque value | <bcp14>MUST</bcp14> mark the entity tag as weak by prefixing its opaque value | |||
| with "W/" (case-sensitive). | with "W/" (case-sensitive). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A sender <bcp14>MAY</bcp14> send the Etag field in a trailer section (see | A sender <bcp14>MAY</bcp14> send the ETag field in a trailer section (see | |||
| <xref target="trailer.fields"/>). However, since trailers are often | <xref target="trailer.fields"/>). However, since trailers are often | |||
| ignored, it is preferable to send Etag as a header field unless the | ignored, it is preferable to send ETag as a header field unless the | |||
| entity-tag is generated while sending the content. | entity tag is generated while sending the content. | |||
| </t> | </t> | |||
| <section anchor="entity.tag.generation" title="Generation"> | <section anchor="entity.tag.generation" title="Generation"> | |||
| <t> | <t> | |||
| The principle behind entity-tags is that only the service author | The principle behind entity tags is that only the service author | |||
| knows the implementation of a resource well enough to select the | knows the implementation of a resource well enough to select the | |||
| most accurate and efficient validation mechanism for that resource, | most accurate and efficient validation mechanism for that resource, | |||
| and that any such mechanism can be mapped to a simple sequence of | and that any such mechanism can be mapped to a simple sequence of | |||
| octets for easy comparison. Since the value is opaque, there is no | octets for easy comparison. Since the value is opaque, there is no | |||
| need for the client to be aware of how each entity-tag is constructed. | need for the client to be aware of how each entity tag is constructed. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| For example, a resource that has implementation-specific versioning | For example, a resource that has implementation-specific versioning | |||
| applied to all changes might use an internal revision number, perhaps | applied to all changes might use an internal revision number, perhaps | |||
| combined with a variance identifier for content negotiation, to | combined with a variance identifier for content negotiation, to | |||
| accurately differentiate between representations. | accurately differentiate between representations. | |||
| Other implementations might use a collision-resistant hash of | Other implementations might use a collision-resistant hash of | |||
| representation content, a combination of various file attributes, or | representation content, a combination of various file attributes, or | |||
| a modification timestamp that has sub-second resolution. | a modification timestamp that has sub-second resolution. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An origin server <bcp14>SHOULD</bcp14> send an ETag for any selected represen tation | An origin server <bcp14>SHOULD</bcp14> send an ETag for any selected represen tation | |||
| for which detection of changes can be reasonably and consistently | for which detection of changes can be reasonably and consistently | |||
| determined, since the entity-tag's use in conditional requests and | determined, since the entity tag's use in conditional requests and | |||
| evaluating cache freshness (<xref target="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="Comparison"> | <section anchor="entity.tag.comparison" title="Comparison"> | |||
| <t> | <t> | |||
| There are two entity-tag comparison functions, depending on whether or not | There are two entity tag comparison functions, depending on whether or not | |||
| the comparison context allows the use of weak validators: | the comparison context allows the use of weak validators: | |||
| </t> | </t> | |||
| <dl> | <dl> | |||
| <dt> | <dt> | |||
| <em>Strong comparison</em>: | "Strong comparison": | |||
| </dt> | </dt> | |||
| <dd> | <dd> | |||
| two entity-tags are equivalent if both are not weak and their opaque-tags | two entity tags are equivalent if both are not weak and their opaque-tags | |||
| match character-by-character. | match character-by-character. | |||
| </dd> | </dd> | |||
| <dt> | <dt> | |||
| <em>Weak comparison</em>: | "Weak comparison": | |||
| </dt> | </dt> | |||
| <dd> | <dd> | |||
| two entity-tags are equivalent if their opaque-tags match | two entity tags are equivalent if their opaque-tags match | |||
| character-by-character, regardless of either or both being tagged as "weak". | character-by-character, regardless of either or both being tagged as "weak". | |||
| </dd> | </dd> | |||
| </dl> | </dl> | |||
| <t> | <t> | |||
| The example below shows the results for a set of entity-tag pairs and both | The example below shows the results for a set of entity tag pairs and both | |||
| the weak and strong comparison function results: | the weak and strong comparison function results: | |||
| </t> | </t> | |||
| <table align="left"> | <table align="left"> | |||
| <thead> | <thead> | |||
| <tr> | <tr> | |||
| <th>ETag 1</th> | <th>ETag 1</th> | |||
| <th>ETag 2</th> | <th>ETag 2</th> | |||
| <th>Strong Comparison</th> | <th>Strong Comparison</th> | |||
| <th>Weak Comparison</th> | <th>Weak Comparison</th> | |||
| </tr> | </tr> | |||
| skipping to change at line 4223 ¶ | skipping to change at line 4206 ¶ | |||
| <tr> | <tr> | |||
| <td>"1"</td> | <td>"1"</td> | |||
| <td>"1"</td> | <td>"1"</td> | |||
| <td>match</td> | <td>match</td> | |||
| <td>match</td> | <td>match</td> | |||
| </tr> | </tr> | |||
| </tbody> | </tbody> | |||
| </table> | </table> | |||
| </section> | </section> | |||
| <section anchor="example.entity.tag.vs.conneg" | <section anchor="example.entity.tag.vs.conneg" | |||
| title="Example: Entity-Tags Varying on Content-Negotiate d Resources"> | title="Example: Entity Tags Varying on Content-Negotiate d Resources"> | |||
| <t> | <t> | |||
| Consider a resource that is subject to content negotiation | Consider a resource that is subject to content negotiation | |||
| (<xref target="content.negotiation"/>), and where the representations sent in response to | (<xref target="content.negotiation"/>), and where the representations sent in response to | |||
| a GET request vary based on the <xref target="field.accept-encoding" format=" none">Accept-Encoding</xref> request | a GET request vary based on the <xref target="field.accept-encoding" format=" none">Accept-Encoding</xref> request | |||
| header field (<xref target="field.accept-encoding"/>): | header field (<xref target="field.accept-encoding"/>): | |||
| </t> | </t> | |||
| <t> | <t> | |||
| >> Request: | >> Request: | |||
| </t> | </t> | |||
| <sourcecode type="http-message"><![CDATA[GET /index HTTP/1.1 | <sourcecode type="http-message"><![CDATA[GET /index HTTP/1.1 | |||
| skipping to change at line 4276 ¶ | skipping to change at line 4259 ¶ | |||
| ETag: "123-b" | ETag: "123-b" | |||
| Content-Length: 43 | Content-Length: 43 | |||
| Vary: Accept-Encoding | Vary: Accept-Encoding | |||
| Content-Type: text/plain | Content-Type: text/plain | |||
| Content-Encoding: gzip | Content-Encoding: gzip | |||
| ...binary data...]]></sourcecode> | ...binary data...]]></sourcecode> | |||
| <aside> | <aside> | |||
| <t> | <t> | |||
| <strong>Note:</strong> Content codings are a property of the representation data, | <strong>Note:</strong> Content codings are a property of the representation data, | |||
| so a strong entity-tag for a content-encoded representation has to be | so a strong entity tag for a content-encoded representation has to be | |||
| distinct from the entity tag of an unencoded representation to prevent | distinct from the entity tag of an unencoded representation to prevent | |||
| potential conflicts during cache updates and range requests. In contrast, | potential conflicts during cache updates and range requests. In contrast, | |||
| transfer codings (<xref target="HTTP11" section="7"/>) apply only during mes sage transfer | transfer codings (<xref target="HTTP11" section="7"/>) apply only during mes sage transfer | |||
| and do not result in distinct entity-tags. | and do not result in distinct entity tags. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="methods" title="Methods"> | <section anchor="methods" title="Methods"> | |||
| <section anchor="method.overview" title="Overview"> | <section anchor="method.overview" title="Overview"> | |||
| <t> | <t> | |||
| The request method token is the primary source of request semantics; | The request method token is the primary source of request semantics; | |||
| skipping to change at line 4309 ¶ | skipping to change at line 4292 ¶ | |||
| (<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</xref> in much the same way that a remote | a <xref target="target.resource" format="none">target resource</xref> 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 gateway | The method token is case-sensitive because it might be used as a gateway | |||
| to object-based systems with case-sensitive method names. By convention, | to object-based systems with case-sensitive method names. By convention, | |||
| 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 HTTP are | Unlike distributed objects, the standardized request methods in HTTP 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 4331 ¶ | skipping to change at line 4314 ¶ | |||
| applied to any resource, though each resource determines for itself | applied to any resource, though each resource determines for itself | |||
| whether those semantics are implemented or allowed. | whether those semantics are implemented or allowed. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This specification defines a number of standardized methods that are | This specification defines a number of standardized methods that are | |||
| commonly used in HTTP, as outlined by the following table. | commonly used in HTTP, as outlined by the following table. | |||
| </t> | </t> | |||
| <table align="left" anchor="table.of.methods"> | <table align="left" anchor="table.of.methods"> | |||
| <thead> | <thead> | |||
| <tr> | <tr> | |||
| <th>Method</th> | <th>Method Name</th> | |||
| <th>Description</th> | <th>Description</th> | |||
| <th>Ref.</th> | <th>Section</th> | |||
| </tr> | </tr> | |||
| </thead> | </thead> | |||
| <tbody> | <tbody> | |||
| <tr> | <tr> | |||
| <td>GET</td> | <td>GET</td> | |||
| <td>Transfer a current representation of the target resourc e.</td> | <td>Transfer a current representation of the target resourc e.</td> | |||
| <td> | <td> | |||
| <xref target="GET" format="counter"/> | <xref target="GET" format="counter"/> | |||
| </td> | </td> | |||
| </tr> | </tr> | |||
| skipping to change at line 4422 ¶ | skipping to change at line 4405 ¶ | |||
| Additional methods, outside the scope of this specification, have been | Additional methods, outside the scope of this specification, have been | |||
| specified for use in HTTP. All such methods ought to be registered | specified for use in HTTP. All such methods ought to be registered | |||
| within the "Hypertext Transfer Protocol (HTTP) Method Registry", | within the "Hypertext Transfer Protocol (HTTP) Method Registry", | |||
| as described in <xref target="method.extensibility"/>. | as described in <xref target="method.extensibility"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="method.properties" title="Common Method Properties"> | <section anchor="method.properties" title="Common Method Properties"> | |||
| <section anchor="safe.methods" title="Safe Methods"> | <section anchor="safe.methods" title="Safe Methods"> | |||
| <iref item="safe" primary="true"/> | <iref item="safe" primary="true"/> | |||
| <t> | <t> | |||
| Request methods are considered <em>safe</em> if | Request methods are considered "safe" if | |||
| their defined semantics are essentially read-only; i.e., the client does | their defined semantics are essentially read-only; i.e., the client does | |||
| not request, and does not expect, any state change on the origin server | not request, and does not expect, any state change on the origin server | |||
| as a result of applying a safe method to a target resource. Likewise, | as a result of applying a safe method to a target resource. Likewise, | |||
| reasonable use of a safe method is not expected to cause any harm, | reasonable use of a safe method is not expected to cause any harm, | |||
| loss of property, or unusual burden on the origin server. | loss of property, or unusual burden on the origin server. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This definition of safe methods does not prevent an implementation from | This definition of safe methods does not prevent an implementation from | |||
| including behavior that is potentially harmful, that is not entirely read-onl y, | including behavior that is potentially harmful, that is not entirely read-onl y, | |||
| or that causes side effects while invoking a safe method. What is | or that causes side effects while invoking a safe method. What is | |||
| skipping to change at line 4478 ¶ | skipping to change at line 4461 ¶ | |||
| the resource owner <bcp14>MUST</bcp14> disable or disallow that action when i t is | the resource owner <bcp14>MUST</bcp14> disable or disallow that action when i t is | |||
| accessed using a safe request method. Failure to do so will result in | accessed using a safe request method. Failure to do so will result in | |||
| unfortunate side effects when automated processes perform a GET on | unfortunate side effects when automated processes perform a GET on | |||
| every URI reference for the sake of link maintenance, pre-fetching, | every URI reference for the sake of link maintenance, pre-fetching, | |||
| building a search index, etc. | building a search index, etc. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="idempotent.methods" title="Idempotent Methods"> | <section anchor="idempotent.methods" title="Idempotent Methods"> | |||
| <iref item="idempotent" primary="true"/> | <iref item="idempotent" primary="true"/> | |||
| <t> | <t> | |||
| A request method is considered | A request method is considered "idempotent" | |||
| <em>idempotent</em> | ||||
| if the intended effect on the server of multiple identical requests with | if the intended effect on the server of multiple identical requests with | |||
| that method is the same as the effect for a single such request. | that method is the same as the effect for a single such request. | |||
| Of the request methods defined by this | Of the request methods defined by this | |||
| specification, <xref target="PUT" format="none">PUT</xref>, <xref target="DEL ETE" format="none">DELETE</xref>, and safe request | specification, <xref target="PUT" format="none">PUT</xref>, <xref target="DEL ETE" format="none">DELETE</xref>, and safe request | |||
| methods are idempotent. | methods are idempotent. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Like the definition of safe, the idempotent property only applies to | Like the definition of safe, the idempotent property only applies to | |||
| what has been requested by the user; a server is free to log each request | what has been requested by the user; a server is free to log each request | |||
| separately, retain a revision control history, or implement other | separately, retain a revision control history, or implement other | |||
| skipping to change at line 4532 ¶ | skipping to change at line 4514 ¶ | |||
| connection was used. | connection was used. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A proxy <bcp14>MUST NOT</bcp14> automatically retry non-idempotent requests. | A proxy <bcp14>MUST NOT</bcp14> automatically retry non-idempotent requests. | |||
| A client <bcp14>SHOULD NOT</bcp14> automatically retry a failed automatic ret ry. | A client <bcp14>SHOULD NOT</bcp14> automatically retry a failed automatic ret ry. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="cacheable.methods" title="Methods and Caching"> | <section anchor="cacheable.methods" title="Methods and Caching"> | |||
| <t> | <t> | |||
| For a cache to store and use a response, the associated method needs to | For a cache to store and use a response, the associated method needs to | |||
| explicitly allow caching, and detail under what conditions a response can | explicitly allow caching and to detail under what conditions a response can | |||
| be used to satisfy subsequent requests; a method definition which does not | be used to satisfy subsequent requests; a method definition that does not | |||
| do so cannot be cached. For additional requirements see <xref target="CACHING "/>. | do so cannot be cached. For additional requirements see <xref target="CACHING "/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This specification defines caching semantics for GET, HEAD, and POST, | This specification defines caching semantics for GET, HEAD, and POST, | |||
| although the overwhelming majority of cache implementations only support | although the overwhelming majority of cache implementations only support | |||
| GET and HEAD. | GET and HEAD. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="method.definitions" title="Method Definitions"> | <section anchor="method.definitions" title="Method Definitions"> | |||
| skipping to change at line 4704 ¶ | skipping to change at line 4686 ¶ | |||
| a <xref target="status.201" format="none">201 (Created)</xref> response conta ining a <xref target="field.location" format="none">Location</xref> | a <xref target="status.201" format="none">201 (Created)</xref> response conta ining a <xref target="field.location" format="none">Location</xref> | |||
| header field that provides an identifier for the primary resource created | header field that provides an identifier for the primary resource created | |||
| (<xref target="field.location"/>) and a representation that describes the | (<xref target="field.location"/>) and a representation that describes the | |||
| status of the request while referring to the new resource(s). | status of the request while referring to the new resource(s). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Responses to POST requests are only cacheable when they include explicit | Responses to POST requests are only cacheable when they include explicit | |||
| freshness information (see <xref target="CACHING" section="4.2.1"/>) and a | freshness information (see <xref target="CACHING" section="4.2.1"/>) and a | |||
| <xref target="field.content-location" format="none">Content-Location</xref> h eader field that has the same value as | <xref target="field.content-location" format="none">Content-Location</xref> h eader field that has the same value as | |||
| the POST's target URI (<xref target="field.content-location"/>). A cached POS T response can be reused | the POST's target URI (<xref target="field.content-location"/>). A cached POS T response can be reused | |||
| to satisfy a later GET or HEAD request, but not a POST request, since POST | to satisfy a later GET or HEAD request. In contrast, a POST request cannot | |||
| is required to be written through to the origin server, because it is | be satisfied by a cached POST response because POST is potentially unsafe; | |||
| unsafe; see <xref target="CACHING" section="4"/>. | see <xref target="CACHING" section="4"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the result of processing a POST would be equivalent to a representation | If the result of processing a POST would be equivalent to a representation | |||
| of an existing resource, an origin server <bcp14>MAY</bcp14> redirect the use r agent to | of an existing resource, an origin server <bcp14>MAY</bcp14> redirect the use r agent to | |||
| that resource by sending a <xref target="status.303" format="none">303 (See O ther)</xref> response with the | that resource by sending a <xref target="status.303" format="none">303 (See O ther)</xref> response with the | |||
| existing resource's identifier in the <xref target="field.location" format="n one">Location</xref> field. | existing resource's identifier in the <xref target="field.location" format="n one">Location</xref> field. | |||
| This has the benefits of providing the user agent a resource identifier | This has the benefits of providing the user agent a resource identifier | |||
| and transferring the representation via a method more amenable to shared | and transferring the representation via a method more amenable to shared | |||
| caching, though at the cost of an extra request if the user agent does not | caching, though at the cost of an extra request if the user agent does not | |||
| already have the representation cached. | already have the representation cached. | |||
| skipping to change at line 4804 ¶ | skipping to change at line 4786 ¶ | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An origin server <bcp14>MUST NOT</bcp14> send a validator field | An origin server <bcp14>MUST NOT</bcp14> send a validator field | |||
| (<xref target="response.validator"/>), such as an <xref target="field.etag" f ormat="none">ETag</xref> or | (<xref target="response.validator"/>), such as an <xref target="field.etag" f ormat="none">ETag</xref> or | |||
| <xref target="field.last-modified" format="none">Last-Modified</xref> field, in a successful response to PUT unless | <xref target="field.last-modified" format="none">Last-Modified</xref> field, in a successful response to PUT unless | |||
| the request's representation data was saved without any transformation | the request's representation data was saved without any transformation | |||
| applied to the content (i.e., the resource's new representation data is | applied to the content (i.e., the resource's new representation data is | |||
| identical to the content received in the PUT request) and the | identical to the content received in the PUT request) and the | |||
| validator field value reflects the new representation. | validator field value reflects the new representation. | |||
| This requirement allows a user agent to know when the representation it | This requirement allows a user agent to know when the representation it | |||
| sent (and retains in memory) is the result of the PUT, and thus doesn't | sent (and retains in memory) is the result of the PUT, and thus it doesn't | |||
| need to be retrieved again from the origin server. The new validator(s) | need to be retrieved again from the origin server. The new validator(s) | |||
| received in the response can be used for future conditional requests in | received in the response can be used for future conditional requests in | |||
| order to prevent accidental overwrites (<xref target="preconditions"/>). | order to prevent accidental overwrites (<xref target="preconditions"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The fundamental difference between the POST and PUT methods is | The fundamental difference between the POST and PUT methods is | |||
| highlighted by the different intent for the enclosed representation. | highlighted by the different intent for the enclosed representation. | |||
| The target resource in a POST request is intended to handle the | The target resource in a POST request is intended to handle the | |||
| enclosed representation according to the resource's own semantics, | enclosed representation according to the resource's own semantics, | |||
| whereas the enclosed representation in a PUT request is defined as | whereas the enclosed representation in a PUT request is defined as | |||
| skipping to change at line 4876 ¶ | skipping to change at line 4858 ¶ | |||
| or might not be destroyed by the origin server, and the associated storage | or might not be destroyed by the origin server, and the associated storage | |||
| might or might not be reclaimed, depending entirely on the nature of the | might or might not be reclaimed, depending entirely on the nature of the | |||
| resource and its implementation by the origin server (which are beyond the | resource and its implementation by the origin server (which are beyond the | |||
| scope of this specification). Likewise, other implementation aspects of a | scope of this specification). Likewise, other implementation aspects of a | |||
| resource might need to be deactivated or archived as a result of a DELETE, | resource might need to be deactivated or archived as a result of a DELETE, | |||
| such as database or gateway connections. In general, it is assumed that the | such as database or gateway connections. In general, it is assumed that the | |||
| origin server will only allow DELETE on resources for which it has a | origin server will only allow DELETE on resources for which it has a | |||
| prescribed mechanism for accomplishing the deletion. | prescribed mechanism for accomplishing the deletion. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Relatively few resources allow the DELETE method — its primary use | Relatively few resources allow the DELETE method -- its primary use | |||
| is for remote authoring environments, where the user has some direction | is for remote authoring environments, where the user has some direction | |||
| regarding its effect. For example, a resource that was previously created | regarding its effect. For example, a resource that was previously created | |||
| using a PUT request, or identified via the Location header field after a | using a PUT request, or identified via the Location header field after a | |||
| <xref target="status.201" format="none">201 (Created)</xref> response to a PO ST request, might allow a | <xref target="status.201" format="none">201 (Created)</xref> response to a PO ST request, might allow a | |||
| corresponding DELETE request to undo those actions. Similarly, custom | corresponding DELETE request to undo those actions. Similarly, custom | |||
| user agent implementations that implement an authoring function, such as | user agent implementations that implement an authoring function, such as | |||
| revision control clients using HTTP for remote operations, might use | revision control clients using HTTP for remote operations, might use | |||
| DELETE based on an assumption that the server's URI space has been crafted | DELETE based on an assumption that the server's URI space has been crafted | |||
| to correspond to a version repository. | to correspond to a version repository. | |||
| </t> | </t> | |||
| skipping to change at line 5068 ¶ | skipping to change at line 5050 ¶ | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="TRACE" title="TRACE"> | <section anchor="TRACE" title="TRACE"> | |||
| <iref primary="true" item="TRACE method"/> | <iref primary="true" item="TRACE method"/> | |||
| <iref primary="true" item="Method" subitem="TRACE"/> | <iref primary="true" item="Method" subitem="TRACE"/> | |||
| <t> | <t> | |||
| The TRACE method requests a remote, application-level loop-back of the | The TRACE method requests a remote, application-level loop-back of the | |||
| request message. The final recipient of the request <bcp14>SHOULD</bcp14> ref lect the | request message. The final recipient of the request <bcp14>SHOULD</bcp14> ref lect the | |||
| message received, excluding some fields described below, back to the client | message received, excluding some fields described below, back to the client | |||
| as the content of a <xref target="status.200" format="none">200 (OK)</xref> r esponse. The "message/http" | as the content of a <xref target="status.200" format="none">200 (OK)</xref> r esponse. The "message/http" | |||
| (<xref target="HTTP11" section="10.1"/>) format is one way to do so. | format (<xref target="HTTP11" section="10.1"/>) is one way to do so. | |||
| The final recipient is either the origin server or the first server to | The final recipient is either the origin server or the first server to | |||
| receive a <xref target="field.max-forwards" format="none">Max-Forwards</xref> value of zero (0) in the request | receive a <xref target="field.max-forwards" format="none">Max-Forwards</xref> value of zero (0) in the request | |||
| (<xref target="field.max-forwards"/>). | (<xref target="field.max-forwards"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A client <bcp14>MUST NOT</bcp14> generate fields in a TRACE request containin g | A client <bcp14>MUST NOT</bcp14> generate fields in a TRACE request containin g | |||
| sensitive data that might be disclosed by the response. For example, it | sensitive data that might be disclosed by the response. For example, it | |||
| would be foolish for a user agent to send stored user credentials | would be foolish for a user agent to send stored user credentials | |||
| (<xref target="authentication"/>) or cookies <xref target="COOKIE"/> in a TRA CE | (<xref target="authentication"/>) or cookies <xref target="COOKIE"/> in a TRA CE | |||
| request. The final recipient of the request <bcp14>SHOULD</bcp14> exclude any request | request. The final recipient of the request <bcp14>SHOULD</bcp14> exclude any request | |||
| skipping to change at line 5118 ¶ | skipping to change at line 5100 ¶ | |||
| <iref primary="true" item="Fields" subitem="Expect"/> | <iref primary="true" item="Fields" subitem="Expect"/> | |||
| <iref primary="true" item="Header Fields" subitem="Expect"/> | <iref primary="true" item="Header Fields" subitem="Expect"/> | |||
| <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 = #expectation | <sourcecode type="abnf9110"><![CDATA[ Expect = #expectation | |||
| 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> | |||
| A server that receives an Expect field value containing a member other than | A server that receives an Expect field value containing a member other than | |||
| <xref target="field.expect" format="none">100-continue</xref> | <xref target="field.expect" format="none">100-continue</xref> | |||
| <bcp14>MAY</bcp14> respond with a | <bcp14>MAY</bcp14> respond with a | |||
| <xref target="status.417" format="none">417 (Expectation Failed)</xref> statu s code to indicate that the | <xref target="status.417" format="none">417 (Expectation Failed)</xref> statu s code to indicate that the | |||
| unexpected expectation cannot be met. | unexpected expectation cannot be met. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A <em>100-continue</em> expectation informs recipients that the | A "100-continue" expectation informs recipients that the | |||
| client is about to send (presumably large) content in this request | client is about to send (presumably large) content in this request | |||
| and wishes to receive a <xref target="status.100" format="none">100 (Continue )</xref> interim response if | and wishes to receive a <xref target="status.100" format="none">100 (Continue )</xref> interim response if | |||
| the method, target URI, and header fields are not sufficient to cause an imme diate | the method, target URI, and header fields are not sufficient to cause an imme diate | |||
| success, redirect, or error response. This allows the client to wait for an | success, redirect, or error response. This allows the client to wait for an | |||
| indication that it is worthwhile to send the content before actually | indication that it is worthwhile to send the content before actually | |||
| doing so, which can improve efficiency when the data is huge or | doing so, which can improve efficiency when the data is huge or | |||
| when the client anticipates that an error is likely (e.g., when sending a | when the client anticipates that an error is likely (e.g., when sending a | |||
| state-changing method, for the first time, without previously verified | state-changing method, for the first time, without previously verified | |||
| authentication credentials). | authentication credentials). | |||
| </t> | </t> | |||
| skipping to change at line 5219 ¶ | skipping to change at line 5201 ¶ | |||
| request content, unless the connection is closed prematurely. | request content, unless the connection is closed prematurely. | |||
| </li> | </li> | |||
| <li> | <li> | |||
| A server that responds with a final status code before reading the | A server that responds with a final status code before reading the | |||
| entire request content <bcp14>SHOULD</bcp14> indicate whether it intends to | entire request content <bcp14>SHOULD</bcp14> indicate whether it intends to | |||
| close the connection (e.g., see <xref target="HTTP11" section="9.6"/>) or | close the connection (e.g., see <xref target="HTTP11" section="9.6"/>) or | |||
| continue reading the request content. | continue reading the request content. | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| An origin server <bcp14>MUST</bcp14>, upon receiving an HTTP/1.1 (or later) r equest that has a method, target URI, | Upon receiving an HTTP/1.1 (or later) request that has a method, target URI, | |||
| and complete header section that contains a 100-continue expectation and | and complete header section that contains a 100-continue expectation and | |||
| an indication that request content will follow, either send an immediate | an indication that request content will follow, an origin server <bcp14>MUST< | |||
| response with a final status code, if that status can be determined by | /bcp14> | |||
| examining just the method, target URI, and header fields, or send an immediat | send either: | |||
| e | </t> | |||
| <xref target="status.100" format="none">100 (Continue)</xref> response to enc | <ul> | |||
| ourage the client to send the | <li>an immediate response with a final status code, if that st | |||
| request content. The origin server <bcp14>MUST NOT</bcp14> wait for the conte | atus can be | |||
| nt | determined by examining just the method, target URI, and header fields, or | |||
| </li> | ||||
| <li>an immediate <xref target="status.100" format="none">100 ( | ||||
| Continue)</xref> response to encourage the client | ||||
| to send the request content.</li> | ||||
| </ul> | ||||
| <t> | ||||
| The origin server <bcp14>MUST NOT</bcp14> wait for the content | ||||
| before sending the <xref target="status.100" format="none">100 (Continue)</xr ef> response. | before sending the <xref target="status.100" format="none">100 (Continue)</xr ef> response. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A proxy <bcp14>MUST</bcp14>, upon receiving an HTTP/1.1 (or later) request th at has a method, target URI, | Upon receiving an HTTP/1.1 (or later) request that has a method, target URI, | |||
| and complete header section that contains a 100-continue expectation and | and complete header section that contains a 100-continue expectation and | |||
| indicates a request content will follow, either send an immediate | indicates a request content will follow, a proxy <bcp14>MUST</bcp14> either: | |||
| </t> | ||||
| <ul> | ||||
| <li>send an immediate | ||||
| response with a final status code, if that status can be determined by | response with a final status code, if that status can be determined by | |||
| examining just the method, target URI, and header fields, or begin forwarding | examining just the method, target URI, and header fields, or</li> | |||
| the | <li>forward the request toward the origin server by sending a | |||
| request toward the origin server by sending a corresponding request-line | corresponding | |||
| and header section to the next inbound server. If the proxy believes (from | request-line and header section to the next inbound server.</li> | |||
| configuration or past interaction) that the next inbound server only | </ul> | |||
| supports HTTP/1.0, the proxy <bcp14>MAY</bcp14> generate an immediate | <t> | |||
| <xref target="status.100" format="none">100 (Continue)</xref> response to enc | If the proxy believes (from configuration or past interaction) that the | |||
| ourage the client to begin | next inbound server only supports HTTP/1.0, the proxy <bcp14>MAY</bcp14> gene | |||
| sending the content. | rate an | |||
| immediate <xref target="status.100" format="none">100 (Continue)</xref> respo | ||||
| nse to encourage the client to | ||||
| begin sending the content. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="field.from" title="From"> | <section anchor="field.from" title="From"> | |||
| <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 human | The "From" header field contains an Internet email address for a human | |||
| user who controls the requesting user agent. The address ought to be | user who controls the requesting user agent. The address ought to be | |||
| 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 = mailbox | <sourcecode type="abnf9110"><![CDATA[ From = mailbox | |||
| 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: webmaster@example. org | <sourcecode type="http-message"><![CDATA[From: spider-admin@examp le.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. | |||
| A user agent <bcp14>SHOULD NOT</bcp14> send a From header field without expli cit | A user agent <bcp14>SHOULD NOT</bcp14> send a From header field without expli cit | |||
| configuration by the user, since that might conflict with the user's | configuration by the user, since that might conflict with the user's | |||
| privacy interests or their site's security policy. | privacy interests or their site's security policy. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A robotic user agent <bcp14>SHOULD</bcp14> send a valid From header field so that the | A robotic user agent <bcp14>SHOULD</bcp14> send a valid From header field so that the | |||
| person responsible for running the robot can be contacted if problems | person responsible for running the robot can be contacted if problems | |||
| skipping to change at line 5294 ¶ | skipping to change at line 5287 ¶ | |||
| <iref primary="true" item="Referer header field"/> | <iref primary="true" item="Referer header field"/> | |||
| <t> | <t> | |||
| The "Referer" [sic] header field allows the user agent to specify a URI | The "Referer" [sic] header field allows the user agent to specify a URI | |||
| reference for the resource from which the <xref target="target.resource" form at="none">target URI</xref> was | reference for the resource from which the <xref target="target.resource" form at="none">target URI</xref> was | |||
| obtained (i.e., the "referrer", though the field name is misspelled). | obtained (i.e., the "referrer", though the field name is misspelled). | |||
| A user agent <bcp14>MUST NOT</bcp14> include the fragment and userinfo compon ents | A user agent <bcp14>MUST NOT</bcp14> include the fragment and userinfo compon ents | |||
| of the URI reference <xref target="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 = absolute-URI / p artial-URI | <sourcecode type="abnf9110"><![CDATA[ Referer = absolute-URI / p artial-URI | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| The field value is either an <xref target="uri.references" format="none">abso lute-URI</xref> or a | The field value is either an <xref target="uri.references" format="none">abso lute-URI</xref> or a | |||
| <xref target="uri.references" format="none">partial-URI</xref>. In the latter case (<xref target="uri"/>), | <xref target="uri.references" format="none">partial-URI</xref>. In the latter case (<xref target="uri"/>), | |||
| the referenced URI is relative to the target URI | the referenced URI is relative to the target URI | |||
| (<xref target="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 other | The Referer header field allows servers to generate back-links to other | |||
| resources for simple analytics, logging, optimized caching, etc. It also | resources for simple analytics, logging, optimized caching, etc. It also | |||
| skipping to change at line 5360 ¶ | skipping to change at line 5353 ¶ | |||
| An intermediary <bcp14>SHOULD NOT</bcp14> modify or delete the Referer header field when | An intermediary <bcp14>SHOULD NOT</bcp14> modify or delete the Referer header field when | |||
| the field value shares the same scheme and host as the target URI. | the field value shares the same scheme and host as the target URI. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="field.te" title="TE"> | <section anchor="field.te" title="TE"> | |||
| <iref primary="true" item="Fields" subitem="TE"/> | <iref primary="true" item="Fields" subitem="TE"/> | |||
| <iref primary="true" item="Header Fields" subitem="TE"/> | <iref primary="true" item="Header Fields" subitem="TE"/> | |||
| <iref primary="true" item="TE header field"/> | <iref primary="true" item="TE header field"/> | |||
| <t> | <t> | |||
| The "TE" header field describes capabilities of the client with regard to | The "TE" header field describes capabilities of the client with regard to | |||
| transfer encodings and trailer sections. | transfer codings and trailer sections. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A TE field with a "trailers" member sent in a request indicates that the | As described in <xref target="trailer.fields"/>, | |||
| client will not discard trailer fields, as described in | a TE field with a "trailers" member sent in a request indicates that the | |||
| <xref target="trailer.fields"/>. | client will not discard trailer fields. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| TE is also used within HTTP/1.1 to advise servers about what transfer | TE is also used within HTTP/1.1 to advise servers about which transfer | |||
| codings the client is able to accept in a response. | codings the client is able to accept in a response. | |||
| As of publication, only HTTP/1.1 uses transfer codings | As of publication, only HTTP/1.1 uses transfer codings | |||
| (see <xref target="HTTP11" section="7"/>). | (see <xref target="HTTP11" section="7"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The TE field value is a list of members, with each member (aside from | The TE field value is a list of members, with each member (aside from | |||
| "trailers") consisting of a transfer coding name token with an optional | "trailers") consisting of a transfer coding name token with an optional | |||
| weight indicating the client's relative preference for that | weight indicating the client's relative preference for that | |||
| transfer coding (<xref target="quality.values"/>) and | transfer coding (<xref target="quality.values"/>) and | |||
| optional parameters for that transfer coding. | optional parameters for that transfer coding. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="TE"/> | <iref primary="true" item="Grammar" subitem="TE"/> | |||
| <iref primary="true" item="Grammar" subitem="t-codings"/> | <iref primary="true" item="Grammar" subitem="t-codings"/> | |||
| <iref primary="true" item="Grammar" subitem="transfer-coding"/> | <iref primary="true" item="Grammar" subitem="transfer-coding"/> | |||
| <iref primary="true" item="Grammar" subitem="transfer-parameter"/ > | <iref primary="true" item="Grammar" subitem="transfer-parameter"/ > | |||
| <sourcecode type="abnf7230"><![CDATA[ TE = #t-co dings | <sourcecode type="abnf9110"><![CDATA[ TE = #t-co dings | |||
| 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 option within the | A sender of TE <bcp14>MUST</bcp14> also send a "TE" connection option within the | |||
| <xref target="field.connection" format="none">Connection</xref> header field (<xref target="field.connection"/>) | <xref target="field.connection" format="none">Connection</xref> header 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 5409 ¶ | skipping to change at line 5402 ¶ | |||
| <t> | <t> | |||
| The "User-Agent" header field contains information about the user agent | The "User-Agent" header field contains information about the user agent | |||
| originating the request, which is often used by servers to help identify | originating the request, which is often used by servers to help identify | |||
| 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 analytics | responses to avoid particular user agent limitations, and for analytics | |||
| regarding browser or operating system use. A user agent <bcp14>SHOULD</bcp14> send | regarding browser or operating system use. A user agent <bcp14>SHOULD</bcp14> send | |||
| a User-Agent header field in each request unless specifically configured not | a User-Agent header field in each request unless specifically configured 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 = product *( RW S ( product / comment ) ) | <sourcecode type="abnf9110"><![CDATA[ User-Agent = product *( RW S ( product / comment ) ) | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| The User-Agent field value consists of one or more product identifiers, | The User-Agent field value consists of one or more product identifiers, | |||
| each followed by zero or more comments (<xref target="comments"/>), which tog ether | each followed by zero or more comments (<xref target="comments"/>), which tog ether | |||
| 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 order of | By convention, the product identifiers are listed in decreasing order of | |||
| their significance for identifying the user agent software. Each product | their significance for identifying the user agent software. Each product | |||
| 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-version"/> | <iref primary="true" item="Grammar" subitem="product-version"/> | |||
| <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 advertisin g or other | to identify the product; a sender <bcp14>MUST NOT</bcp14> generate advertisin g or other | |||
| nonessential information within the product identifier. | nonessential information within the product identifier. | |||
| A sender <bcp14>SHOULD NOT</bcp14> generate information in <xref target="fiel d.user-agent" format="none">product-version</xref> | A sender <bcp14>SHOULD NOT</bcp14> generate information in <xref target="fiel d.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 5473 ¶ | skipping to change at line 5466 ¶ | |||
| <iref primary="true" item="Fields" subitem="Allow"/> | <iref primary="true" item="Fields" subitem="Allow"/> | |||
| <iref primary="true" item="Header Fields" subitem="Allow"/> | <iref primary="true" item="Header Fields" subitem="Allow"/> | |||
| <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">target resource </xref>. The purpose of this field | supported by the <xref target="target.resource" format="none">target resource </xref>. The purpose of this field | |||
| is strictly to inform the recipient of valid request methods associated | is strictly to inform the recipient of valid request methods associated | |||
| 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, HEAD, PUT | <sourcecode type="http-message"><![CDATA[Allow: GET, HEAD, PUT | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| The actual set of allowed methods is defined by the origin server at the | The actual set of allowed methods is defined by the origin server at 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)</xref> respo nse and <bcp14>MAY</bcp14> do so in any | <xref target="status.405" format="none">405 (Method Not Allowed)</xref> respo nse and <bcp14>MAY</bcp14> do so in any | |||
| other response. An empty Allow field value indicates that the resource | other response. An empty Allow field value indicates that the resource | |||
| allows no methods, which might occur in a 405 response if the resource has | allows no methods, which might occur in a 405 response if the resource has | |||
| been temporarily disabled by configuration. | been temporarily disabled by configuration. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A proxy <bcp14>MUST NOT</bcp14> modify the Allow header field — it does not n eed | A proxy <bcp14>MUST NOT</bcp14> modify the Allow header field -- it does not need | |||
| to understand all of the indicated methods in order to handle them | to understand all of the indicated methods in order to handle them | |||
| according to the generic message handling rules. | according to the generic message handling rules. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <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="Location"/> | <iref primary="true" item="Header Fields" subitem="Location"/> | |||
| <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 relationship is | specific resource in relation to the response. The type of relationship is | |||
| defined by the combination of request method and status code semantics. | defined by the combination of request method and status code semantics. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="Location"/> | <iref primary="true" item="Grammar" subitem="Location"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Location = URI-reference | <sourcecode type="abnf9110"><![CDATA[ Location = URI-reference | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| The field value consists of a single URI-reference. When it has the form | The field value consists of a single URI-reference. When it has the form | |||
| of a relative reference (<xref target="URI" sectionFormat="comma" section="4. 2"/>), | of a relative reference (<xref target="URI" sectionFormat="comma" section="4. 2"/>), | |||
| the final value is computed by resolving it against the target | the final value is computed by resolving it against the target | |||
| URI (<xref target="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> responses, t he Location value refers to | For <xref target="status.201" format="none">201 (Created)</xref> responses, t he Location value refers to | |||
| the primary resource created by the request. | the primary resource created by the request. | |||
| skipping to change at line 5595 ¶ | skipping to change at line 5588 ¶ | |||
| 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 (Redirection)< /xref> response, Retry-After | When sent with any <xref target="status.3xx" format="none">3xx (Redirection)< /xref> response, Retry-After | |||
| indicates the minimum time that the user agent is asked to wait before | indicates the minimum time that the user agent is asked to wait before | |||
| 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-After"/> | <iref primary="true" item="Grammar" subitem="Retry-After"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Retry-After = HTTP-date / delay-seconds | <sourcecode type="abnf9110"><![CDATA[ Retry-After = HTTP-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, representing time | A delay-seconds value is a non-negative decimal integer, representing time | |||
| in seconds. | in seconds. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="delay-seconds"/> | <iref primary="true" item="Grammar" subitem="delay-seconds"/> | |||
| <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: Fri, 31 Dec 1999 23:59:59 GMT | <sourcecode type="http-message"><![CDATA[Retry-After: Fri, 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 5628 ¶ | skipping to change at line 5621 ¶ | |||
| <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 interoperability | used by clients to help identify the scope of reported interoperability | |||
| problems, to work around or tailor requests to avoid particular server | problems, to work around or tailor requests to avoid particular server | |||
| 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 res ponses. | An origin server <bcp14>MAY</bcp14> generate a Server header field in its res ponses. | |||
| </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 identifiers, ea ch | The Server header field value consists of one or more product identifiers, ea ch | |||
| followed by zero or more comments (<xref target="comments"/>), which together | followed by zero or more comments (<xref target="comments"/>), which 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 order of | By convention, the product identifiers are listed in decreasing order 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 5662 ¶ | skipping to change at line 5655 ¶ | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <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 authentication, | HTTP provides a general framework for access control and authentication, | |||
| 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 client to | can be used by a server to challenge a client request and by a client 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 = token | <sourcecode type="abnf9110"><![CDATA[ auth-scheme = token | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| Aside from the general framework, this document does not specify any | Aside from the general framework, this document does not specify any | |||
| 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 defined by | For example, the "basic" and "digest" authentication schemes are defined by | |||
| <xref target="RFC7617" format="none">RFC 7617</xref> and | <xref target="RFC7617"/> and | |||
| <xref target="RFC7616" format="none">RFC 7616</xref>, respectively. | <xref target="RFC7616"/>, respectively. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="auth.params" title="Authentication Parameters"> | <section anchor="auth.params" title="Authentication Parameters"> | |||
| <t> | <t> | |||
| The authentication scheme is followed by additional information necessary | The authentication scheme is followed by additional information necessary | |||
| for achieving authentication via that scheme as either a | for achieving authentication via that scheme as either a | |||
| comma-separated list of parameters or a single sequence of characters | comma-separated list of parameters or a single sequence of characters | |||
| capable of holding base64-encoded information. | capable of holding base64-encoded information. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="token68"/> | <iref primary="true" item="Grammar" subitem="token68"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ token68 = 1*( ALPHA / DIGIT / | <sourcecode type="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 base16 (hex) | base64, base64url (URL and filename safe alphabet), base32, or base16 (hex) | |||
| encoding, with or without padding, but excluding whitespace | encoding, with or without padding, but excluding whitespace | |||
| (<xref target="RFC4648"/>). | (<xref target="RFC4648"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Authentication parameters are name=value pairs, where the name token is | Authentication parameters are name/value pairs, where the name token is | |||
| matched case-insensitively | matched case-insensitively | |||
| and each parameter name <bcp14>MUST</bcp14> only occur once per challenge. | and each parameter name <bcp14>MUST</bcp14> only occur once per challenge. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="auth-param"/> | <iref primary="true" item="Grammar" subitem="auth-param"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ auth-param = token BWS "= " BWS ( token / quoted-string ) | <sourcecode type="abnf9110"><![CDATA[ auth-param = token BWS "= " BWS ( token / quoted-string ) | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| Parameter values can be expressed either as "token" or as "quoted-string" | Parameter values can be expressed either as "token" or as "quoted-string" | |||
| (<xref target="fields.components"/>). | (<xref target="fields.components"/>). | |||
| Authentication scheme definitions need to accept both notations, both for | Authentication scheme definitions need to accept both notations, both 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 5731 ¶ | skipping to change at line 5724 ¶ | |||
| <xref target="field.www-authenticate" format="none">WWW-Authenticate</xref> h eader field containing at least one | <xref target="field.www-authenticate" format="none">WWW-Authenticate</xref> h eader 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, including a | used by a proxy to challenge the authorization of a client, including a | |||
| <xref target="field.proxy-authenticate" format="none">Proxy-Authenticate</xre f> header field containing at least one | <xref target="field.proxy-authenticate" format="none">Proxy-Authenticate</xre f> 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 schemes | scheme. A workaround for this problem is to list well-supported schemes | |||
| (such as "basic") first.<!-- see https://greenbytes.de/tech/tc/httpauth/#mu ltibasicunknown2 --> | (such as "basic") first. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| <t> | <t> | |||
| A user agent that wishes to authenticate itself with an origin server | A user agent that wishes to authenticate itself with an origin server | |||
| — usually, but not necessarily, after receiving a | -- usually, but not necessarily, after receiving a | |||
| <xref target="status.401" format="none">401 (Unauthorized)</xref> — can do so | <xref target="status.401" format="none">401 (Unauthorized)</xref> -- can do s | |||
| by including an | o by including an | |||
| <xref target="field.authorization" format="none">Authorization</xref> header field with the request. | <xref target="field.authorization" format="none">Authorization</xref> header field with the request. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A client that wishes to authenticate itself with a proxy — usually, | A client that wishes to authenticate itself with a proxy -- usually, | |||
| but not necessarily, after receiving a | but not necessarily, after receiving a | |||
| <xref target="status.407" format="none">407 (Proxy Authentication Required)</ xref> — can do so by | <xref target="status.407" format="none">407 (Proxy Authentication Required)</ xref> -- can do so by | |||
| including a <xref target="field.proxy-authorization" format="none">Proxy-Auth orization</xref> header field with the | including a <xref target="field.proxy-authorization" format="none">Proxy-Auth orization</xref> header field with the | |||
| request. | request. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="credentials" title="Credentials"> | <section anchor="credentials" title="Credentials"> | |||
| <t> | <t> | |||
| Both the <xref target="field.authorization" format="none">Authorization</xref > field value and the | Both the <xref target="field.authorization" format="none">Authorization</xref > field value and the | |||
| <xref target="field.proxy-authorization" format="none">Proxy-Authorization</x ref> field value contain the client's | <xref target="field.proxy-authorization" format="none">Proxy-Authorization</x ref> field value contain the client's | |||
| credentials for the realm of the resource being requested, based upon a | credentials for the realm of the resource being requested, based upon a | |||
| challenge received in a response (possibly at some point in the past). | challenge received in a response (possibly at some point in the past). | |||
| When creating their values, the user agent ought to do so by selecting the | When creating their values, the user agent ought to do so by selecting 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 significant | Transmission of credentials within header field values implies significant | |||
| security considerations regarding the confidentiality of the underlying | security considerations regarding the confidentiality of the underlying | |||
| 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 credentials, | Upon receipt of a request for a protected resource that omits credentials, | |||
| contains invalid credentials (e.g., a bad password) or partial credentials | contains invalid credentials (e.g., a bad password) or partial credentials | |||
| (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" forma t="none">401 (Unauthorized)</xref> response | an origin server <bcp14>SHOULD</bcp14> send a <xref target="status.401" forma t="none">401 (Unauthorized)</xref> response | |||
| that contains a <xref target="field.www-authenticate" format="none">WWW-Authe nticate</xref> header field with at least | that contains a <xref target="field.www-authenticate" format="none">WWW-Authe nticate</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 5809 ¶ | skipping to change at line 5802 ¶ | |||
| <t> | <t> | |||
| Note that various custom mechanisms for user authentication use the | Note that various custom mechanisms for user authentication use the | |||
| Set-Cookie and Cookie header fields, defined in <xref target="COOKIE"/>, | Set-Cookie and Cookie header fields, defined in <xref target="COOKIE"/>, | |||
| for passing tokens related to authentication. | for passing tokens related to authentication. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="protection.space" | <section anchor="protection.space" | |||
| title="Establishing a Protection Space (Realm)"> | title="Establishing a Protection Space (Realm)"> | |||
| <iref item="Protection Space"/> | <iref item="Protection Space"/> | |||
| <iref item="Realm"/> | <iref item="Realm"/> | |||
| <iref item="Origin"/> | <iref item="origin"/> | |||
| <t> | <t> | |||
| The <em>realm</em> authentication parameter is reserved for use by | The "realm" authentication parameter is reserved for use by | |||
| authentication schemes that wish to indicate a scope of protection. | authentication schemes that wish to indicate a scope of protection. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A <em>protection space</em> is defined by the origin (see | A "protection space" is defined by the origin (see | |||
| <xref target="origin"/>) of the | <xref target="origin"/>) of the | |||
| server being accessed, in combination with the realm value if present. | server being accessed, in combination with the realm value if present. | |||
| These realms allow the protected resources on a server to be | These realms allow the protected resources on a server to be | |||
| partitioned into a set of protection spaces, each with its own | partitioned into a set of protection spaces, each with its own | |||
| authentication scheme and/or authorization database. The realm value | authentication scheme and/or authorization database. The realm value | |||
| is a string, generally assigned by the origin server, that can have | is a string, generally assigned by the origin server, that can have | |||
| additional semantics specific to the authentication scheme. Note that a | additional semantics specific to the authentication scheme. Note that a | |||
| response can have multiple challenges with the same auth-scheme but | response can have multiple challenges with the same auth-scheme but | |||
| with different realms. | with different realms. | |||
| </t> | </t> | |||
| skipping to change at line 5860 ¶ | skipping to change at line 5853 ¶ | |||
| title="Authenticating Users to Origin Servers"> | title="Authenticating Users to Origin Servers"> | |||
| <section anchor="field.www-authenticate" title="WWW-Authenticate"> | <section anchor="field.www-authenticate" title="WWW-Authenticate"> | |||
| <iref primary="true" item="Fields" subitem="WWW-Authenticate"/> | <iref primary="true" item="Fields" subitem="WWW-Authenticate"/> | |||
| <iref primary="true" item="Header Fields" subitem="WWW-Authentica te"/> | <iref primary="true" item="Header Fields" subitem="WWW-Authentica te"/> | |||
| <iref primary="true" item="WWW-Authenticate header field"/> | <iref primary="true" item="WWW-Authenticate header field"/> | |||
| <t> | <t> | |||
| The "WWW-Authenticate" response header field indicates the authentication | The "WWW-Authenticate" response header field indicates the authentication | |||
| 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-Authenticate"/> | <iref primary="true" item="Grammar" subitem="WWW-Authenticate"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ WWW-Authenticate = #challe nge | <sourcecode type="abnf9110"><![CDATA[ WWW-Authenticate = #challe nge | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| A server generating a <xref target="status.401" format="none">401 (Unauthoriz ed)</xref> response | A server generating a <xref target="status.401" format="none">401 (Unauthoriz ed)</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 fi eld | challenge. A server <bcp14>MAY</bcp14> generate a WWW-Authenticate header fi eld | |||
| 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 5886 ¶ | skipping to change at line 5879 ¶ | |||
| comma-separated list of authentication parameters. Furthermore, the header | comma-separated list of authentication parameters. Furthermore, the header | |||
| field itself can occur multiple times. | field itself can occur multiple times. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| For instance: | For instance: | |||
| </t> | </t> | |||
| <sourcecode type="http-message"><![CDATA[WWW-Authenticate: Basic realm="simple", Newauth realm="apps", | <sourcecode type="http-message"><![CDATA[WWW-Authenticate: Basic realm="simple", Newauth realm="apps", | |||
| type=1, title="Login to \"apps\"" | type=1, title="Login to \"apps\"" | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| This header field contains two challenges; one for the "Basic" scheme with | This header field contains two challenges, one for the "Basic" scheme with | |||
| a realm value of "simple", and another for the "Newauth" scheme with a | a realm value of "simple" and another for the "Newauth" scheme with a | |||
| realm value of "apps", and two additional parameters "type" and "title". | realm value of "apps". It also contains two additional parameters, "type" and | |||
| "title". | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Some user agents do not recognise this form, however. As a result, sending | Some user agents do not recognize this form, however. As a result, sending | |||
| a WWW-Authenticate field value with more than one member on the same field | a WWW-Authenticate field value with more than one member on the same field | |||
| line might not be interoperable. | line might not be interoperable. | |||
| </t> | </t> | |||
| <aside> | <aside> | |||
| <t> | <t> | |||
| <strong>Note:</strong> The challenge grammar production use s the list syntax as | <strong>Note:</strong> The challenge grammar production use s the list syntax as | |||
| well. Therefore, a sequence of comma, whitespace, and comma can be | well. Therefore, a sequence of comma, whitespace, and comma can be | |||
| considered either as applying to the preceding challenge, or to be an | considered either as applying to the preceding challenge, or to be an | |||
| empty entry in the list of challenges. In practice, this ambiguity | empty entry in the list of challenges. In practice, this ambiguity | |||
| does not affect the semantics of the header field value and thus is | does not affect the semantics of the header field value and thus is | |||
| harmless. | harmless. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| </section> | </section> | |||
| <section anchor="field.authorization" title="Authorization"> | <section anchor="field.authorization" title="Authorization"> | |||
| <iref primary="true" item="Fields" subitem="Authorization"/> | <iref primary="true" item="Fields" subitem="Authorization"/> | |||
| <iref primary="true" item="Header Fields" subitem="Authorization" /> | <iref primary="true" item="Header Fields" subitem="Authorization" /> | |||
| <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 authenticate itself | The "Authorization" header field allows a user agent to authenticate itself | |||
| with an origin server — usually, but not necessarily, after receiving | with an origin server -- usually, but not necessarily, after receiving | |||
| 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 agent for | credentials containing the authentication information of the user agent for | |||
| the realm of the resource being requested. | the realm of the resource being requested. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="Authorization"/> | <iref primary="true" item="Grammar" subitem="Authorization"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Authorization = credential s | <sourcecode type="abnf9110"><![CDATA[ Authorization = credential s | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| If a request is authenticated and a realm specified, the same credentials | If a request is authenticated and a realm specified, the same credentials | |||
| are presumed to be valid for all other requests within this realm (assuming | are presumed to be valid for all other requests within this realm (assuming | |||
| that the authentication scheme itself does not require otherwise, such as | that the authentication scheme itself does not require otherwise, such as | |||
| credentials that vary according to a challenge value or using synchronized | credentials that vary according to a challenge value or using synchronized | |||
| clocks). | clocks). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A proxy forwarding a request <bcp14>MUST NOT</bcp14> modify any | A proxy forwarding a request <bcp14>MUST NOT</bcp14> modify any | |||
| <xref target="field.authorization" format="none">Authorization</xref> header fields in that request. | <xref target="field.authorization" format="none">Authorization</xref> header fields in that request. | |||
| See <xref target="CACHING" section="3.5"/> for details of and requirements | See <xref target="CACHING" section="3.5"/> for details of and requirements | |||
| pertaining to handling of the Authorization header field by HTTP caches. | pertaining to handling of the Authorization header field by HTTP caches. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="field.authentication-info" title="Authentication-In fo"> | <section anchor="field.authentication-info" title="Authentication-In fo"> | |||
| <iref primary="true" item="Fields" subitem="Authentication-Info"/ > | <iref primary="true" item="Fields" subitem="Authentication-Info"/ > | |||
| <iref primary="true" item="Header Fields" subitem="Authentication -Info"/> | <iref primary="true" item="Header Fields" subitem="Authentication -Info"/> | |||
| <iref primary="true" item="Authentication-Info header field"/> | <iref primary="true" item="Authentication-Info header field"/> | |||
| <t> | <t> | |||
| HTTP authentication schemes can use the Authentication-Info response | HTTP authentication schemes can use the "Authentication-Info" response | |||
| field to communicate information after the client's authentication credential s have been accepted. | field to communicate information after the client's authentication credential s have been accepted. | |||
| This information can include a finalization message from the server (e.g., it can contain the | This information can include a finalization message from the server (e.g., it can contain the | |||
| server authentication). | server authentication). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The field value is a list of parameters (name/value pairs), using the "auth-p aram" | The field value is a list of parameters (name/value pairs), using the "auth-p aram" | |||
| syntax defined in <xref target="challenge.and.response"/>. | syntax defined in <xref target="challenge.and.response"/>. | |||
| This specification only describes the generic format; authentication schemes | This specification only describes the generic format; authentication schemes | |||
| using Authentication-Info will define the individual parameters. The "Digest" | using Authentication-Info will define the individual parameters. The "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="Authentication-Info" /> | <iref primary="true" item="Grammar" subitem="Authentication-Info" /> | |||
| <sourcecode type="abnf7230"><![CDATA[ Authentication-Info = #aut h-param | <sourcecode type="abnf9110"><![CDATA[ Authentication-Info = #aut h-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.authorizati on" format="none">Authorization</xref> header field | by the authentication scheme indicated by the <xref target="field.authorizati on" 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 value in any | A proxy forwarding a response is not allowed to modify the field value in any | |||
| way. | way. | |||
| skipping to change at line 5986 ¶ | skipping to change at line 5979 ¶ | |||
| <iref primary="true" item="Proxy-Authenticate header field"/> | <iref primary="true" item="Proxy-Authenticate header field"/> | |||
| <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 parameters | challenge that indicates the authentication scheme(s) and parameters | |||
| 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 header field in | A proxy <bcp14>MUST</bcp14> send at least one Proxy-Authenticate header field in | |||
| each <xref target="status.407" format="none">407 (Proxy Authentication Requir ed)</xref> response that it | each <xref target="status.407" format="none">407 (Proxy Authentication Requir ed)</xref> response that it | |||
| generates. | generates. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="Proxy-Authenticate"/ > | <iref primary="true" item="Grammar" subitem="Proxy-Authenticate"/ > | |||
| <sourcecode type="abnf7230"><![CDATA[ Proxy-Authenticate = #chal lenge | <sourcecode type="abnf9110"><![CDATA[ Proxy-Authenticate = #chal lenge | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| Unlike <xref target="field.www-authenticate" format="none">WWW-Authenticate</ xref>, the Proxy-Authenticate header field | Unlike <xref target="field.www-authenticate" format="none">WWW-Authenticate</ 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 multiple | the credentials necessary for authentication. However, when multiple | |||
| proxies are used within the same administrative domain, such as office and | proxies are used within the same administrative domain, such as office and | |||
| regional caching proxies within a large corporate network, it is common | regional caching proxies within a large corporate network, it is common | |||
| for credentials to be generated by the user agent and passed through the | for credentials to be generated by the user agent and passed through 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 6018 ¶ | skipping to change at line 6011 ¶ | |||
| <iref primary="true" item="Header Fields" subitem="Proxy-Authoriz ation"/> | <iref primary="true" item="Header Fields" subitem="Proxy-Authoriz ation"/> | |||
| <iref primary="true" item="Proxy-Authorization header field"/> | <iref primary="true" item="Proxy-Authorization header field"/> | |||
| <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-Authorization" /> | <iref primary="true" item="Grammar" subitem="Proxy-Authorization" /> | |||
| <sourcecode type="abnf7230"><![CDATA[ Proxy-Authorization = cred entials | <sourcecode type="abnf9110"><![CDATA[ Proxy-Authorization = cred entials | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| Unlike <xref target="field.authorization" format="none">Authorization</xref>, the Proxy-Authorization header field | Unlike <xref target="field.authorization" format="none">Authorization</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-Authenticate< /xref> header field. When multiple proxies are used | the <xref target="field.proxy-authenticate" format="none">Proxy-Authenticate< /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 <bcp14>MAY</ bcp14> | inbound proxy that was expecting to receive credentials. A proxy <bcp14>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 given | the mechanism by which the proxies cooperatively authenticate a given | |||
| request. | request. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="field.proxy-authentication-info" | <section anchor="field.proxy-authentication-info" | |||
| title="Proxy-Authentication-Info"> | title="Proxy-Authentication-Info"> | |||
| <iref primary="true" item="Fields" subitem="Proxy-Authentication- Info"/> | <iref primary="true" item="Fields" subitem="Proxy-Authentication- Info"/> | |||
| <iref primary="true" | <iref primary="true" | |||
| item="Header Fields" | item="Header Fields" | |||
| subitem="Proxy-Authentication-Info"/> | subitem="Proxy-Authentication-Info"/> | |||
| <iref primary="true" item="Proxy-Authentication-Info header field "/> | <iref primary="true" item="Proxy-Authentication-Info header 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">Authentication-Info</x ref>, except that it applies to proxy authentication (<xref target="challenge.an d.response"/>) | <xref target="field.authentication-info" format="none">Authentication-Info</x ref>, except that it applies to proxy authentication (<xref target="challenge.an d.response"/>) | |||
| and its semantics are defined by the | and its semantics are defined by the | |||
| authentication scheme indicated by the Proxy-Authorization header field | authentication scheme indicated by the Proxy-Authorization header field | |||
| (<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-Authentication -Info"/> | <iref primary="true" item="Grammar" subitem="Proxy-Authentication -Info"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Proxy-Authentication-Info = #auth-param | <sourcecode type="abnf9110"><![CDATA[ Proxy-Authentication-Info = #auth-param | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| However, unlike <xref target="field.authentication-info" format="none">Authen tication-Info</xref>, the Proxy-Authentication-Info header | However, unlike <xref target="field.authentication-info" format="none">Authen tication-Info</xref>, the Proxy-Authentication-Info header | |||
| field applies only to the next outbound client on the response chain. This is | field 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 the | because only the client that chose a given proxy is likely to have the | |||
| credentials necessary for authentication. However, when multiple proxies are | credentials necessary for authentication. However, when multiple proxies are | |||
| used within the same administrative domain, such as office and regional | used within the same administrative domain, such as office and regional | |||
| 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 the | credentials to be generated by the user agent and passed through the | |||
| hierarchy until consumed. Hence, in such a configuration, it will appear as | hierarchy until consumed. Hence, in such a configuration, it will appear as | |||
| skipping to change at line 6083 ¶ | skipping to change at line 6076 ¶ | |||
| information; for example, in different formats, languages, or encodings. | information; for example, in different formats, languages, or encodings. | |||
| Likewise, different users or user agents might have differing capabilities, | Likewise, different users or user agents might have differing capabilities, | |||
| characteristics, or preferences that could influence which representation, | characteristics, or preferences that could influence which representation, | |||
| among those available, would be best to deliver. For this reason, HTTP | among those available, would be best to deliver. For this reason, HTTP | |||
| provides mechanisms for <xref target="content.negotiation" format="none">cont ent negotiation</xref>. | provides mechanisms for <xref target="content.negotiation" format="none">cont ent negotiation</xref>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This specification defines three patterns of content negotiation that can | This specification defines three patterns of content negotiation that can | |||
| be made visible within the protocol: | be made visible within the protocol: | |||
| "proactive" negotiation, where the server selects the representation based | "proactive" negotiation, where the server selects the representation based | |||
| upon the user agent's stated preferences, "reactive" negotiation, | upon the user agent's stated preferences; "reactive" negotiation, | |||
| where the server provides a list of representations for the user agent to | where the server provides a list of representations for the user agent to | |||
| choose from, and "request content" negotiation, where the user agent | choose from; and "request content" negotiation, where the user agent | |||
| selects the representation for a future request based upon the server's | selects the representation for a future request based upon the server's | |||
| stated preferences in past responses. | stated preferences in past responses. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Other patterns of content negotiation include | Other patterns of content negotiation include | |||
| "conditional content", where the representation consists of multiple | "conditional content", where the representation consists of multiple | |||
| parts that are selectively rendered based on user agent parameters, | parts that are selectively rendered based on user agent parameters, | |||
| "active content", where the representation contains a script that | "active content", where the representation contains a script that | |||
| makes additional (more specific) requests based on the user agent | makes additional (more specific) requests based on the user agent | |||
| characteristics, and "Transparent Content Negotiation" | characteristics, and "Transparent Content Negotiation" | |||
| skipping to change at line 6113 ¶ | skipping to change at line 6106 ¶ | |||
| and over the varying dimensions of content negotiation, and thus the | and over the varying dimensions of content negotiation, and thus the | |||
| "sameness" of a resource's observed representations over time, is | "sameness" of a resource's observed representations over time, is | |||
| determined entirely by whatever entity or algorithm selects or generates | determined entirely by whatever entity or algorithm selects or generates | |||
| those responses. | those responses. | |||
| </t> | </t> | |||
| <section anchor="proactive.negotiation" title="Proactive Negotiation"> | <section anchor="proactive.negotiation" title="Proactive Negotiation"> | |||
| <t> | <t> | |||
| When content negotiation preferences are sent by the user agent in a | When content negotiation preferences are sent by the user agent in a | |||
| request to encourage an algorithm located at the server to | request to encourage an algorithm located at the server to | |||
| select the preferred representation, it is called | select the preferred representation, it is called | |||
| <em>proactive negotiation</em> | "proactive negotiation" | |||
| (a.k.a., <em>server-driven negotiation</em>). Selection is based on | (a.k.a., "server-driven negotiation"). Selection is based on | |||
| the available representations for a response (the dimensions over which it | the available representations for a response (the dimensions over which it | |||
| might vary, such as language, content coding, etc.) compared to various | might vary, such as language, content coding, etc.) compared to various | |||
| information supplied in the request, including both the explicit | information supplied in the request, including both the explicit | |||
| negotiation header fields below and implicit | negotiation header fields below and implicit | |||
| characteristics, such as the client's network address or parts of the | characteristics, such as the client's network address or parts of the | |||
| <xref target="field.user-agent" format="none">User-Agent</xref> field. | <xref target="field.user-agent" format="none">User-Agent</xref> field. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Proactive negotiation is advantageous when the algorithm for | Proactive negotiation is advantageous when the algorithm for | |||
| selecting from among the available representations is difficult to | selecting from among the available representations is difficult to | |||
| describe to a user agent, or when the server desires to send its | describe to a user agent, or when the server desires to send its | |||
| "best guess" to the user agent along with the first response (when that | "best guess" to the user agent along with the first response (when that | |||
| "best guess" is good enough for the user, this avoids the round trip | "best guess" is good enough for the user, this avoids the round-trip | |||
| delay of a subsequent request). In order to improve the server's | delay of a subsequent request). In order to improve the server's | |||
| guess, a user agent <bcp14>MAY</bcp14> send request header fields that descri be | guess, a user agent <bcp14>MAY</bcp14> send request header fields that descri be | |||
| its preferences. | its preferences. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Proactive negotiation has serious disadvantages: | Proactive negotiation has serious disadvantages: | |||
| </t> | </t> | |||
| <ul> | <ul> | |||
| <li> | <li> | |||
| It is impossible for the server to accurately determine what | It is impossible for the server to accurately determine what | |||
| skipping to change at line 6183 ¶ | skipping to change at line 6176 ¶ | |||
| in <xref target="proactive.negotiation" format="none">proactive negotiation</ xref> of the response content. | in <xref target="proactive.negotiation" format="none">proactive negotiation</ xref> of the response content. | |||
| The preferences sent in these | The preferences sent in these | |||
| fields apply to any content in the response, including representations of | fields apply to any content in the response, including representations of | |||
| the target resource, representations of error or processing status, and | the target resource, representations of error or processing status, and | |||
| potentially even the miscellaneous text strings that might appear within | potentially even the miscellaneous text strings that might appear within | |||
| the protocol. | the protocol. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="reactive.negotiation" title="Reactive Negotiation"> | <section anchor="reactive.negotiation" title="Reactive Negotiation"> | |||
| <t> | <t> | |||
| With <em>reactive negotiation</em> | With "reactive negotiation" (a.k.a., "agent-driven negotiation"), selection o | |||
| (a.k.a., <em>agent-driven negotiation</em>), selection of | f | |||
| content (regardless of the status code) is performed by | content (regardless of the status code) is performed by | |||
| the user agent after receiving an initial response. The mechanism for | the user agent after receiving an initial response. The mechanism for | |||
| reactive negotiation might be as simple as a list of references to | reactive negotiation might be as simple as a list of references to | |||
| alternative representations. | alternative representations. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the user agent is not satisfied by the initial response content, | If the user agent is not satisfied by the initial response content, | |||
| it can perform a GET request on one or more of the alternative resources | it can perform a GET request on one or more of the alternative resources | |||
| to obtain a different representation. Selection of such alternatives might | to obtain a different representation. Selection of such alternatives might | |||
| be performed automatically (by the user agent) or manually (e.g., by the | be performed automatically (by the user agent) or manually (e.g., by the | |||
| skipping to change at line 6226 ¶ | skipping to change at line 6218 ¶ | |||
| latency if transmitted in the header section, and needing a second request | latency if transmitted in the header section, and needing a second request | |||
| to obtain an alternate representation. Furthermore, this specification | to obtain an alternate representation. Furthermore, this specification | |||
| does not define a mechanism for supporting automatic selection, though it | does not define a mechanism for supporting automatic selection, though it | |||
| does not prevent such a mechanism from being developed. | does not prevent such a mechanism from being developed. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="request.content.negotiation" | <section anchor="request.content.negotiation" | |||
| title="Request Content Negotiation"> | title="Request Content Negotiation"> | |||
| <t> | <t> | |||
| When content negotiation preferences are sent in a server's response, the | When content negotiation preferences are sent in a server's response, the | |||
| listed preferences are called <em>request content negotiation</em> | listed preferences are called "request content negotiation" | |||
| because they intend to influence selection of an appropriate content for | because they intend to influence selection of an appropriate content for | |||
| subsequent requests to that resource. For example, | subsequent requests to that resource. For example, | |||
| the <xref target="field.accept" format="none">Accept</xref> (<xref target="fi eld.accept"/>) and | the <xref target="field.accept" format="none">Accept</xref> (<xref target="fi eld.accept"/>) and | |||
| <xref target="field.accept-encoding" format="none">Accept-Encoding</xref> (<x ref target="field.accept-encoding"/>) | <xref target="field.accept-encoding" format="none">Accept-Encoding</xref> (<x ref target="field.accept-encoding"/>) | |||
| header fields can be sent in a response to indicate preferred media types | header fields can be sent in a response to indicate preferred media types | |||
| and content codings for subsequent requests to that resource. | and content codings for subsequent requests to that resource. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Similarly, <xref target="RFC5789" section="3.1"/> defines | Similarly, <xref target="RFC5789" section="3.1"/> defines | |||
| the "Accept-Patch" response header field which allows discovery of | the "Accept-Patch" response header field, which allows discovery of | |||
| which content types are accepted in PATCH requests. | which content types are accepted in PATCH requests. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="conneg.features" title="Content Negotiation Field Feat ures"> | <section anchor="conneg.features" title="Content Negotiation Field Feat ures"> | |||
| <section anchor="conneg.absent" title="Absence"> | <section anchor="conneg.absent" title="Absence"> | |||
| <t> | <t> | |||
| For each of the content negotiation fields, a request that does not contain | For each of the content negotiation fields, a request that does not contain | |||
| the field implies that the sender has no preference on that dimension of | the field implies that the sender has no preference on that dimension of | |||
| negotiation. | negotiation. | |||
| </t> | </t> | |||
| skipping to change at line 6283 ¶ | skipping to change at line 6275 ¶ | |||
| 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 af ter the | A sender of qvalue <bcp14>MUST NOT</bcp14> generate more than three digits af ter the | |||
| decimal point. User configuration of these values ought to be limited in | decimal point. User configuration of these values ought to be limited 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"> | |||
| <t> | <t> | |||
| Most of these header fields, where indicated, define a wildcard value ("*") | Most of these header fields, where indicated, define a wildcard value ("*") | |||
| to select unspecified values. If no wildcard is present, values that are | to select unspecified values. If no wildcard is present, values that are | |||
| not explicitly mentioned in the field are considered unacceptable. | not explicitly mentioned in the field are considered unacceptable. | |||
| Within <xref target="field.vary" format="none">Vary</xref>, the wildcard valu e means that the variance | Within <xref target="field.vary" format="none">Vary</xref>, the wildcard valu e means that the variance | |||
| is unlimited. | is unlimited. | |||
| </t> | </t> | |||
| <aside> | <aside> | |||
| <t> | <t> | |||
| <strong>Note:</strong> In practice, using wildcards in cont ent negotiation has limited | <strong>Note:</strong> In practice, using wildcards in cont ent negotiation has limited | |||
| practical value, because it is seldom useful to say, for example, "I | practical value because it is seldom useful to say, for example, "I | |||
| prefer image/* more or less than (some other specific value)". Clients can | prefer image/* more or less than (some other specific value)". By sending Acc | |||
| ept: */*;q=0, clients can | ||||
| explicitly request a <xref target="status.406" format="none">406 (Not Accepta ble)</xref> response if a | explicitly request a <xref target="status.406" format="none">406 (Not Accepta ble)</xref> response if a | |||
| more preferred format is not available by sending Accept: */*;q=0, but | more preferred format is not available, but | |||
| they still need to be able to handle a different response, since the | they still need to be able to handle a different response since the | |||
| server is allowed to ignore their preference. | server is allowed to ignore their preference. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="conneg.fields" title="Content Negotiation Fields"> | <section anchor="conneg.fields" title="Content Negotiation Fields"> | |||
| <section anchor="field.accept" title="Accept"> | <section anchor="field.accept" title="Accept"> | |||
| <iref primary="true" item="Fields" subitem="Accept"/> | <iref primary="true" item="Fields" subitem="Accept"/> | |||
| <iref primary="true" item="Header Fields" subitem="Accept"/> | <iref primary="true" item="Header Fields" subitem="Accept"/> | |||
| <iref primary="true" item="Accept header field"/> | <iref primary="true" item="Accept header field"/> | |||
| <t> | <t> | |||
| The "Accept" header field can be used by user agents to specify their | The "Accept" header field can be used by user agents to specify their | |||
| preferences regarding response media types. For example, Accept header | preferences regarding response media types. For example, Accept header | |||
| fields can be used to indicate that the request is specifically limited to | fields can be used to indicate that the request is specifically limited to | |||
| a small set of desired types, as in the case of a request for an in-line | 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 what content types are preferred in the content of a subsequent | about which content types are preferred in the content of a subsequent | |||
| 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-range"/> | <iref primary="true" item="Grammar" subitem="media-range"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Accept = #( media-range [ weight ] ) | <sourcecode type="abnf9110"><![CDATA[ Accept = #( media-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 6470 ¶ | skipping to change at line 6462 ¶ | |||
| <iref primary="true" item="Header Fields" subitem="Accept-Charset "/> | <iref primary="true" item="Header Fields" subitem="Accept-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 indicate | The "Accept-Charset" header field can be sent by a user agent to indicate | |||
| its preferences for charsets in textual response content. For example, | its preferences for charsets in textual response content. For example, | |||
| this field allows user agents capable of understanding more comprehensive | this field allows user agents capable of understanding more comprehensive | |||
| 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-Charset"/> | <iref primary="true" item="Grammar" subitem="Accept-Charset"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Accept-Charset = #( ( toke n / "*" ) [ weight ] ) | <sourcecode type="abnf9110"><![CDATA[ Accept-Charset = #( ( toke n / "*" ) [ 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 t o indicate | A user agent <bcp14>MAY</bcp14> associate a quality value with each charset t o indicate | |||
| the user's relative preference for that charset, as defined in <xref target=" quality.values"/>. | the user's relative preference for that charset, as defined in <xref 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> | |||
| The special value "*", if present in the Accept-Charset header field, | The special value "*", if present in the Accept-Charset header field, | |||
| matches every charset that is not mentioned elsewhere in the | matches every charset that is not mentioned elsewhere in the | |||
| field. | field. | |||
| </t> | </t> | |||
| <aside> | <aside> | |||
| <t> | <t> | |||
| <strong>Note:</strong> Accept-Charset is deprecated because UTF-8 has become nearly | <strong>Note:</strong> Accept-Charset is deprecated because UTF-8 has become nearly | |||
| ubiquitous and sending a detailed list of user-preferred charsets wastes | ubiquitous and sending a detailed list of user-preferred charsets wastes | |||
| bandwidth, increases latency, and makes passive fingerprinting far too | bandwidth, increases latency, and makes passive fingerprinting far too | |||
| easy (<xref target="fingerprinting"/>). Most general-purpose user agents | easy (<xref target="fingerprinting"/>). Most general-purpose user agents | |||
| do not send Accept-Charset, unless specifically configured to do so. | do not send Accept-Charset unless specifically configured to do so. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| </section> | </section> | |||
| <section anchor="field.accept-encoding" title="Accept-Encoding"> | <section anchor="field.accept-encoding" title="Accept-Encoding"> | |||
| <iref primary="true" item="Fields" subitem="Accept-Encoding"/> | <iref primary="true" item="Fields" subitem="Accept-Encoding"/> | |||
| <iref primary="true" item="Header Fields" subitem="Accept-Encodin g"/> | <iref primary="true" item="Header Fields" subitem="Accept-Encodin g"/> | |||
| <iref primary="true" item="Accept-Encoding header field"/> | <iref primary="true" item="Accept-Encoding header field"/> | |||
| <t> | <t> | |||
| The "Accept-Encoding" header field can be used to indicate preferences | The "Accept-Encoding" header field can be used to indicate preferences | |||
| regarding the use of content codings (<xref target="content.codings"/>). | regarding the use of content codings (<xref target="content.codings"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When sent by a user agent in a request, Accept-Encoding indicates the | When sent by a user agent in a request, Accept-Encoding indicates the | |||
| content codings acceptable in a response. | content codings acceptable in a response. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When sent by a server in a response, Accept-Encoding provides information | When sent by a server in a response, Accept-Encoding provides information | |||
| about what content codings are preferred in the content of a subsequent | about which content codings are preferred in the content of a subsequent | |||
| 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-Encoding"/> | <iref primary="true" item="Grammar" subitem="Accept-Encoding"/> | |||
| <iref primary="true" item="Grammar" subitem="codings"/> | <iref primary="true" item="Grammar" subitem="codings"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Accept-Encoding = #( codi ngs [ weight ] ) | <sourcecode type="abnf9110"><![CDATA[ Accept-Encoding = #( codi ngs [ weight ] ) | |||
| codings = content-coding / "identity" / "*" | codings = content-coding / "identity" / "*" | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| Each codings value <bcp14>MAY</bcp14> be given an associated quality value (w eight) | Each codings value <bcp14>MAY</bcp14> be given an associated quality value (w eight) | |||
| representing the preference for that encoding, as defined in <xref target="qu ality.values"/>. | representing the preference for that encoding, as defined in <xref target="qu ality.values"/>. | |||
| The asterisk "*" symbol in an Accept-Encoding field matches any available | The asterisk "*" symbol in an Accept-Encoding field matches any available | |||
| 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 6562 ¶ | skipping to change at line 6554 ¶ | |||
| <t> | <t> | |||
| A representation could be encoded with multiple content codings. However, mos t | A representation could be encoded with multiple content codings. However, mos t | |||
| content codings are alternative ways to accomplish the same purpose | content codings are alternative ways to accomplish the same purpose | |||
| (e.g., data compression). When selecting between multiple content codings tha t | (e.g., data compression). When selecting between multiple content codings tha t | |||
| have the same purpose, the acceptable content coding with the highest | have the same purpose, the acceptable content coding with the highest | |||
| non-zero qvalue is preferred. | non-zero qvalue is preferred. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An Accept-Encoding header field with a field value that is empty | An Accept-Encoding header field with a field value that is empty | |||
| implies that the user agent does not want any content coding in response. | implies that the user agent does not want any content coding in response. | |||
| If an Accept-Encoding header field is present in a request and none of the | If a non-empty Accept-Encoding header field is present in a request and none of the | |||
| available representations for the response have a content coding that | available representations for the response have a content coding that | |||
| is listed as acceptable, the origin server <bcp14>SHOULD</bcp14> send a respo nse | is listed as acceptable, the origin server <bcp14>SHOULD</bcp14> send a respo nse | |||
| without any content coding. | without any content coding unless the identity coding is indicated as unaccep table. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When the Accept-Encoding header field is present in a response, it indicates | When the Accept-Encoding header field is present in a response, it indicates | |||
| what content codings the resource was willing to accept in the associated | what content codings the resource was willing to accept in the associated | |||
| request. The field value is evaluated the same way as in a request. | request. The field value is evaluated the same way as in a request. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Note that this information is specific to the associated request; the set of | Note that this information is specific to the associated request; the set of | |||
| supported encodings might be different for other resources on the same | supported encodings might be different for other resources on the same | |||
| server and could change over time or depend on other aspects of the request | server and could change over time or depend on other aspects of the request | |||
| skipping to change at line 6592 ¶ | skipping to change at line 6584 ¶ | |||
| clients to distinguish between issues related to content codings and media | clients to distinguish between issues related to content codings and media | |||
| types. In order to avoid confusion with issues related to media types, | types. In order to avoid confusion with issues related to media types, | |||
| servers that fail a request with a 415 status for reasons unrelated to | servers that fail a request with a 415 status for reasons unrelated to | |||
| content codings <bcp14>MUST NOT</bcp14> include the Accept-Encoding header | content codings <bcp14>MUST NOT</bcp14> include the Accept-Encoding header | |||
| field. | field. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The most common use of Accept-Encoding is in responses with a | The most common use of Accept-Encoding is in responses with a | |||
| <xref target="status.415" format="none">415 (Unsupported Media Type)</xref> s tatus code, in response to | <xref target="status.415" format="none">415 (Unsupported Media Type)</xref> s tatus code, in response to | |||
| optimistic use of a content coding by clients. However, the header field | optimistic use of a content coding by clients. However, the header field | |||
| can also be used to indicate to clients that content codings are supported, | can also be used to indicate to clients that content codings are supported in order | |||
| to optimize future interactions. For example, a resource might include it | to optimize future interactions. For example, a resource might include it | |||
| in a <xref target="status.2xx" format="none">2xx (Successful)</xref> response when the request content was | in a <xref target="status.2xx" format="none">2xx (Successful)</xref> response when the request content was | |||
| big enough to justify use of a compression coding but the client failed do | big enough to justify use of a compression coding but the client failed do | |||
| so. | so. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="field.accept-language" title="Accept-Language"> | <section anchor="field.accept-language" title="Accept-Language"> | |||
| <iref primary="true" item="Fields" subitem="Accept-Language"/> | <iref primary="true" item="Fields" subitem="Accept-Language"/> | |||
| <iref primary="true" item="Header Fields" subitem="Accept-Languag e"/> | <iref primary="true" item="Header Fields" subitem="Accept-Languag e"/> | |||
| <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 response. | indicate the set of natural languages that are preferred in the response. | |||
| 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-Language"/> | <iref primary="true" item="Grammar" subitem="Accept-Language"/> | |||
| <iref primary="true" item="Grammar" subitem="language-range"/> | <iref primary="true" item="Grammar" subitem="language-range"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Accept-Language = #( langu age-range [ weight ] ) | <sourcecode type="abnf9110"><![CDATA[ Accept-Language = #( langu age-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 e xample, | specified by that range, as defined in <xref target="quality.values"/>. For e xample, | |||
| </t> | </t> | |||
| <sourcecode type="http-message"><![CDATA[Accept-Language: da, en- gb;q=0.8, en;q=0.7 | <sourcecode type="http-message"><![CDATA[Accept-Language: da, en- gb;q=0.8, en;q=0.7 | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| skipping to change at line 6677 ¶ | skipping to change at line 6669 ¶ | |||
| <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 request | The "Vary" header field in a response describes what parts of a request | |||
| message, aside from the method and target URI, might have influenced the | message, aside from the method and target URI, might have influenced 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 might | request field names, known as the selecting header fields, that might | |||
| 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 6743 ¶ | skipping to change at line 6735 ¶ | |||
| response when it wishes that response to be selectively reused for | response when it wishes that response to be selectively reused for | |||
| subsequent requests. Generally, that is the case when the response | subsequent requests. Generally, that is the case when the response | |||
| content has been tailored to better fit the preferences expressed by | content has been tailored to better fit the preferences expressed by | |||
| those selecting header fields, such as when an origin server has | those selecting header fields, such as when an origin server has | |||
| selected the response's language based on the request's | selected the response's language based on the request's | |||
| <xref target="field.accept-language" format="none">Accept-Language</xref> hea der field. | <xref target="field.accept-language" format="none">Accept-Language</xref> hea der field. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Vary might be elided when an origin server considers variance in | Vary might be elided when an origin server considers variance in | |||
| content selection to be less significant than Vary's performance impact | content selection to be less significant than Vary's performance impact | |||
| on caching, particularly when reuse is already limited by Cache-Control | on caching, particularly when reuse is already limited by cache | |||
| response directives (<xref target="CACHING" section="5.2"/>). | response directives (<xref target="CACHING" section="5.2"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| There is no need to send the Authorization field name in Vary because | There is no need to send the Authorization field name in Vary because | |||
| reuse of that response for a different user is prohibited by the field | reuse of that response for a different user is prohibited by the field | |||
| definition (<xref target="field.authorization"/>). | definition (<xref target="field.authorization"/>). | |||
| Likewise, if the response content has been selected or influenced by | Likewise, if the response content has been selected or influenced by | |||
| network region but the origin server wants the cached response to be | network region, but the origin server wants the cached response to be | |||
| reused even if recipients move from one region to another, then there | reused even if recipients move from one region to another, then there | |||
| is no need for the origin server to indicate such variance in Vary. | is no need for the origin server to indicate such variance in Vary. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="conditional.requests" title="Conditional Requests"> | <section anchor="conditional.requests" title="Conditional Requests"> | |||
| <iref item="conditional request" primary="true"/> | <iref item="conditional request" primary="true"/> | |||
| <t> | <t> | |||
| A conditional request is an HTTP request with one or more request header | A conditional request is an HTTP request with one or more request header | |||
| skipping to change at line 6822 ¶ | skipping to change at line 6814 ¶ | |||
| </t> | </t> | |||
| <section anchor="field.if-match" title="If-Match"> | <section anchor="field.if-match" title="If-Match"> | |||
| <iref primary="true" item="Fields" subitem="If-Match"/> | <iref primary="true" item="Fields" subitem="If-Match"/> | |||
| <iref primary="true" item="Header Fields" subitem="If-Match"/> | <iref primary="true" item="Header Fields" subitem="If-Match"/> | |||
| <iref primary="true" item="If-Match header field"/> | <iref primary="true" item="If-Match header field"/> | |||
| <t> | <t> | |||
| The "If-Match" header field makes the request method conditional on the | The "If-Match" header field makes the request method conditional on the | |||
| recipient origin server either having at least one current | recipient origin server either having at least one current | |||
| representation of the target resource, when the field value is "*", or | representation of the target resource, when the field value is "*", or | |||
| having a current representation of the target resource that has an | having a current representation of the target resource that has an | |||
| 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 function when comparing | An origin server <bcp14>MUST</bcp14> use the strong comparison function 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 being | the client intends this precondition to prevent the method from being | |||
| 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-t ag | <sourcecode type="abnf9110"><![CDATA[ If-Match = "*" / #entity-t ag | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| Examples: | Examples: | |||
| </t> | </t> | |||
| <sourcecode type="http-message"><![CDATA[If-Match: "xyzzy" | <sourcecode type="http-message"><![CDATA[If-Match: "xyzzy" | |||
| 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, | |||
| DELETE) to prevent accidental overwrites when multiple user agents might be | DELETE) to prevent accidental overwrites when multiple user agents might be | |||
| acting in parallel on the same resource (i.e., to prevent the "lost update" | acting in parallel on the same resource (i.e., to prevent the "lost update" | |||
| problem). In general, it can be used with any method that involves the | problem). In general, it can be used with any method that involves the | |||
| selection or modification of a representation to abort the request if the | selection or modification of a representation to abort the request if the | |||
| <xref target="selected.representation" format="none">selected representation< /xref>'s current entity-tag is not a | <xref target="selected.representation" format="none">selected representation< /xref>'s current entity tag is not a | |||
| member within the If-Match field value. | member within the If-Match field value. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When an origin server receives a request that selects a representation | When an origin server receives a request that selects a representation | |||
| and that request includes an If-Match header field, | and that request includes an If-Match header field, | |||
| the origin server <bcp14>MUST</bcp14> evaluate the If-Match condition as per | the origin server <bcp14>MUST</bcp14> evaluate the If-Match condition per | |||
| <xref target="evaluation"/> prior to performing the method. | <xref target="evaluation"/> prior to performing the method. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| To evaluate a received If-Match header field: | To evaluate a received If-Match header field: | |||
| </t> | </t> | |||
| <ol> | <ol> | |||
| <li> | <li> | |||
| If the field value is "*", the condition is true if the origin server | If the field value is "*", the condition is true if the origin server | |||
| has a current representation for the target resource. | has a current representation for the target resource. | |||
| </li> | </li> | |||
| <li> | <li> | |||
| If the field value is a list of entity-tags, the condition is true if | If the field value is a list of entity tags, the condition is true if | |||
| any of the listed tags match the entity-tag of the selected representation | any of the listed tags match the entity tag of the selected representation | |||
| . | . | |||
| </li> | </li> | |||
| <li> | <li> | |||
| Otherwise, the condition is false. | Otherwise, the condition is false. | |||
| </li> | </li> | |||
| </ol> | </ol> | |||
| <t> | <t> | |||
| An origin server that evaluates an If-Match condition <bcp14>MUST NOT</bcp14> perform | An origin server that evaluates an If-Match condition <bcp14>MUST NOT</bcp14> perform | |||
| the requested method if the condition evaluates to false. Instead, | the requested method if the condition evaluates to false. Instead, | |||
| the origin server <bcp14>MAY</bcp14> | the origin server <bcp14>MAY</bcp14> | |||
| indicate that the conditional request failed by responding with a | indicate that the conditional request failed by responding with a | |||
| skipping to change at line 6891 ¶ | skipping to change at line 6883 ¶ | |||
| (i.e., the change requested by the user agent has already succeeded, but | (i.e., the change requested by the user agent has already succeeded, but | |||
| the user agent might not be aware of it, perhaps because the prior response | the user agent might not be aware of it, perhaps because the prior response | |||
| was lost or an equivalent change was made by some other user agent). | was lost or an equivalent change was made by some other user agent). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Allowing an origin server to send a success response when a change request | Allowing an origin server to send a success response when a change request | |||
| appears to have already been applied is more efficient for many authoring | appears to have already been applied is more efficient for many authoring | |||
| use cases, but comes with some risk if multiple user agents are making | use cases, but comes with some risk if multiple user agents are making | |||
| change requests that are very similar but not cooperative. | change requests that are very similar but not cooperative. | |||
| For example, multiple user agents writing to a common resource as a | For example, multiple user agents writing to a common resource as a | |||
| semaphore (e.g., a non-atomic increment) are likely to collide and | semaphore (e.g., a nonatomic increment) are likely to collide and | |||
| potentially lose important state transitions. For those kinds of resources, | potentially lose important state transitions. For those kinds of resources, | |||
| an origin server is better off being stringent in sending 412 for every | an origin server is better off being stringent in sending 412 for every | |||
| failed precondition on an unsafe method. | failed precondition on an unsafe method. | |||
| In other cases, excluding the ETag field from a success response might | In other cases, excluding the ETag field from a success response might | |||
| encourage the user agent to perform a GET as its next request to eliminate | encourage the user agent to perform a GET as its next request to eliminate | |||
| confusion about the resource's current state. | confusion about the resource's current state. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A client <bcp14>MAY</bcp14> send an If-Match header field in a | A client <bcp14>MAY</bcp14> send an If-Match header field in a | |||
| <xref target="GET" format="none">GET</xref> request to indicate that it would prefer a | <xref target="GET" format="none">GET</xref> request to indicate that it would prefer a | |||
| <xref target="status.412" format="none">412 (Precondition Failed)</xref> resp onse if the selected | <xref target="status.412" format="none">412 (Precondition Failed)</xref> resp onse if the selected | |||
| representation does not match. However, this is only useful in range | representation does not match. However, this is only useful in range | |||
| requests (<xref target="range.requests"/>), for completing a previously | requests (<xref target="range.requests"/>) for completing a previously | |||
| received partial representation, when there is no desire for a new | received partial representation when there is no desire for a new | |||
| representation. <xref target="field.if-range" format="none">If-Range</xref> ( <xref target="field.if-range"/>) | representation. <xref target="field.if-range" format="none">If-Range</xref> ( <xref target="field.if-range"/>) | |||
| is better suited for range requests when the client prefers to receive a | is better suited for range requests when the client prefers to receive a | |||
| new representation. | new representation. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A cache or intermediary <bcp14>MAY</bcp14> ignore If-Match because its | A cache or intermediary <bcp14>MAY</bcp14> ignore If-Match because its | |||
| interoperability features are only necessary for an origin server. | interoperability features are only necessary for an origin server. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Note that an If-Match header field with a list value containing "*" and | Note that an If-Match header field with a list value containing "*" and | |||
| skipping to change at line 6929 ¶ | skipping to change at line 6921 ¶ | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="field.if-none-match" title="If-None-Match"> | <section anchor="field.if-none-match" title="If-None-Match"> | |||
| <iref primary="true" item="Fields" subitem="If-None-Match"/> | <iref primary="true" item="Fields" subitem="If-None-Match"/> | |||
| <iref primary="true" item="Header Fields" subitem="If-None-Match" /> | <iref primary="true" item="Header Fields" subitem="If-None-Match" /> | |||
| <iref primary="true" item="If-None-Match header field"/> | <iref primary="true" item="If-None-Match header field"/> | |||
| <t> | <t> | |||
| The "If-None-Match" header field makes the request method conditional on | The "If-None-Match" header field makes the request method conditional on | |||
| a recipient cache or origin server either not having any current | a recipient cache or origin server either not having any current | |||
| representation of the target resource, when the field value is "*", or | representation of the target resource, when the field value is "*", or | |||
| having a <xref target="selected.representation" format="none">selected repres entation</xref> with an entity-tag that does not match any | having a <xref target="selected.representation" format="none">selected repres entation</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 when compari ng | A recipient <bcp14>MUST</bcp14> use the weak comparison function when compari ng | |||
| 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 there have | since weak entity tags can be used for cache validation even if there have | |||
| been changes to the representation data. | been changes to the representation data. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="If-None-Match"/> | <iref primary="true" item="Grammar" subitem="If-None-Match"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ If-None-Match = "*" / #ent ity-tag | <sourcecode type="abnf9110"><![CDATA[ If-None-Match = "*" / #ent ity-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> | |||
| <t> | <t> | |||
| If-None-Match is primarily used in conditional GET requests to enable | If-None-Match is primarily used in conditional GET requests to enable | |||
| efficient updates of cached information with a minimum amount of | efficient updates of cached information with a minimum amount of | |||
| transaction overhead. When a client desires to update one or more stored | transaction overhead. When a client desires to update one or more stored | |||
| responses that have entity-tags, the client <bcp14>SHOULD</bcp14> generate an | responses that have entity tags, the client <bcp14>SHOULD</bcp14> generate an | |||
| If-None-Match header field containing a list of those entity-tags when | If-None-Match header field containing a list of those entity tags when | |||
| making a GET request; this allows recipient servers to send a | making a GET request; this allows recipient servers to send a | |||
| <xref target="status.304" format="none">304 (Not Modified)</xref> response to indicate when one of those | <xref target="status.304" format="none">304 (Not Modified)</xref> response to indicate when one of those | |||
| stored responses matches the selected representation. | stored responses matches the selected representation. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If-None-Match can also be used with a value of "*" to prevent an unsafe | If-None-Match can also be used with a value of "*" to prevent an unsafe | |||
| request method (e.g., PUT) from inadvertently modifying an existing | request method (e.g., PUT) from inadvertently modifying an existing | |||
| representation of the target resource when the client believes that | representation of the target resource when the client believes that | |||
| the resource does not have a current representation (<xref target="safe.metho ds"/>). | the resource does not have a current representation (<xref target="safe.metho ds"/>). | |||
| This is a variation on the "lost update" problem that might arise if more | This is a variation on the "lost update" problem that might arise if more | |||
| than one client attempts to create an initial representation for the target | than one client attempts to create an initial representation for the target | |||
| resource. | resource. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When an origin server receives a request that selects a representation | When an origin server receives a request that selects a representation | |||
| and that request includes an If-None-Match header field, | and that request includes an If-None-Match header field, | |||
| the origin server <bcp14>MUST</bcp14> evaluate the If-None-Match condition as per | the origin server <bcp14>MUST</bcp14> evaluate the If-None-Match condition pe r | |||
| <xref target="evaluation"/> prior to performing the method. | <xref target="evaluation"/> prior to performing the method. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| To evaluate a received If-None-Match header field: | To evaluate a received If-None-Match header field: | |||
| </t> | </t> | |||
| <ol> | <ol> | |||
| <li> | <li> | |||
| If the field value is "*", the condition is false if the origin server | If the field value is "*", the condition is false if the origin server | |||
| has a current representation for the target resource. | has a current representation for the target resource. | |||
| </li> | </li> | |||
| <li> | <li> | |||
| If the field value is a list of entity-tags, the condition is false if | If the field value is a list of entity tags, the condition is false if | |||
| one of the listed tags matches the entity-tag of the selected representati | one of the listed tags matches the entity tag of the selected representati | |||
| on. | on. | |||
| </li> | </li> | |||
| <li> | <li> | |||
| Otherwise, the condition is true. | Otherwise, the condition is true. | |||
| </li> | </li> | |||
| </ol> | </ol> | |||
| <t> | <t> | |||
| An origin server that evaluates an If-None-Match condition <bcp14>MUST NOT</b cp14> | An origin server that evaluates an If-None-Match condition <bcp14>MUST NOT</b cp14> | |||
| perform the requested method if the condition evaluates to false; instead, | perform the requested method if the condition evaluates to false; instead, | |||
| the origin server <bcp14>MUST</bcp14> respond with either | the origin server <bcp14>MUST</bcp14> respond with either | |||
| a) the <xref target="status.304" format="none">304 (Not Modified)</xref> stat us code if the request method | a) the <xref target="status.304" format="none">304 (Not Modified)</xref> stat us code if the request method | |||
| skipping to change at line 7022 ¶ | skipping to change at line 7014 ¶ | |||
| <iref primary="true" item="Header Fields" subitem="If-Modified-Si nce"/> | <iref primary="true" item="Header Fields" subitem="If-Modified-Si nce"/> | |||
| <iref primary="true" item="If-Modified-Since header field"/> | <iref primary="true" item="If-Modified-Since header field"/> | |||
| <t> | <t> | |||
| The "If-Modified-Since" header field makes a GET or HEAD request method | The "If-Modified-Since" header field makes a GET or HEAD request method | |||
| conditional on the <xref target="selected.representation" format="none">selec ted representation</xref>'s modification | conditional on the <xref target="selected.representation" format="none">selec ted representation</xref>'s modification | |||
| date being more | date being more | |||
| recent than the date provided in the field value. Transfer of the selected | recent than the date provided in the field value. Transfer of the selected | |||
| 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-Modified-Since"/> | <iref primary="true" item="Grammar" subitem="If-Modified-Since"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ If-Modified-Since = HTTP-d ate | <sourcecode type="abnf9110"><![CDATA[ If-Modified-Since = HTTP-d ate | |||
| ]]></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-Since: Sat, 29 Oct 1994 19:43:31 GMT | <sourcecode type="http-message"><![CDATA[If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| A recipient <bcp14>MUST</bcp14> ignore If-Modified-Since if the request conta ins an | A recipient <bcp14>MUST</bcp14> ignore If-Modified-Since if the request conta ins an | |||
| <xref target="field.if-none-match" format="none">If-None-Match</xref> header field; the condition in | <xref target="field.if-none-match" format="none">If-None-Match</xref> header field; the condition in | |||
| <xref target="field.if-none-match" format="none">If-None-Match</xref> is cons idered to be a more accurate | <xref target="field.if-none-match" format="none">If-None-Match</xref> is cons idered to be a more accurate | |||
| skipping to change at line 7053 ¶ | skipping to change at line 7045 ¶ | |||
| A recipient <bcp14>MUST</bcp14> ignore the If-Modified-Since header field if the | A recipient <bcp14>MUST</bcp14> ignore the If-Modified-Since header field if the | |||
| resource does not have a modification date available. | resource does not have a modification date available. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A recipient <bcp14>MUST</bcp14> interpret an If-Modified-Since field value's timestamp | A recipient <bcp14>MUST</bcp14> interpret an If-Modified-Since field value's timestamp | |||
| in terms of the origin server's clock. | in terms of the origin server's clock. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If-Modified-Since is typically used for two distinct purposes: | If-Modified-Since is typically used for two distinct purposes: | |||
| 1) to allow efficient updates of a cached representation that does not | 1) to allow efficient updates of a cached representation that does not | |||
| have an entity-tag and 2) to limit the scope of a web traversal to resources | have an entity tag and 2) to limit the scope of a web traversal to resources | |||
| that have recently changed. | that have recently changed. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When used for cache updates, a cache will typically use the value of the | When used for cache updates, a cache will typically use the value of the | |||
| cached message's <xref target="field.last-modified" format="none">Last-Modifi ed</xref> header field to generate the field | cached message's <xref target="field.last-modified" format="none">Last-Modifi ed</xref> header field to generate the field | |||
| value of If-Modified-Since. This behavior is most interoperable for cases | value of If-Modified-Since. This behavior is most interoperable for cases | |||
| where clocks are poorly synchronized or when the server has chosen to only | where clocks are poorly synchronized or when the server has chosen to only | |||
| honor exact timestamp matches (due to a problem with Last-Modified dates | honor exact timestamp matches (due to a problem with Last-Modified dates | |||
| that appear to go "back in time" when the origin server's clock is | that appear to go "back in time" when the origin server's clock is | |||
| corrected or a representation is restored from an archived backup). | corrected or a representation is restored from an archived backup). | |||
| skipping to change at line 7083 ¶ | skipping to change at line 7075 ¶ | |||
| server in a prior response. Origin servers that choose an exact | server in a prior response. Origin servers that choose an exact | |||
| timestamp match based on the selected representation's | timestamp match based on the selected representation's | |||
| <xref target="field.last-modified" format="none">Last-Modified</xref> | <xref target="field.last-modified" format="none">Last-Modified</xref> | |||
| header field will not be able to help the user agent limit its data | header field will not be able to help the user agent limit its data | |||
| transfers to only those changed during the specified window. | transfers to only those changed during the specified window. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When an origin server receives a request that selects a representation | When an origin server receives a request that selects a representation | |||
| and that request includes an If-Modified-Since header field without an | and that request includes an If-Modified-Since header field without an | |||
| <xref target="field.if-none-match" format="none">If-None-Match</xref> header field, the origin server <bcp14>SHOULD</bcp14> | <xref target="field.if-none-match" format="none">If-None-Match</xref> header field, the origin server <bcp14>SHOULD</bcp14> | |||
| evaluate the If-Modified-Since condition as per | evaluate the If-Modified-Since condition per | |||
| <xref target="evaluation"/> prior to performing the method. | <xref target="evaluation"/> prior to performing the method. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| To evaluate a received If-Modified-Since header field: | To evaluate a received If-Modified-Since header field: | |||
| </t> | </t> | |||
| <ol> | <ol> | |||
| <li> | <li> | |||
| If the selected representation's last modification date is earlier or | If the selected representation's last modification date is earlier or | |||
| equal to the date provided in the field value, the condition is false. | equal to the date provided in the field value, the condition is false. | |||
| </li> | </li> | |||
| skipping to change at line 7121 ¶ | skipping to change at line 7113 ¶ | |||
| <section anchor="field.if-unmodified-since" title="If-Unmodified-Sin ce"> | <section anchor="field.if-unmodified-since" title="If-Unmodified-Sin ce"> | |||
| <iref primary="true" item="Fields" subitem="If-Unmodified-Since"/ > | <iref primary="true" item="Fields" subitem="If-Unmodified-Since"/ > | |||
| <iref primary="true" item="Header Fields" subitem="If-Unmodified- Since"/> | <iref primary="true" item="Header Fields" subitem="If-Unmodified- Since"/> | |||
| <iref primary="true" item="If-Unmodified-Since header field"/> | <iref primary="true" item="If-Unmodified-Since header field"/> | |||
| <t> | <t> | |||
| The "If-Unmodified-Since" header field makes the request method conditional | The "If-Unmodified-Since" header field makes the request method conditional | |||
| on the <xref target="selected.representation" format="none">selected represen tation</xref>'s last modification date being | on the <xref target="selected.representation" format="none">selected represen tation</xref>'s last modification date being | |||
| earlier than or equal to the date provided in the field value. | earlier than or equal to the date provided in the field value. | |||
| This field accomplishes the | This field accomplishes the | |||
| same purpose as <xref target="field.if-match" format="none">If-Match</xref> f or cases where the user agent does | same purpose as <xref target="field.if-match" format="none">If-Match</xref> f or 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-Unmodified-Since" /> | <iref primary="true" item="Grammar" subitem="If-Unmodified-Since" /> | |||
| <sourcecode type="abnf7230"><![CDATA[ If-Unmodified-Since = HTTP -date | <sourcecode type="abnf9110"><![CDATA[ If-Unmodified-Since = 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 request con tains an | A recipient <bcp14>MUST</bcp14> ignore If-Unmodified-Since if the request con tains 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 considered to be a more accurate replacement for | <xref target="field.if-match" format="none">If-Match</xref> is considered to be a more accurate replacement for | |||
| skipping to change at line 7156 ¶ | skipping to change at line 7148 ¶ | |||
| resource does not have a modification date available. | resource does not have a modification date available. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A recipient <bcp14>MUST</bcp14> interpret an If-Unmodified-Since field value' s timestamp | A recipient <bcp14>MUST</bcp14> interpret an If-Unmodified-Since field value' s timestamp | |||
| in terms of the origin server's clock. | in terms of the origin server's clock. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If-Unmodified-Since is most often used with state-changing methods | If-Unmodified-Since is most often used with state-changing methods | |||
| (e.g., POST, PUT, DELETE) to prevent accidental overwrites when multiple | (e.g., POST, PUT, DELETE) to prevent accidental overwrites when multiple | |||
| user agents might be acting in parallel on a resource that does | user agents might be acting in parallel on a resource that does | |||
| not supply entity-tags with its representations (i.e., to prevent the | not supply entity tags with its representations (i.e., to prevent the | |||
| "lost update" problem). | "lost update" problem). | |||
| In general, it can be used with any method that involves the selection | In general, it can be used with any method that involves the selection | |||
| or modification of a representation to abort the request if the | or modification of a representation to abort the request if the | |||
| <xref target="selected.representation" format="none">selected representation< /xref>'s last modification date has | <xref target="selected.representation" format="none">selected representation< /xref>'s last modification date has | |||
| changed since the date provided in the If-Unmodified-Since field value. | changed since the date provided in the If-Unmodified-Since field value. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When an origin server receives a request that selects a representation | When an origin server receives a request that selects a representation | |||
| and that request includes an If-Unmodified-Since header field without | and that request includes an If-Unmodified-Since header field without | |||
| an <xref target="field.if-match" format="none">If-Match</xref> header field, | an <xref target="field.if-match" format="none">If-Match</xref> header field, | |||
| the origin server <bcp14>MUST</bcp14> evaluate the If-Unmodified-Since condit ion as per | the origin server <bcp14>MUST</bcp14> evaluate the If-Unmodified-Since condit ion per | |||
| <xref target="evaluation"/> prior to performing the method. | <xref target="evaluation"/> prior to performing the method. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| To evaluate a received If-Unmodified-Since header field: | To evaluate a received If-Unmodified-Since header field: | |||
| </t> | </t> | |||
| <ol> | <ol> | |||
| <li> | <li> | |||
| If the selected representation's last modification date is earlier than or | If the selected representation's last modification date is earlier than or | |||
| equal to the date provided in the field value, the condition is true. | equal to the date provided in the field value, the condition is true. | |||
| </li> | </li> | |||
| skipping to change at line 7208 ¶ | skipping to change at line 7200 ¶ | |||
| use cases, but comes with some risk if multiple user agents are making | use cases, but comes with some risk if multiple user agents are making | |||
| change requests that are very similar but not cooperative. | change requests that are very similar but not cooperative. | |||
| In those cases, an origin server is better off being stringent in sending | In those cases, an origin server is better off being stringent in sending | |||
| 412 for every failed precondition on an unsafe method. | 412 for every failed precondition on an unsafe method. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A client <bcp14>MAY</bcp14> send an If-Unmodified-Since header field in a | A client <bcp14>MAY</bcp14> send an If-Unmodified-Since header field in a | |||
| <xref target="GET" format="none">GET</xref> request to indicate that it would prefer a | <xref target="GET" format="none">GET</xref> request to indicate that it would prefer a | |||
| <xref target="status.412" format="none">412 (Precondition Failed)</xref> resp onse if the selected | <xref target="status.412" format="none">412 (Precondition Failed)</xref> resp onse if the selected | |||
| representation has been modified. However, this is only useful in range | representation has been modified. However, this is only useful in range | |||
| requests (<xref target="range.requests"/>), for completing a previously | requests (<xref target="range.requests"/>) for completing a previously | |||
| received partial representation, when there is no desire for a new | received partial representation when there is no desire for a new | |||
| representation. <xref target="field.if-range" format="none">If-Range</xref> ( <xref target="field.if-range"/>) | representation. <xref target="field.if-range" format="none">If-Range</xref> ( <xref target="field.if-range"/>) | |||
| is better suited for range requests when the client prefers to receive a | is better suited for range requests when the client prefers to receive a | |||
| new representation. | new representation. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A cache or intermediary <bcp14>MAY</bcp14> ignore If-Unmodified-Since because its | A cache or intermediary <bcp14>MAY</bcp14> ignore If-Unmodified-Since because its | |||
| interoperability features are only necessary for an origin server. | interoperability features are only necessary for an origin server. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="field.if-range" title="If-Range"> | <section anchor="field.if-range" title="If-Range"> | |||
| skipping to change at line 7247 ¶ | skipping to change at line 7239 ¶ | |||
| representation has been modified, the client would then have to make a | representation has been modified, the client would then have to make 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 representation is unch anged, | request. Informally, its meaning is as follows: if the representation is unch anged, | |||
| 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 = entity-tag / HT TP-date | <sourcecode type="abnf9110"><![CDATA[ If-Range = entity-tag / HT TP-date | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| A valid <xref target="field.etag" format="none">entity-tag</xref> can be dist inguished from a valid | A valid <xref target="field.etag" format="none">entity-tag</xref> can be dist inguished from a valid | |||
| <xref target="http.date" format="none">HTTP-date</xref> by examining the firs t three characters for a | <xref target="http.date" format="none">HTTP-date</xref> by examining the firs t three characters for a | |||
| DQUOTE. | DQUOTE. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A client <bcp14>MUST NOT</bcp14> generate an If-Range header field in a reque st that | A client <bcp14>MUST NOT</bcp14> generate an If-Range header field in a reque st that | |||
| does not contain a <xref target="field.range" format="none">Range</xref> head er field. | does not contain a <xref target="field.range" format="none">Range</xref> head er field. | |||
| A server <bcp14>MUST</bcp14> ignore an If-Range header field received in a re quest that | A server <bcp14>MUST</bcp14> ignore an If-Range header field received in a re quest that | |||
| does not contain a <xref target="field.range" format="none">Range</xref> head er field. | does not contain a <xref target="field.range" format="none">Range</xref> head er field. | |||
| An origin server <bcp14>MUST</bcp14> ignore an If-Range header field received in a | An origin server <bcp14>MUST</bcp14> ignore an If-Range header field received in a | |||
| request for a target resource that does not support Range requests. | request for a target resource that does not support Range requests. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A client <bcp14>MUST NOT</bcp14> generate an If-Range header field containing an | A client <bcp14>MUST NOT</bcp14> generate an If-Range header field containing an | |||
| entity-tag that is marked as weak. | entity tag that is marked as weak. | |||
| A client <bcp14>MUST NOT</bcp14> generate an If-Range header field containing an | A client <bcp14>MUST NOT</bcp14> generate an If-Range header field containing an | |||
| <xref target="http.date" format="none">HTTP-date</xref> unless the client has no entity-tag for | <xref target="http.date" format="none">HTTP-date</xref> unless the client has no entity tag for | |||
| the corresponding representation and the date is a strong validator | the corresponding representation and the date is a strong validator | |||
| in the sense defined by <xref target="lastmod.comparison"/>. | in the sense defined by <xref target="lastmod.comparison"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A server that receives an If-Range header field on a Range request <bcp14>MUS T</bcp14> | A server that receives an If-Range header field on a Range request <bcp14>MUS T</bcp14> | |||
| evaluate the condition as per <xref target="evaluation"/> prior to | evaluate the condition per <xref target="evaluation"/> prior to | |||
| performing the method. | performing the method. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| To evaluate a received If-Range header field containing an | To evaluate a received If-Range header field containing an | |||
| <xref target="http.date" format="none">HTTP-date</xref>: | <xref target="http.date" format="none">HTTP-date</xref>: | |||
| </t> | </t> | |||
| <ol> | <ol> | |||
| <li>If the <xref target="http.date" format="none">HTTP-date</x ref> validator provided is not a | <li>If the <xref target="http.date" format="none">HTTP-date</x ref> validator provided is not a | |||
| strong validator in the sense defined by | strong validator in the sense defined by | |||
| <xref target="lastmod.comparison"/>, the condition is false.</li> | <xref target="lastmod.comparison"/>, the condition is false.</li> | |||
| skipping to change at line 7306 ¶ | skipping to change at line 7298 ¶ | |||
| (<xref target="entity.tag.comparison"/>), the condition is true.</li> | (<xref target="entity.tag.comparison"/>), the condition is true.</li> | |||
| <li>Otherwise, the condition is false.</li> | <li>Otherwise, the condition is false.</li> | |||
| </ol> | </ol> | |||
| <t> | <t> | |||
| A recipient of an If-Range header field <bcp14>MUST</bcp14> ignore the | A recipient of an If-Range header field <bcp14>MUST</bcp14> ignore the | |||
| <xref target="field.range" format="none">Range</xref> header field if the If- Range condition | <xref target="field.range" format="none">Range</xref> header field if the If- Range condition | |||
| evaluates to false. Otherwise, the recipient <bcp14>SHOULD</bcp14> process th e | evaluates to false. Otherwise, the recipient <bcp14>SHOULD</bcp14> process th e | |||
| <xref target="field.range" format="none">Range</xref> header field as request ed. | <xref target="field.range" format="none">Range</xref> header field as request ed. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Note that the If-Range comparison is by exact | Note that the If-Range comparison is by exact match, including when the | |||
| match, including when the validator is an <xref target="http.date" format="no | validator is an <xref target="http.date" format="none">HTTP-date</xref>, and | |||
| ne">HTTP-date</xref>, and so | so it | |||
| differs from the "earlier than or equal to" comparison used when evaluating | differs from the "earlier than or equal to" comparison used when evaluating | |||
| an <xref target="field.if-unmodified-since" format="none">If-Unmodified-Since </xref> conditional. | an <xref target="field.if-unmodified-since" format="none">If-Unmodified-Since </xref> conditional. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="evaluation" title="Evaluation of Preconditions"> | <section anchor="evaluation" title="Evaluation of Preconditions"> | |||
| <section anchor="when.to.evaluate" title="When to Evaluate"> | <section anchor="when.to.evaluate" title="When to Evaluate"> | |||
| <t> | <t> | |||
| Except when excluded below, a recipient cache or origin server <bcp14>MUST</b cp14> | Except when excluded below, a recipient cache or origin server <bcp14>MUST</b cp14> | |||
| evaluate received request preconditions after it has successfully performed | evaluate received request preconditions after it has successfully performed | |||
| skipping to change at line 7343 ¶ | skipping to change at line 7335 ¶ | |||
| client intends that they be evaluated by a server that can provide a | client intends that they be evaluated by a server that can provide a | |||
| current representation. | current representation. | |||
| Likewise, a server <bcp14>MUST</bcp14> ignore the conditional request header fields | Likewise, a server <bcp14>MUST</bcp14> ignore the conditional request header fields | |||
| defined by this specification when received with a request method that does | defined by this specification when received with a request method that does | |||
| not involve the selection or modification of a | not involve the selection or modification of a | |||
| <xref target="selected.representation" format="none">selected representation< /xref>, such as CONNECT, OPTIONS, or TRACE. | <xref target="selected.representation" format="none">selected representation< /xref>, such as CONNECT, OPTIONS, or TRACE. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Note that protocol extensions can modify the conditions under which | Note that protocol extensions can modify the conditions under which | |||
| preconditions are evaluated or the consequences of their evaluation. | preconditions are evaluated or the consequences of their evaluation. | |||
| For example, the "immutable" cache directive | For example, the immutable cache directive | |||
| (defined by <xref target="RFC8246"/>) instructs caches to forgo | (defined by <xref target="RFC8246"/>) instructs caches to forgo | |||
| forwarding conditional requests when they hold a fresh response. | forwarding conditional requests when they hold a fresh response. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Although conditional request header fields are defined as being usable with | Although conditional request header fields are defined as being usable with | |||
| the HEAD method (to keep HEAD's semantics consistent with those of GET), | the HEAD method (to keep HEAD's semantics consistent with those of GET), | |||
| there is no point in sending a conditional HEAD because a successful | there is no point in sending a conditional HEAD because a successful | |||
| response is around the same size as a <xref target="status.304" format="none" >304 (Not Modified)</xref> | response is around the same size as a <xref target="status.304" format="none" >304 (Not Modified)</xref> | |||
| response and more useful than a <xref target="status.412" format="none">412 ( Precondition Failed)</xref> | response and more useful than a <xref target="status.412" format="none">412 ( Precondition Failed)</xref> | |||
| response. | response. | |||
| skipping to change at line 7474 ¶ | skipping to change at line 7466 ¶ | |||
| of HTTP, designed so that recipients not implementing this feature (or not | of HTTP, designed so that recipients not implementing this feature (or not | |||
| supporting it for the target resource) can respond as if it is a normal | supporting it for the target resource) can respond as if it is a normal | |||
| GET request without impacting interoperability. Partial responses are | GET request without impacting interoperability. Partial responses are | |||
| indicated by a distinct status code to not be mistaken for full responses | indicated by a distinct status code to not be mistaken for full responses | |||
| by caches that might not implement the feature. | by caches that might not implement the feature. | |||
| </t> | </t> | |||
| <section anchor="range.units" title="Range Units"> | <section anchor="range.units" title="Range Units"> | |||
| <t> | <t> | |||
| Representation data can be partitioned into subranges when there are | Representation data can be partitioned into subranges when there are | |||
| addressable structural units inherent to that data's content coding or | addressable structural units inherent to that data's content coding or | |||
| media type. For example, octet (a.k.a., byte) boundaries are a structural | media type. For example, octet (a.k.a. byte) boundaries are a structural | |||
| unit common to all representation data, allowing partitions of the data to | unit common to all representation data, allowing partitions of the data to | |||
| be identified as a range of bytes at some offset from the start or end of | be identified as a range of bytes at some offset from the start or end of | |||
| that data. | that data. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This general notion of a <em>range unit</em> is used | This general notion of a "range unit" is used | |||
| in the <xref target="field.accept-ranges" format="none">Accept-Ranges</xref> (<xref target="field.accept-ranges"/>) | in the <xref target="field.accept-ranges" format="none">Accept-Ranges</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.ra nge"/>) request header field | <xref target="field.range" format="none">Range</xref> (<xref target="field.ra nge"/>) 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</xref> (<xref target="field.content-range"/>) | <xref target="field.content-range" format="none">Content-Range</xref> (<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 registered | All range unit names are case-insensitive and ought to be registered | |||
| 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> | |||
| <section anchor="range.specifiers" title="Range Specifiers"> | <section anchor="range.specifiers" title="Range Specifiers"> | |||
| <iref primary="true" item="satisfiable range"/> | ||||
| <iref primary="true" item="unsatisfiable range"/> | ||||
| <t> | <t> | |||
| Ranges are expressed in terms of a range unit paired with a set of range | Ranges are expressed in terms of a range unit paired with a set of range | |||
| specifiers. The range unit name determines what kinds of range-spec | specifiers. The range unit name determines what kinds of range-spec | |||
| are applicable to its own specifiers. Hence, the following grammar is | are applicable to its own specifiers. Hence, the following grammar is | |||
| generic: each range unit is expected to specify requirements on when | generic: each range unit is expected to specify requirements on when | |||
| <xref target="rule.int-range" format="none">int-range</xref>, <xref target="r ule.suffix-range" format="none">suffix-range</xref>, and | <xref target="rule.int-range" format="none">int-range</xref>, <xref target="r ule.suffix-range" format="none">suffix-range</xref>, and | |||
| <xref target="rule.other-range" format="none">other-range</xref> are allowed. | <xref target="rule.other-range" format="none">other-range</xref> are 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-specifier"/> | <iref primary="true" item="Grammar" subitem="ranges-specifier"/> | |||
| <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-u nit "=" range-set | <sourcecode type="abnf9110"><![CDATA[ ranges-specifier = range-u nit "=" 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 ex pressed as two non-negative | An <xref target="rule.int-range" format="none">int-range</xref> is a range ex pressed 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 indicate | The range unit specifies what the integers mean (e.g., they might indicate | |||
| 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 is present and less than the | <xref target="rule.int-range" format="none">last-pos</xref> value is 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 ran ge expressed as a suffix of the | A <xref target="rule.suffix-range" format="none">suffix-range</xref> is a ran ge 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 representation | (in range units). In other words, the last N units of the representation | |||
| data. | data. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="suffix-range"/> | <iref primary="true" item="Grammar" subitem="suffix-range"/> | |||
| <iref primary="true" item="Grammar" subitem="suffix-length"/> | <iref primary="true" item="Grammar" subitem="suffix-length"/> | |||
| <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" format="non e">other-range</xref> rule is a | To provide for extensibility, the <xref target="rule.other-range" format="non e">other-range</xref> rule is a | |||
| mostly unconstrained grammar that allows application-specific or future | mostly unconstrained grammar that allows application-specific or future | |||
| range units to define additional range specifiers. | range units to define additional range specifiers. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="other-range"/> | <iref primary="true" item="Grammar" subitem="other-range"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ other-range = 1*( %x21-2 B / %x2D-7E ) | <sourcecode type="abnf9110"><![CDATA[ other-range = 1*( %x21-2 B / %x2D-7E ) | |||
| ; 1*(VCHAR excluding comma) | ; 1*(VCHAR excluding comma) | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | ||||
| A <xref target="rule.ranges-specifier" format="none">ranges-specifier</xref> | ||||
| is invalid if it contains any | ||||
| <xref target="rule.ranges-specifier" format="none">range-spec</xref> that is | ||||
| invalid or undefined for the indicated | ||||
| <xref target="range.units" format="none">range-unit</xref>. | ||||
| </t> | ||||
| <t anchor="satisfiable"> | ||||
| A valid <xref target="rule.ranges-specifier" format="none">ranges-specifier</ | ||||
| xref> is "satisfiable" | ||||
| if it contains at least one <xref target="rule.ranges-specifier" format="none | ||||
| ">range-spec</xref> that is | ||||
| satisfiable, as defined by the indicated <xref target="range.units" format="n | ||||
| one">range-unit</xref>. | ||||
| Otherwise, the <xref target="rule.ranges-specifier" format="none">ranges-spec | ||||
| ifier</xref> is | ||||
| "unsatisfiable". | ||||
| </t> | ||||
| </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 representation | The "bytes" range unit is used to express subranges of a representation | |||
| data's octet sequence. | data's octet sequence. | |||
| Each byte range is expressed as an integer range at some offset, relative | Each byte range is expressed as an integer range at some offset, relative | |||
| to either the beginning (<xref target="rule.int-range" format="none">int-rang e</xref>) or end | to either the beginning (<xref target="rule.int-range" format="none">int-rang e</xref>) or end | |||
| (<xref target="rule.suffix-range" format="none">suffix-range</xref>) of the r epresentation data. | (<xref target="rule.suffix-range" format="none">suffix-range</xref>) of the r epresentation data. | |||
| Byte ranges do not use the <xref target="rule.other-range" format="none">othe r-range</xref> specifier. | Byte ranges do not use the <xref target="rule.other-range" format="none">othe r-range</xref> specifier. | |||
| </t> | </t> | |||
| skipping to change at line 7594 ¶ | skipping to change at line 7600 ¶ | |||
| If the representation data has a content coding applied, each byte range is | If the representation data has a content coding applied, each byte range is | |||
| calculated with respect to the encoded sequence of bytes, not the sequence | calculated with respect to the encoded sequence of bytes, not the sequence | |||
| of underlying bytes that would be obtained after decoding. | of underlying bytes that would be obtained after decoding. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Examples of bytes range specifiers: | Examples of bytes range specifiers: | |||
| </t> | </t> | |||
| <ul> | <ul> | |||
| <li> | <li> | |||
| <t>The first 500 bytes (byte offsets 0-499, inclusive):</t> | <t>The first 500 bytes (byte offsets 0-499, inclusive):</t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| bytes=0-499 | bytes=0-499 | |||
| ]]></artwork> | ]]></artwork> | |||
| </li> | </li> | |||
| <li> | <li> | |||
| <t>The second 500 bytes (byte offsets 500-999, inclusive):< /t> | <t>The second 500 bytes (byte offsets 500-999, inclusive):< /t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| bytes=500-999 | bytes=500-999 | |||
| ]]></artwork> | ]]></artwork> | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| A client can limit the number of bytes requested without knowing the size | A client can limit the number of bytes requested without knowing the size | |||
| of the <xref target="selected.representation" format="none">selected represen tation</xref>. | of the <xref target="selected.representation" format="none">selected represen tation</xref>. | |||
| If the <xref target="rule.int-range" format="none">last-pos</xref> value is a bsent, or if the value is | If the <xref target="rule.int-range" format="none">last-pos</xref> value is a bsent, or if the value is | |||
| greater than or equal to the current length of the representation data, the | greater than or equal to the current length of the representation data, the | |||
| byte range is interpreted as the remainder of the representation (i.e., the | byte range is interpreted as the remainder of the representation (i.e., the | |||
| server replaces the value of <xref target="rule.int-range" format="none">last -pos</xref> with a value that | server replaces the value of <xref target="rule.int-range" format="none">last -pos</xref> with a value that | |||
| is one less than the current length of the selected representation). | is one less than the current length of the selected representation). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A client can request the last N bytes (N > 0) of the selected | A client can refer to the last N bytes (N > 0) of the selected | |||
| representation using a <xref target="rule.suffix-range" format="none">suffix- range</xref>. | representation using a <xref target="rule.suffix-range" format="none">suffix- range</xref>. | |||
| If the selected representation is shorter than the specified | If the selected representation is shorter than the specified | |||
| <xref target="rule.suffix-range" format="none">suffix-length</xref>, the enti re representation is used. | <xref target="rule.suffix-range" format="none">suffix-length</xref>, the enti re representation is used. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Additional examples, assuming a representation of length 10000: | Additional examples, assuming a representation of length 10000: | |||
| </t> | </t> | |||
| <ul> | <ul> | |||
| <li> | <li> | |||
| <t>The final 500 bytes (byte offsets 9500-9999, inclusive): </t> | <t>The final 500 bytes (byte offsets 9500-9999, inclusive): </t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| bytes=-500 | bytes=-500 | |||
| ]]></artwork> | ]]></artwork> | |||
| <t>Or:</t> | <t>Or:</t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| bytes=9500- | bytes=9500- | |||
| ]]></artwork> | ]]></artwork> | |||
| </li> | </li> | |||
| <li> | <li> | |||
| <t>The first and last bytes only (bytes 0 and 9999):</t> | <t>The first and last bytes only (bytes 0 and 9999):</t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| bytes=0-0,-1 | bytes=0-0,-1 | |||
| ]]></artwork> | ]]></artwork> | |||
| </li> | </li> | |||
| <li> | <li> | |||
| <t>The first, middle, and last 1000 bytes:</t> | <t>The first, middle, and last 1000 bytes:</t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| bytes= 0-999, 4500-5499, -1000 | bytes= 0-999, 4500-5499, -1000 | |||
| ]]></artwork> | ]]></artwork> | |||
| </li> | </li> | |||
| <li> | <li> | |||
| <t>Other valid (but not canonical) specifications of the se cond 500 | <t>Other valid (but not canonical) specifications of the se cond 500 | |||
| bytes (byte offsets 500-999, inclusive):</t> | bytes (byte offsets 500-999, inclusive):</t> | |||
| <artwork type="example"><![CDATA[ | <artwork><![CDATA[ | |||
| bytes=500-600,601-999 | bytes=500-600,601-999 | |||
| bytes=500-700,601-999 | bytes=500-700,601-999 | |||
| ]]></artwork> | ]]></artwork> | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| If a valid bytes <xref target="rule.ranges-specifier" format="none">range-set | For a <xref target="GET" format="none">GET</xref> request, a valid bytes <xre | |||
| </xref> includes at least one | f target="rule.ranges-specifier" format="none">range-spec</xref> | |||
| <xref target="rule.ranges-specifier" format="none">range-spec</xref> with a < | is <xref target="satisfiable" format="none">satisfiable</xref> if it is eithe | |||
| xref target="rule.int-range" format="none">first-pos</xref> that is | r: | |||
| less than the current length of the representation, or at least one | ||||
| <xref target="rule.suffix-range" format="none">suffix-range</xref> with a non | ||||
| -zero <xref target="rule.suffix-range" format="none">suffix-length</xref>, | ||||
| then the bytes <xref target="rule.ranges-specifier" format="none">range-set</ | ||||
| xref> is satisfiable. Otherwise, | ||||
| the bytes <xref target="rule.ranges-specifier" format="none">range-set</xref> | ||||
| is unsatisfiable. | ||||
| </t> | </t> | |||
| <ul> | ||||
| <li>an <xref target="rule.int-range" format="none">int-range</ | ||||
| xref> with a <xref target="rule.int-range" format="none">first-pos</xref> that | ||||
| is less than the current length of the selected representation | ||||
| or</li> | ||||
| <li>a <xref target="rule.suffix-range" format="none">suffix-ra | ||||
| nge</xref> with a non-zero | ||||
| <xref target="rule.suffix-range" format="none">suffix-length</xref>.</li> | ||||
| </ul> | ||||
| <t> | <t> | |||
| If the selected representation has zero length, the only satisfiable form of | When a selected representation has zero length, the only | |||
| <xref target="rule.ranges-specifier" format="none">range-spec</xref> is a <xr | <xref target="satisfiable" format="none">satisfiable</xref> form of <xref tar | |||
| ef target="rule.suffix-range" format="none">suffix-range</xref> with a non-zero | get="rule.ranges-specifier" format="none">range-spec</xref> in a | |||
| <xref target="rule.suffix-range" format="none">suffix-length</xref>. | <xref target="GET" format="none">GET</xref> request is a <xref target="rule.s | |||
| uffix-range" format="none">suffix-range</xref> with a | ||||
| non-zero <xref target="rule.suffix-range" format="none">suffix-length</xref>. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| In the byte-range syntax, <xref target="rule.int-range" format="none">first-p os</xref>, | In the byte-range syntax, <xref target="rule.int-range" format="none">first-p os</xref>, | |||
| <xref target="rule.int-range" format="none">last-pos</xref>, and <xref target ="rule.suffix-range" format="none">suffix-length</xref> are | <xref target="rule.int-range" format="none">last-pos</xref>, and <xref target ="rule.suffix-range" format="none">suffix-length</xref> are | |||
| expressed as decimal number of octets. Since there is no predefined limit | expressed as decimal number of octets. Since there is no predefined limit | |||
| to the length of content, recipients <bcp14>MUST</bcp14> anticipate potential ly | to the length of content, recipients <bcp14>MUST</bcp14> anticipate potential ly | |||
| large decimal numerals and prevent parsing errors due to integer conversion | large decimal numerals and prevent parsing errors due to integer conversion | |||
| overflows. | overflows. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| skipping to change at line 7689 ¶ | skipping to change at line 7699 ¶ | |||
| <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 semantics to | The "Range" header field on a GET request modifies the method semantics 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" format="none">s elected representation</xref>. | rather than the entire <xref target="selected.representation" format="none">s elected representation</xref>. | |||
| </t> | </t> | |||
| <iref primary="true" item="Grammar" subitem="Range"/> | <iref primary="true" item="Grammar" subitem="Range"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Range = ranges-specifier | <sourcecode type="abnf9110"><![CDATA[ Range = ranges-specifier | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| A server <bcp14>MAY</bcp14> ignore the Range header field. However, origin se rvers and | A server <bcp14>MAY</bcp14> ignore the Range header field. However, origin se rvers and | |||
| intermediate caches ought to support byte ranges when possible, since they | intermediate caches ought to support byte ranges when possible, since they | |||
| support efficient recovery from partially failed transfers and partial | support efficient recovery from partially failed transfers and partial | |||
| retrieval of large representations. | retrieval of large representations. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A server <bcp14>MUST</bcp14> ignore a Range header field received with a requ est method | A server <bcp14>MUST</bcp14> ignore a Range header field received with a requ est method | |||
| which is unrecognized or for which range handling is not defined. For this | that is unrecognized or for which range handling is not defined. For this | |||
| specification, <xref target="GET" format="none">GET</xref> is the only method for which range handling | specification, <xref target="GET" format="none">GET</xref> is the only method for which range handling | |||
| is defined. | is defined. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An origin server <bcp14>MUST</bcp14> ignore a Range header field that contain s a range | An origin server <bcp14>MUST</bcp14> ignore a Range header field that contain s a range | |||
| unit it does not understand. A proxy <bcp14>MAY</bcp14> discard a Range heade r | unit it does not understand. A proxy <bcp14>MAY</bcp14> discard a Range heade r | |||
| field that contains a range unit it does not understand. | field that contains a range unit it does not understand. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A server that supports range requests <bcp14>MAY</bcp14> ignore or reject a | A server that supports range requests <bcp14>MAY</bcp14> ignore or reject a | |||
| <xref target="field.range" format="none">Range</xref> header field that consi | <xref target="field.range" format="none">Range</xref> header field that conta | |||
| sts of more than two | ins an invalid | |||
| overlapping ranges, or a set of many small ranges that are not listed | <xref target="rule.ranges-specifier" format="none">ranges-specifier</xref> (< | |||
| in ascending order, since both are indications of either a broken client or | xref target="range.specifiers"/>), | |||
| a deliberate denial-of-service attack (<xref target="overlapping.ranges"/>). | a <xref target="rule.ranges-specifier" format="none">ranges-specifier</xref> | |||
| with more than two overlapping ranges, | ||||
| or a set of many small ranges that are not listed in ascending order, | ||||
| since these are indications of either a broken client or a deliberate | ||||
| denial-of-service attack (<xref target="overlapping.ranges"/>). | ||||
| A client <bcp14>SHOULD NOT</bcp14> request multiple ranges that are inherentl y less | A client <bcp14>SHOULD NOT</bcp14> request multiple ranges that are inherentl y less | |||
| efficient to process and transfer than a single range that encompasses the | efficient to process and transfer than a single range that encompasses the | |||
| same data. | same data. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A server that supports range requests <bcp14>MAY</bcp14> ignore a <xref targe t="field.range" format="none">Range</xref> | A server that supports range requests <bcp14>MAY</bcp14> ignore a <xref targe t="field.range" format="none">Range</xref> | |||
| header field when the selected representation has no content | header field when the selected representation has no content | |||
| (i.e., the selected representation's data is of zero length). | (i.e., the selected representation's data is of zero length). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| skipping to change at line 7745 ¶ | skipping to change at line 7757 ¶ | |||
| of the Range header field would be a <xref target="status.200" format="none"> 200 (OK)</xref> response. In | of the Range header field would be a <xref target="status.200" format="none"> 200 (OK)</xref> response. In | |||
| other words, Range is ignored when a conditional GET would result in a | other words, Range is ignored when a conditional GET would result in a | |||
| <xref target="status.304" format="none">304 (Not Modified)</xref> response. | <xref target="status.304" format="none">304 (Not Modified)</xref> response. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The If-Range header field (<xref target="field.if-range"/>) can be used as | The If-Range header field (<xref target="field.if-range"/>) can be used as | |||
| a precondition to applying the Range header field. | a precondition to applying the Range header field. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If all of the preconditions are true, the server supports the Range header | If all of the preconditions are true, the server supports the Range header | |||
| field for the target resource, and the specified range(s) are valid and | field for the target resource, the received Range field-value contains a | |||
| satisfiable (as defined in <xref target="byte.ranges"/>), the | valid <xref target="rule.ranges-specifier" format="none">ranges-specifier</xr | |||
| server <bcp14>SHOULD</bcp14> send a <xref target="status.206" format="none">2 | ef> with a <xref target="range.units" format="none">range-unit</xref> | |||
| 06 (Partial Content)</xref> response with a | supported for that target resource, and that | |||
| content containing one or more partial representations that correspond to | <xref target="rule.ranges-specifier" format="none">ranges-specifier</xref> is | |||
| the satisfiable ranges requested. | <xref target="satisfiable" format="none">satisfiable</xref> with respect | |||
| to the selected representation, | ||||
| the server <bcp14>SHOULD</bcp14> send a <xref target="status.206" format="non | ||||
| e">206 (Partial Content)</xref> response | ||||
| with content containing one or more partial representations | ||||
| that correspond to the satisfiable <xref target="rule.ranges-specifier" forma | ||||
| t="none">range-spec</xref>(s) requested. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| The above does not imply that a server will send all requested ranges. | The above does not imply that a server will send all requested ranges. | |||
| In some cases, it may only be possible (or efficient) to send a portion of | In some cases, it may only be possible (or efficient) to send a portion of | |||
| the requested ranges first, while expecting the client to re-request the | the requested ranges first, while expecting the client to re-request the | |||
| remaining portions later if they are still desired | remaining portions later if they are still desired | |||
| (see <xref target="status.206"/>). | (see <xref target="status.206"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If all of the preconditions are true, the server supports the Range header | If all of the preconditions are true, the server supports the Range header | |||
| field for the target resource, and the specified range(s) are invalid or | field for the target resource, the received Range field-value contains a | |||
| unsatisfiable, the server <bcp14>SHOULD</bcp14> send a | valid <xref target="rule.ranges-specifier" format="none">ranges-specifier</xr | |||
| ef>, and either the | ||||
| <xref target="range.units" format="none">range-unit</xref> is not supported f | ||||
| or that target resource or | ||||
| the <xref target="rule.ranges-specifier" format="none">ranges-specifier</xref | ||||
| > is unsatisfiable with respect to | ||||
| the selected representation, the server <bcp14>SHOULD</bcp14> send a | ||||
| <xref target="status.416" format="none">416 (Range Not Satisfiable)</xref> re sponse. | <xref target="status.416" format="none">416 (Range Not Satisfiable)</xref> re sponse. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <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 upstream | The "Accept-Ranges" field in a response indicates whether an upstream | |||
| 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-ranges"/> | <iref primary="true" item="Grammar" subitem="acceptable-ranges"/> | |||
| <sourcecode type="abnf7230"><![CDATA[ Accept-Ranges = acceptabl e-ranges | <sourcecode type="abnf9110"><![CDATA[ Accept-Ranges = acceptabl e-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: bytes | <sourcecode type="http-message"><![CDATA[Accept-Ranges: bytes | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| to indicate that it supports byte range requests for that target resource, | to indicate that it supports byte range requests for that target resource, | |||
| skipping to change at line 7827 ¶ | skipping to change at line 7845 ¶ | |||
| </section> | </section> | |||
| <section anchor="field.content-range" title="Content-Range"> | <section anchor="field.content-range" title="Content-Range"> | |||
| <iref primary="true" item="Fields" subitem="Content-Range"/> | <iref primary="true" item="Fields" subitem="Content-Range"/> | |||
| <iref primary="true" item="Header Fields" subitem="Content-Range"/> | <iref primary="true" item="Header Fields" subitem="Content-Range"/> | |||
| <iref primary="true" item="Content-Range header field"/> | <iref primary="true" item="Content-Range header field"/> | |||
| <t> | <t> | |||
| The "Content-Range" header field is sent in a single part | The "Content-Range" header field is sent in a single part | |||
| <xref target="status.206" format="none">206 (Partial Content)</xref> response to indicate the partial range | <xref target="status.206" format="none">206 (Partial Content)</xref> response to indicate the partial range | |||
| of the <xref target="selected.representation" format="none">selected represen tation</xref> enclosed as the message content, sent in | of the <xref target="selected.representation" format="none">selected represen tation</xref> enclosed as the message content, sent in | |||
| each part of a multipart 206 response to indicate the range enclosed within | each part of a multipart 206 response to indicate the range enclosed within | |||
| each body part, and sent in <xref target="status.416" format="none">416 (Rang e Not Satisfiable)</xref> | each body part (<xref target="multipart.byteranges"/>), and sent in <xref tar get="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-range"/> | <iref primary="true" item="Grammar" subitem="unsatisfied-range"/> | |||
| <iref primary="true" item="Grammar" subitem="complete-length"/> | <iref primary="true" item="Grammar" subitem="complete-length"/> | |||
| <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-u nit SP | <sourcecode type="abnf9110"><![CDATA[ Content-Range = range-u nit 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> res ponse contains a | If a <xref target="status.206" format="none">206 (Partial Content)</xref> res ponse contains a | |||
| skipping to change at line 7975 ¶ | skipping to change at line 7993 ¶ | |||
| <section anchor="multipart.byteranges" title="Media Type multipart/byte ranges"> | <section anchor="multipart.byteranges" title="Media Type multipart/byte ranges"> | |||
| <iref item="Media Type" subitem="multipart/byteranges" primary="true "/> | <iref item="Media Type" subitem="multipart/byteranges" primary="true "/> | |||
| <iref item="multipart/byteranges Media Type" primary="true"/> | <iref item="multipart/byteranges Media Type" primary="true"/> | |||
| <t> | <t> | |||
| When a <xref target="status.206" format="none">206 (Partial Content)</xref> r esponse message includes the | When a <xref target="status.206" format="none">206 (Partial Content)</xref> r esponse message includes the | |||
| content of multiple ranges, they are transmitted as body parts in a | content of multiple ranges, they are transmitted as body parts in a | |||
| multipart message body (<xref target="RFC2046" sectionFormat="comma" section= "5.1"/>) | multipart message body (<xref target="RFC2046" sectionFormat="comma" section= "5.1"/>) | |||
| with the media type of "multipart/byteranges". | with the media type of "multipart/byteranges". | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The multipart/byteranges media type includes one or more body parts, each | The "multipart/byteranges" media type includes one or more body parts, each | |||
| with its own <xref target="field.content-type" format="none">Content-Type</xr ef> and <xref target="field.content-range" format="none">Content-Range</xref> | with its own <xref target="field.content-type" format="none">Content-Type</xr ef> and <xref target="field.content-range" format="none">Content-Range</xref> | |||
| fields. The required boundary parameter specifies the boundary string used | fields. The required boundary parameter specifies the boundary string used | |||
| to separate each body part. | to separate each body part. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Implementation Notes: | Implementation Notes: | |||
| </t> | </t> | |||
| <ol> | <ol> | |||
| <li>Additional CRLFs might precede the first boundary string in t he body.</li> | <li>Additional CRLFs might precede the first boundary string in t he body.</li> | |||
| <li>Although <xref target="RFC2046"/> permits the boundary string to be | <li>Although <xref target="RFC2046"/> permits the boundary string to be | |||
| quoted, some existing implementations handle a quoted boundary | quoted, some existing implementations handle a quoted boundary | |||
| string incorrectly.</li> | string incorrectly.</li> | |||
| <li>A number of clients and servers were coded to an early draft | <li>A number of clients and servers were coded to an early draft | |||
| of the byteranges specification that used a media type of | of the byteranges specification that used a media type of | |||
| multipart/x-byteranges<iref item="multipart/x-byteranges Media Type"/> | "multipart/x-byteranges"<iref item="multipart/x-byteranges Media Type"/><i | |||
| <iref item="Media Type" subitem="multipart/x-byteranges"/>, | ref item="Media Type" subitem="multipart/x-byteranges"/>, | |||
| which is almost (but not quite) compatible with this type.</li> | which is almost (but not quite) compatible with this type.</li> | |||
| </ol> | </ol> | |||
| <t> | <t> | |||
| Despite the name, the "multipart/byteranges" media type is not limited to | Despite the name, the "multipart/byteranges" media type is not limited to | |||
| byte ranges. The following example uses an "exampleunit" range unit: | byte ranges. The following example uses an "exampleunit" range unit: | |||
| </t> | </t> | |||
| <sourcecode type="http-message"><![CDATA[HTTP/1.1 206 Partial Conten t | <sourcecode type="http-message"><![CDATA[HTTP/1.1 206 Partial Conten t | |||
| Date: Tue, 14 Nov 1995 06:25:24 GMT | Date: Tue, 14 Nov 1995 06:25:24 GMT | |||
| Last-Modified: Tue, 14 July 04:58:08 GMT | Last-Modified: Tue, 14 July 04:58:08 GMT | |||
| Content-Length: 2331785 | Content-Length: 2331785 | |||
| skipping to change at line 8018 ¶ | skipping to change at line 8035 ¶ | |||
| ...the first range... | ...the first range... | |||
| --THIS_STRING_SEPARATES | --THIS_STRING_SEPARATES | |||
| Content-Type: video/example | Content-Type: video/example | |||
| Content-Range: exampleunit 11.2-14.3/25 | Content-Range: exampleunit 11.2-14.3/25 | |||
| ...the second range | ...the second range | |||
| --THIS_STRING_SEPARATES-- | --THIS_STRING_SEPARATES-- | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| The following information serves as the registration form for the | The following information serves as the registration form for the | |||
| multipart/byteranges media type. | "multipart/byteranges" media type. | |||
| </t> | </t> | |||
| <dl> | <dl> | |||
| <dt>Type name:</dt> | <dt>Type name:</dt> | |||
| <dd>multipart</dd> | <dd>multipart</dd> | |||
| <dt>Subtype name:</dt> | <dt>Subtype name:</dt> | |||
| <dd>byteranges</dd> | <dd>byteranges</dd> | |||
| <dt>Required parameters:</dt> | <dt>Required parameters:</dt> | |||
| <dd>boundary</dd> | <dd>boundary</dd> | |||
| <dt>Optional parameters:</dt> | <dt>Optional parameters:</dt> | |||
| <dd>N/A</dd> | <dd>N/A</dd> | |||
| <dt>Encoding considerations:</dt> | <dt>Encoding considerations:</dt> | |||
| <dd>only "7bit", "8bit", or "binary" are permitted</dd> | <dd>only "7bit", "8bit", or "binary" are permitted</dd> | |||
| <dt>Security considerations:</dt> | <dt>Security considerations:</dt> | |||
| <dd>see <xref target="security.considerations"/> | <dd>see <xref target="security.considerations"/> | |||
| </dd> | </dd> | |||
| <dt>Interoperability considerations:</dt> | <dt>Interoperability considerations:</dt> | |||
| <dd>N/A</dd> | <dd>N/A</dd> | |||
| <dt>Published specification:</dt> | <dt>Published specification:</dt> | |||
| <dd>This specification (see <xref target="multipart.byteranges"/> ).</dd> | <dd>RFC 9110 (see <xref target="multipart.byteranges"/>)</dd> | |||
| <dt>Applications that use this media type:</dt> | <dt>Applications that use this media type:</dt> | |||
| <dd>HTTP components supporting multiple ranges in a single reques t.</dd> | <dd>HTTP components supporting multiple ranges in a single reques t</dd> | |||
| <dt>Fragment identifier considerations:</dt> | <dt>Fragment identifier considerations:</dt> | |||
| <dd>N/A</dd> | <dd>N/A</dd> | |||
| <dt>Additional information:</dt> | <dt>Additional information:</dt> | |||
| <dd> | <dd> | |||
| <dl> | <dl> | |||
| <dt>Deprecated alias names for this type:</dt> | <dt>Deprecated alias names for this type:</dt> | |||
| <dd>N/A</dd> | <dd>N/A</dd> | |||
| <dt>Magic number(s):</dt> | <dt>Magic number(s):</dt> | |||
| <dd>N/A</dd> | <dd>N/A</dd> | |||
| <dt>File extension(s):</dt> | <dt>File extension(s):</dt> | |||
| skipping to change at line 8129 ¶ | skipping to change at line 8146 ¶ | |||
| three-digit integer values outside of that range (i.e., 600..999) for | three-digit integer values outside of that range (i.e., 600..999) for | |||
| internal communication of non-HTTP status (e.g., library errors). A client | internal communication of non-HTTP status (e.g., library errors). A client | |||
| that receives a response with an invalid status code <bcp14>SHOULD</bcp14> pr ocess the | that receives a response with an invalid status code <bcp14>SHOULD</bcp14> pr ocess the | |||
| response as if it had a <xref target="status.5xx" format="none">5xx (Server E rror)</xref> status code. | response as if it had a <xref target="status.5xx" format="none">5xx (Server E rror)</xref> status code. | |||
| </t> | </t> | |||
| <t anchor="final.interim"> | <t anchor="final.interim"> | |||
| <iref item="Status Codes" subitem="Final"/> | <iref item="Status Codes" subitem="Final"/> | |||
| <iref item="Status Codes" subitem="Interim"/> | <iref item="Status Codes" subitem="Interim"/> | |||
| <iref item="Status Codes" subitem="Informational"/> | <iref item="Status Codes" subitem="Informational"/> | |||
| A single request can have multiple associated responses: zero or more | A single request can have multiple associated responses: zero or more | |||
| <em>interim</em> (non-final) responses with status codes in the | "interim" (non-final) responses with status codes in the | |||
| "informational" (<xref target="status.1xx" format="none">1xx</xref>) range, fo llowed by exactly one | "informational" (<xref target="status.1xx" format="none">1xx</xref>) range, fo llowed by exactly one | |||
| <em>final</em> response with a status code in one of the other ranges. | "final" response with a status code in one of the other ranges. | |||
| </t> | </t> | |||
| <section anchor="overview.of.status.codes" title="Overview of Status Co des"> | <section anchor="overview.of.status.codes" title="Overview of Status Co des"> | |||
| <t> | <t> | |||
| The status codes listed below are defined in this specification. | The status codes listed below are defined in this specification. | |||
| The reason phrases listed here are only recommendations — they can be | The reason phrases listed here are only recommendations -- they can be | |||
| replaced by local equivalents or left out altogether without affecting the | replaced by local equivalents or left out altogether without affecting the | |||
| protocol. | protocol. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Responses with status codes that are defined as heuristically cacheable | Responses with status codes that are defined as heuristically cacheable | |||
| (e.g., 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, and 501 in this | (e.g., 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, and 501 in this | |||
| specification) can be reused by a cache with heuristic expiration unless | specification) can be reused by a cache with heuristic expiration unless | |||
| otherwise indicated by the method definition or explicit cache controls | otherwise indicated by the method definition or explicit cache controls | |||
| <xref target="CACHING"/>; all other status codes are not heuristically cachea ble. | <xref target="CACHING"/>; all other status codes are not heuristically cachea ble. | |||
| </t> | </t> | |||
| skipping to change at line 8160 ¶ | skipping to change at line 8177 ¶ | |||
| within the "Hypertext Transfer Protocol (HTTP) Status Code Registry", | within the "Hypertext Transfer Protocol (HTTP) Status Code Registry", | |||
| as described in <xref target="status.code.extensibility"/>. | as described in <xref target="status.code.extensibility"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.1xx" title="Informational 1xx"> | <section anchor="status.1xx" title="Informational 1xx"> | |||
| <iref primary="true" item="1xx Informational (status code class)"/> | <iref primary="true" item="1xx Informational (status code class)"/> | |||
| <iref primary="true" | <iref primary="true" | |||
| item="Status Codes Classes" | item="Status Codes Classes" | |||
| subitem="1xx Informational"/> | subitem="1xx Informational"/> | |||
| <t> | <t> | |||
| The <em>1xx (Informational)</em> class of status code indicates an | The 1xx (Informational) class of status code indicates an | |||
| interim response for communicating connection status or request progress | interim response for communicating connection status or request progress | |||
| prior to completing the requested action and sending a final response. | prior to completing the requested action and sending a final response. | |||
| Since HTTP/1.0 did not define any 1xx status codes, a server <bcp14>MUST NOT< /bcp14> send | Since HTTP/1.0 did not define any 1xx status codes, a server <bcp14>MUST NOT< /bcp14> send | |||
| a 1xx response to an HTTP/1.0 client. | a 1xx response to an HTTP/1.0 client. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A 1xx response is terminated by the end of the header section; | A 1xx response is terminated by the end of the header section; | |||
| it cannot contain content or trailers. | it cannot contain content or trailers. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| skipping to change at line 8185 ¶ | skipping to change at line 8202 ¶ | |||
| <t> | <t> | |||
| A proxy <bcp14>MUST</bcp14> forward 1xx responses unless the proxy itself | A proxy <bcp14>MUST</bcp14> forward 1xx responses unless the proxy itself | |||
| requested the generation of the 1xx response. For example, if a | requested the generation of the 1xx response. For example, if a | |||
| proxy adds an "Expect: 100-continue" header field when it forwards a request, | proxy adds an "Expect: 100-continue" header field when it forwards a request, | |||
| then it need not forward the corresponding <xref target="status.100" format=" none">100 (Continue)</xref> | then it need not forward the corresponding <xref target="status.100" format=" none">100 (Continue)</xref> | |||
| response(s). | response(s). | |||
| </t> | </t> | |||
| <section anchor="status.100" title="100 Continue"> | <section anchor="status.100" title="100 Continue"> | |||
| <iref primary="true" item="100 Continue (status code)"/> | <iref primary="true" item="100 Continue (status code)"/> | |||
| <t> | <t> | |||
| The <em>100 (Continue)</em> status code indicates that the initial | The 100 (Continue) status code indicates that the initial | |||
| part of a request has been received and has not yet been rejected by the | part of a request has been received and has not yet been rejected by the | |||
| server. The server intends to send a final response after the request has | server. The server intends to send a final response after the request has | |||
| been fully received and acted upon. | been fully received and acted upon. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When the request contains an <xref target="field.expect" format="none">Expect </xref> header field that | When the request contains an <xref target="field.expect" format="none">Expect </xref> header field that | |||
| includes a <xref target="field.expect" format="none">100-continue</xref> expe ctation, the 100 response | includes a <xref target="field.expect" format="none">100-continue</xref> expe ctation, the 100 response | |||
| indicates that the server wishes to receive the request content, | indicates that the server wishes to receive the request content, | |||
| as described in <xref target="field.expect"/>. The client | as described in <xref target="field.expect"/>. The client | |||
| ought to continue sending the request and discard the 100 response. | ought to continue sending the request and discard the 100 response. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the request did not contain an <xref target="field.expect" format="none">E xpect</xref> header field | If the request did not contain an <xref target="field.expect" format="none">E xpect</xref> header field | |||
| containing the <xref target="field.expect" format="none">100-continue</xref> expectation, | containing the <xref target="field.expect" format="none">100-continue</xref> expectation, | |||
| the client can simply discard this interim response. | the client can simply discard this interim response. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.101" title="101 Switching Protocols"> | <section anchor="status.101" title="101 Switching Protocols"> | |||
| <iref primary="true" item="101 Switching Protocols (status code)" /> | <iref primary="true" item="101 Switching Protocols (status code)" /> | |||
| <t> | <t> | |||
| The <em>101 (Switching Protocols)</em> status code indicates that the | The 101 (Switching Protocols) status code indicates that the | |||
| server understands and is willing to comply with the client's request, | server understands and is willing to comply with the client's request, | |||
| via the <xref target="field.upgrade" format="none">Upgrade</xref> header fiel d (<xref target="field.upgrade"/>), for | via the <xref target="field.upgrade" format="none">Upgrade</xref> header fiel d (<xref target="field.upgrade"/>), for | |||
| a change in the application protocol being used on this connection. | a change in the application protocol being used on this connection. | |||
| The server <bcp14>MUST</bcp14> generate an Upgrade header field in the respon se that | The server <bcp14>MUST</bcp14> generate an Upgrade header field in the respon se that | |||
| indicates which protocol(s) will be in effect after this response. | indicates which protocol(s) will be in effect after this response. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| It is assumed that the server will only agree to switch protocols when | It is assumed that the server will only agree to switch protocols when | |||
| it is advantageous to do so. For example, switching to a newer version of | it is advantageous to do so. For example, switching to a newer version of | |||
| HTTP might be advantageous over older versions, and switching to a | HTTP might be advantageous over older versions, and switching to a | |||
| real-time, synchronous protocol might be advantageous when delivering | real-time, synchronous protocol might be advantageous when delivering | |||
| resources that use such features. | resources that use such features. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="status.2xx" title="Successful 2xx"> | <section anchor="status.2xx" title="Successful 2xx"> | |||
| <iref primary="true" item="2xx Successful (status code class)"/> | <iref primary="true" item="2xx Successful (status code class)"/> | |||
| <iref primary="true" item="Status Codes Classes" subitem="2xx Succes sful"/> | <iref primary="true" item="Status Codes Classes" subitem="2xx Succes sful"/> | |||
| <t> | <t> | |||
| The <em>2xx (Successful)</em> class of status code indicates that | The 2xx (Successful) class of status code indicates that | |||
| the client's request was successfully received, understood, and accepted. | the client's request was successfully received, understood, and accepted. | |||
| </t> | </t> | |||
| <section anchor="status.200" title="200 OK"> | <section anchor="status.200" title="200 OK"> | |||
| <iref primary="true" item="200 OK (status code)"/> | <iref primary="true" item="200 OK (status code)"/> | |||
| <t> | <t> | |||
| The <em>200 (OK)</em> status code indicates that the request has | The 200 (OK) status code indicates that the request has | |||
| succeeded. The content sent in a 200 response depends on the request | succeeded. The content sent in a 200 response depends on the request | |||
| method. For the methods defined by this specification, the intended meaning | method. For the methods defined by this specification, the intended meaning | |||
| of the content can be summarized as: | of the content can be summarized as: | |||
| </t> | </t> | |||
| <table align="left"> | <table align="left"> | |||
| <thead> | <thead> | |||
| <tr> | <tr> | |||
| <th>request method</th> | <th>Request Method</th> | |||
| <th>response content is a representation of</th> | <th>Response content is a representation of:</th> | |||
| </tr> | </tr> | |||
| </thead> | </thead> | |||
| <tbody> | <tbody> | |||
| <tr> | <tr> | |||
| <td>GET</td> | <td>GET</td> | |||
| <td>the <xref target="target.resource" format="none">tar get resource</xref> | <td>the <xref target="target.resource" format="none">tar get resource</xref> | |||
| </td> | </td> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>HEAD</td> | <td>HEAD</td> | |||
| skipping to change at line 8279 ¶ | skipping to change at line 8296 ¶ | |||
| <td>the request message as received by the server return ing the | <td>the request message as received by the server return ing the | |||
| trace</td> | trace</td> | |||
| </tr> | </tr> | |||
| </tbody> | </tbody> | |||
| </table> | </table> | |||
| <t> | <t> | |||
| Aside from responses to CONNECT, a 200 response is expected to contain | Aside from responses to CONNECT, a 200 response is expected to contain | |||
| message content unless the message framing explicitly indicates that the | message content unless the message framing explicitly indicates that the | |||
| content has zero length. If some aspect of the request indicates a | content has zero length. If some aspect of the request indicates a | |||
| preference for no content upon success, the origin server ought to send a | preference for no content upon success, the origin server ought to send a | |||
| <em>204 (No Content)</em> response instead. | 204 (No Content) response instead. | |||
| For CONNECT, there is no content because the successful result is a | For CONNECT, there is no content because the successful result is a | |||
| tunnel, which begins immediately after the 200 response header section. | tunnel, which begins immediately after the 200 response header section. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A 200 response is heuristically cacheable; i.e., unless otherwise indicated b y | A 200 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
| the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In 200 responses to GET or HEAD, an origin server <bcp14>SHOULD</bcp14> send any | In 200 responses to GET or HEAD, an origin server <bcp14>SHOULD</bcp14> send any | |||
| available validator fields (<xref target="response.validator"/>) for the | available validator fields (<xref target="response.validator"/>) for the | |||
| <xref target="selected.representation" format="none">selected representation< /xref>, with both a strong entity-tag and | <xref target="selected.representation" format="none">selected representation< /xref>, with both a strong entity tag and | |||
| a <xref target="field.last-modified" format="none">Last-Modified</xref> date being preferred. | a <xref target="field.last-modified" format="none">Last-Modified</xref> date being preferred. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In 200 responses to state-changing methods, any validator fields | In 200 responses to state-changing methods, any validator fields | |||
| (<xref target="response.validator"/>) sent in the response convey the | (<xref target="response.validator"/>) sent in the response convey the | |||
| current validators for the new representation formed as a result of | current validators for the new representation formed as a result of | |||
| successfully applying the request semantics. Note that the PUT method | successfully applying the request semantics. Note that the PUT method | |||
| (<xref target="PUT"/>) has additional requirements that might preclude | (<xref target="PUT"/>) has additional requirements that might preclude | |||
| sending such validators. | sending such validators. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.201" title="201 Created"> | <section anchor="status.201" title="201 Created"> | |||
| <iref primary="true" item="201 Created (status code)"/> | <iref primary="true" item="201 Created (status code)"/> | |||
| <t> | <t> | |||
| The <em>201 (Created)</em> status code indicates that the request has | The 201 (Created) status code indicates that the request has | |||
| been fulfilled and has resulted in one or more new resources being created. | been fulfilled and has resulted in one or more new resources being created. | |||
| The primary resource created by the request is identified by either a | The primary resource created by the request is identified by either a | |||
| <xref target="field.location" format="none">Location</xref> header field in t he response or, if no | <xref target="field.location" format="none">Location</xref> header field in t he response or, if no | |||
| <xref target="field.location" format="none">Location</xref> header field is r eceived, by the target URI. | <xref target="field.location" format="none">Location</xref> header field is r eceived, by the target URI. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The 201 response content typically describes and links to the resource(s) | The 201 response content typically describes and links to the resource(s) | |||
| created. Any validator fields (<xref target="response.validator"/>) | created. Any validator fields (<xref target="response.validator"/>) | |||
| sent in the response convey the current validators for a new | sent in the response convey the current validators for a new | |||
| representation created by the request. Note that the PUT method | representation created by the request. Note that the PUT method | |||
| (<xref target="PUT"/>) has additional requirements that might preclude | (<xref target="PUT"/>) has additional requirements that might preclude | |||
| sending such validators. | sending such validators. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.202" title="202 Accepted"> | <section anchor="status.202" title="202 Accepted"> | |||
| <iref primary="true" item="202 Accepted (status code)"/> | <iref primary="true" item="202 Accepted (status code)"/> | |||
| <t> | <t> | |||
| The <em>202 (Accepted)</em> status code indicates that the request | The 202 (Accepted) status code indicates that the request | |||
| has been accepted for processing, but the processing has not been | has been accepted for processing, but the processing has not been | |||
| completed. The request might or might not eventually be acted upon, as it | completed. The request might or might not eventually be acted upon, as it | |||
| might be disallowed when processing actually takes place. There is no | might be disallowed when processing actually takes place. There is no | |||
| facility in HTTP for re-sending a status code from an asynchronous | facility in HTTP for re-sending a status code from an asynchronous | |||
| operation. | operation. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The 202 response is intentionally noncommittal. Its purpose is to | The 202 response is intentionally noncommittal. Its purpose is to | |||
| allow a server to accept a request for some other process (perhaps a | allow a server to accept a request for some other process (perhaps a | |||
| batch-oriented process that is only run once per day) without | batch-oriented process that is only run once per day) without | |||
| requiring that the user agent's connection to the server persist | requiring that the user agent's connection to the server persist | |||
| until the process is completed. The representation sent with this | until the process is completed. The representation sent with this | |||
| response ought to describe the request's current status and point to | response ought to describe the request's current status and point to | |||
| (or embed) a status monitor that can provide the user with an estimate of | (or embed) a status monitor that can provide the user with an estimate of | |||
| when the request will be fulfilled. | when the request will be fulfilled. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.203" title="203 Non-Authoritative Informatio n"> | <section anchor="status.203" title="203 Non-Authoritative Informatio n"> | |||
| <iref primary="true" item="203 Non-Authoritative Information (sta tus code)"/> | <iref primary="true" item="203 Non-Authoritative Information (sta tus code)"/> | |||
| <t> | <t> | |||
| The <em>203 (Non-Authoritative Information)</em> status code | The 203 (Non-Authoritative Information) status code | |||
| indicates that the request was successful but the enclosed content has been | indicates that the request was successful but the enclosed content has been | |||
| modified from that of the origin server's <xref target="status.200" format="n one">200 (OK)</xref> response | modified from that of the origin server's <xref target="status.200" format="n one">200 (OK)</xref> response | |||
| by a transforming proxy (<xref target="message.transformations"/>). This stat us code allows the | by a transforming proxy (<xref target="message.transformations"/>). This stat us code allows the | |||
| proxy to notify recipients when a transformation has been applied, since | proxy to notify recipients when a transformation has been applied, since | |||
| that knowledge might impact later decisions regarding the content. For | that knowledge might impact later decisions regarding the content. For | |||
| example, future cache validation requests for the content might only be | example, future cache validation requests for the content might only be | |||
| applicable along the same request path (through the same proxies). | applicable along the same request path (through the same proxies). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A 203 response is heuristically cacheable; i.e., unless otherwise indicated b y | A 203 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
| the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.204" title="204 No Content"> | <section anchor="status.204" title="204 No Content"> | |||
| <iref primary="true" item="204 No Content (status code)"/> | <iref primary="true" item="204 No Content (status code)"/> | |||
| <t> | <t> | |||
| The <em>204 (No Content)</em> status code indicates that the server | The 204 (No Content) status code indicates that the server | |||
| has successfully fulfilled the request and that there is no additional | has successfully fulfilled the request and that there is no additional | |||
| content to send in the response content. Metadata in the response | content to send in the response content. Metadata in the response | |||
| header fields refer to the <xref target="target.resource" format="none">targe t resource</xref> and its | header fields refer to the <xref target="target.resource" format="none">targe t resource</xref> and its | |||
| <xref target="selected.representation" format="none">selected representation< /xref> after the requested action was applied. | <xref target="selected.representation" format="none">selected representation< /xref> after the requested action was applied. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| For example, if a 204 status code is received in response to a PUT | For example, if a 204 status code is received in response to a PUT | |||
| request and the response contains an <xref target="field.etag" format="none"> ETag</xref> field, then | request and the response contains an <xref target="field.etag" format="none"> ETag</xref> field, then | |||
| the PUT was successful and the ETag field value contains the entity-tag for | the PUT was successful and the ETag field value contains the entity tag for | |||
| the new representation of that target resource. | the new representation of that target resource. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The 204 response allows a server to indicate that the action has been | The 204 response allows a server to indicate that the action has been | |||
| successfully applied to the target resource, while implying that the | successfully applied to the target resource, while implying that the | |||
| user agent does not need to traverse away from its current "document view" | user agent does not need to traverse away from its current "document view" | |||
| (if any). The server assumes that the user agent will provide some | (if any). The server assumes that the user agent will provide some | |||
| indication of the success to its user, in accord with its own interface, | indication of the success to its user, in accord with its own interface, | |||
| and apply any new or updated metadata in the response to its active | and apply any new or updated metadata in the response to its active | |||
| representation. | representation. | |||
| skipping to change at line 8401 ¶ | skipping to change at line 8418 ¶ | |||
| it cannot contain content or trailers. | it cannot contain content or trailers. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A 204 response is heuristically cacheable; i.e., unless otherwise indicated b y | A 204 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
| the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.205" title="205 Reset Content"> | <section anchor="status.205" title="205 Reset Content"> | |||
| <iref primary="true" item="205 Reset Content (status code)"/> | <iref primary="true" item="205 Reset Content (status code)"/> | |||
| <t> | <t> | |||
| The <em>205 (Reset Content)</em> status code indicates that the | The 205 (Reset Content) status code indicates that the | |||
| server has fulfilled the request and desires that the user agent reset the | server has fulfilled the request and desires that the user agent reset the | |||
| "document view", which caused the request to be sent, to its original state | "document view", which caused the request to be sent, to its original state | |||
| as received from the origin server. | as received from the origin server. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This response is intended to support a common data entry use case where | This response is intended to support a common data entry use case where | |||
| the user receives content that supports data entry (a form, notepad, | the user receives content that supports data entry (a form, notepad, | |||
| canvas, etc.), enters or manipulates data in that space, causes the entered | canvas, etc.), enters or manipulates data in that space, causes the entered | |||
| data to be submitted in a request, and then the data entry mechanism is | data to be submitted in a request, and then the data entry mechanism is | |||
| reset for the next entry so that the user can easily initiate another | reset for the next entry so that the user can easily initiate another | |||
| input action. | input action. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Since the 205 status code implies that no additional content will be | Since the 205 status code implies that no additional content will be | |||
| provided, a server <bcp14>MUST NOT</bcp14> generate content in a 205 response . | provided, a server <bcp14>MUST NOT</bcp14> generate content in a 205 response . | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.206" title="206 Partial Content"> | <section anchor="status.206" title="206 Partial Content"> | |||
| <iref primary="true" item="206 Partial Content (status code)"/> | <iref primary="true" item="206 Partial Content (status code)"/> | |||
| <t> | <t> | |||
| The <em>206 (Partial Content)</em> status code indicates that the | The 206 (Partial Content) status code indicates that the | |||
| server is successfully fulfilling a range request for the target resource | server is successfully fulfilling a range request for the target resource | |||
| by transferring one or more parts of the | by transferring one or more parts of the | |||
| <xref target="selected.representation" format="none">selected representation< /xref>. | <xref target="selected.representation" format="none">selected representation< /xref>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A server that supports range requests (<xref target="range.requests"/>) will | A server that supports range requests (<xref target="range.requests"/>) will | |||
| usually attempt to satisfy all of the requested ranges, since sending | usually attempt to satisfy all of the requested ranges, since sending | |||
| less data will likely result in another client request for the remainder. | less data will likely result in another client request for the remainder. | |||
| However, a server might want to send only a subset of the data requested | However, a server might want to send only a subset of the data requested | |||
| for reasons of its own, such as temporary unavailability, cache efficiency, | for reasons of its own, such as temporary unavailability, cache efficiency, | |||
| skipping to change at line 8461 ¶ | skipping to change at line 8478 ¶ | |||
| <t> | <t> | |||
| A <xref target="field.content-length" format="none">Content-Length</xref> hea der field present in a 206 response | A <xref target="field.content-length" format="none">Content-Length</xref> hea der field present in a 206 response | |||
| indicates the number of octets in the content of this message, which is | indicates the number of octets in the content of this message, which is | |||
| usually not the complete length of the selected representation. | usually not the complete length of the selected representation. | |||
| Each <xref target="field.content-range" format="none">Content-Range</xref> he ader field includes information about the | Each <xref target="field.content-range" format="none">Content-Range</xref> he ader field includes information about the | |||
| selected representation's complete length. | selected representation's complete length. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A sender that generates a 206 response to a request with an <xref target="fie ld.if-range" format="none">If-Range</xref> | A sender that generates a 206 response to a request with an <xref target="fie ld.if-range" format="none">If-Range</xref> | |||
| header field <bcp14>SHOULD NOT</bcp14> generate other representation header | header field <bcp14>SHOULD NOT</bcp14> generate other representation header | |||
| fields beyond those required, because the client | fields beyond those required because the client | |||
| already has a prior response containing those header fields. | already has a prior response containing those header fields. | |||
| Otherwise, a sender <bcp14>MUST</bcp14> generate all of the representation he ader | Otherwise, a sender <bcp14>MUST</bcp14> generate all of the representation he ader | |||
| fields that would have been sent in a <xref target="status.200" format="none" >200 (OK)</xref> response | fields that would have been sent in a <xref target="status.200" format="none" >200 (OK)</xref> response | |||
| to the same request. | to the same request. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A 206 response is heuristically cacheable; i.e., unless otherwise indicated b y | A 206 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
| explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | |||
| </t> | </t> | |||
| <section anchor="partial.single" title="Single Part"> | <section anchor="partial.single" title="Single Part"> | |||
| skipping to change at line 8494 ¶ | skipping to change at line 8511 ¶ | |||
| ... 26012 bytes of partial image data ... | ... 26012 bytes of partial image data ... | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| </section> | </section> | |||
| <section anchor="partial.multipart" title="Multiple Parts"> | <section anchor="partial.multipart" title="Multiple Parts"> | |||
| <t> | <t> | |||
| If multiple parts are being transferred, the server generating the 206 | If multiple parts are being transferred, the server generating the 206 | |||
| response <bcp14>MUST</bcp14> generate "multipart/byteranges" content, as defi ned | response <bcp14>MUST</bcp14> generate "multipart/byteranges" content, as defi ned | |||
| in <xref target="multipart.byteranges"/>, and a | in <xref target="multipart.byteranges"/>, and a | |||
| <xref target="field.content-type" format="none">Content-Type</xref> header fi eld containing the | <xref target="field.content-type" format="none">Content-Type</xref> header fi eld containing the | |||
| multipart/byteranges media type and its required boundary parameter. | "multipart/byteranges" media type and its required boundary parameter. | |||
| To avoid confusion with single-part responses, a server <bcp14>MUST NOT</bcp1 4> generate | To avoid confusion with single-part responses, a server <bcp14>MUST NOT</bcp1 4> generate | |||
| a <xref target="field.content-range" format="none">Content-Range</xref> heade r field in the HTTP header section of a | a <xref target="field.content-range" format="none">Content-Range</xref> heade r field in the HTTP header section of a | |||
| multiple part response (this field will be sent in each part instead). | multiple part response (this field will be sent in each part instead). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Within the header area of each body part in the multipart content, the | Within the header area of each body part in the multipart content, the | |||
| server <bcp14>MUST</bcp14> generate a <xref target="field.content-range" form at="none">Content-Range</xref> header field | server <bcp14>MUST</bcp14> generate a <xref target="field.content-range" form at="none">Content-Range</xref> header field | |||
| corresponding to the range being enclosed in that body part. | corresponding to the range being enclosed in that body part. | |||
| If the selected representation would have had a <xref target="field.content-t ype" format="none">Content-Type</xref> | If the selected representation would have had a <xref target="field.content-t ype" format="none">Content-Type</xref> | |||
| header field in a <xref target="status.200" format="none">200 (OK)</xref> res ponse, the server <bcp14>SHOULD</bcp14> | header field in a <xref target="status.200" format="none">200 (OK)</xref> res ponse, the server <bcp14>SHOULD</bcp14> | |||
| skipping to change at line 8532 ¶ | skipping to change at line 8549 ¶ | |||
| ...the second range | ...the second range | |||
| --THIS_STRING_SEPARATES-- | --THIS_STRING_SEPARATES-- | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| <t> | <t> | |||
| When multiple ranges are requested, a server <bcp14>MAY</bcp14> coalesce any of the | When multiple ranges are requested, a server <bcp14>MAY</bcp14> coalesce any of the | |||
| ranges that overlap, or that are separated by a gap that is smaller than the | ranges that overlap, or that are separated by a gap that is smaller than the | |||
| overhead of sending multiple parts, regardless of the order in which the | overhead of sending multiple parts, regardless of the order in which the | |||
| corresponding range-spec appeared in the received <xref target="field.range" format="none">Range</xref> | corresponding range-spec appeared in the received <xref target="field.range" format="none">Range</xref> | |||
| header field. Since the typical overhead between each part of a | header field. Since the typical overhead between each part of a | |||
| multipart/byteranges is around 80 bytes, depending on the selected | "multipart/byteranges" is around 80 bytes, depending on the selected | |||
| representation's media type and the chosen boundary parameter length, it | representation's media type and the chosen boundary parameter length, it | |||
| can be less efficient to transfer many small disjoint parts than it is to | can be less efficient to transfer many small disjoint parts than it is to | |||
| transfer the entire selected representation. | transfer the entire selected representation. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A server <bcp14>MUST NOT</bcp14> generate a multipart response to a request f or a single | A server <bcp14>MUST NOT</bcp14> generate a multipart response to a request f or a single | |||
| range, since a client that does not request multiple parts might not | range, since a client that does not request multiple parts might not | |||
| support multipart responses. However, a server <bcp14>MAY</bcp14> generate a | support multipart responses. However, a server <bcp14>MAY</bcp14> generate a | |||
| multipart/byteranges response with only a single body part if multiple | "multipart/byteranges" response with only a single body part if multiple | |||
| ranges were requested and only one range was found to be satisfiable or | ranges were requested and only one range was found to be satisfiable or | |||
| only one range remained after coalescing. | only one range remained after coalescing. | |||
| A client that cannot process a multipart/byteranges response <bcp14>MUST NOT< /bcp14> | A client that cannot process a "multipart/byteranges" response <bcp14>MUST NO T</bcp14> | |||
| generate a request that asks for multiple ranges. | generate a request that asks for multiple ranges. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A server that generates a multipart response <bcp14>SHOULD</bcp14> send | A server that generates a multipart response <bcp14>SHOULD</bcp14> send | |||
| the parts in the same order that the corresponding range-spec appeared | the parts in the same order that the corresponding range-spec appeared | |||
| in the received <xref target="field.range" format="none">Range</xref> header field, excluding those ranges | in the received <xref target="field.range" format="none">Range</xref> header field, excluding those ranges | |||
| that were deemed unsatisfiable or that were coalesced into other ranges. | that were deemed unsatisfiable or that were coalesced into other ranges. | |||
| A client that receives a multipart response <bcp14>MUST</bcp14> inspect the | A client that receives a multipart response <bcp14>MUST</bcp14> inspect the | |||
| <xref target="field.content-range" format="none">Content-Range</xref> header field present in each body part in | <xref target="field.content-range" format="none">Content-Range</xref> header field present in each body part in | |||
| order to determine which range is contained in that body part; a client | order to determine which range is contained in that body part; a client | |||
| skipping to change at line 8602 ¶ | skipping to change at line 8619 ¶ | |||
| ranges within the new response and all of the matching stored responses. | ranges within the new response and all of the matching stored responses. | |||
| If the union consists of the entire range of the representation, then the | If the union consists of the entire range of the representation, then the | |||
| client <bcp14>MUST</bcp14> process the combined response as if it were a comp lete | client <bcp14>MUST</bcp14> process the combined response as if it were a comp lete | |||
| <xref target="status.200" format="none">200 (OK)</xref> response, including a <xref target="field.content-length" format="none">Content-Length</xref> | <xref target="status.200" format="none">200 (OK)</xref> response, including a <xref target="field.content-length" format="none">Content-Length</xref> | |||
| header field that reflects the complete length. | header field that reflects the complete length. | |||
| Otherwise, the client <bcp14>MUST</bcp14> process the set of continuous range s as one of | Otherwise, the client <bcp14>MUST</bcp14> process the set of continuous range s as one of | |||
| the following: | the following: | |||
| an incomplete <xref target="status.200" format="none">200 (OK)</xref> respons e if the combined response is | an incomplete <xref target="status.200" format="none">200 (OK)</xref> respons e if the combined response is | |||
| a prefix of the representation, | a prefix of the representation, | |||
| a single <xref target="status.206" format="none">206 (Partial Content)</xref> response containing | a single <xref target="status.206" format="none">206 (Partial Content)</xref> response containing | |||
| multipart/byteranges content, or | "multipart/byteranges" content, or | |||
| multiple <xref target="status.206" format="none">206 (Partial Content)</xref> responses, each with one | multiple <xref target="status.206" format="none">206 (Partial Content)</xref> responses, each with one | |||
| continuous range that is indicated by a <xref target="field.content-range" fo rmat="none">Content-Range</xref> header | continuous range that is indicated by a <xref target="field.content-range" fo rmat="none">Content-Range</xref> header | |||
| field. | field. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="status.3xx" title="Redirection 3xx"> | <section anchor="status.3xx" title="Redirection 3xx"> | |||
| <iref primary="true" item="3xx Redirection (status code class)"/> | <iref primary="true" item="3xx Redirection (status code class)"/> | |||
| <iref primary="true" | <iref primary="true" | |||
| item="Status Codes Classes" | item="Status Codes Classes" | |||
| subitem="3xx Redirection"/> | subitem="3xx Redirection"/> | |||
| <t> | <t> | |||
| The <em>3xx (Redirection)</em> class of status code indicates that | The 3xx (Redirection) class of status code indicates that | |||
| further action needs to be taken by the user agent in order to fulfill the | further action needs to be taken by the user agent in order to fulfill the | |||
| request. There are several types of redirects: | request. There are several types of redirects: | |||
| </t> | </t> | |||
| <ol> | <ol> | |||
| <li> | <li> | |||
| Redirects that indicate this resource might be available at a | Redirects that indicate this resource might be available at a | |||
| different URI, as provided by the <xref target="field.location" format="none ">Location</xref> header field, | different URI, as provided by the <xref target="field.location" format="none ">Location</xref> header field, | |||
| as in the status codes <xref target="status.301" format="none">301 (Moved Pe rmanently)</xref>, | as in the status codes <xref target="status.301" format="none">301 (Moved Pe rmanently)</xref>, | |||
| <xref target="status.302" format="none">302 (Found)</xref>, <xref target="st atus.307" format="none">307 (Temporary Redirect)</xref>, and | <xref target="status.302" format="none">302 (Found)</xref>, <xref target="st atus.307" format="none">307 (Temporary Redirect)</xref>, and | |||
| <xref target="status.308" format="none">308 (Permanent Redirect)</xref>. | <xref target="status.308" format="none">308 (Permanent Redirect)</xref>. | |||
| skipping to change at line 8657 ¶ | skipping to change at line 8674 ¶ | |||
| and <xref target="status.302" format="none">302 (Found)</xref> were original ly defined as method-preserving | and <xref target="status.302" format="none">302 (Found)</xref> were original ly defined as method-preserving | |||
| (<xref target="HTTP10" sectionFormat="comma" section="9.3"/>) to match their implementation | (<xref target="HTTP10" sectionFormat="comma" section="9.3"/>) to match their implementation | |||
| at CERN; <xref target="status.303" format="none">303 (See Other)</xref> was defined for a redirection that | at CERN; <xref target="status.303" format="none">303 (See Other)</xref> was defined for a redirection that | |||
| changed its method to GET. However, early user agents split on whether to | changed its method to GET. However, early user agents split on whether to | |||
| redirect POST requests as POST (according to then-current specification) | redirect POST requests as POST (according to then-current specification) | |||
| or as GET (the safer alternative when redirected to a different site). | or as GET (the safer alternative when redirected to a different site). | |||
| Prevailing practice eventually converged on changing the method to GET. | Prevailing practice eventually converged on changing the method to GET. | |||
| <xref target="status.307" format="none">307 (Temporary Redirect)</xref> and | <xref target="status.307" format="none">307 (Temporary Redirect)</xref> and | |||
| <xref target="status.308" format="none">308 (Permanent Redirect)</xref> | <xref target="status.308" format="none">308 (Permanent Redirect)</xref> | |||
| <xref target="RFC7538"/> were | <xref target="RFC7538"/> were | |||
| later added to unambiguously indicate method-preserving redirects, and | later added to unambiguously indicate method-preserving redirects, and statu | |||
| <xref target="status.301" format="none">301</xref>/<xref target="status.302" | s codes | |||
| format="none">302</xref> have been adjusted to allow a POST | <xref target="status.301" format="none">301</xref> and <xref target="status. | |||
| 302" format="none">302</xref> have been adjusted to allow a POST | ||||
| request to be redirected as GET. | request to be redirected as GET. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| <t> | <t> | |||
| If a <xref target="field.location" format="none">Location</xref> header field | If a <xref target="field.location" format="none">Location</xref> header field | |||
| (<xref target="field.location"/>) is provided, the user agent <bcp14>MAY</bcp 14> | (<xref target="field.location"/>) is provided, the user agent <bcp14>MAY</bcp 14> | |||
| automatically redirect its request to the URI referenced by the Location | automatically redirect its request to the URI referenced by the Location | |||
| field value, even if the specific status code is not understood. | field value, even if the specific status code is not understood. | |||
| Automatic redirection needs to be done with care for methods not known to be | Automatic redirection needs to be done with care for methods not known to be | |||
| <xref target="safe.methods" format="none">safe</xref>, as defined in <xref ta rget="safe.methods"/>, since | <xref target="safe.methods" format="none">safe</xref>, as defined in <xref ta rget="safe.methods"/>, since | |||
| skipping to change at line 8697 ¶ | skipping to change at line 8714 ¶ | |||
| includes: | includes: | |||
| </t> | </t> | |||
| <ol> | <ol> | |||
| <li>Connection-specific header fields (see <xref target="fi eld.connection"/>),</li> | <li>Connection-specific header fields (see <xref target="fi eld.connection"/>),</li> | |||
| <li>Header fields specific to the client's proxy configurat ion, | <li>Header fields specific to the client's proxy configurat ion, | |||
| including (but not limited to) <xref target="field.proxy-authorization" f ormat="none">Proxy-Authorization</xref>,</li> | including (but not limited to) <xref target="field.proxy-authorization" f ormat="none">Proxy-Authorization</xref>,</li> | |||
| <li>Origin-specific header fields (if any), including (but not | <li>Origin-specific header fields (if any), including (but not | |||
| limited to) <xref target="field.host" format="none">Host</xref>,</li> | limited to) <xref target="field.host" format="none">Host</xref>,</li> | |||
| <li>Validating header fields that were added by the impleme ntation's | <li>Validating header fields that were added by the impleme ntation's | |||
| cache (e.g., <xref target="field.if-none-match" format="none">If-None-Mat ch</xref>, | cache (e.g., <xref target="field.if-none-match" format="none">If-None-Mat ch</xref>, | |||
| <xref target="field.if-modified-since" format="none">If-Modified-Since</x ref>),</li> | <xref target="field.if-modified-since" format="none">If-Modified-Since</x ref>), and</li> | |||
| <li>Resource-specific header fields, including (but not lim ited to) | <li>Resource-specific header fields, including (but not lim ited to) | |||
| <xref target="field.referer" format="none">Referer</xref>, Origin, | <xref target="field.referer" format="none">Referer</xref>, Origin, | |||
| <xref target="field.authorization" format="none">Authorization</xref>, an d Cookie.</li> | <xref target="field.authorization" format="none">Authorization</xref>, an d Cookie.</li> | |||
| </ol> | </ol> | |||
| </li> | </li> | |||
| <li> | <li> | |||
| <t> | <t> | |||
| Consider removing header fields that were not automatically generated by t he | Consider removing header fields that were not automatically generated by t he | |||
| implementation (i.e., those present in the request because they were added | implementation (i.e., those present in the request because they were added | |||
| by the calling context) where there are security implications; this | by the calling context) where there are security implications; this | |||
| skipping to change at line 8743 ¶ | skipping to change at line 8760 ¶ | |||
| <t> | <t> | |||
| <strong>Note:</strong> An earlier version of this specificatio n recommended a | <strong>Note:</strong> An earlier version of this specificatio n recommended a | |||
| maximum of five redirections (<xref target="RFC2068" sectionFormat="comma" s ection="10.3"/>). | maximum of five redirections (<xref target="RFC2068" sectionFormat="comma" s ection="10.3"/>). | |||
| Content developers need to be aware that some clients might | Content developers need to be aware that some clients might | |||
| implement such a fixed limitation. | implement such a fixed limitation. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| <section anchor="status.300" title="300 Multiple Choices"> | <section anchor="status.300" title="300 Multiple Choices"> | |||
| <iref primary="true" item="300 Multiple Choices (status code)"/> | <iref primary="true" item="300 Multiple Choices (status code)"/> | |||
| <t> | <t> | |||
| The <em>300 (Multiple Choices)</em> status code indicates that the | The 300 (Multiple Choices) status code indicates that the | |||
| <xref target="target.resource" format="none">target resource</xref> has more than one representation, each with | <xref target="target.resource" format="none">target resource</xref> has more than one representation, each with | |||
| its own more specific identifier, and information about the alternatives is | its own more specific identifier, and information about the alternatives is | |||
| being provided so that the user (or user agent) can select a preferred | being provided so that the user (or user agent) can select a preferred | |||
| representation by redirecting its request to one or more of those | representation by redirecting its request to one or more of those | |||
| identifiers. In other words, the server desires that the user agent engage | identifiers. In other words, the server desires that the user agent engage | |||
| in reactive negotiation to select the most appropriate representation(s) | in reactive negotiation to select the most appropriate representation(s) | |||
| for its needs (<xref target="content.negotiation"/>). | for its needs (<xref target="content.negotiation"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the server has a preferred choice, the server <bcp14>SHOULD</bcp14> genera te a | If the server has a preferred choice, the server <bcp14>SHOULD</bcp14> genera te a | |||
| skipping to change at line 8790 ¶ | skipping to change at line 8807 ¶ | |||
| led to both URI and Alternates (a subsequent proposal) being dropped from | led to both URI and Alternates (a subsequent proposal) being dropped from | |||
| this specification. It is possible to communicate the list as a | this specification. It is possible to communicate the list as a | |||
| Link header field value <xref target="RFC8288"/> whose members have a relatio nship of | Link header field value <xref target="RFC8288"/> whose members have a relatio nship of | |||
| "alternate", though deployment is a chicken-and-egg problem. | "alternate", though deployment is a chicken-and-egg problem. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| </section> | </section> | |||
| <section anchor="status.301" title="301 Moved Permanently"> | <section anchor="status.301" title="301 Moved Permanently"> | |||
| <iref primary="true" item="301 Moved Permanently (status code)"/> | <iref primary="true" item="301 Moved Permanently (status code)"/> | |||
| <t> | <t> | |||
| The <em>301 (Moved Permanently)</em> status code indicates that the | The 301 (Moved Permanently) status code indicates that the | |||
| <xref target="target.resource" format="none">target resource</xref> has been assigned a new permanent URI and | <xref target="target.resource" format="none">target resource</xref> has been assigned a new permanent URI and | |||
| any future references to this resource ought to use one of the enclosed | any future references to this resource ought to use one of the enclosed | |||
| URIs. The server is suggesting that a user agent with link-editing capability | URIs. The server is suggesting that a user agent with link-editing capability | |||
| can permanently replace references to the target URI with one of the | can permanently replace references to the target URI with one of the | |||
| new references sent by the server. However, this suggestion is usually | new references sent by the server. However, this suggestion is usually | |||
| ignored unless the user agent is actively editing references | ignored unless the user agent is actively editing references | |||
| (e.g., engaged in authoring content), the connection is secured, and | (e.g., engaged in authoring content), the connection is secured, and | |||
| the origin server is a trusted authority for the content being edited. | the origin server is a trusted authority for the content being edited. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| skipping to change at line 8823 ¶ | skipping to change at line 8840 ¶ | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| <t> | <t> | |||
| A 301 response is heuristically cacheable; i.e., unless otherwise indicated b y | A 301 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
| the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.302" title="302 Found"> | <section anchor="status.302" title="302 Found"> | |||
| <iref primary="true" item="302 Found (status code)"/> | <iref primary="true" item="302 Found (status code)"/> | |||
| <t> | <t> | |||
| The <em>302 (Found)</em> status code indicates that the target | The 302 (Found) status code indicates that the target | |||
| resource resides temporarily under a different URI. Since the redirection | resource resides temporarily under a different URI. Since the redirection | |||
| might be altered on occasion, the client ought to continue to use the | might be altered on occasion, the client ought to continue to use the | |||
| target URI for future requests. | target URI for future requests. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The server <bcp14>SHOULD</bcp14> generate a <xref target="field.location" for mat="none">Location</xref> header field in the | The server <bcp14>SHOULD</bcp14> generate a <xref target="field.location" for mat="none">Location</xref> header field in the | |||
| response containing a URI reference for the different URI. | response containing a URI reference for the different URI. | |||
| The user agent <bcp14>MAY</bcp14> use the Location field value for automatic redirection. | The user agent <bcp14>MAY</bcp14> use the Location field value for automatic redirection. | |||
| The server's response content usually contains a short hypertext note with | The server's response content usually contains a short hypertext note with | |||
| a hyperlink to the different URI(s). | a hyperlink to the different URI(s). | |||
| skipping to change at line 8847 ¶ | skipping to change at line 8864 ¶ | |||
| <strong>Note:</strong> For historical reasons, a user agent <bcp14>MAY</bcp14> change the | <strong>Note:</strong> For historical reasons, a user agent <bcp14>MAY</bcp14> change the | |||
| request method from POST to GET for the subsequent request. If this | request method from POST to GET for the subsequent request. If this | |||
| behavior is undesired, the <xref target="status.307" format="none">307 (Temp orary Redirect)</xref> | behavior is undesired, the <xref target="status.307" format="none">307 (Temp orary Redirect)</xref> | |||
| status code can be used instead. | status code can be used instead. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| </section> | </section> | |||
| <section anchor="status.303" title="303 See Other"> | <section anchor="status.303" title="303 See Other"> | |||
| <iref primary="true" item="303 See Other (status code)"/> | <iref primary="true" item="303 See Other (status code)"/> | |||
| <t> | <t> | |||
| The <em>303 (See Other)</em> status code indicates that the server is | The 303 (See Other) status code indicates that the server is | |||
| redirecting the user agent to a different resource, as indicated by a URI | redirecting the user agent to a different resource, as indicated by a URI | |||
| in the <xref target="field.location" format="none">Location</xref> header fie ld, which is intended to provide | in the <xref target="field.location" format="none">Location</xref> header fie ld, which is intended to provide | |||
| an indirect response to the original request. A user agent can perform a | an indirect response to the original request. A user agent can perform a | |||
| retrieval request targeting that URI (a GET or HEAD request if using HTTP), | retrieval request targeting that URI (a GET or HEAD request if using HTTP), | |||
| which might also be redirected, and present the eventual result as an | which might also be redirected, and present the eventual result as an | |||
| answer to the original request. Note that the new URI in the Location | answer to the original request. Note that the new URI in the Location | |||
| header field is not considered equivalent to the target URI. | header field is not considered equivalent to the target URI. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This status code is applicable to any HTTP method. It is | This status code is applicable to any HTTP method. It is | |||
| skipping to change at line 8884 ¶ | skipping to change at line 8901 ¶ | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Except for responses to a HEAD request, the representation of a 303 | Except for responses to a HEAD request, the representation of a 303 | |||
| response ought to contain a short hypertext note with a hyperlink to the | response ought to contain a short hypertext note with a hyperlink to the | |||
| same URI reference provided in the <xref target="field.location" format="none ">Location</xref> header field. | same URI reference provided in the <xref target="field.location" format="none ">Location</xref> header field. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.304" title="304 Not Modified"> | <section anchor="status.304" title="304 Not Modified"> | |||
| <iref primary="true" item="304 Not Modified (status code)"/> | <iref primary="true" item="304 Not Modified (status code)"/> | |||
| <t> | <t> | |||
| The <em>304 (Not Modified)</em> status code indicates that a | The 304 (Not Modified) status code indicates that a | |||
| conditional GET or HEAD request has been | conditional GET or HEAD request has been | |||
| received and would have resulted in a <xref target="status.200" format="none" >200 (OK)</xref> response | received and would have resulted in a <xref target="status.200" format="none" >200 (OK)</xref> response | |||
| if it were not for the fact that the condition evaluated to false. | if it were not for the fact that the condition evaluated to false. | |||
| In other words, there is no need for the server to transfer a | In other words, there is no need for the server to transfer a | |||
| representation of the target resource because the request indicates that | representation of the target resource because the request indicates that | |||
| the client, which made the request conditional, already has a valid | the client, which made the request conditional, already has a valid | |||
| representation; the server is therefore redirecting the client to make | representation; the server is therefore redirecting the client to make | |||
| use of that stored representation as if it were the content of a | use of that stored representation as if it were the content of a | |||
| <xref target="status.200" format="none">200 (OK)</xref> response. | <xref target="status.200" format="none">200 (OK)</xref> response. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The server generating a 304 response <bcp14>MUST</bcp14> generate any of the following | The server generating a 304 response <bcp14>MUST</bcp14> generate any of the following | |||
| header fields that would have been sent in a <xref target="status.200" format ="none">200 (OK)</xref> | header fields that would have been sent in a <xref target="status.200" format ="none">200 (OK)</xref> | |||
| response to the same request: | response to the same request: | |||
| Cache-Control, | ||||
| <xref target="field.content-location" format="none">Content-Location</xref>, | ||||
| <xref target="field.date" format="none">Date</xref>, | ||||
| <xref target="field.etag" format="none">ETag</xref>, | ||||
| Expires, and | ||||
| <xref target="field.vary" format="none">Vary</xref>. | ||||
| </t> | </t> | |||
| <ul> | ||||
| <li> | ||||
| <xref target="field.content-location" format="none">Content | ||||
| -Location</xref>, <xref target="field.date" format="none">Date</xref>, <xref tar | ||||
| get="field.etag" format="none">ETag</xref>, | ||||
| and <xref target="field.vary" format="none">Vary</xref> | ||||
| </li> | ||||
| <li> | ||||
| Cache-Control and Expires (see | ||||
| <xref target="CACHING"/>) | ||||
| </li> | ||||
| </ul> | ||||
| <t> | <t> | |||
| Since the goal of a 304 response is to minimize information transfer | Since the goal of a 304 response is to minimize information transfer | |||
| when the recipient already has one or more cached representations, | when the recipient already has one or more cached representations, | |||
| a sender <bcp14>SHOULD NOT</bcp14> generate representation metadata other | a sender <bcp14>SHOULD NOT</bcp14> generate representation metadata other | |||
| than the above listed fields unless said metadata exists for the | than the above listed fields unless said metadata exists for the | |||
| purpose of guiding cache updates (e.g., <xref target="field.last-modified" fo rmat="none">Last-Modified</xref> might | purpose of guiding cache updates (e.g., <xref target="field.last-modified" fo rmat="none">Last-Modified</xref> might | |||
| be useful if the response does not have an <xref target="field.etag" format=" none">ETag</xref> field). | be useful if the response does not have an <xref target="field.etag" format=" none">ETag</xref> field). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Requirements on a cache that receives a 304 response are defined in | Requirements on a cache that receives a 304 response are defined in | |||
| skipping to change at line 8929 ¶ | skipping to change at line 8950 ¶ | |||
| 304 response to that client. | 304 response to that client. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A 304 response is terminated by the end of the header section; | A 304 response is terminated by the end of the header section; | |||
| it cannot contain content or trailers. | it cannot contain content or trailers. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.305" title="305 Use Proxy"> | <section anchor="status.305" title="305 Use Proxy"> | |||
| <iref primary="true" item="305 Use Proxy (status code)"/> | <iref primary="true" item="305 Use Proxy (status code)"/> | |||
| <t> | <t> | |||
| The <em>305 (Use Proxy)</em> status code was defined in a previous | The 305 (Use Proxy) status code was defined in a previous | |||
| version of this specification and is now deprecated (<xref target="RFC7231" s ection="B"/>). | version of this specification and is now deprecated (<xref target="RFC7231" s ection="B"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.306" title="306 (Unused)"> | <section anchor="status.306" title="306 (Unused)"> | |||
| <iref primary="true" item="306 (Unused) (status code)"/> | <iref primary="true" item="306 (Unused) (status code)"/> | |||
| <t> | <t> | |||
| The 306 status code was defined in a previous version of this | The 306 status code was defined in a previous version of this | |||
| specification, is no longer used, and the code is reserved. | specification, is no longer used, and the code is reserved. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.307" title="307 Temporary Redirect"> | <section anchor="status.307" title="307 Temporary Redirect"> | |||
| <iref primary="true" item="307 Temporary Redirect (status code)"/ > | <iref primary="true" item="307 Temporary Redirect (status code)"/ > | |||
| <t> | <t> | |||
| The <em>307 (Temporary Redirect)</em> status code indicates that the | The 307 (Temporary Redirect) status code indicates that the | |||
| <xref target="target.resource" format="none">target resource</xref> resides t emporarily under a different URI | <xref target="target.resource" format="none">target resource</xref> resides t emporarily under a different URI | |||
| and the user agent <bcp14>MUST NOT</bcp14> change the request method if it pe rforms an | and the user agent <bcp14>MUST NOT</bcp14> change the request method if it pe rforms an | |||
| automatic redirection to that URI. | automatic redirection to that URI. | |||
| Since the redirection can change over time, the client ought to continue | Since the redirection can change over time, the client ought to continue | |||
| using the original target URI for future requests. | using the original target URI for future requests. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The server <bcp14>SHOULD</bcp14> generate a <xref target="field.location" for mat="none">Location</xref> header field in the | The server <bcp14>SHOULD</bcp14> generate a <xref target="field.location" for mat="none">Location</xref> header field in the | |||
| response containing a URI reference for the different URI. | response containing a URI reference for the different URI. | |||
| The user agent <bcp14>MAY</bcp14> use the Location field value for automatic redirection. | The user agent <bcp14>MAY</bcp14> use the Location field value for automatic redirection. | |||
| The server's response content usually contains a short hypertext note with | The server's response content usually contains a short hypertext note with | |||
| a hyperlink to the different URI(s). | a hyperlink to the different URI(s). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.308" title="308 Permanent Redirect"> | <section anchor="status.308" title="308 Permanent Redirect"> | |||
| <iref primary="true" item="308 Permanent Redirect (status code)"/ > | <iref primary="true" item="308 Permanent Redirect (status code)"/ > | |||
| <t> | <t> | |||
| The <em>308 (Permanent Redirect)</em> status code indicates that the | The 308 (Permanent Redirect) status code indicates that the | |||
| <xref target="target.resource" format="none">target resource</xref> has been assigned a new permanent URI and | <xref target="target.resource" format="none">target resource</xref> has been assigned a new permanent URI and | |||
| any future references to this resource ought to use one of the enclosed | any future references to this resource ought to use one of the enclosed | |||
| URIs. The server is suggesting that a user agent with link-editing capability | URIs. The server is suggesting that a user agent with link-editing capability | |||
| can permanently replace references to the target URI with one of the | can permanently replace references to the target URI with one of the | |||
| new references sent by the server. However, this suggestion is usually | new references sent by the server. However, this suggestion is usually | |||
| ignored unless the user agent is actively editing references | ignored unless the user agent is actively editing references | |||
| (e.g., engaged in authoring content), the connection is secured, and | (e.g., engaged in authoring content), the connection is secured, and | |||
| the origin server is a trusted authority for the content being edited. | the origin server is a trusted authority for the content being edited. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| skipping to change at line 8984 ¶ | skipping to change at line 9005 ¶ | |||
| The user agent <bcp14>MAY</bcp14> use the Location field value for automatic redirection. | The user agent <bcp14>MAY</bcp14> use the Location field value for automatic redirection. | |||
| The server's response content usually contains a short hypertext note with | The server's response content usually contains a short hypertext note with | |||
| a hyperlink to the new URI(s). | a hyperlink to the new URI(s). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A 308 response is heuristically cacheable; i.e., unless otherwise indicated b y | A 308 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
| the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | |||
| </t> | </t> | |||
| <aside> | <aside> | |||
| <t> | <t> | |||
| <strong>Note:</strong> This status code is much younger (Ju ne 2014) than its sibling codes, and thus | <strong>Note:</strong> This status code is much younger (Ju ne 2014) than its sibling codes and thus | |||
| might not be recognized everywhere. See <xref target="RFC7538" section="4"/> | might not be recognized everywhere. See <xref target="RFC7538" section="4"/> | |||
| for deployment considerations. | for deployment considerations. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="status.4xx" title="Client Error 4xx"> | <section anchor="status.4xx" title="Client Error 4xx"> | |||
| <iref primary="true" item="4xx Client Error (status code class)"/> | <iref primary="true" item="4xx Client Error (status code class)"/> | |||
| <iref primary="true" | <iref primary="true" | |||
| item="Status Codes Classes" | item="Status Codes Classes" | |||
| subitem="4xx Client Error"/> | subitem="4xx Client Error"/> | |||
| <t> | <t> | |||
| The <em>4xx (Client Error)</em> class of status code indicates that | The 4xx (Client Error) class of status code indicates that | |||
| the client seems to have erred. Except when responding to a HEAD request, | the client seems to have erred. Except when responding to a HEAD request, | |||
| the server <bcp14>SHOULD</bcp14> send a representation containing an explanat ion of | the server <bcp14>SHOULD</bcp14> send a representation containing an explanat ion of | |||
| the error situation, and whether it is a temporary or permanent condition. | the error situation, and whether it is a temporary or permanent condition. | |||
| These status codes are applicable to any request method. User agents | These status codes are applicable to any request method. User agents | |||
| <bcp14>SHOULD</bcp14> display any included representation to the user. | <bcp14>SHOULD</bcp14> display any included representation to the user. | |||
| </t> | </t> | |||
| <section anchor="status.400" title="400 Bad Request"> | <section anchor="status.400" title="400 Bad Request"> | |||
| <iref primary="true" item="400 Bad Request (status code)"/> | <iref primary="true" item="400 Bad Request (status code)"/> | |||
| <t> | <t> | |||
| The <em>400 (Bad Request)</em> status code indicates that the server | The 400 (Bad Request) status code indicates that the server | |||
| cannot or will not process the request due to something that is perceived | cannot or will not process the request due to something that is perceived | |||
| to be a client error (e.g., malformed request syntax, invalid request | to be a client error (e.g., malformed request syntax, invalid request | |||
| message framing, or deceptive request routing). | message framing, or deceptive request routing). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.401" title="401 Unauthorized"> | <section anchor="status.401" title="401 Unauthorized"> | |||
| <iref primary="true" item="401 Unauthorized (status code)"/> | <iref primary="true" item="401 Unauthorized (status code)"/> | |||
| <t> | <t> | |||
| The <em>401 (Unauthorized)</em> status code indicates that the | The 401 (Unauthorized) status code indicates that the | |||
| request has not been applied because it lacks valid authentication | request has not been applied because it lacks valid authentication | |||
| credentials for the target resource. | credentials for the target resource. | |||
| The server generating a 401 response <bcp14>MUST</bcp14> send a | The server generating a 401 response <bcp14>MUST</bcp14> send a | |||
| <xref target="field.www-authenticate" format="none">WWW-Authenticate</xref> h eader field | <xref target="field.www-authenticate" format="none">WWW-Authenticate</xref> h eader field | |||
| (<xref target="field.www-authenticate"/>) | (<xref target="field.www-authenticate"/>) | |||
| containing at least one challenge applicable to the target resource. | containing at least one challenge applicable to the target resource. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the request included authentication credentials, then the 401 response | If the request included authentication credentials, then the 401 response | |||
| indicates that authorization has been refused for those credentials. | indicates that authorization has been refused for those credentials. | |||
| skipping to change at line 9038 ¶ | skipping to change at line 9059 ¶ | |||
| <xref target="field.authorization" format="none">Authorization</xref> header field (<xref target="field.authorization"/>). | <xref target="field.authorization" format="none">Authorization</xref> header field (<xref target="field.authorization"/>). | |||
| If the 401 response contains the same challenge as the prior response, and | If the 401 response contains the same challenge as the prior response, and | |||
| the user agent has already attempted authentication at least once, then the | the user agent has already attempted authentication at least once, then the | |||
| user agent <bcp14>SHOULD</bcp14> present the enclosed representation to the u ser, since | user agent <bcp14>SHOULD</bcp14> present the enclosed representation to the u ser, since | |||
| it usually contains relevant diagnostic information. | it usually contains relevant diagnostic information. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.402" title="402 Payment Required"> | <section anchor="status.402" title="402 Payment Required"> | |||
| <iref primary="true" item="402 Payment Required (status code)"/> | <iref primary="true" item="402 Payment Required (status code)"/> | |||
| <t> | <t> | |||
| The <em>402 (Payment Required)</em> status code is reserved for | The 402 (Payment Required) status code is reserved for | |||
| future use. | future use. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.403" title="403 Forbidden"> | <section anchor="status.403" title="403 Forbidden"> | |||
| <iref primary="true" item="403 Forbidden (status code)"/> | <iref primary="true" item="403 Forbidden (status code)"/> | |||
| <t> | <t> | |||
| The <em>403 (Forbidden)</em> status code indicates that the | The 403 (Forbidden) status code indicates that the | |||
| server understood the request but refuses to fulfill it. | server understood the request but refuses to fulfill it. | |||
| A server that wishes to make public why the request has been forbidden | A server that wishes to make public why the request has been forbidden | |||
| can describe that reason in the response content (if any). | can describe that reason in the response content (if any). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If authentication credentials were provided in the request, the | If authentication credentials were provided in the request, the | |||
| server considers them insufficient to grant access. | server considers them insufficient to grant access. | |||
| The client <bcp14>SHOULD NOT</bcp14> automatically repeat the request with th e same | The client <bcp14>SHOULD NOT</bcp14> automatically repeat the request with th e same | |||
| credentials. | credentials. | |||
| The client <bcp14>MAY</bcp14> repeat the request with new or different creden tials. | The client <bcp14>MAY</bcp14> repeat the request with new or different creden tials. | |||
| skipping to change at line 9069 ¶ | skipping to change at line 9090 ¶ | |||
| <t> | <t> | |||
| An origin server that wishes to "hide" the current existence of a forbidden | An origin server that wishes to "hide" the current existence of a forbidden | |||
| <xref target="target.resource" format="none">target resource</xref> | <xref target="target.resource" format="none">target resource</xref> | |||
| <bcp14>MAY</bcp14> instead respond with a status | <bcp14>MAY</bcp14> instead respond with a status | |||
| code of <xref target="status.404" format="none">404 (Not Found)</xref>. | code of <xref target="status.404" format="none">404 (Not Found)</xref>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.404" title="404 Not Found"> | <section anchor="status.404" title="404 Not Found"> | |||
| <iref primary="true" item="404 Not Found (status code)"/> | <iref primary="true" item="404 Not Found (status code)"/> | |||
| <t> | <t> | |||
| The <em>404 (Not Found)</em> status code indicates that the origin | The 404 (Not Found) status code indicates that the origin | |||
| server did not find a current representation for the | server did not find a current representation for the | |||
| <xref target="target.resource" format="none">target resource</xref> or is not willing to disclose that one | <xref target="target.resource" format="none">target resource</xref> or is not willing to disclose that one | |||
| exists. A 404 status code does not indicate whether this lack of representati on | exists. A 404 status code does not indicate whether this lack of representati on | |||
| is temporary or permanent; the <xref target="status.410" format="none">410 (G one)</xref> status code is | is temporary or permanent; the <xref target="status.410" format="none">410 (G one)</xref> status code is | |||
| preferred over 404 if the origin server knows, presumably through some | preferred over 404 if the origin server knows, presumably through some | |||
| configurable means, that the condition is likely to be permanent. | configurable means, that the condition is likely to be permanent. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A 404 response is heuristically cacheable; i.e., unless otherwise indicated b y | A 404 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
| the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.405" title="405 Method Not Allowed"> | <section anchor="status.405" title="405 Method Not Allowed"> | |||
| <iref primary="true" item="405 Method Not Allowed (status code)"/ > | <iref primary="true" item="405 Method Not Allowed (status code)"/ > | |||
| <t> | <t> | |||
| The <em>405 (Method Not Allowed)</em> status code indicates that the | The 405 (Method Not Allowed) status code indicates that the | |||
| method received in the request-line is known by the origin server but | method received in the request-line is known by the origin server but | |||
| not supported by the <xref target="target.resource" format="none">target reso urce</xref>. | not supported by the <xref target="target.resource" format="none">target reso urce</xref>. | |||
| The origin server <bcp14>MUST</bcp14> generate an <xref target="field.allow" format="none">Allow</xref> header field in | The origin server <bcp14>MUST</bcp14> generate an <xref target="field.allow" format="none">Allow</xref> header field in | |||
| a 405 response containing a list of the target resource's currently | a 405 response containing a list of the target resource's currently | |||
| supported methods. | supported methods. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A 405 response is heuristically cacheable; i.e., unless otherwise indicated b y | A 405 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
| the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.406" title="406 Not Acceptable"> | <section anchor="status.406" title="406 Not Acceptable"> | |||
| <iref primary="true" item="406 Not Acceptable (status code)"/> | <iref primary="true" item="406 Not Acceptable (status code)"/> | |||
| <t> | <t> | |||
| The <em>406 (Not Acceptable)</em> status code indicates that the | The 406 (Not Acceptable) status code indicates that the | |||
| <xref target="target.resource" format="none">target resource</xref> does not have a current representation that | <xref target="target.resource" format="none">target resource</xref> does not have a current representation that | |||
| would be acceptable to the user agent, according to the | would be acceptable to the user agent, according to the | |||
| <xref target="proactive.negotiation" format="none">proactive negotiation</xre f> header fields received in the request | <xref target="proactive.negotiation" format="none">proactive negotiation</xre f> header fields received in the request | |||
| (<xref target="proactive.negotiation"/>), and the server is unwilling to supp ly a | (<xref target="proactive.negotiation"/>), and the server is unwilling to supp ly a | |||
| default representation. | default representation. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The server <bcp14>SHOULD</bcp14> generate content containing a list of availa ble | The server <bcp14>SHOULD</bcp14> generate content containing a list of availa ble | |||
| representation characteristics and corresponding resource identifiers from | representation characteristics and corresponding resource identifiers from | |||
| which the user or user agent can choose the one most appropriate. | which the user or user agent can choose the one most appropriate. | |||
| A user agent <bcp14>MAY</bcp14> automatically select the most appropriate cho ice from | A user agent <bcp14>MAY</bcp14> automatically select the most appropriate cho ice from | |||
| that list. However, this specification does not define any standard for | that list. However, this specification does not define any standard for | |||
| such automatic selection, as described in <xref target="status.300"/>. | such automatic selection, as described in <xref target="status.300"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.407" title="407 Proxy Authentication Require d"> | <section anchor="status.407" title="407 Proxy Authentication Require d"> | |||
| <iref primary="true" item="407 Proxy Authentication Required (sta tus code)"/> | <iref primary="true" item="407 Proxy Authentication Required (sta tus code)"/> | |||
| <t> | <t> | |||
| The <em>407 (Proxy Authentication Required)</em> status code is | The 407 (Proxy Authentication Required) status code is | |||
| similar to <xref target="status.401" format="none">401 (Unauthorized)</xref>, but it indicates that the client | similar to <xref target="status.401" format="none">401 (Unauthorized)</xref>, but it indicates that the client | |||
| needs to authenticate itself in order to use a proxy for this request. | needs to authenticate itself in order to use a proxy for this request. | |||
| The proxy <bcp14>MUST</bcp14> send a <xref target="field.proxy-authenticate" format="none">Proxy-Authenticate</xref> header field | The proxy <bcp14>MUST</bcp14> send a <xref target="field.proxy-authenticate" format="none">Proxy-Authenticate</xref> header field | |||
| (<xref target="field.proxy-authenticate"/>) containing a challenge | (<xref target="field.proxy-authenticate"/>) containing a challenge | |||
| applicable to that proxy for the request. The client <bcp14>MAY</bcp14> repea t | applicable to that proxy for the request. The client <bcp14>MAY</bcp14> repea t | |||
| the request with a new or replaced <xref target="field.proxy-authorization" f ormat="none">Proxy-Authorization</xref> | the request with a new or replaced <xref target="field.proxy-authorization" f ormat="none">Proxy-Authorization</xref> | |||
| header field (<xref target="field.proxy-authorization"/>). | header field (<xref target="field.proxy-authorization"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.408" title="408 Request Timeout"> | <section anchor="status.408" title="408 Request Timeout"> | |||
| <iref primary="true" item="408 Request Timeout (status code)"/> | <iref primary="true" item="408 Request Timeout (status code)"/> | |||
| <t> | <t> | |||
| The <em>408 (Request Timeout)</em> status code indicates | The 408 (Request Timeout) status code indicates | |||
| that the server did not receive a complete request message within the time | that the server did not receive a complete request message within the time | |||
| that it was prepared to wait. | that it was prepared to wait. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the client has an outstanding request in transit, it <bcp14>MAY</bcp14> re peat that | If the client has an outstanding request in transit, it <bcp14>MAY</bcp14> re peat that | |||
| request. If the current connection is not usable (e.g., as it would be in | request. If the current connection is not usable (e.g., as it would be in | |||
| HTTP/1.1, because request delimitation is lost), a new connection will be | HTTP/1.1 because request delimitation is lost), a new connection will be | |||
| used. | used. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.409" title="409 Conflict"> | <section anchor="status.409" title="409 Conflict"> | |||
| <iref primary="true" item="409 Conflict (status code)"/> | <iref primary="true" item="409 Conflict (status code)"/> | |||
| <t> | <t> | |||
| The <em>409 (Conflict)</em> status code indicates that the request | The 409 (Conflict) status code indicates that the request | |||
| could not be completed due to a conflict with the current state of the target | could not be completed due to a conflict with the current state of the target | |||
| resource. This code is used in situations where the user might be able to | resource. This code is used in situations where the user might be able to | |||
| resolve the conflict and resubmit the request. The server <bcp14>SHOULD</bcp1 4> generate | resolve the conflict and resubmit the request. The server <bcp14>SHOULD</bcp1 4> generate | |||
| content that includes enough information for a user to recognize the | content that includes enough information for a user to recognize the | |||
| source of the conflict. | source of the conflict. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Conflicts are most likely to occur in response to a PUT request. For | Conflicts are most likely to occur in response to a PUT request. For | |||
| example, if versioning were being used and the representation being PUT | example, if versioning were being used and the representation being PUT | |||
| included changes to a resource that conflict with those made by an | included changes to a resource that conflict with those made by an | |||
| earlier (third-party) request, the origin server might use a 409 response | earlier (third-party) request, the origin server might use a 409 response | |||
| to indicate that it can't complete the request. In this case, the response | to indicate that it can't complete the request. In this case, the response | |||
| representation would likely contain information useful for merging the | representation would likely contain information useful for merging the | |||
| differences based on the revision history. | differences based on the revision history. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.410" title="410 Gone"> | <section anchor="status.410" title="410 Gone"> | |||
| <iref primary="true" item="410 Gone (status code)"/> | <iref primary="true" item="410 Gone (status code)"/> | |||
| <t> | <t> | |||
| The <em>410 (Gone)</em> status code indicates that access to the | The 410 (Gone) status code indicates that access to the | |||
| <xref target="target.resource" format="none">target resource</xref> is no lon ger available at the origin | <xref target="target.resource" format="none">target resource</xref> is no lon ger available at the origin | |||
| server and that this condition is likely to be permanent. If the origin | server and that this condition is likely to be permanent. If the origin | |||
| server does not know, or has no facility to determine, whether or not the | server does not know, or has no facility to determine, whether or not the | |||
| condition is permanent, the status code <xref target="status.404" format="non e">404 (Not Found)</xref> | condition is permanent, the status code <xref target="status.404" format="non e">404 (Not Found)</xref> | |||
| ought to be used instead. | ought to be used instead. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The 410 response is primarily intended to assist the task of web | The 410 response is primarily intended to assist the task of web | |||
| maintenance by notifying the recipient that the resource is | maintenance by notifying the recipient that the resource is | |||
| intentionally unavailable and that the server owners desire that | intentionally unavailable and that the server owners desire that | |||
| remote links to that resource be removed. Such an event is common for | remote links to that resource be removed. Such an event is common for | |||
| limited-time, promotional services and for resources belonging to | limited-time, promotional services and for resources belonging to | |||
| individuals no longer associated with the origin server's site. It is not | individuals no longer associated with the origin server's site. It is not | |||
| necessary to mark all permanently unavailable resources as "gone" or | necessary to mark all permanently unavailable resources as "gone" or | |||
| to keep the mark for any length of time — that is left to the | to keep the mark for any length of time -- that is left to the | |||
| discretion of the server owner. | discretion of the server owner. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A 410 response is heuristically cacheable; i.e., unless otherwise indicated b y | A 410 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
| the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.411" title="411 Length Required"> | <section anchor="status.411" title="411 Length Required"> | |||
| <iref primary="true" item="411 Length Required (status code)"/> | <iref primary="true" item="411 Length Required (status code)"/> | |||
| <t> | <t> | |||
| The <em>411 (Length Required)</em> status code indicates that the | The 411 (Length Required) status code indicates that the | |||
| server refuses to accept the request without a defined | server refuses to accept the request without a defined | |||
| <xref target="field.content-length" format="none">Content-Length</xref> (<xre f target="field.content-length"/>). | <xref target="field.content-length" format="none">Content-Length</xref> (<xre f target="field.content-length"/>). | |||
| The client <bcp14>MAY</bcp14> repeat the request if it adds a valid Content-L ength | The client <bcp14>MAY</bcp14> repeat the request if it adds a valid Content-L ength | |||
| header field containing the length of the request content. | header field containing the length of the request content. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.412" title="412 Precondition Failed"> | <section anchor="status.412" title="412 Precondition Failed"> | |||
| <iref primary="true" item="412 Precondition Failed (status code)" /> | <iref primary="true" item="412 Precondition Failed (status code)" /> | |||
| <t> | <t> | |||
| The <em>412 (Precondition Failed)</em> status code indicates that one | The 412 (Precondition Failed) status code indicates that one | |||
| or more conditions given in the request header fields evaluated to false | or more conditions given in the request header fields evaluated to false | |||
| when tested on the server (<xref target="conditional.requests"/>). This | when tested on the server (<xref target="conditional.requests"/>). This | |||
| response status code allows the client to place preconditions on the | response status code allows the client to place preconditions on the | |||
| current resource state (its current representations and metadata) and, | current resource state (its current representations and metadata) and, | |||
| thus, prevent the request method from being applied if the target resource | thus, prevent the request method from being applied if the target resource | |||
| is in an unexpected state. | is in an unexpected state. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.413" title="413 Content Too Large"> | <section anchor="status.413" title="413 Content Too Large"> | |||
| <iref primary="true" item="413 Content Too Large (status code)"/> | <iref primary="true" item="413 Content Too Large (status code)"/> | |||
| <t> | <t> | |||
| The <em>413 (Content Too Large)</em> status code indicates | The 413 (Content Too Large) status code indicates | |||
| that the server is refusing to process a request because the request | that the server is refusing to process a request because the request | |||
| content is larger than the server is willing or able to process. | content is larger than the server is willing or able to process. | |||
| The server <bcp14>MAY</bcp14> terminate the request, if the protocol version in use | The server <bcp14>MAY</bcp14> terminate the request, if the protocol version in use | |||
| allows it; otherwise, the server <bcp14>MAY</bcp14> close the connection. | allows it; otherwise, the server <bcp14>MAY</bcp14> close the connection. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the condition is temporary, the server <bcp14>SHOULD</bcp14> generate a | If the condition is temporary, the server <bcp14>SHOULD</bcp14> generate a | |||
| <xref target="field.retry-after" format="none">Retry-After</xref> header fiel d to indicate that it is temporary | <xref target="field.retry-after" format="none">Retry-After</xref> header fiel d to indicate that it is temporary | |||
| and after what time the client <bcp14>MAY</bcp14> try again. | and after what time the client <bcp14>MAY</bcp14> try again. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.414" title="414 URI Too Long"> | <section anchor="status.414" title="414 URI Too Long"> | |||
| <iref primary="true" item="414 URI Too Long (status code)"/> | <iref primary="true" item="414 URI Too Long (status code)"/> | |||
| <t> | <t> | |||
| The <em>414 (URI Too Long)</em> status code indicates that the server | The 414 (URI Too Long) status code indicates that the server | |||
| is refusing to service the request because the | is refusing to service the request because the | |||
| target URI is longer than the server is willing to | target URI is longer than the server is willing to | |||
| interpret. This rare condition is only likely to occur when a client has | interpret. This rare condition is only likely to occur when a client has | |||
| improperly converted a POST request to a GET request with long query | improperly converted a POST request to a GET request with long query | |||
| information, when the client has descended into a "black hole" of | information, when the client has descended into an infinite loop of | |||
| redirection (e.g., a redirected URI prefix that points to a suffix of | redirection (e.g., a redirected URI prefix that points to a suffix of | |||
| itself) or when the server is under attack by a client attempting to | itself) or when the server is under attack by a client attempting to | |||
| exploit potential security holes. | exploit potential security holes. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A 414 response is heuristically cacheable; i.e., unless otherwise indicated b y | A 414 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
| the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.415" title="415 Unsupported Media Type"> | <section anchor="status.415" title="415 Unsupported Media Type"> | |||
| <iref primary="true" item="415 Unsupported Media Type (status cod e)"/> | <iref primary="true" item="415 Unsupported Media Type (status cod e)"/> | |||
| <t> | <t> | |||
| The <em>415 (Unsupported Media Type)</em> status code indicates that | The 415 (Unsupported Media Type) status code indicates that | |||
| the origin server is refusing to service the request because the content is | the origin server is refusing to service the request because the content is | |||
| in a format not supported by this method on the <xref target="target.resource " format="none">target resource</xref>. | in a format not supported by this method on the <xref target="target.resource " format="none">target resource</xref>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The format problem might be due to the request's indicated | The format problem might be due to the request's indicated | |||
| <xref target="field.content-type" format="none">Content-Type</xref> or <xref target="field.content-encoding" format="none">Content-Encoding</xref>, or as a | <xref target="field.content-type" format="none">Content-Type</xref> or <xref target="field.content-encoding" format="none">Content-Encoding</xref>, or as a | |||
| result of inspecting the data directly. | result of inspecting the data directly. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the problem was caused by an unsupported content coding, the | If the problem was caused by an unsupported content coding, the | |||
| <xref target="field.accept-encoding" format="none">Accept-Encoding</xref> res ponse header field | <xref target="field.accept-encoding" format="none">Accept-Encoding</xref> res ponse header field | |||
| (<xref target="field.accept-encoding"/>) ought to be | (<xref target="field.accept-encoding"/>) ought to be | |||
| used to indicate what (if any) content codings would have been accepted | used to indicate which (if any) content codings would have been accepted | |||
| in the request. | in the request. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| On the other hand, if the cause was an unsupported media type, the | On the other hand, if the cause was an unsupported media type, the | |||
| <xref target="field.accept" format="none">Accept</xref> response header field (<xref target="field.accept"/>) | <xref target="field.accept" format="none">Accept</xref> response header field (<xref target="field.accept"/>) | |||
| can be used to indicate what media types would have been accepted | can be used to indicate which media types would have been accepted | |||
| in the request. | in the request. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.416" title="416 Range Not Satisfiable"> | <section anchor="status.416" title="416 Range Not Satisfiable"> | |||
| <iref primary="true" item="416 Range Not Satisfiable (status code )"/> | <iref primary="true" item="416 Range Not Satisfiable (status code )"/> | |||
| <t> | <t> | |||
| The <em>416 (Range Not Satisfiable)</em> status code indicates that | The 416 (Range Not Satisfiable) status code indicates that | |||
| the set of ranges in the request's <xref target="field.range" format="none">R ange</xref> header field | the set of ranges in the request's <xref target="field.range" format="none">R ange</xref> header field | |||
| (<xref target="field.range"/>) has been rejected either because none of | (<xref target="field.range"/>) has been rejected either because none of | |||
| the requested ranges are satisfiable or because the client has requested | the requested ranges are satisfiable or because the client has requested | |||
| an excessive number of small or overlapping ranges (a potential denial of | an excessive number of small or overlapping ranges (a potential denial of | |||
| service attack). | service attack). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Each range unit defines what is required for its own range sets to be | Each range unit defines what is required for its own range sets to be | |||
| satisfiable. For example, <xref target="byte.ranges"/> defines what makes | satisfiable. For example, <xref target="byte.ranges"/> defines what makes | |||
| a bytes range set satisfiable. | a bytes range set satisfiable. | |||
| skipping to change at line 9315 ¶ | skipping to change at line 9336 ¶ | |||
| might not stop making an invalid range request until they have received | might not stop making an invalid range request until they have received | |||
| a complete representation. Thus, clients cannot depend on receiving a | a complete representation. Thus, clients cannot depend on receiving a | |||
| <xref target="status.416" format="none">416 (Range Not Satisfiable)</xref> r esponse even when it is most | <xref target="status.416" format="none">416 (Range Not Satisfiable)</xref> r esponse even when it is most | |||
| appropriate. | appropriate. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| </section> | </section> | |||
| <section anchor="status.417" title="417 Expectation Failed"> | <section anchor="status.417" title="417 Expectation Failed"> | |||
| <iref primary="true" item="417 Expectation Failed (status code)"/ > | <iref primary="true" item="417 Expectation Failed (status code)"/ > | |||
| <t> | <t> | |||
| The <em>417 (Expectation Failed)</em> status code indicates that the | The 417 (Expectation Failed) status code indicates that the | |||
| expectation given in the request's <xref target="field.expect" format="none"> Expect</xref> header field | expectation given in the request's <xref target="field.expect" format="none"> Expect</xref> header field | |||
| (<xref target="field.expect"/>) could not be met by at least one of the | (<xref target="field.expect"/>) could not be met by at least one of the | |||
| inbound servers. | inbound servers. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.418" title="418 (Unused)"> | <section anchor="status.418" title="418 (Unused)"> | |||
| <iref primary="true" item="418 (Unused) (status code)"/> | <iref primary="true" item="418 (Unused) (status code)"/> | |||
| <t> | <t> | |||
| <xref target="RFC2324"/> was an April 1 RFC that lampooned the | <xref target="RFC2324"/> was an April 1 RFC that lampooned the | |||
| various | various ways | |||
| ways HTTP was abused; one such abuse was the definition of an | HTTP was abused; one such abuse was the definition of an | |||
| application-specific 418 status code. In the intervening years, this | application-specific 418 status code, which has been deployed as a joke | |||
| status code has been widely implemented as an "Easter Egg", and therefore | often enough for the code to be unusable for any future use. | |||
| is effectively consumed by this use. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Therefore, the 418 status code is reserved in the IANA HTTP Status Code | Therefore, the 418 status code is reserved in the IANA HTTP Status Code | |||
| Registry. This indicates that the status code cannot be assigned to other | Registry. This indicates that the status code cannot be assigned to other | |||
| applications currently. If future circumstances require its use (e.g., | applications currently. If future circumstances require its use (e.g., | |||
| exhaustion of 4NN status codes), it can be re-assigned to another use. | exhaustion of 4NN status codes), it can be re-assigned to another use. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.421" title="421 Misdirected Request"> | <section anchor="status.421" title="421 Misdirected Request"> | |||
| <iref primary="true" item="421 Misdirected Request (status code)" /> | <iref primary="true" item="421 Misdirected Request (status code)" /> | |||
| skipping to change at line 9365 ¶ | skipping to change at line 9385 ¶ | |||
| <t> | <t> | |||
| A proxy <bcp14>MUST NOT</bcp14> generate a 421 response. | A proxy <bcp14>MUST NOT</bcp14> generate a 421 response. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.422" title="422 Unprocessable Content"> | <section anchor="status.422" title="422 Unprocessable Content"> | |||
| <iref primary="true" item="422 Unprocessable Content (status code )"/> | <iref primary="true" item="422 Unprocessable Content (status code )"/> | |||
| <t> | <t> | |||
| The 422 (Unprocessable Content) status code indicates that the server | The 422 (Unprocessable Content) status code indicates that the server | |||
| understands the content type of the request content (hence a | understands the content type of the request content (hence a | |||
| <xref target="status.415" format="none">415 (Unsupported Media Type)</xref> s tatus code is inappropriate), | <xref target="status.415" format="none">415 (Unsupported Media Type)</xref> s tatus code is inappropriate), | |||
| and the syntax of the request content is correct, but was unable to process | and the syntax of the request content is correct, but it was unable to proces s | |||
| the contained instructions. For example, this status code can be sent if | the contained instructions. For example, this status code can be sent if | |||
| an XML request content contains well-formed (i.e., syntactically correct), bu t | an XML request content contains well-formed (i.e., syntactically correct), bu t | |||
| semantically erroneous XML instructions. | semantically erroneous XML instructions. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.426" title="426 Upgrade Required"> | <section anchor="status.426" title="426 Upgrade Required"> | |||
| <iref primary="true" item="426 Upgrade Required (status code)"/> | <iref primary="true" item="426 Upgrade Required (status code)"/> | |||
| <t> | <t> | |||
| The <em>426 (Upgrade Required)</em> status code indicates that the | The 426 (Upgrade Required) status code indicates that the | |||
| server refuses to perform the request using the current protocol but might | server refuses to perform the request using the current protocol but might | |||
| be willing to do so after the client upgrades to a different protocol. | be willing to do so after the client upgrades to a different protocol. | |||
| The server <bcp14>MUST</bcp14> send an <xref target="field.upgrade" format="n one">Upgrade</xref> header field in a 426 | The server <bcp14>MUST</bcp14> send an <xref target="field.upgrade" format="n one">Upgrade</xref> header field in a 426 | |||
| response to indicate the required protocol(s) (<xref target="field.upgrade"/> ). | response to indicate the required protocol(s) (<xref target="field.upgrade"/> ). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Example: | Example: | |||
| </t> | </t> | |||
| <sourcecode type="http-message"><![CDATA[HTTP/1.1 426 Upgrade Req uired | <sourcecode type="http-message"><![CDATA[HTTP/1.1 426 Upgrade Req uired | |||
| Upgrade: HTTP/3.0 | Upgrade: HTTP/3.0 | |||
| skipping to change at line 9399 ¶ | skipping to change at line 9419 ¶ | |||
| This service requires use of the HTTP/3.0 protocol. | This service requires use of the HTTP/3.0 protocol. | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="status.5xx" title="Server Error 5xx"> | <section anchor="status.5xx" title="Server Error 5xx"> | |||
| <iref primary="true" item="5xx Server Error (status code class)"/> | <iref primary="true" item="5xx Server Error (status code class)"/> | |||
| <iref primary="true" | <iref primary="true" | |||
| item="Status Codes Classes" | item="Status Codes Classes" | |||
| subitem="5xx Server Error"/> | subitem="5xx Server Error"/> | |||
| <t> | <t> | |||
| The <em>5xx (Server Error)</em> class of status code indicates that | The 5xx (Server Error) class of status code indicates that | |||
| the server is aware that it has erred or is incapable of performing the | the server is aware that it has erred or is incapable of performing the | |||
| requested method. | requested method. | |||
| Except when responding to a HEAD request, the server <bcp14>SHOULD</bcp14> se nd a | Except when responding to a HEAD request, the server <bcp14>SHOULD</bcp14> se nd a | |||
| representation containing an explanation of the error situation, and | representation containing an explanation of the error situation, and | |||
| whether it is a temporary or permanent condition. | whether it is a temporary or permanent condition. | |||
| A user agent <bcp14>SHOULD</bcp14> display any included representation to the user. | A user agent <bcp14>SHOULD</bcp14> display any included representation to the user. | |||
| These response codes are applicable to any request method. | These status codes are applicable to any request method. | |||
| </t> | </t> | |||
| <section anchor="status.500" title="500 Internal Server Error"> | <section anchor="status.500" title="500 Internal Server Error"> | |||
| <iref primary="true" item="500 Internal Server Error (status code )"/> | <iref primary="true" item="500 Internal Server Error (status code )"/> | |||
| <t> | <t> | |||
| The <em>500 (Internal Server Error)</em> status code indicates that | The 500 (Internal Server Error) status code indicates that | |||
| the server encountered an unexpected condition that prevented it from | the server encountered an unexpected condition that prevented it from | |||
| fulfilling the request. | fulfilling the request. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.501" title="501 Not Implemented"> | <section anchor="status.501" title="501 Not Implemented"> | |||
| <iref primary="true" item="501 Not Implemented (status code)"/> | <iref primary="true" item="501 Not Implemented (status code)"/> | |||
| <t> | <t> | |||
| The <em>501 (Not Implemented)</em> status code indicates that the | The 501 (Not Implemented) status code indicates that the | |||
| server does not support the functionality required to fulfill the request. | server does not support the functionality required to fulfill the request. | |||
| This is the appropriate response when the server does not recognize the | This is the appropriate response when the server does not recognize the | |||
| request method and is not capable of supporting it for any resource. | request method and is not capable of supporting it for any resource. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A 501 response is heuristically cacheable; i.e., unless otherwise indicated b y | A 501 response is heuristically cacheable; i.e., unless otherwise indicated b y | |||
| the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | the method definition or explicit cache controls (see <xref target="CACHING" section="4.2.2"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.502" title="502 Bad Gateway"> | <section anchor="status.502" title="502 Bad Gateway"> | |||
| <iref primary="true" item="502 Bad Gateway (status code)"/> | <iref primary="true" item="502 Bad Gateway (status code)"/> | |||
| <t> | <t> | |||
| The <em>502 (Bad Gateway)</em> status code indicates that the server, | The 502 (Bad Gateway) status code indicates that the server, | |||
| while acting as a gateway or proxy, received an invalid response from an | while acting as a gateway or proxy, received an invalid response from an | |||
| inbound server it accessed while attempting to fulfill the request. | inbound server it accessed while attempting to fulfill the request. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.503" title="503 Service Unavailable"> | <section anchor="status.503" title="503 Service Unavailable"> | |||
| <iref primary="true" item="503 Service Unavailable (status code)" /> | <iref primary="true" item="503 Service Unavailable (status code)" /> | |||
| <t> | <t> | |||
| The <em>503 (Service Unavailable)</em> status code indicates that the | The 503 (Service Unavailable) status code indicates that the | |||
| server is currently unable to handle the request due to a temporary overload | server is currently unable to handle the request due to a temporary overload | |||
| or scheduled maintenance, which will likely be alleviated after some delay. | or scheduled maintenance, which will likely be alleviated after some delay. | |||
| The server <bcp14>MAY</bcp14> send a <xref target="field.retry-after" format= "none">Retry-After</xref> header field | The server <bcp14>MAY</bcp14> send a <xref target="field.retry-after" format= "none">Retry-After</xref> header field | |||
| (<xref target="field.retry-after"/>) to suggest an appropriate | (<xref target="field.retry-after"/>) to suggest an appropriate | |||
| amount of time for the client to wait before retrying the request. | amount of time for the client to wait before retrying the request. | |||
| </t> | </t> | |||
| <aside> | <aside> | |||
| <t> | <t> | |||
| <strong>Note:</strong> The existence of the 503 status code does not imply that a | <strong>Note:</strong> The existence of the 503 status code does not imply that a | |||
| server has to use it when becoming overloaded. Some servers might | server has to use it when becoming overloaded. Some servers might | |||
| simply refuse the connection. | simply refuse the connection. | |||
| </t> | </t> | |||
| </aside> | </aside> | |||
| </section> | </section> | |||
| <section anchor="status.504" title="504 Gateway Timeout"> | <section anchor="status.504" title="504 Gateway Timeout"> | |||
| <iref primary="true" item="504 Gateway Timeout (status code)"/> | <iref primary="true" item="504 Gateway Timeout (status code)"/> | |||
| <t> | <t> | |||
| The <em>504 (Gateway Timeout)</em> status code indicates that the | The 504 (Gateway Timeout) status code indicates that the | |||
| server, while acting as a gateway or proxy, did not receive a timely | server, while acting as a gateway or proxy, did not receive a timely | |||
| response from an upstream server it needed to access in order to | response from an upstream server it needed to access in order to | |||
| complete the request. | complete the request. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.505" title="505 HTTP Version Not Supported"> | <section anchor="status.505" title="505 HTTP Version Not Supported"> | |||
| <iref primary="true" item="505 HTTP Version Not Supported (status code)"/> | <iref primary="true" item="505 HTTP Version Not Supported (status code)"/> | |||
| <t> | <t> | |||
| The <em>505 (HTTP Version Not Supported)</em> status code indicates | The 505 (HTTP Version Not Supported) status code indicates | |||
| that the server does not support, or refuses to support, the major version | that the server does not support, or refuses to support, the major version | |||
| of HTTP that was used in the request message. The server is indicating that | of HTTP that was used in the request message. The server is indicating that | |||
| it is unable or unwilling to complete the request using the same major | it is unable or unwilling to complete the request using the same major | |||
| version as the client, as described in <xref target="protocol.version"/>, oth er than with this | version as the client, as described in <xref target="protocol.version"/>, oth er than with this | |||
| error message. The server <bcp14>SHOULD</bcp14> generate a representation for the 505 | error message. The server <bcp14>SHOULD</bcp14> generate a representation for the 505 | |||
| response that describes why that version is not supported and what other | response that describes why that version is not supported and what other | |||
| protocols are supported by that server. | protocols are supported by that server. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="extending" title="Extending HTTP"> | <section anchor="extending" title="Extending HTTP"> | |||
| <t> | <t> | |||
| HTTP defines a number of generic extension points that can be used to | HTTP defines a number of generic extension points that can be used to | |||
| introduce capabilities to the protocol without introducing a new version, | introduce capabilities to the protocol without introducing a new version, | |||
| including methods, status codes, field names, and further extensibility | including methods, status codes, field names, and further extensibility | |||
| points within defined fields, such as authentication schemes and | points within defined fields, such as authentication schemes and | |||
| cache-directives (see Cache-Control extensions in <xref target="CACHING" sect ion="5.2.3"/>). Because the semantics of HTTP are | cache directives (see Cache-Control extensions in <xref target="CACHING" sect ion="5.2.3"/>). Because the semantics of HTTP are | |||
| not versioned, these extension points are persistent; the version of the | not versioned, these extension points are persistent; the version of the | |||
| protocol in use does not affect their semantics. | protocol in use does not affect their semantics. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Version-independent extensions are discouraged from depending on or | Version-independent extensions are discouraged from depending on or | |||
| interacting with the specific version of the protocol in use. When this is | interacting with the specific version of the protocol in use. When this is | |||
| unavoidable, careful consideration needs to be given to how the extension | unavoidable, careful consideration needs to be given to how the extension | |||
| can interoperate across versions. | can interoperate across versions. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Additionally, specific versions of HTTP might have their own extensibility | Additionally, specific versions of HTTP might have their own extensibility | |||
| points, such as transfer-codings in HTTP/1.1 (<xref target="HTTP11" section=" | points, such as transfer codings in HTTP/1.1 (<xref target="HTTP11" section=" | |||
| 6.1"/>) and HTTP/2 (<xref target="HTTP2"/>) | 6.1"/>) and HTTP/2 SETTINGS or frame types | |||
| SETTINGS or frame types. These extension points are specific to the | (<xref target="HTTP2"/>). These extension points 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 or | a version-independent mechanism or extension point (like a method or | |||
| header field) without explicitly being allowed by that protocol element. For | header field) without explicitly being allowed by that protocol element. For | |||
| example, the CONNECT method (<xref target="CONNECT"/>) allows this. | example, the CONNECT method (<xref target="CONNECT"/>) allows this. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| These guidelines assure that the protocol operates correctly and | These guidelines assure that the protocol operates correctly and | |||
| skipping to change at line 9638 ¶ | skipping to change at line 9658 ¶ | |||
| The definition of a new status code ought to explain the request | The definition of a new status code ought to explain the request | |||
| conditions that would cause a response containing that status code (e.g., | conditions that would cause a response containing that status code (e.g., | |||
| combinations of request header fields and/or method(s)) along with any | combinations of request header fields and/or method(s)) along with any | |||
| dependencies on response header fields (e.g., what fields are required, | dependencies on response header fields (e.g., what fields are required, | |||
| what fields can modify the semantics, and what field semantics are | what fields can modify the semantics, and what field semantics are | |||
| further refined when used with the new status code). | further refined when used with the new status code). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| By default, a status code applies only to the request corresponding to the | By default, a status code applies only to the request corresponding to the | |||
| response it occurs within. If a status code applies to a larger scope of | response it occurs within. If a status code applies to a larger scope of | |||
| applicability — for example, all requests to the resource in question, or | applicability -- for example, all requests to the resource in question or | |||
| all requests to a server — this must be explicitly specified. When doing | all requests to a server -- this must be explicitly specified. When doing | |||
| so, it should be noted that not all clients can be expected to | so, it should be noted that not all clients can be expected to | |||
| consistently apply a larger scope, because they might not understand the | consistently apply a larger scope because they might not understand the | |||
| new status code. | new status code. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The definition of a new final status code ought to specify whether or not it | The definition of a new final status code ought to specify whether or not it | |||
| is | is heuristically cacheable. Note that any response with a final status code | |||
| heuristically cacheable. Note that all final status codes can be cached if th | can be cached if the response has explicit freshness information. A status | |||
| e response they | code defined as heuristically cacheable is allowed to be cached without | |||
| occur in has explicit freshness information; however, those status codes that | explicit freshness information. | |||
| are | Likewise, the definition of a status code can place | |||
| defined as being heuristically cacheable are allowed to be cached without exp | constraints upon cache behavior if the must-understand cache | |||
| licit | directive is used. See <xref target="CACHING"/> for more information. | |||
| freshness information. Likewise, the definition of a status code can place | ||||
| constraints upon cache behavior, if the 'must-understand' cache directive is | ||||
| used. See <xref target="CACHING"/> for more information. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Finally, the definition of a new status code ought to indicate whether the | Finally, the definition of a new status code ought to indicate whether the | |||
| content has any implied association with an identified resource (<xref target ="identifying.content"/>). | content has any implied association with an identified resource (<xref target ="identifying.content"/>). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="fields.extensibility" title="Field Extensibility"> | <section anchor="fields.extensibility" title="Field Extensibility"> | |||
| <t> | <t> | |||
| HTTP's most widely used extensibility point is the definition of new header an d | HTTP's most widely used extensibility point is the definition of new header an d | |||
| skipping to change at line 9697 ¶ | skipping to change at line 9719 ¶ | |||
| Any party can request registration of an HTTP field. See <xref target="consid erations.for.new.fields"/> for considerations to take | Any party can request registration of an HTTP field. See <xref target="consid erations.for.new.fields"/> for considerations to take | |||
| into account when creating a new HTTP field. | into account when creating a new HTTP field. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The "Hypertext Transfer Protocol (HTTP) Field Name Registry" is located at | The "Hypertext Transfer Protocol (HTTP) Field Name Registry" is located at | |||
| <eref target="https://www.iana.org/assignments/http-fields/" brackets="angle" />. | <eref target="https://www.iana.org/assignments/http-fields/" brackets="angle" />. | |||
| Registration requests can be made by following the instructions located | Registration requests can be made by following the instructions located | |||
| there or by sending an email to the "ietf-http-wg@w3.org" mailing list. | there or by sending an email to the "ietf-http-wg@w3.org" mailing list. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Field names are registered on the advice of a Designated Expert | Field names are registered on the advice of a designated expert | |||
| (appointed by the IESG or their delegate). Fields with the status | (appointed by the IESG or their delegate). Fields with the status | |||
| 'permanent' are Specification Required | 'permanent' are Specification Required | |||
| (<xref target="RFC8126" sectionFormat="comma" section="4.6"/>). | (<xref target="RFC8126" sectionFormat="comma" section="4.6"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Registration requests consist of the following information: | Registration requests consist of the following information: | |||
| </t> | </t> | |||
| <dl newline="true"> | <dl newline="true"> | |||
| <dt>Field name:</dt> | <dt>Field name:</dt> | |||
| <dd> | <dd> | |||
| The requested field name. It <bcp14>MUST</bcp14> conform to the | The requested field name. It <bcp14>MUST</bcp14> conform to the | |||
| field-name syntax defined in <xref target="fields.names"/>, and <bcp14>SHOUL D</bcp14> be | field-name syntax defined in <xref target="fields.names"/>, and it <bcp14>SH OULD</bcp14> be | |||
| restricted to just letters, digits, and hyphen ('-') | restricted to just letters, digits, and hyphen ('-') | |||
| characters, with the first character being a letter. | characters, with the first character being a letter. | |||
| </dd> | </dd> | |||
| <dt>Status:</dt> | <dt>Status:</dt> | |||
| <dd> | <dd> | |||
| "permanent" or "provisional". | "permanent", "provisional", "deprecated", or "obsoleted". | |||
| </dd> | </dd> | |||
| <dt>Specification document(s):</dt> | <dt>Specification document(s):</dt> | |||
| <dd> | <dd> | |||
| Reference to the document that specifies | Reference to the document that specifies | |||
| the field, preferably including a URI that can be used to retrieve | the field, preferably including a URI that can be used to retrieve | |||
| a copy of the document. Optional but encouraged for provisional registration s. | a copy of the document. Optional but encouraged for provisional registration s. | |||
| An indication of the relevant section(s) can also be included, but is not re quired. | An indication of the relevant section(s) can also be included, but is not re quired. | |||
| </dd> | </dd> | |||
| </dl> | </dl> | |||
| <t> | <t> | |||
| And, optionally: | And optionally: | |||
| </t> | </t> | |||
| <dl> | <dl> | |||
| <dt>Comments:</dt> | <dt>Comments:</dt> | |||
| <dd> | <dd> | |||
| Additional information, such as about reserved entries. | Additional information, such as about reserved entries. | |||
| </dd> | </dd> | |||
| </dl> | </dl> | |||
| <t> | <t> | |||
| The Expert(s) can define additional fields to be collected in the | The expert(s) can define additional fields to be collected in the | |||
| registry, in consultation with the community. | registry, in consultation with the community. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Standards-defined names have a status of "permanent". Other names can also | Standards-defined names have a status of "permanent". Other names can also | |||
| be registered as permanent, if the Expert(s) find that they are in use, in | be registered as permanent if the expert(s) finds that they are in use, in | |||
| consultation with the community. Other names should be registered as | consultation with the community. Other names should be registered as | |||
| "provisional". | "provisional". | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Provisional entries can be removed by the Expert(s) if — in consultation | Provisional entries can be removed by the expert(s) if -- in consultation | |||
| with the community — the Expert(s) find that they are not in use. The | with the community -- the expert(s) find that they are not in use. The | |||
| Experts can change a provisional entry's status to permanent at any time. | expert(s) can change a provisional entry's status to permanent at any time. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Note that names can be registered by third parties (including the | Note that names can be registered by third parties (including the | |||
| Expert(s)), if the Expert(s) determines that an unregistered name is widely | expert(s)) if the expert(s) determines that an unregistered name is widely | |||
| deployed and not likely to be registered in a timely manner otherwise. | deployed and not likely to be registered in a timely manner otherwise. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="considerations.for.new.fields" | <section anchor="considerations.for.new.fields" | |||
| title="Considerations for New Fields"> | title="Considerations for New Fields"> | |||
| <t> | <t> | |||
| HTTP header and trailer fields are a widely-used extension point for the prot ocol. | HTTP header and trailer fields are a widely used extension point for the prot ocol. | |||
| While they can be used in an ad hoc fashion, fields that are intended for | While they can be used in an ad hoc fashion, fields that are intended for | |||
| wider use need to be carefully documented to ensure interoperability. | wider use need to be carefully documented to ensure interoperability. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In particular, authors of specifications defining new fields are advised to c onsider | In particular, authors of specifications defining new fields are advised to c onsider | |||
| and, where appropriate, document the following aspects: | and, where appropriate, document the following aspects: | |||
| </t> | </t> | |||
| <ul> | <ul> | |||
| <li>Under what conditions the field can be used; e.g., only in | <li>Under what conditions the field can be used; e.g., only in | |||
| responses or requests, in all messages, only on responses to a | responses or requests, in all messages, only on responses to a | |||
| skipping to change at line 9792 ¶ | skipping to change at line 9814 ¶ | |||
| <li>If the field is allowable in trailers; by | <li>If the field is allowable in trailers; by | |||
| default, it will not be (see <xref target="trailers.limitations"/>).</li> | default, it will not be (see <xref target="trailers.limitations"/>).</li> | |||
| <li>Whether it is appropriate or even required to list the fie ld name in the | <li>Whether it is appropriate or even required to list the fie ld name in the | |||
| <xref target="field.connection" format="none">Connection</xref> header fiel d (i.e., if the field is to | <xref target="field.connection" format="none">Connection</xref> header fiel d (i.e., if the field is to | |||
| be hop-by-hop; see <xref target="field.connection"/>).</li> | be hop-by-hop; see <xref target="field.connection"/>).</li> | |||
| <li>Whether the field introduces any additional security consi derations, such | <li>Whether the field introduces any additional security consi derations, such | |||
| as disclosure of privacy-related data.</li> | as disclosure of privacy-related data.</li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| Request header fields have additional considerations that need to be document ed | Request header fields have additional considerations that need to be document ed | |||
| if the default behaviour is not appropriate: | if the default behavior is not appropriate: | |||
| </t> | </t> | |||
| <ul> | <ul> | |||
| <li>If it is appropriate to list the field name in a | <li>If it is appropriate to list the field name in a | |||
| <xref target="field.vary" format="none">Vary</xref> response header field ( e.g., when the request header | <xref target="field.vary" format="none">Vary</xref> response header field ( e.g., when the request header | |||
| field is used by an origin server's content selection algorithm; see | field is used by an origin server's content selection algorithm; see | |||
| <xref target="field.vary"/>).</li> | <xref target="field.vary"/>).</li> | |||
| <li>If the field is intended to be stored when received in a P UT | <li>If the field is intended to be stored when received in a P UT | |||
| request (see <xref target="PUT"/>).</li> | request (see <xref target="PUT"/>).</li> | |||
| <li>If the field ought to be removed when automatically redire cting a | <li>If the field ought to be removed when automatically redire cting a | |||
| request, due to security concerns (see <xref target="status.3xx"/>).</li> | request due to security concerns (see <xref target="status.3xx"/>).</li> | |||
| </ul> | </ul> | |||
| <section anchor="considerations.for.new.field.names" | <section anchor="considerations.for.new.field.names" | |||
| title="Considerations for New Field Names"> | title="Considerations for New Field Names"> | |||
| <t> | <t> | |||
| Authors of specifications defining new fields are advised to choose a short | Authors of specifications defining new fields are advised to choose a short | |||
| but descriptive field name. Short names avoid needless data transmission; | but descriptive field name. Short names avoid needless data transmission; | |||
| descriptive names avoid confusion and "squatting" on names that might have | descriptive names avoid confusion and "squatting" on names that might have | |||
| broader uses. | broader uses. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| skipping to change at line 9836 ¶ | skipping to change at line 9858 ¶ | |||
| gateway interfaces (see <xref target="underscore.in.fields"/>). | gateway interfaces (see <xref target="underscore.in.fields"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Field names ought not be prefixed with "X-"; see | Field names ought not be prefixed with "X-"; see | |||
| <xref target="BCP178"/> for further information. | <xref target="BCP178"/> for further information. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Other prefixes are sometimes used in HTTP field names; for example, | Other prefixes are sometimes used in HTTP field names; for example, | |||
| "Accept-" is used in many content negotiation headers, and "Content-" is used | "Accept-" is used in many content negotiation headers, and "Content-" is used | |||
| as explained in <xref target="content"/>. These prefixes are | as explained in <xref target="content"/>. These prefixes are | |||
| only an aid to recognizing the purpose of a field, and do not | only an aid to recognizing the purpose of a field and do not | |||
| trigger automatic processing. | trigger automatic processing. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="considerations.for.new.field.values" | <section anchor="considerations.for.new.field.values" | |||
| title="Considerations for New Field Values"> | title="Considerations for New Field Values"> | |||
| <t> | <t> | |||
| A major task in the definition of a new HTTP field is the specification of | A major task in the definition of a new HTTP field is the specification of | |||
| the field value syntax: what senders should generate, and how recipients | the field value syntax: what senders should generate, and how recipients | |||
| should infer semantics from what is received. | should infer semantics from what is received. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Authors are encouraged (but not required) to use either the ABNF rules in | Authors are encouraged (but not required) to use either the ABNF rules in | |||
| this specification or those in <xref target="RFC8941"/> to define the syntax | this specification or those in <xref target="RFC8941"/> to define the syntax | |||
| of new field values. | of new field values. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Authors are advised to carefully consider how the combination of multiple | Authors are advised to carefully consider how the combination of multiple | |||
| field lines will impact them (see <xref target="fields.order"/>). Because | field lines will impact them (see <xref target="fields.order"/>). Because | |||
| senders might erroneously send multiple values, and both intermediaries | senders might erroneously send multiple values, and both intermediaries | |||
| and HTTP libraries can perform combination automatically, this applies to | and HTTP libraries can perform combination automatically, this applies to | |||
| all field values — even when only a single value is anticipated. | all field values -- even when only a single value is anticipated. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Therefore, authors are advised to delimit or encode values that contain | Therefore, authors are advised to delimit or encode values that contain | |||
| commas (e.g., with the <xref target="rule.quoted-string" format="none">quoted -string</xref> rule of | commas (e.g., with the <xref target="rule.quoted-string" format="none">quoted -string</xref> rule of | |||
| <xref target="quoted.strings"/>, the String data type of | <xref target="quoted.strings"/>, the String data type of | |||
| <xref target="RFC8941"/>, or a field-specific encoding). | <xref target="RFC8941"/>, or a field-specific encoding). | |||
| This ensures that commas within field data are not confused | This ensures that commas within field data are not confused | |||
| with the commas that delimit a list value. | with the commas that delimit a list value. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| skipping to change at line 9977 ¶ | skipping to change at line 9999 ¶ | |||
| <t> | <t> | |||
| Authentication schemes need to document whether they are usable in | Authentication schemes need to document whether they are usable in | |||
| origin-server authentication (i.e., using <xref target="field.www-authenti cate" format="none">WWW-Authenticate</xref>), | origin-server authentication (i.e., using <xref target="field.www-authenti cate" format="none">WWW-Authenticate</xref>), | |||
| and/or proxy authentication (i.e., using <xref target="field.proxy-authent icate" format="none">Proxy-Authenticate</xref>). | and/or proxy authentication (i.e., using <xref target="field.proxy-authent icate" format="none">Proxy-Authenticate</xref>). | |||
| </t> | </t> | |||
| </li> | </li> | |||
| <li> | <li> | |||
| <t> | <t> | |||
| The credentials carried in an <xref target="field.authorization" format="n one">Authorization</xref> header field are specific to | The credentials carried in an <xref target="field.authorization" format="n one">Authorization</xref> header field are specific to | |||
| the user agent and, therefore, have the same effect on HTTP caches as the | the user agent and, therefore, have the same effect on HTTP caches as the | |||
| "private" Cache-Control response directive (<xref target="CACHING" section ="5.2.2.7"/>), | "private" cache response directive (<xref target="CACHING" section="5.2.2. 7"/>), | |||
| within the scope of the request in which they appear. | within the scope of the request in which they appear. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Therefore, new authentication schemes that choose not to carry | Therefore, new authentication schemes that choose not to carry | |||
| credentials in the <xref target="field.authorization" format="none">Author ization</xref> header field (e.g., using a newly defined | credentials in the <xref target="field.authorization" format="none">Author ization</xref> header field (e.g., using a newly defined | |||
| header field) will need to explicitly disallow caching, by mandating the u se of | header field) will need to explicitly disallow caching, by mandating the u se of | |||
| Cache-Control response directives (e.g., "private"). | cache response directives (e.g., "private"). | |||
| </t> | </t> | |||
| </li> | </li> | |||
| <li> | <li> | |||
| <t> | <t> | |||
| Schemes using <xref target="field.authentication-info" format="none">Authe ntication-Info</xref>, <xref target="field.proxy-authentication-info" format="no ne">Proxy-Authentication-Info</xref>, | Schemes using <xref target="field.authentication-info" format="none">Authe ntication-Info</xref>, <xref target="field.proxy-authentication-info" format="no ne">Proxy-Authentication-Info</xref>, | |||
| or any other authentication related response header field need to | or any other authentication related response header field need to | |||
| consider and document the related security considerations (see | consider and document the related security considerations (see | |||
| <xref target="security.auth.add.resp"/>). | <xref target="security.auth.add.resp"/>). | |||
| </t> | </t> | |||
| </li> | </li> | |||
| </ul> | </ul> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="range.unit.extensibility" title="Range Unit Extensibil ity"> | <section anchor="range.unit.extensibility" title="Range Unit Extensibil ity"> | |||
| <section anchor="range.unit.registry" title="Range Unit Registry"> | <section anchor="range.unit.registry" title="Range Unit Registry"> | |||
| <t> | <t> | |||
| The "HTTP Range Unit Registry" defines the namespace for the range | The "HTTP Range Unit Registry" defines the namespace for the range | |||
| unit names and refers to their corresponding specifications. | unit names and refers to their corresponding specifications. | |||
| It is maintained at | It is maintained at | |||
| <eref target="https://www.iana.org/assignments/http-parameters" | <eref target="https://www.iana.org/assignments/http-parameters" | |||
| brackets="angle"/>. | brackets="angle"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| skipping to change at line 10050 ¶ | skipping to change at line 10072 ¶ | |||
| <t> | <t> | |||
| Content coding registrations <bcp14>MUST</bcp14> include the following fields : | Content coding registrations <bcp14>MUST</bcp14> include the following fields : | |||
| </t> | </t> | |||
| <ul> | <ul> | |||
| <li>Name</li> | <li>Name</li> | |||
| <li>Description</li> | <li>Description</li> | |||
| <li>Pointer to specification text</li> | <li>Pointer to specification text</li> | |||
| </ul> | </ul> | |||
| <t> | <t> | |||
| Names of content codings <bcp14>MUST NOT</bcp14> overlap with names of transf er codings | Names of content codings <bcp14>MUST NOT</bcp14> overlap with names of transf er codings | |||
| (as per the "HTTP Transfer Coding registry", located at | (per the "HTTP Transfer Coding Registry" located at | |||
| <eref target="https://www.iana.org/assignments/http-parameters/" | <eref target="https://www.iana.org/assignments/http-parameters/" | |||
| brackets="angle"/>), unless | brackets="angle"/>) unless | |||
| the encoding transformation is | the encoding transformation is | |||
| identical (as is the case for the compression codings defined in | identical (as is the case for the compression codings defined in | |||
| <xref target="content.codings"/>). | <xref target="content.codings"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Values to be added to this namespace require IETF Review | Values to be added to this namespace require IETF Review | |||
| (see <xref target="RFC8126" section="4.8"/>) and <bcp14>MUST</bcp14> | (see <xref target="RFC8126" section="4.8"/>) and <bcp14>MUST</bcp14> | |||
| conform to the purpose of content coding defined in | conform to the purpose of content coding defined in | |||
| <xref target="content.codings"/>. | <xref target="content.codings"/>. | |||
| </t> | </t> | |||
| skipping to change at line 10116 ¶ | skipping to change at line 10138 ¶ | |||
| This will normally only be used in the case when a | This will normally only be used in the case when a | |||
| responsible party cannot be contacted.</li> | responsible party cannot be contacted.</li> | |||
| </ol> | </ol> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="security.considerations" title="Security Considerations"> | <section anchor="security.considerations" title="Security Considerations"> | |||
| <t> | <t> | |||
| This section is meant to inform developers, information providers, and | This section is meant to inform developers, information providers, and | |||
| users of known security concerns relevant to HTTP semantics and its | users of known security concerns relevant to HTTP semantics and its | |||
| use for transferring information over the Internet. Considerations related | use for transferring information over the Internet. Considerations related | |||
| to caching are discussed in <xref target="CACHING" section="7"/> | to caching are discussed in <xref target="CACHING" section="7"/>, | |||
| and considerations related to HTTP/1.1 message syntax and parsing are | and considerations related to HTTP/1.1 message syntax and parsing are | |||
| discussed in <xref target="HTTP11" section="11"/>. | discussed in <xref target="HTTP11" section="11"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The list of considerations below is not exhaustive. Most security concerns | The list of considerations below is not exhaustive. Most security concerns | |||
| related to HTTP semantics are about securing server-side applications (code | related to HTTP semantics are about securing server-side applications (code | |||
| behind the HTTP interface), securing user agent processing of content | behind the HTTP interface), securing user agent processing of content | |||
| received via HTTP, or secure use of the Internet in general, rather than | received via HTTP, or secure use of the Internet in general, rather than | |||
| security of the protocol. The security considerations for URIs, which | security of the protocol. The security considerations for URIs, which | |||
| are fundamental to HTTP operation, are discussed in | are fundamental to HTTP operation, are discussed in | |||
| <xref target="URI" section="7"/>. Various organizations maintain | <xref target="URI" section="7"/>. Various organizations maintain | |||
| topical information and links to current research on Web application | topical information and links to current research on Web application | |||
| security (e.g., <xref target="OWASP"/>). | security (e.g., <xref target="OWASP"/>). | |||
| </t> | </t> | |||
| <section anchor="establishing.authority" title="Establishing Authority" > | <section anchor="establishing.authority" title="Establishing Authority" > | |||
| <iref item="authoritative response" primary="true"/> | <iref item="authoritative response" primary="true"/> | |||
| <iref item="phishing" primary="true"/> | <iref item="phishing" primary="true"/> | |||
| <t> | <t> | |||
| HTTP relies on the notion of an <em>authoritative response</em>: a | HTTP relies on the notion of an "authoritative response": a | |||
| response that has been determined by (or at the direction of) the origin | response that has been determined by (or at the direction of) the origin | |||
| server identified within the target URI to be the most appropriate response | server identified within the target URI to be the most appropriate response | |||
| for that request given the state of the target resource at the time of | for that request given the state of the target resource at the time of | |||
| response message origination. | response message origination. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When a registered name is used in the authority component, the "http" URI | When a registered name is used in the authority component, the "http" URI | |||
| scheme (<xref target="http.uri"/>) relies on the user's local name | scheme (<xref target="http.uri"/>) relies on the user's local name | |||
| resolution service to determine where it can find authoritative responses. | resolution service to determine where it can find authoritative responses. | |||
| This means that any attack on a user's network host table, cached names, | This means that any attack on a user's network host table, cached names, | |||
| skipping to change at line 10181 ¶ | skipping to change at line 10203 ¶ | |||
| with a protocol extension like <xref target="RFC8336"/>. | with a protocol extension like <xref target="RFC8336"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Providing a response from a non-authoritative source, such as a shared | Providing a response from a non-authoritative source, such as a shared | |||
| proxy cache, is often useful to improve performance and availability, but | proxy cache, is often useful to improve performance and availability, but | |||
| only to the extent that the source can be trusted or the distrusted | only to the extent that the source can be trusted or the distrusted | |||
| response can be safely used. | response can be safely used. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Unfortunately, communicating authority to users can be difficult. | Unfortunately, communicating authority to users can be difficult. | |||
| For example, <em>phishing</em> is an attack on the user's perception | For example, "phishing" is an attack on the user's perception | |||
| of authority, where that perception can be misled by presenting similar | of authority, where that perception can be misled by presenting similar | |||
| branding in hypertext, possibly aided by userinfo obfuscating the authority | branding in hypertext, possibly aided by userinfo obfuscating the authority | |||
| component (see <xref target="http.uri"/>). | component (see <xref target="http.uri"/>). | |||
| User agents can reduce the impact of phishing attacks by enabling users to | User agents can reduce the impact of phishing attacks by enabling users to | |||
| easily inspect a target URI prior to making an action, by prominently | easily inspect a target URI prior to making an action, by prominently | |||
| distinguishing (or rejecting) userinfo when present, and by not sending | distinguishing (or rejecting) userinfo when present, and by not sending | |||
| stored credentials and cookies when the referring document is from an | stored credentials and cookies when the referring document is from an | |||
| unknown or untrusted source. | unknown or untrusted source. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| skipping to change at line 10312 ¶ | skipping to change at line 10334 ¶ | |||
| <t> | <t> | |||
| Recipients ought to carefully limit the extent to which they process other | Recipients ought to carefully limit the extent to which they process other | |||
| protocol elements, including (but not limited to) request methods, response | protocol elements, including (but not limited to) request methods, response | |||
| status phrases, field names, numeric values, and chunk lengths. | status phrases, field names, numeric values, and chunk lengths. | |||
| Failure to limit such processing can result in arbitrary code execution due t o | Failure to limit such processing can result in arbitrary code execution due t o | |||
| buffer or arithmetic | buffer or arithmetic | |||
| overflows, and increased vulnerability to denial-of-service attacks. | overflows, and increased vulnerability to denial-of-service attacks. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="compression.attacks" | <section anchor="compression.attacks" | |||
| title="Attacks using Shared-dictionary Compression"> | title="Attacks Using Shared-Dictionary Compression"> | |||
| <t> | <t> | |||
| Some attacks on encrypted protocols use the differences in size created by | Some attacks on encrypted protocols use the differences in size created by | |||
| dynamic compression to reveal confidential information; for example, <xref ta rget="BREACH"/>. These attacks rely on creating a redundancy between | dynamic compression to reveal confidential information; for example, <xref ta rget="BREACH"/>. These attacks rely on creating a redundancy between | |||
| attacker-controlled content and the confidential information, such that a | attacker-controlled content and the confidential information, such that a | |||
| dynamic compression algorithm using the same dictionary for both content | dynamic compression algorithm using the same dictionary for both content | |||
| will compress more efficiently when the attacker-controlled content matches | will compress more efficiently when the attacker-controlled content matches | |||
| parts of the confidential content. | parts of the confidential content. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| HTTP messages can be compressed in a number of ways, including using TLS | HTTP messages can be compressed in a number of ways, including using TLS | |||
| skipping to change at line 10392 ¶ | skipping to change at line 10414 ¶ | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When an application uses client-side mechanisms to construct a target URI | When an application uses client-side mechanisms to construct a target URI | |||
| out of user-provided information, such as the query fields of a form using | out of user-provided information, such as the query fields of a form using | |||
| GET, potentially sensitive data might be provided that would not be | GET, potentially sensitive data might be provided that would not be | |||
| appropriate for disclosure within a URI. POST is often preferred in such | appropriate for disclosure within a URI. POST is often preferred in such | |||
| cases because it usually doesn't construct a URI; instead, POST of a form | cases because it usually doesn't construct a URI; instead, POST of a form | |||
| transmits the potentially sensitive data in the request content. However, thi s | transmits the potentially sensitive data in the request content. However, thi s | |||
| hinders caching and uses an unsafe method for what would otherwise be a safe | hinders caching and uses an unsafe method for what would otherwise be a safe | |||
| request. Alternative workarounds include transforming the user-provided data | request. Alternative workarounds include transforming the user-provided data | |||
| prior to constructing the URI, or filtering the data to only include common | prior to constructing the URI or filtering the data to only include common | |||
| values that are not sensitive. Likewise, redirecting the result of a query | values that are not sensitive. Likewise, redirecting the result of a query | |||
| to a different (server-generated) URI can remove potentially sensitive data | to a different (server-generated) URI can remove potentially sensitive data | |||
| from later links and provide a cacheable response for later reuse. | from later links and provide a cacheable response for later reuse. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Since the <xref target="field.referer" format="none">Referer</xref> header fi eld tells a target site about the | Since the <xref target="field.referer" format="none">Referer</xref> header fi eld tells a target site about the | |||
| context that resulted in a request, it has the potential to reveal | context that resulted in a request, it has the potential to reveal | |||
| information about the user's immediate browsing history and any personal | information about the user's immediate browsing history and any personal | |||
| information that might be found in the referring resource's URI. | information that might be found in the referring resource's URI. | |||
| Limitations on the Referer header field are described in <xref target="field. referer"/> to | Limitations on the Referer header field are described in <xref target="field. referer"/> to | |||
| skipping to change at line 10552 ¶ | skipping to change at line 10574 ¶ | |||
| <t> | <t> | |||
| The validators defined by this specification are not intended to ensure | The validators defined by this specification are not intended to ensure | |||
| the validity of a representation, guard against malicious changes, or | the validity of a representation, guard against malicious changes, or | |||
| detect on-path attacks. At best, they enable more efficient cache | detect on-path attacks. At best, they enable more efficient cache | |||
| updates and optimistic concurrent writes when all participants are behaving | updates and optimistic concurrent writes when all participants are behaving | |||
| nicely. At worst, the conditions will fail and the client will receive a | nicely. At worst, the conditions will fail and the client will receive a | |||
| response that is no more harmful than an HTTP exchange without conditional | response that is no more harmful than an HTTP exchange without conditional | |||
| requests. | requests. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| An entity-tag can be abused in ways that create privacy risks. For example, | An entity tag can be abused in ways that create privacy risks. For example, | |||
| a site might deliberately construct a semantically invalid entity-tag that | a site might deliberately construct a semantically invalid entity tag that | |||
| is unique to the user or user agent, send it in a cacheable response with a | is unique to the user or user agent, send it in a cacheable response with a | |||
| long freshness time, and then read that entity-tag in later conditional | long freshness time, and then read that entity tag in later conditional | |||
| requests as a means of re-identifying that user or user agent. Such an | requests as a means of re-identifying that user or user agent. Such an | |||
| identifying tag would become a persistent identifier for as long as the | identifying tag would become a persistent identifier for as long as the | |||
| user agent retained the original cache entry. User agents that cache | user agent retained the original cache entry. User agents that cache | |||
| representations ought to ensure that the cache is cleared or replaced | representations ought to ensure that the cache is cleared or replaced | |||
| whenever the user performs privacy-maintaining actions, such as clearing | whenever the user performs privacy-maintaining actions, such as clearing | |||
| stored cookies or changing to a private browsing mode. | stored cookies or changing to a private browsing mode. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="overlapping.ranges" | <section anchor="overlapping.ranges" | |||
| title="Denial-of-Service Attacks Using Range"> | title="Denial-of-Service Attacks Using Range"> | |||
| skipping to change at line 10679 ¶ | skipping to change at line 10701 ¶ | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="IANA.considerations" title="IANA Considerations"> | <section anchor="IANA.considerations" title="IANA Considerations"> | |||
| <t> | <t> | |||
| The change controller for the following registrations is: | The change controller for the following registrations is: | |||
| "IETF (iesg@ietf.org) - Internet Engineering Task Force". | "IETF (iesg@ietf.org) - Internet Engineering Task Force". | |||
| </t> | </t> | |||
| <section anchor="uri.scheme.registration" title="URI Scheme Registratio n"> | <section anchor="uri.scheme.registration" title="URI Scheme Registratio n"> | |||
| <t> | <t> | |||
| Please update the registry of URI Schemes <xref target="BCP35"/> at | IANA has updated the "Uniform Resource Identifier (URI) Schemes" registry <xr ef target="BCP35"/> at | |||
| <eref target="https://www.iana.org/assignments/uri-schemes/" brackets="angle" /> with the | <eref target="https://www.iana.org/assignments/uri-schemes/" brackets="angle" /> with the | |||
| permanent schemes listed in the table in <xref target="uri.schemes"/>. | permanent schemes listed in <xref target="uri.scheme.table"/> in <xref target ="uri.schemes"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="method.registration" title="Method Registration"> | <section anchor="method.registration" title="Method Registration"> | |||
| <t> | <t> | |||
| Please update the "Hypertext Transfer Protocol (HTTP) Method Registry" at | IANA has updated the "Hypertext Transfer Protocol (HTTP) Method Registry" at | |||
| <eref target="https://www.iana.org/assignments/http-methods" brackets="angle"/ > with the | <eref target="https://www.iana.org/assignments/http-methods" brackets="angle"/ > with the | |||
| registration procedure of <xref target="method.registry"/> and the method | registration procedure of <xref target="method.registry"/> and the method | |||
| names summarized in the following table. | names summarized in the following table. | |||
| </t> | </t> | |||
| <!--AUTOGENERATED FROM extract-method-defs.xslt, do not edit manuall y--> | ||||
| <table anchor="iana.method.registration.table"> | <table anchor="iana.method.registration.table"> | |||
| <thead> | <thead> | |||
| <tr> | <tr> | |||
| <th>Method</th> | <th>Method</th> | |||
| <th>Safe</th> | <th>Safe</th> | |||
| <th>Idempotent</th> | <th>Idempotent</th> | |||
| <th>Ref.</th> | <th>Section</th> | |||
| </tr> | </tr> | |||
| </thead> | </thead> | |||
| <tbody> | <tbody> | |||
| <tr> | <tr> | |||
| <td>CONNECT</td> | <td>CONNECT</td> | |||
| <td>no</td> | <td>no</td> | |||
| <td>no</td> | <td>no</td> | |||
| <td> | <td> | |||
| <xref target="CONNECT" format="counter"/> | <xref target="CONNECT" format="counter"/> | |||
| </td> | </td> | |||
| skipping to change at line 10776 ¶ | skipping to change at line 10798 ¶ | |||
| <tr> | <tr> | |||
| <td>*</td> | <td>*</td> | |||
| <td>no</td> | <td>no</td> | |||
| <td>no</td> | <td>no</td> | |||
| <td> | <td> | |||
| <xref target="method.registration" format="counter"/> | <xref target="method.registration" format="counter"/> | |||
| </td> | </td> | |||
| </tr> | </tr> | |||
| </tbody> | </tbody> | |||
| </table> | </table> | |||
| <!--(END)--> | ||||
| <t> | <t> | |||
| <iref primary="true" item="Method" subitem="*"/> | <iref primary="true" item="Method" subitem="*"/> | |||
| The method name "*" is reserved, since using "*" as a method name would | The method name "*" is reserved because using "*" as a method name would | |||
| conflict with its usage as a wildcard in some fields (e.g., | conflict with its usage as a wildcard in some fields (e.g., | |||
| "Access-Control-Request-Method"). | "Access-Control-Request-Method"). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="status.code.registration" title="Status Code Registrat ion"> | <section anchor="status.code.registration" title="Status Code Registrat ion"> | |||
| <t> | <t> | |||
| Please update the "Hypertext Transfer Protocol (HTTP) Status Code Registry" | IANA has updated the "Hypertext Transfer Protocol (HTTP) Status Code Registry " | |||
| at <eref target="https://www.iana.org/assignments/http-status-codes" | at <eref target="https://www.iana.org/assignments/http-status-codes" | |||
| brackets="angle"/> with | brackets="angle"/> with | |||
| the registration procedure of <xref target="status.code.registry"/> and the | the registration procedure of <xref target="status.code.registry"/> and the | |||
| status code values summarized in the following table. | status code values summarized in the following table. | |||
| </t> | </t> | |||
| <!--AUTOGENERATED FROM extract-status-code-defs.xslt, do not edit ma nually--> | ||||
| <table anchor="iana.status.code.registration.table"> | <table anchor="iana.status.code.registration.table"> | |||
| <thead> | <thead> | |||
| <tr> | <tr> | |||
| <th>Value</th> | <th>Value</th> | |||
| <th>Description</th> | <th>Description</th> | |||
| <th>Ref.</th> | <th>Section</th> | |||
| </tr> | </tr> | |||
| </thead> | </thead> | |||
| <tbody> | <tbody> | |||
| <tr> | <tr> | |||
| <td>100</td> | <td>100</td> | |||
| <td>Continue</td> | <td>Continue</td> | |||
| <td> | <td> | |||
| <xref target="status.100" format="counter"/> | <xref target="status.100" format="counter"/> | |||
| </td> | </td> | |||
| </tr> | </tr> | |||
| skipping to change at line 11126 ¶ | skipping to change at line 11147 ¶ | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>505</td> | <td>505</td> | |||
| <td>HTTP Version Not Supported</td> | <td>HTTP Version Not Supported</td> | |||
| <td> | <td> | |||
| <xref target="status.505" format="counter"/> | <xref target="status.505" format="counter"/> | |||
| </td> | </td> | |||
| </tr> | </tr> | |||
| </tbody> | </tbody> | |||
| </table> | </table> | |||
| <!--(END)--> | ||||
| </section> | </section> | |||
| <section anchor="field.name.registration" title="Field Name Registratio n"> | <section anchor="field.name.registration" title="Field Name Registratio n"> | |||
| <t> | <t> | |||
| This specification updates the HTTP related aspects of the existing | This specification updates the HTTP-related aspects of the existing | |||
| registration procedures for message header fields defined in <xref target="RF C3864"/>. | registration procedures for message header fields defined in <xref target="RF C3864"/>. | |||
| It replaces the old procedures as they relate to HTTP, by defining a new | It replaces the old procedures as they relate to HTTP by defining a new | |||
| registration procedure and moving HTTP field definitions into a separate | registration procedure and moving HTTP field definitions into a separate | |||
| registry. | registry. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Please create a new registry as outlined in <xref target="fields.registry"/>. | IANA has created a new registry titled "Hypertext Transfer Protocol (HTTP) | |||
| </t> | Field Name Registry" as outlined in <xref target="fields.registry"/>. | |||
| </t> | ||||
| <t> | <t> | |||
| After creating the registry, all entries in the Permanent and Provisional | IANA has moved all entries in the "Permanent Message Header Field | |||
| Message Header Registries with the protocol 'http' are to be moved to it, | Names" and "Provisional Message Header Field Names" registries (see | |||
| with the following changes applied: | <eref target="https://www.iana.org/assignments/message-headers/" | |||
| brackets="angle"/>) with the | ||||
| protocol 'http' to this registry and has applied the following changes: | ||||
| </t> | </t> | |||
| <ol> | <ol> | |||
| <li>The 'Applicable Protocol' field is to be omitted.</li> | <li>The 'Applicable Protocol' field has been omitted.</li> | |||
| <li>Entries with a status of 'standard', 'experimental', 'reserve | <li>Entries that had a status of 'standard', 'experimental', 'res | |||
| d', or | erved', or | |||
| 'informational' are to have a status of 'permanent'.</li> | 'informational' have been made to have a status of 'permanent'.</li> | |||
| <li>Provisional entries without a status are to have a status of | <li>Provisional entries without a status have been made to have a | |||
| status of | ||||
| 'provisional'.</li> | 'provisional'.</li> | |||
| <li>Permanent entries without a status (after confirmation that t he | <li>Permanent entries without a status (after confirmation that t he | |||
| registration document did not define one) will have a status of | registration document did not define one) have been made to have a status of | |||
| 'provisional'. The Expert(s) can choose to update their status if there is | 'provisional'. The expert(s) can choose to update the entries' status if ther | |||
| e is | ||||
| evidence that another is more appropriate.</li> | evidence that another is more appropriate.</li> | |||
| </ol> | </ol> | |||
| <t> | <t> | |||
| Please annotate the Permanent and Provisional Message Header registries to | IANA has annotated the "Permanent Message Header Field | |||
| indicate that HTTP field name registrations have moved, with an | Names" and "Provisional Message Header Field Names" registries with the | |||
| appropriate link. | following note to indicate that HTTP field name registrations have moved: | |||
| </t> | ||||
| <aside> | ||||
| <t> | ||||
| <strong>Note</strong> | ||||
| </t> | ||||
| <t> | ||||
| HTTP field name registrations have been moved to | ||||
| [<eref target="https://www.iana.org/assignments/http-fields" brackets="none" | ||||
| />] per | ||||
| [RFC9110]. | ||||
| </t> | </t> | |||
| </aside> | ||||
| <t> | <t> | |||
| After that is complete, please update the new registry with the | IANA has updated the "Hypertext Transfer Protocol (HTTP) Field Name Registry" | |||
| field names listed in the following table. | with the field names listed in the following table. | |||
| </t> | </t> | |||
| <!--AUTOGENERATED FROM extract-header-defs.xslt, do not edit manuall y--> | ||||
| <table align="left" anchor="iana.header.registration.table"> | <table align="left" anchor="iana.header.registration.table"> | |||
| <thead> | <thead> | |||
| <tr> | <tr> | |||
| <th>Field Name</th> | <th>Field Name</th> | |||
| <th>Status</th> | <th>Status</th> | |||
| <th>Ref.</th> | <th>Section</th> | |||
| <th>Comments</th> | <th>Comments</th> | |||
| </tr> | </tr> | |||
| </thead> | </thead> | |||
| <tbody> | <tbody> | |||
| <tr> | <tr> | |||
| <td>Accept</td> | <td>Accept</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.accept" format="counter"/> | <xref target="field.accept" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Accept-Charset</td> | <td>Accept-Charset</td> | |||
| <td>deprecated</td> | <td>deprecated</td> | |||
| <td> | <td> | |||
| <xref target="field.accept-charset" format="counter"/> | <xref target="field.accept-charset" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Accept-Encoding</td> | <td>Accept-Encoding</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.accept-encoding" format="counter"/> | <xref target="field.accept-encoding" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Accept-Language</td> | <td>Accept-Language</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.accept-language" format="counter"/> | <xref target="field.accept-language" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Accept-Ranges</td> | <td>Accept-Ranges</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.accept-ranges" format="counter"/> | <xref target="field.accept-ranges" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Allow</td> | <td>Allow</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.allow" format="counter"/> | <xref target="field.allow" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Authentication-Info</td> | <td>Authentication-Info</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.authentication-info" format="counter "/> | <xref target="field.authentication-info" format="counter "/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Authorization</td> | <td>Authorization</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.authorization" format="counter"/> | <xref target="field.authorization" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Connection</td> | <td>Connection</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.connection" format="counter"/> | <xref target="field.connection" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Content-Encoding</td> | <td>Content-Encoding</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.content-encoding" format="counter"/> | <xref target="field.content-encoding" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Content-Language</td> | <td>Content-Language</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.content-language" format="counter"/> | <xref target="field.content-language" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Content-Length</td> | <td>Content-Length</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.content-length" format="counter"/> | <xref target="field.content-length" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Content-Location</td> | <td>Content-Location</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.content-location" format="counter"/> | <xref target="field.content-location" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Content-Range</td> | <td>Content-Range</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.content-range" format="counter"/> | <xref target="field.content-range" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Content-Type</td> | <td>Content-Type</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.content-type" format="counter"/> | <xref target="field.content-type" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Date</td> | <td>Date</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.date" format="counter"/> | <xref target="field.date" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>ETag</td> | <td>ETag</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.etag" format="counter"/> | <xref target="field.etag" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Expect</td> | <td>Expect</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.expect" format="counter"/> | <xref target="field.expect" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>From</td> | <td>From</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.from" format="counter"/> | <xref target="field.from" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Host</td> | <td>Host</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.host" format="counter"/> | <xref target="field.host" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>If-Match</td> | <td>If-Match</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.if-match" format="counter"/> | <xref target="field.if-match" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>If-Modified-Since</td> | <td>If-Modified-Since</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.if-modified-since" format="counter"/ > | <xref target="field.if-modified-since" format="counter"/ > | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>If-None-Match</td> | <td>If-None-Match</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.if-none-match" format="counter"/> | <xref target="field.if-none-match" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>If-Range</td> | <td>If-Range</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.if-range" format="counter"/> | <xref target="field.if-range" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>If-Unmodified-Since</td> | <td>If-Unmodified-Since</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.if-unmodified-since" format="counter "/> | <xref target="field.if-unmodified-since" format="counter "/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Last-Modified</td> | <td>Last-Modified</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.last-modified" format="counter"/> | <xref target="field.last-modified" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Location</td> | <td>Location</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.location" format="counter"/> | <xref target="field.location" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Max-Forwards</td> | <td>Max-Forwards</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.max-forwards" format="counter"/> | <xref target="field.max-forwards" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Proxy-Authenticate</td> | <td>Proxy-Authenticate</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.proxy-authenticate" format="counter" /> | <xref target="field.proxy-authenticate" format="counter" /> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Proxy-Authentication-Info</td> | <td>Proxy-Authentication-Info</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.proxy-authentication-info" format="c ounter"/> | <xref target="field.proxy-authentication-info" format="c ounter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Proxy-Authorization</td> | <td>Proxy-Authorization</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.proxy-authorization" format="counter "/> | <xref target="field.proxy-authorization" format="counter "/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Range</td> | <td>Range</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.range" format="counter"/> | <xref target="field.range" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Referer</td> | <td>Referer</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.referer" format="counter"/> | <xref target="field.referer" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Retry-After</td> | <td>Retry-After</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.retry-after" format="counter"/> | <xref target="field.retry-after" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Server</td> | <td>Server</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.server" format="counter"/> | <xref target="field.server" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>TE</td> | <td>TE</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.te" format="counter"/> | <xref target="field.te" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Trailer</td> | <td>Trailer</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.trailer" format="counter"/> | <xref target="field.trailer" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Upgrade</td> | <td>Upgrade</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.upgrade" format="counter"/> | <xref target="field.upgrade" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>User-Agent</td> | <td>User-Agent</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.user-agent" format="counter"/> | <xref target="field.user-agent" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Vary</td> | <td>Vary</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.vary" format="counter"/> | <xref target="field.vary" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>Via</td> | <td>Via</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.via" format="counter"/> | <xref target="field.via" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>WWW-Authenticate</td> | <td>WWW-Authenticate</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.www-authenticate" format="counter"/> | <xref target="field.www-authenticate" format="counter"/> | |||
| </td> | </td> | |||
| <td/> | <td/> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td>*</td> | <td>*</td> | |||
| <td>standard</td> | <td>permanent</td> | |||
| <td> | <td> | |||
| <xref target="field.vary" format="counter"/> | <xref target="field.vary" format="counter"/> | |||
| </td> | </td> | |||
| <td>(reserved)</td> | <td>(reserved)</td> | |||
| </tr> | </tr> | |||
| </tbody> | </tbody> | |||
| </table> | </table> | |||
| <!--(END)--> | ||||
| <t anchor="field.asterisk"> | <t anchor="field.asterisk"> | |||
| <iref primary="true" item="Fields" subitem="*"/> | <iref primary="true" item="Fields" subitem="*"/> | |||
| The field name "*" is reserved, since using that name as | The field name "*" is reserved because using that name as | |||
| an HTTP header field might conflict with its special semantics in the | an HTTP header field might conflict with its special semantics in the | |||
| <xref target="field.vary" format="none">Vary</xref> header field (<xref targe t="field.vary"/>). | <xref target="field.vary" format="none">Vary</xref> header field (<xref targe t="field.vary"/>). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <iref primary="true" item="Fields" subitem="Content-MD5"/> | <iref primary="true" item="Fields" subitem="Content-MD5"/> | |||
| <iref primary="true" item="Header Fields" subitem="Content-MD5"/> | <iref primary="true" item="Header Fields" subitem="Content-MD5"/> | |||
| <iref primary="true" item="Content-MD5 header field"/> | <iref primary="true" item="Content-MD5 header field"/> | |||
| Finally, please update the "Content-MD5" entry in the new registry to have | IANA has updated the "Content-MD5" entry in the new registry to have | |||
| a status of 'obsoleted' with references to | a status of 'obsoleted' with references to | |||
| <xref target="RFC2616" section="14.15"/> (for the definition | <xref target="RFC2616" section="14.15"/> (for the definition | |||
| of the header field) and | of the header field) and | |||
| <xref target="RFC7231" section="B"/> (which removed the field | <xref target="RFC7231" section="B"/> (which removed the field | |||
| definition from the updated specification). | definition from the updated specification). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="auth.scheme.registration" | <section anchor="auth.scheme.registration" | |||
| title="Authentication Scheme Registration"> | title="Authentication Scheme Registration"> | |||
| <t> | <t> | |||
| Please update the | IANA has updated the | |||
| "Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry" | "Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry" | |||
| at <eref target="https://www.iana.org/assignments/http-authschemes" | at <eref target="https://www.iana.org/assignments/http-authschemes" | |||
| brackets="angle"/> with | brackets="angle"/> with | |||
| the registration procedure of <xref target="auth.scheme.registry"/>. | the registration procedure of <xref target="auth.scheme.registry"/>. | |||
| No authentication schemes are defined in this document. | No authentication schemes are defined in this document. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="content.coding.registration" | <section anchor="content.coding.registration" | |||
| title="Content Coding Registration"> | title="Content Coding Registration"> | |||
| <t> | <t> | |||
| Please update the "HTTP Content Coding Registry" at | IANA has updated the "HTTP Content Coding Registry" at | |||
| <eref target="https://www.iana.org/assignments/http-parameters/" | <eref target="https://www.iana.org/assignments/http-parameters/" | |||
| brackets="angle"/> | brackets="angle"/> | |||
| with the registration procedure of <xref target="content.coding.registry"/> | with the registration procedure of <xref target="content.coding.registry"/> | |||
| and the content coding names summarized in the table below. | and the content coding names summarized in the table below. | |||
| </t> | </t> | |||
| <table align="left" anchor="iana.content.coding.registration.table"> | <table align="left" anchor="iana.content.coding.registration.table"> | |||
| <thead> | <thead> | |||
| <tr> | <tr> | |||
| <th>Name</th> | <th>Name</th> | |||
| <th>Description</th> | <th>Description</th> | |||
| <th>Ref.</th> | <th>Section</th> | |||
| </tr> | </tr> | |||
| </thead> | </thead> | |||
| <tbody> | <tbody> | |||
| <tr> | <tr> | |||
| <td>compress</td> | <td>compress</td> | |||
| <td>UNIX "compress" data format <xref target="Welch"/> | <td>UNIX "compress" data format <xref target="Welch"/> | |||
| </td> | </td> | |||
| <td> | <td> | |||
| <xref target="compress.coding" format="counter"/> | <xref target="compress.coding" format="counter"/> | |||
| </td> | </td> | |||
| skipping to change at line 11621 ¶ | skipping to change at line 11652 ¶ | |||
| <td>Deprecated (alias for gzip)</td> | <td>Deprecated (alias for gzip)</td> | |||
| <td> | <td> | |||
| <xref target="gzip.coding" format="counter"/> | <xref target="gzip.coding" format="counter"/> | |||
| </td> | </td> | |||
| </tr> | </tr> | |||
| </tbody> | </tbody> | |||
| </table> | </table> | |||
| </section> | </section> | |||
| <section anchor="range.unit.registration" title="Range Unit Registratio n"> | <section anchor="range.unit.registration" title="Range Unit Registratio n"> | |||
| <t> | <t> | |||
| Please update the "HTTP Range Unit Registry" at | IANA has updated the "HTTP Range Unit Registry" at | |||
| <eref target="https://www.iana.org/assignments/http-parameters/" | <eref target="https://www.iana.org/assignments/http-parameters/" | |||
| brackets="angle"/> | brackets="angle"/> | |||
| with the registration procedure of <xref target="range.unit.registry"/> | with the registration procedure of <xref target="range.unit.registry"/> | |||
| and the range unit names summarized in the table below. | and the range unit names summarized in the table below. | |||
| </t> | </t> | |||
| <table align="left" anchor="iana.range.units.table"> | <table align="left" anchor="iana.range.units.table"> | |||
| <thead> | <thead> | |||
| <tr> | <tr> | |||
| <th>Range Unit Name</th> | <th>Range Unit Name</th> | |||
| <th>Description</th> | <th>Description</th> | |||
| <th>Ref.</th> | <th>Section</th> | |||
| </tr> | </tr> | |||
| </thead> | </thead> | |||
| <tbody> | <tbody> | |||
| <tr> | <tr> | |||
| <td>bytes</td> | <td>bytes</td> | |||
| <td>a range of octets</td> | <td>a range of octets</td> | |||
| <td> | <td> | |||
| <xref target="byte.ranges" format="counter"/> | <xref target="byte.ranges" format="counter"/> | |||
| </td> | </td> | |||
| </tr> | </tr> | |||
| skipping to change at line 11655 ¶ | skipping to change at line 11686 ¶ | |||
| <td>reserved as keyword to indicate range requests are not supported</td> | <td>reserved as keyword to indicate range requests are not supported</td> | |||
| <td> | <td> | |||
| <xref target="field.accept-ranges" format="counter"/> | <xref target="field.accept-ranges" format="counter"/> | |||
| </td> | </td> | |||
| </tr> | </tr> | |||
| </tbody> | </tbody> | |||
| </table> | </table> | |||
| </section> | </section> | |||
| <section anchor="media.type.reg" title="Media Type Registration"> | <section anchor="media.type.reg" title="Media Type Registration"> | |||
| <t> | <t> | |||
| Please update the "Media Types" registry at | IANA has updated the "Media Types" registry at | |||
| <eref target="https://www.iana.org/assignments/media-types" brackets="angle"/ > | <eref target="https://www.iana.org/assignments/media-types" brackets="angle"/ > | |||
| with the registration information in | with the registration information in | |||
| <xref target="multipart.byteranges"/> | <xref target="multipart.byteranges"/> | |||
| for the media type "multipart/byteranges". | for the media type "multipart/byteranges". | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Furthermore please update the registry note about "q" parameters with | IANA has updated the registry note about "q" parameters with | |||
| a link to <xref target="field.accept"/> of this document. | a link to <xref target="field.accept"/> of this document. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="port.reg" title="Port Registration"> | <section anchor="port.reg" title="Port Registration"> | |||
| <t> | <t> | |||
| Please update the "Service Name and Transport Protocol Port Number" | IANA has updated the "Service Name and Transport Protocol Port Number | |||
| registry at <eref target="https://www.iana.org/assignments/service-names-port | Registry" at <eref target="https://www.iana.org/assignments/service-names-por | |||
| -numbers/" | t-numbers/" | |||
| brackets="angle"/> | brackets="angle"/> | |||
| for the services on ports 80 and 443 that use UDP or TCP to: | for the services on ports 80 and 443 that use UDP or TCP to: | |||
| </t> | </t> | |||
| <ol> | <ol> | |||
| <li>use this document as "Reference", and</li> | <li>use this document as "Reference", and</li> | |||
| <li>when currently unspecified, set "Assignee" to "IESG" and "Con tact" to | <li>when currently unspecified, set "Assignee" to "IESG" and "Con tact" to | |||
| "IETF_Chair".</li> | "IETF_Chair".</li> | |||
| </ol> | </ol> | |||
| </section> | </section> | |||
| <section anchor="upgrade.token.registration" title="Upgrade Token Regis tration"> | <section anchor="upgrade.token.registration" title="Upgrade Token Regis tration"> | |||
| <t> | <t> | |||
| Please update the | IANA has updated the | |||
| "Hypertext Transfer Protocol (HTTP) Upgrade Token Registry" at | "Hypertext Transfer Protocol (HTTP) Upgrade Token Registry" at | |||
| <eref target="https://www.iana.org/assignments/http-upgrade-tokens" | <eref target="https://www.iana.org/assignments/http-upgrade-tokens" | |||
| brackets="angle"/> | brackets="angle"/> | |||
| with the registration procedure of <xref target="upgrade.token.registry"/> | with the registration procedure described in <xref target="upgrade.token.regi stry"/> | |||
| and the upgrade token names summarized in the following table. | and the upgrade token names summarized in the following table. | |||
| </t> | </t> | |||
| <table align="left"> | <table align="left"> | |||
| <thead> | <thead> | |||
| <tr> | <tr> | |||
| <th>Name</th> | <th>Name</th> | |||
| <th>Description</th> | <th>Description</th> | |||
| <th>Expected Version Tokens</th> | <th>Expected Version Tokens</th> | |||
| <th>Ref.</th> | <th>Section</th> | |||
| </tr> | </tr> | |||
| </thead> | </thead> | |||
| <tbody> | <tbody> | |||
| <tr> | <tr> | |||
| <td>HTTP</td> | <td>HTTP</td> | |||
| <td>Hypertext Transfer Protocol</td> | <td>Hypertext Transfer Protocol</td> | |||
| <td>any DIGIT.DIGIT (e.g, "2.0")</td> | <td>any DIGIT.DIGIT (e.g., "2.0")</td> | |||
| <td> | <td> | |||
| <xref target="protocol.version" format="counter"/> | <xref target="protocol.version" format="counter"/> | |||
| </td> | </td> | |||
| </tr> | </tr> | |||
| </tbody> | </tbody> | |||
| </table> | </table> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <displayreference xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | <displayreference target="HTTP10" to="HTTP/1.0"/> | |||
| xmlns:x="http://purl.org/net/xml2rfc/ext" | <displayreference target="HTTP11" to="HTTP/1.1"/> | |||
| target="HTTP10" | <displayreference target="HTTP2" to="HTTP/2"/> | |||
| to="HTTP/1.0"/> | <displayreference target="HTTP3" to="HTTP/3"/> | |||
| <displayreference xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||||
| xmlns:x="http://purl.org/net/xml2rfc/ext" | ||||
| target="HTTP11" | ||||
| to="HTTP/1.1"/> | ||||
| <displayreference xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||||
| xmlns:x="http://purl.org/net/xml2rfc/ext" | ||||
| target="HTTP2" | ||||
| to="HTTP/2"/> | ||||
| <displayreference xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||||
| xmlns:x="http://purl.org/net/xml2rfc/ext" | ||||
| target="HTTP3" | ||||
| to="HTTP/3"/> | ||||
| <references> | <references> | |||
| <name>References</name> | <name>References</name> | |||
| <references> | <references> | |||
| <name>Normative References</name> | <name>Normative References</name> | |||
| <reference anchor="CACHING"><!--included from draft-ietf-httpbis-cac | ||||
| he-latest.xml--> | <reference anchor='CACHING' target='https://www.rfc-editor.org/info/r | |||
| <front> | fc9111'> | |||
| <title>HTTP Caching</title> | <front> | |||
| <author fullname="Roy T. Fielding" | <title>HTTP Caching</title> | |||
| initials="R." | <author initials='R' surname='Fielding' fullname='Roy T. Fieldi | |||
| surname="Fielding" | ng' role='editor'> | |||
| role="editor"> | <organization /> | |||
| <organization>Adobe</organization> | </author> | |||
| <address> | <author initials='M' surname='Nottingham' fullname='Mark Nottin | |||
| <postal> | gham' role='editor'> | |||
| <postalLine>345 Park Ave</postalLine> | <organization /> | |||
| <postalLine>San Jose, CA 95110</postalLine> | </author> | |||
| <postalLine>United States of America</postalLine> | <author initials='J' surname='Reschke' fullname='Julian Reschke | |||
| </postal> | ' role='editor'> | |||
| <email>fielding@gbiv.com</email> | <organization /> | |||
| <uri>https://roy.gbiv.com/</uri> | </author> | |||
| </address> | <date year='2022' month='June' /> | |||
| </author> | </front> | |||
| <author fullname="Mark Nottingham" | <seriesInfo name="STD" value="98"/> | |||
| initials="M." | <seriesInfo name="RFC" value="9111"/> | |||
| surname="Nottingham" | <seriesInfo name="DOI" value="10.17487/RFC9111"/> | |||
| role="editor"> | ||||
| <organization>Fastly</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <postalLine>Prahran VIC</postalLine> | ||||
| <postalLine>Australia</postalLine> | ||||
| </postal> | ||||
| <email>mnot@mnot.net</email> | ||||
| <uri>https://www.mnot.net/</uri> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Julian Reschke" | ||||
| initials="J." | ||||
| surname="Reschke" | ||||
| role="editor"> | ||||
| <organization abbrev="greenbytes">greenbytes GmbH</organiza | ||||
| tion> | ||||
| <address> | ||||
| <postal> | ||||
| <postalLine>Hafenweg 16</postalLine> | ||||
| <postalLine>48155 Münster</postalLine> | ||||
| <postalLine>Germany</postalLine> | ||||
| </postal> | ||||
| <email>julian.reschke@greenbytes.de</email> | ||||
| <uri>https://greenbytes.de/tech/webdav/</uri> | ||||
| </address> | ||||
| </author> | ||||
| <date year="2021" month="September" day="10"/> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-cache | ||||
| -19"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2046" target="https://www.rfc-editor.org/info/ | ||||
| rfc2046"> | ||||
| <front> | ||||
| <title abbrev="Media Types">Multipurpose Internet Mail Extensi | ||||
| ons (MIME) Part Two: Media Types</title> | ||||
| <author initials="N." surname="Freed" fullname="Ned Freed"/> | ||||
| <author initials="N." | ||||
| surname="Borenstein" | ||||
| fullname="Nathaniel S. Borenstein"/> | ||||
| <date month="November" year="1996"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2046"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2046"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/ | ||||
| rfc2119"> | ||||
| <front> | ||||
| <title>Key words for use in RFCs to Indicate Requirement Level | ||||
| s</title> | ||||
| <author initials="S." surname="Bradner" fullname="Scott Bradne | ||||
| r"/> | ||||
| <date month="March" year="1997"/> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="14"/> | ||||
| <seriesInfo name="RFC" value="2119"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2119"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/ | ||||
| rfc8174"> | ||||
| <front> | ||||
| <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Wor | ||||
| ds</title> | ||||
| <author initials="B." surname="Leiba" fullname="Barry Leiba"/> | ||||
| <date year="2017" month="May"/> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="14"/> | ||||
| <seriesInfo name="RFC" value="8174"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
| </reference> | </reference> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2046. | ||||
| xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119. | ||||
| xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174. | ||||
| xml"/> | ||||
| <reference anchor="URI" target="https://www.rfc-editor.org/info/rfc3 986"> | <reference anchor="URI" target="https://www.rfc-editor.org/info/rfc3 986"> | |||
| <front> | <front> | |||
| <title abbrev="URI Generic Syntax">Uniform Resource Identifier (URI): Generic Syntax</title> | <title abbrev="URI Generic Syntax">Uniform Resource Identifier (URI): Generic Syntax</title> | |||
| <author initials="T." surname="Berners-Lee" fullname="Tim Bern ers-Lee"/> | <author initials="T." surname="Berners-Lee" fullname="Tim Bern ers-Lee"/> | |||
| <author initials="R." surname="Fielding" fullname="Roy T. Fiel ding"/> | <author initials="R." surname="Fielding" fullname="Roy T. Fiel ding"/> | |||
| <author initials="L." surname="Masinter" fullname="Larry Masin ter"/> | <author initials="L." surname="Masinter" fullname="Larry Masin ter"/> | |||
| <date month="January" year="2005"/> | <date month="January" year="2005"/> | |||
| </front> | </front> | |||
| <seriesInfo name="STD" value="66"/> | <seriesInfo name="STD" value="66"/> | |||
| <seriesInfo name="RFC" value="3986"/> | <seriesInfo name="RFC" value="3986"/> | |||
| skipping to change at line 11837 ¶ | skipping to change at line 11797 ¶ | |||
| <reference anchor="TCP" target="https://www.rfc-editor.org/info/rfc7 93"> | <reference anchor="TCP" target="https://www.rfc-editor.org/info/rfc7 93"> | |||
| <front> | <front> | |||
| <title>Transmission Control Protocol</title> | <title>Transmission Control Protocol</title> | |||
| <author initials="J." surname="Postel" fullname="Jon Postel"/> | <author initials="J." surname="Postel" fullname="Jon Postel"/> | |||
| <date year="1981" month="September"/> | <date year="1981" month="September"/> | |||
| </front> | </front> | |||
| <seriesInfo name="STD" value="7"/> | <seriesInfo name="STD" value="7"/> | |||
| <seriesInfo name="RFC" value="793"/> | <seriesInfo name="RFC" value="793"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC0793"/> | <seriesInfo name="DOI" value="10.17487/RFC0793"/> | |||
| </reference> | </reference> | |||
| <reference anchor="RFC4647" target="https://www.rfc-editor.org/info/ | <reference anchor="RFC4647" target="https://www.rfc-editor.org/info/rfc4647"> | |||
| rfc4647"> | <front> | |||
| <front> | <title>Matching of Language Tags</title> | |||
| <title>Matching of Language Tags</title> | ||||
| <author initials="A." | ||||
| surname="Phillips" | ||||
| fullname="Addison Phillips" | ||||
| role="editor"/> | ||||
| <author initials="M." | ||||
| surname="Davis" | ||||
| fullname="Mark Davis" | ||||
| role="editor"/> | ||||
| <date year="2006" month="September"/> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="47"/> | ||||
| <seriesInfo name="RFC" value="4647"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC4647"/> | ||||
| </reference> | ||||
| <reference anchor="RFC4648" target="https://www.rfc-editor.org/info/ | ||||
| rfc4648"> | ||||
| <front> | ||||
| <title>The Base16, Base32, and Base64 Data Encodings</title> | ||||
| <author fullname="S. Josefsson" initials="S." surname="Josefss | ||||
| on"/> | ||||
| <date year="2006" month="October"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="4648"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC4648"/> | ||||
| </reference> | ||||
| <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/ | ||||
| rfc5234"> | ||||
| <front> | ||||
| <title abbrev="ABNF for Syntax Specifications">Augmented BNF f | ||||
| or Syntax Specifications: ABNF</title> | ||||
| <author initials="D." | ||||
| surname="Crocker" | ||||
| fullname="Dave Crocker" | ||||
| role="editor"/> | ||||
| <author initials="P." surname="Overell" fullname="Paul Overell | ||||
| "/> | ||||
| <date month="January" year="2008"/> | ||||
| </front> | ||||
| <seriesInfo name="STD" value="68"/> | ||||
| <seriesInfo name="RFC" value="5234"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC5234"/> | ||||
| </reference> | ||||
| <reference anchor="RFC5322" target="https://www.rfc-editor.org/info/ | ||||
| rfc5322"> | ||||
| <front> | ||||
| <title>Internet Message Format</title> | ||||
| <author initials="P." surname="Resnick" fullname="P. Resnick"/ | ||||
| > | ||||
| <date year="2008" month="October"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="5322"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC5322"/> | ||||
| </reference> | ||||
| <reference anchor="RFC5646" target="https://www.rfc-editor.org/info/ | ||||
| rfc5646"> | ||||
| <front> | ||||
| <title>Tags for Identifying Languages</title> | ||||
| <author initials="A." | <author initials="A." | |||
| surname="Phillips" | surname="Phillips" | |||
| fullname="Addison Phillips" | fullname="Addison Phillips" | |||
| role="editor"/> | role="editor"/> | |||
| <author initials="M." | <author initials="M." | |||
| surname="Davis" | surname="Davis" | |||
| fullname="Mark Davis" | fullname="Mark Davis" | |||
| role="editor"/> | role="editor"/> | |||
| <date month="September" year="2009"/> | <date year="2006" month="September"/> | |||
| </front> | </front> | |||
| <seriesInfo name="BCP" value="47"/> | <seriesInfo name="BCP" value="47"/> | |||
| <seriesInfo name="RFC" value="5646"/> | <seriesInfo name="RFC" value="4647"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC5646"/> | <seriesInfo name="DOI" value="10.17487/RFC4647"/> | |||
| </reference> | </reference> | |||
| <reference anchor="RFC6125" target="https://www.rfc-editor.org/info/ | ||||
| rfc6125"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4648. | |||
| <front> | xml"/> | |||
| <title>Representation and Verification of Domain-Based Applica | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5234. | |||
| tion Service Identity within Internet Public Key Infrastructure Using X.509 (PKI | xml"/> | |||
| X) Certificates in the Context of Transport Layer Security (TLS)</title> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5322. | |||
| <author initials="P." surname="Saint-Andre" fullname="P. Saint | xml"/> | |||
| -Andre"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5646. | |||
| <author initials="J." surname="Hodges" fullname="J. Hodges"/> | xml"/> | |||
| <date year="2011" month="March"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6125. | |||
| </front> | xml"/> | |||
| <seriesInfo name="RFC" value="6125"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6365. | |||
| <seriesInfo name="DOI" value="10.17487/RFC6125"/> | xml"/> | |||
| </reference> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7405. | |||
| <reference anchor="RFC6365" target="https://www.rfc-editor.org/info/ | xml"/> | |||
| rfc6365"> | ||||
| <front> | ||||
| <title>Terminology Used in Internationalization in the IETF</t | ||||
| itle> | ||||
| <author initials="P." surname="Hoffman" fullname="P. Hoffman"/ | ||||
| > | ||||
| <author initials="J." surname="Klensin" fullname="J. Klensin"/ | ||||
| > | ||||
| <date year="2011" month="September"/> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="166"/> | ||||
| <seriesInfo name="RFC" value="6365"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6365"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7405" target="https://www.rfc-editor.org/info/ | ||||
| rfc7405"> | ||||
| <front> | ||||
| <title>Case-Sensitive String Support in ABNF</title> | ||||
| <author initials="P." surname="Kyzivat" fullname="Dave Kyzivat | ||||
| "/> | ||||
| <date month="December" year="2014"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7405"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7405"/> | ||||
| </reference> | ||||
| <reference anchor="TLS13" target="https://www.rfc-editor.org/info/rf c8446"> | <reference anchor="TLS13" target="https://www.rfc-editor.org/info/rf c8446"> | |||
| <front> | <front> | |||
| <title>The Transport Layer Security (TLS) Protocol Version 1.3 </title> | <title>The Transport Layer Security (TLS) Protocol Version 1.3 </title> | |||
| <author initials="E." surname="Rescorla" fullname="Eric Rescor la"/> | <author initials="E." surname="Rescorla" fullname="Eric Rescor la"/> | |||
| <date year="2018" month="August"/> | <date year="2018" month="August"/> | |||
| </front> | </front> | |||
| <seriesInfo name="RFC" value="8446"/> | <seriesInfo name="RFC" value="8446"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC8446"/> | <seriesInfo name="DOI" value="10.17487/RFC8446"/> | |||
| </reference> | </reference> | |||
| <reference anchor="USASCII"> | <reference anchor="USASCII"> | |||
| <front> | <front> | |||
| <title>Coded Character Set -- 7-bit American Standard Code for Information Interchange</title> | <title>Coded Character Set -- 7-bit American Standard Code for Information Interchange</title> | |||
| <author> | <author> | |||
| <organization>American National Standards Institute</organi zation> | <organization>American National Standards Institute</organi zation> | |||
| </author> | </author> | |||
| <date year="1986"/> | <date year="1986"/> | |||
| </front> | </front> | |||
| <seriesInfo name="ANSI" value="X3.4"/> | <seriesInfo name="ANSI" value="X3.4"/> | |||
| </reference> | </reference> | |||
| <reference anchor="RFC1950" target="https://www.rfc-editor.org/info/ | ||||
| rfc1950"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1950. | |||
| <front> | xml"/> | |||
| <title>ZLIB Compressed Data Format Specification version 3.3</ | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1951. | |||
| title> | xml"/> | |||
| <author initials="L.P." surname="Deutsch" fullname="L. Peter D | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1952. | |||
| eutsch"/> | xml"/> | |||
| <author initials="J-L." surname="Gailly" fullname="Jean-Loup G | ||||
| ailly"/> | ||||
| <date month="May" year="1996"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="1950"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC1950"/> | ||||
| </reference> | ||||
| <reference anchor="RFC1951" target="https://www.rfc-editor.org/info/ | ||||
| rfc1951"> | ||||
| <front> | ||||
| <title>DEFLATE Compressed Data Format Specification version 1. | ||||
| 3</title> | ||||
| <author initials="P." surname="Deutsch" fullname="L. Peter Deu | ||||
| tsch"/> | ||||
| <date month="May" year="1996"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="1951"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC1951"/> | ||||
| </reference> | ||||
| <reference anchor="RFC1952" target="https://www.rfc-editor.org/info/ | ||||
| rfc1952"> | ||||
| <front> | ||||
| <title>GZIP file format specification version 4.3</title> | ||||
| <author initials="P." surname="Deutsch" fullname="L. Peter Deu | ||||
| tsch"/> | ||||
| <author initials="J-L." surname="Gailly" fullname="Jean-Loup G | ||||
| ailly"/> | ||||
| <author initials="M." surname="Adler" fullname="Mark Adler"/> | ||||
| <author initials="L.P." surname="Deutsch" fullname="L. Peter D | ||||
| eutsch"/> | ||||
| <author initials="G." | ||||
| surname="Randers-Pehrson" | ||||
| fullname="Glenn Randers-Pehrson"/> | ||||
| <date month="May" year="1996"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="1952"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC1952"/> | ||||
| </reference> | ||||
| <reference anchor="Welch" target="https://ieeexplore.ieee.org/docume nt/1659158/"> | <reference anchor="Welch" target="https://ieeexplore.ieee.org/docume nt/1659158/"> | |||
| <front> | <front> | |||
| <title>A Technique for High-Performance Data Compression</titl e> | <title>A Technique for High-Performance Data Compression</titl e> | |||
| <author initials="T. A." surname="Welch" fullname="Terry A. We lch"/> | <author initials="T." surname="Welch" fullname="Terry A. Welch "/> | |||
| <date month="June" year="1984"/> | <date month="June" year="1984"/> | |||
| </front> | </front> | |||
| <seriesInfo name="IEEE Computer" value="17(6)"/> | <refcontent>IEEE Computer 17(6)</refcontent> | |||
| <seriesInfo name="DOI" value="10.1109/MC.1984.1659158"/> | <seriesInfo name="DOI" value="10.1109/MC.1984.1659158"/> | |||
| </reference> | </reference> | |||
| <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/ | ||||
| rfc5280"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5280. | |||
| <front> | xml"/> | |||
| <title>Internet X.509 Public Key Infrastructure Certificate an | ||||
| d | ||||
| Certificate Revocation List (CRL) Profile</title> | ||||
| <author initials="D." surname="Cooper" fullname="D. Cooper"/> | ||||
| <author initials="S." surname="Santesson" fullname="S. Santess | ||||
| on"/> | ||||
| <author initials="S." surname="Farrell" fullname="S. Farrell"/ | ||||
| > | ||||
| <author initials="S." surname="Boeyen" fullname="S. Boeyen"/> | ||||
| <author initials="R." surname="Housley" fullname="R. Housley"/ | ||||
| > | ||||
| <author initials="W." surname="Polk" fullname="W. Polk"/> | ||||
| <date year="2008" month="May"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="5280"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC5280"/> | ||||
| </reference> | ||||
| </references> | </references> | |||
| <references> | <references> | |||
| <name>Informative References</name> | <name>Informative References</name> | |||
| <reference anchor="HTTP11"><!--included from draft-ietf-httpbis-mess | ||||
| aging-latest.xml--> | <reference anchor="HTTP11" target='https://www.rfc-editor.org/info/r | |||
| fc9112'> | ||||
| <front> | <front> | |||
| <title>HTTP/1.1</title> | <title>HTTP/1.1</title> | |||
| <author fullname="Roy T. Fielding" | <author initials="R." surname="Fielding" fullname="Roy T. Fiel | |||
| initials="R." | ding" role="editor"> | |||
| surname="Fielding" | ||||
| role="editor"> | ||||
| <organization>Adobe</organization> | <organization>Adobe</organization> | |||
| <address> | ||||
| <postal> | ||||
| <postalLine>345 Park Ave</postalLine> | ||||
| <postalLine>San Jose, CA 95110</postalLine> | ||||
| <postalLine>United States of America</postalLine> | ||||
| </postal> | ||||
| <email>fielding@gbiv.com</email> | ||||
| <uri>https://roy.gbiv.com/</uri> | ||||
| </address> | ||||
| </author> | </author> | |||
| <author fullname="Mark Nottingham" | <author initials="M." surname="Nottingham" fullname="Mark Nott | |||
| initials="M." | ingham" role="editor"> | |||
| surname="Nottingham" | ||||
| role="editor"> | ||||
| <organization>Fastly</organization> | <organization>Fastly</organization> | |||
| <address> | ||||
| <postal> | ||||
| <postalLine>Prahran VIC</postalLine> | ||||
| <postalLine>Australia</postalLine> | ||||
| </postal> | ||||
| <email>mnot@mnot.net</email> | ||||
| <uri>https://www.mnot.net/</uri> | ||||
| </address> | ||||
| </author> | </author> | |||
| <author fullname="Julian Reschke" | <author initials="J." surname="Reschke" fullname="Julian Resch | |||
| initials="J." | ke" role="editor"> | |||
| surname="Reschke" | <organization>greenbytes GmbH</organization> | |||
| role="editor"> | ||||
| <organization abbrev="greenbytes">greenbytes GmbH</organiza | ||||
| tion> | ||||
| <address> | ||||
| <postal> | ||||
| <postalLine>Hafenweg 16</postalLine> | ||||
| <postalLine>48155 Münster</postalLine> | ||||
| <postalLine>Germany</postalLine> | ||||
| </postal> | ||||
| <email>julian.reschke@greenbytes.de</email> | ||||
| <uri>https://greenbytes.de/tech/webdav/</uri> | ||||
| </address> | ||||
| </author> | </author> | |||
| <date year="2021" month="September" day="10"/> | <date month="June" year="2022"/> | |||
| </front> | </front> | |||
| <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-messa | <seriesInfo name="STD" value="99"/> | |||
| ging-19"/> | <seriesInfo name="RFC" value="9112"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC9112"/> | ||||
| </reference> | </reference> | |||
| <reference anchor="Err1912" | <reference anchor="Err1912" | |||
| target="https://www.rfc-editor.org/errata/eid1912" | target="https://www.rfc-editor.org/errata/eid1912" | |||
| quote-title="false"> | quote-title="false"> | |||
| <front> | <front> | |||
| <title>Erratum ID 1912, RFC 2978</title> | <title>Erratum ID 1912</title> | |||
| <author> | <author> | |||
| <organization>RFC Errata</organization> | <organization>RFC Errata</organization> | |||
| </author> | </author> | |||
| <date/> | <date/> | |||
| </front> | </front> | |||
| <refcontent>RFC 2978</refcontent> | ||||
| </reference> | </reference> | |||
| <reference anchor="Err5433" | <reference anchor="Err5433" | |||
| target="https://www.rfc-editor.org/errata/eid5433" | target="https://www.rfc-editor.org/errata/eid5433" | |||
| quote-title="false"> | quote-title="false"> | |||
| <front> | <front> | |||
| <title>Erratum ID 5433, RFC 2978</title> | <title>Erratum ID 5433</title> | |||
| <author> | <author> | |||
| <organization>RFC Errata</organization> | <organization>RFC Errata</organization> | |||
| </author> | </author> | |||
| <date/> | <date/> | |||
| </front> | </front> | |||
| <refcontent>RFC 2978</refcontent> | ||||
| </reference> | </reference> | |||
| <reference anchor="BREACH" | <reference anchor="BREACH" | |||
| target="http://breachattack.com/resources/BREACH%20-%20SS L,%20gone%20in%2030%20seconds.pdf"> | target="http://breachattack.com/resources/BREACH%20-%20SS L,%20gone%20in%2030%20seconds.pdf"> | |||
| <front> | <front> | |||
| <title>BREACH: Reviving the CRIME Attack</title> | <title>BREACH: Reviving the CRIME Attack</title> | |||
| <author initials="Y." surname="Gluck" fullname="Yoel Gluck"/> | <author initials="Y." surname="Gluck" fullname="Yoel Gluck"/> | |||
| <author initials="N." surname="Harris" fullname="Neal Harris"/ > | <author initials="N." surname="Harris" fullname="Neal Harris"/ > | |||
| <author initials="A." surname="Prado" fullname="Angelo Prado"/ > | <author initials="A." surname="Prado" fullname="Angelo Prado"/ > | |||
| <date year="2013" month="July"/> | <date year="2013" month="July"/> | |||
| </front> | </front> | |||
| </reference> | </reference> | |||
| <reference anchor="Bujlow"> | <reference anchor="Bujlow"> | |||
| <front> | <front> | |||
| <title>A Survey on Web Tracking: Mechanisms, Implications, and Defenses</title> | <title>A Survey on Web Tracking: Mechanisms, Implications, and Defenses</title> | |||
| <author initials="T." surname="Bujlow" fullname="Tomasz Bujlow "/> | <author initials="T." surname="Bujlow" fullname="Tomasz Bujlow "/> | |||
| <author initials="V." | <author initials="V." | |||
| surname="Carela-Espanol" | surname="Carela-Español" | |||
| fullname="Valentin Carela-Espanol"/> | fullname="Valentin Carela-Español"/> | |||
| <author initials="J." surname="Sole-Pareta" fullname="Josep So | <author initials="J." surname="Solé-Pareta" fullname="Josep So | |||
| le-Pareta"/> | lé-Pareta"/> | |||
| <author initials="P." surname="Barlet-Ros" fullname="Pere Barl et-Ros"/> | <author initials="P." surname="Barlet-Ros" fullname="Pere Barl et-Ros"/> | |||
| <date year="2017" month="August"/> | <date year="2017" month="August"/> | |||
| </front> | </front> | |||
| <seriesInfo name="DOI" value="10.1109/JPROC.2016.2637878"/> | <seriesInfo name="DOI" value="10.1109/JPROC.2016.2637878"/> | |||
| <seriesInfo name="Proceedings of the IEEE" value="105(8)"/> | <refcontent>In Proceedings of the IEEE 105(8)</refcontent> | |||
| </reference> | </reference> | |||
| <reference anchor="Georgiev"> | <reference anchor="Georgiev"> | |||
| <front> | <front> | |||
| <title>The Most Dangerous Code in the World: Validating SSL Ce rtificates in Non-browser Software</title> | <title>The Most Dangerous Code in the World: Validating SSL Ce rtificates in Non-Browser Software</title> | |||
| <author initials="M." surname="Georgiev" fullname="Martin Geor giev"/> | <author initials="M." surname="Georgiev" fullname="Martin Geor giev"/> | |||
| <author initials="S." surname="Iyengar" fullname="Subodh Iyeng ar"/> | <author initials="S." surname="Iyengar" fullname="Subodh Iyeng ar"/> | |||
| <author initials="S." surname="Jana" fullname="Suman Jana"/> | <author initials="S." surname="Jana" fullname="Suman Jana"/> | |||
| <author initials="R." surname="Anubhai" fullname="Rishita Anub hai"/> | <author initials="R." surname="Anubhai" fullname="Rishita Anub hai"/> | |||
| <author initials="D." surname="Boneh" fullname="Dan Boneh"/> | <author initials="D." surname="Boneh" fullname="Dan Boneh"/> | |||
| <author initials="V." surname="Shmatikov" fullname="Vitaly Shm atikov"/> | <author initials="V." surname="Shmatikov" fullname="Vitaly Shm atikov"/> | |||
| <date year="2012" month="October"/> | <date year="2012" month="October"/> | |||
| </front> | </front> | |||
| <seriesInfo name="DOI" value="10.1145/2382196.2382204"/> | <seriesInfo name="DOI" value="10.1145/2382196.2382204"/> | |||
| <refcontent>In Proceedings of the 2012 ACM Conference on Computer and Communications Security (CCS '12), pp. 38-49</refcontent> | <refcontent>In Proceedings of the 2012 ACM Conference on Computer and Communications Security (CCS '12), pp. 38-49</refcontent> | |||
| skipping to change at line 12142 ¶ | skipping to change at line 11961 ¶ | |||
| <date year="1998"/> | <date year="1998"/> | |||
| </front> | </front> | |||
| <seriesInfo name="ISO/IEC" value="8859-1:1998"/> | <seriesInfo name="ISO/IEC" value="8859-1:1998"/> | |||
| </reference> | </reference> | |||
| <reference anchor="Kri2001" target="http://arxiv.org/abs/cs.SE/01050 18"> | <reference anchor="Kri2001" target="http://arxiv.org/abs/cs.SE/01050 18"> | |||
| <front> | <front> | |||
| <title>HTTP Cookies: Standards, Privacy, and Politics</title> | <title>HTTP Cookies: Standards, Privacy, and Politics</title> | |||
| <author initials="D." surname="Kristol" fullname="David M. Kri stol"/> | <author initials="D." surname="Kristol" fullname="David M. Kri stol"/> | |||
| <date year="2001" month="November"/> | <date year="2001" month="November"/> | |||
| </front> | </front> | |||
| <seriesInfo name="ACM Transactions on Internet Technology" value= "1(2)"/> | <refcontent>ACM Transactions on Internet Technology 1(2)</refcont ent> | |||
| </reference> | </reference> | |||
| <reference anchor="Sniffing" target="https://mimesniff.spec.whatwg.o rg"> | <reference anchor="Sniffing" target="https://mimesniff.spec.whatwg.o rg"> | |||
| <front> | <front> | |||
| <title>MIME Sniffing</title> | <title>MIME Sniffing</title> | |||
| <author> | <author> | |||
| <organization>WHATWG</organization> | <organization>WHATWG</organization> | |||
| </author> | </author> | |||
| <date/> | <date/> | |||
| </front> | </front> | |||
| </reference> | </reference> | |||
| <reference anchor="REST" target="https://roy.gbiv.com/pubs/dissertat ion/top.htm"> | <reference anchor="REST" target="https://roy.gbiv.com/pubs/dissertat ion/top.htm"> | |||
| <front> | <front> | |||
| <title>Architectural Styles and the Design of Network-based So ftware Architectures</title> | <title>Architectural Styles and the Design of Network-based So ftware Architectures</title> | |||
| <author initials="R.T." surname="Fielding" fullname="Roy T. Fi elding"/> | <author initials="R.T." surname="Fielding" fullname="Roy T. Fi elding"/> | |||
| <date month="September" year="2000"/> | <date month="September" year="2000"/> | |||
| </front> | </front> | |||
| <refcontent>Doctoral Dissertation, University of California, Irvi ne</refcontent> | <refcontent>Doctoral Dissertation, University of California, Irvi ne</refcontent> | |||
| </reference> | </reference> | |||
| <reference anchor="RFC1919" target="https://www.rfc-editor.org/info/ | ||||
| rfc1919"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1919. | |||
| <front> | xml"/> | |||
| <title>Classical versus Transparent IP Proxies</title> | ||||
| <author initials="M." surname="Chatel" fullname="Marc Chatel"/ | ||||
| > | ||||
| <date year="1996" month="March"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="1919"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC1919"/> | ||||
| </reference> | ||||
| <reference anchor="HTTP10" target="https://www.rfc-editor.org/info/r fc1945"> | <reference anchor="HTTP10" target="https://www.rfc-editor.org/info/r fc1945"> | |||
| <front> | <front> | |||
| <title abbrev="HTTP/1.0">Hypertext Transfer Protocol -- HTTP/1 .0</title> | <title abbrev="HTTP/1.0">Hypertext Transfer Protocol -- HTTP/1 .0</title> | |||
| <author initials="T." surname="Berners-Lee" fullname="Tim Bern | <author initials="T." surname="Berners-Lee" fullname="T. Berne | |||
| ers-Lee"/> | rs-Lee"/> | |||
| <author initials="R.T." surname="Fielding" fullname="Roy T. Fi | <author initials="R." surname="Fielding" fullname="R. Fielding | |||
| elding"/> | "/> | |||
| <author initials="H.F." surname="Nielsen" fullname="Henrik Fry | <author initials="H." surname="Frystyk" fullname="H. Frystyk"/ | |||
| styk Nielsen"/> | > | |||
| <date month="May" year="1996"/> | <date month="May" year="1996"/> | |||
| </front> | </front> | |||
| <seriesInfo name="RFC" value="1945"/> | <seriesInfo name="RFC" value="1945"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC1945"/> | <seriesInfo name="DOI" value="10.17487/RFC1945"/> | |||
| </reference> | </reference> | |||
| <reference anchor="RFC2047" target="https://www.rfc-editor.org/info/ | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2047. | |||
| rfc2047"> | xml"/> | |||
| <front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2068. | |||
| <title abbrev="Message Header Extensions">MIME (Multipurpose I | xml"/> | |||
| nternet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Tex | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2145. | |||
| t</title> | xml"/> | |||
| <author initials="K." surname="Moore" fullname="Keith Moore"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2295. | |||
| <date month="November" year="1996"/> | xml"/> | |||
| </front> | ||||
| <seriesInfo name="RFC" value="2047"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2047"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2068" target="https://www.rfc-editor.org/info/ | ||||
| rfc2068"> | ||||
| <front> | ||||
| <title>Hypertext Transfer Protocol -- HTTP/1.1</title> | ||||
| <author initials="R." surname="Fielding" fullname="Roy T. Fiel | ||||
| ding"/> | ||||
| <author initials="J." surname="Gettys" fullname="Jim Gettys"/> | ||||
| <author initials="J." surname="Mogul" fullname="Jeffrey C. Mog | ||||
| ul"/> | ||||
| <author initials="H." surname="Nielsen" fullname="Henrik Fryst | ||||
| yk Nielsen"/> | ||||
| <author initials="T." surname="Berners-Lee" fullname="Tim Bern | ||||
| ers-Lee"/> | ||||
| <date month="January" year="1997"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2068"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2068"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2145" target="https://www.rfc-editor.org/info/ | ||||
| rfc2145"> | ||||
| <front> | ||||
| <title abbrev="HTTP Version Numbers">Use and Interpretation of | ||||
| HTTP Version Numbers</title> | ||||
| <author initials="J.C." surname="Mogul" fullname="Jeffrey C. M | ||||
| ogul"/> | ||||
| <author initials="R.T." surname="Fielding" fullname="Roy T. Fi | ||||
| elding"/> | ||||
| <author initials="J." surname="Gettys" fullname="Jim Gettys"/> | ||||
| <author initials="H.F." surname="Nielsen" fullname="Henrik Fry | ||||
| styk Nielsen"/> | ||||
| <date month="May" year="1997"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2145"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2145"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2295" target="https://www.rfc-editor.org/info/ | ||||
| rfc2295"> | ||||
| <front> | ||||
| <title abbrev="HTTP Content Negotiation">Transparent Content N | ||||
| egotiation in HTTP</title> | ||||
| <author initials="K." surname="Holtman" fullname="Koen Holtman | ||||
| "/> | ||||
| <author initials="A.H." surname="Mutz" fullname="Andrew H. Mut | ||||
| z"/> | ||||
| <date year="1998" month="March"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2295"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2295"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2324" target="https://www.rfc-editor.org/info/ rfc2324"> | <reference anchor="RFC2324" target="https://www.rfc-editor.org/info/ rfc2324"> | |||
| <front> | <front> | |||
| <title>Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)</ti tle> | <title>Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)</ti tle> | |||
| <author initials="L." surname="Masinter" fullname="L. Masinter "/> | <author initials="L." surname="Masinter" fullname="L. Masinter "/> | |||
| <date year="1998" month="April" day="1"/> | <date year="1998" month="April" day="1"/> | |||
| </front> | </front> | |||
| <seriesInfo name="RFC" value="2324"/> | <seriesInfo name="RFC" value="2324"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC2324"/> | <seriesInfo name="DOI" value="10.17487/RFC2324"/> | |||
| </reference> | </reference> | |||
| <reference anchor="RFC2557" target="https://www.rfc-editor.org/info/ | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2557. | |||
| rfc2557"> | xml"/> | |||
| <front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2616. | |||
| <title abbrev="MIME Encapsulation of Aggregate Documents">MIME | xml"/> | |||
| Encapsulation of Aggregate Documents, such as HTML (MHTML)</title> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2617. | |||
| <author initials="F." surname="Palme" fullname="Jacob Palme"/> | xml"/> | |||
| <author initials="A." surname="Hopmann" fullname="Alex Hopmann | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2774. | |||
| "/> | xml"/> | |||
| <author initials="N." surname="Shelness" fullname="Nick Shelne | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2818. | |||
| ss"/> | xml"/> | |||
| <author initials="E." surname="Stefferud" fullname="Einar Stef | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2978. | |||
| ferud"/> | xml"/> | |||
| <date year="1999" month="March"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3040. | |||
| </front> | xml"/> | |||
| <seriesInfo name="RFC" value="2557"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4033. | |||
| <seriesInfo name="DOI" value="10.17487/RFC2557"/> | xml"/> | |||
| </reference> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4559. | |||
| <reference anchor="RFC2616" target="https://www.rfc-editor.org/info/ | xml"/> | |||
| rfc2616"> | ||||
| <front> | ||||
| <title>Hypertext Transfer Protocol -- HTTP/1.1</title> | ||||
| <author initials="R." surname="Fielding" fullname="R. Fielding | ||||
| "/> | ||||
| <author initials="J." surname="Gettys" fullname="J. Gettys"/> | ||||
| <author initials="J." surname="Mogul" fullname="J. Mogul"/> | ||||
| <author initials="H." surname="Frystyk" fullname="H. Frystyk"/ | ||||
| > | ||||
| <author initials="L." surname="Masinter" fullname="L. Masinter | ||||
| "/> | ||||
| <author initials="P." surname="Leach" fullname="P. Leach"/> | ||||
| <author initials="T." surname="Berners-Lee" fullname="T. Berne | ||||
| rs-Lee"/> | ||||
| <date month="June" year="1999"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2616"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2616"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2617" target="https://www.rfc-editor.org/info/ | ||||
| rfc2617"> | ||||
| <front> | ||||
| <title abbrev="HTTP Authentication">HTTP Authentication: Basic | ||||
| and Digest Access Authentication</title> | ||||
| <author initials="J." surname="Franks" fullname="John Franks"/ | ||||
| > | ||||
| <author initials="P.M." | ||||
| surname="Hallam-Baker" | ||||
| fullname="Phillip M. Hallam-Baker"/> | ||||
| <author initials="J.L." surname="Hostetler" fullname="Jeffery | ||||
| L. Hostetler"/> | ||||
| <author initials="S.D." surname="Lawrence" fullname="Scott D. | ||||
| Lawrence"/> | ||||
| <author initials="P.J." surname="Leach" fullname="Paul J. Leac | ||||
| h"/> | ||||
| <author initials="A." surname="Luotonen" fullname="Ari Luotone | ||||
| n"/> | ||||
| <author initials="L." surname="Stewart" fullname="Lawrence C. | ||||
| Stewart"/> | ||||
| <date month="June" year="1999"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2617"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2617"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2774" target="https://www.rfc-editor.org/info/ | ||||
| rfc2774"> | ||||
| <front> | ||||
| <title>An HTTP Extension Framework</title> | ||||
| <author initials="H." surname="Frystyk" fullname="H. Frystyk"/ | ||||
| > | ||||
| <author initials="P." surname="Leach" fullname="Paul J. Leach" | ||||
| /> | ||||
| <author initials="S." surname="Lawrence" fullname="Scott Lawre | ||||
| nce"/> | ||||
| <date year="2000" month="February"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2774"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2774"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2818" target="https://www.rfc-editor.org/info/ | ||||
| rfc2818"> | ||||
| <front> | ||||
| <title>HTTP Over TLS</title> | ||||
| <author initials="E." surname="Rescorla" fullname="Eric Rescor | ||||
| la"/> | ||||
| <date year="2000" month="May"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2818"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2818"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2978" target="https://www.rfc-editor.org/info/ | ||||
| rfc2978"> | ||||
| <front> | ||||
| <title>IANA Charset Registration Procedures</title> | ||||
| <author initials="N." surname="Freed" fullname="N. Freed"/> | ||||
| <author initials="J." surname="Postel" fullname="J. Postel"/> | ||||
| <date year="2000" month="October"/> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="19"/> | ||||
| <seriesInfo name="RFC" value="2978"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2978"/> | ||||
| </reference> | ||||
| <reference anchor="RFC3040" target="https://www.rfc-editor.org/info/ | ||||
| rfc3040"> | ||||
| <front> | ||||
| <title>Internet Web Replication and Caching Taxonomy</title> | ||||
| <author initials="I." surname="Cooper" fullname="I. Cooper"/> | ||||
| <author initials="I." surname="Melve" fullname="I. Melve"/> | ||||
| <author initials="G." surname="Tomlinson" fullname="G. Tomlins | ||||
| on"/> | ||||
| <date year="2001" month="January"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="3040"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC3040"/> | ||||
| </reference> | ||||
| <reference anchor="RFC4033" target="https://www.rfc-editor.org/info/ | ||||
| rfc4033"> | ||||
| <front> | ||||
| <title>DNS Security Introduction and Requirements</title> | ||||
| <author initials="R." surname="Arends" fullname="R. Arends"/> | ||||
| <author initials="R." surname="Austein" fullname="R. Austein"/ | ||||
| > | ||||
| <author initials="M." surname="Larson" fullname="M. Larson"/> | ||||
| <author initials="D." surname="Massey" fullname="D. Massey"/> | ||||
| <author initials="S." surname="Rose" fullname="S. Rose"/> | ||||
| <date year="2005" month="March"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="4033"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC4033"/> | ||||
| </reference> | ||||
| <reference anchor="RFC4559" target="https://www.rfc-editor.org/info/ | ||||
| rfc4559"> | ||||
| <front> | ||||
| <title>SPNEGO-based Kerberos and NTLM HTTP Authentication in M | ||||
| icrosoft Windows</title> | ||||
| <author initials="K." surname="Jaganathan" fullname="K. Jagana | ||||
| than"/> | ||||
| <author initials="L." surname="Zhu" fullname="L. Zhu"/> | ||||
| <author initials="J." surname="Brezak" fullname="J. Brezak"/> | ||||
| <date year="2006" month="June"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="4559"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC4559"/> | ||||
| </reference> | ||||
| <reference anchor="WEBDAV" target="https://www.rfc-editor.org/info/r fc4918"> | <reference anchor="WEBDAV" target="https://www.rfc-editor.org/info/r fc4918"> | |||
| <front> | <front> | |||
| <title>HTTP Extensions for Web Distributed Authoring and Versi oning (WebDAV)</title> | <title>HTTP Extensions for Web Distributed Authoring and Versi oning (WebDAV)</title> | |||
| <author initials="L.M." | <author initials="L." surname="Dusseault" fullname="Lisa Dusse | |||
| surname="Dusseault" | ault" role="editor"/> | |||
| fullname="Lisa Dusseault" | ||||
| role="editor"/> | ||||
| <date month="June" year="2007"/> | <date month="June" year="2007"/> | |||
| </front> | </front> | |||
| <seriesInfo name="RFC" value="4918"/> | <seriesInfo name="RFC" value="4918"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC4918"/> | <seriesInfo name="DOI" value="10.17487/RFC4918"/> | |||
| </reference> | </reference> | |||
| <reference anchor="HTTP2" target="https://www.rfc-editor.org/info/rf c7540"> | <reference anchor="HTTP2" target="https://www.rfc-editor.org/info/rf c9113"> | |||
| <front> | <front> | |||
| <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title> | <title>HTTP/2</title> | |||
| <author initials="M." surname="Belshe" fullname="M. Belshe"/> | ||||
| <author initials="R." surname="Peon" fullname="R. Peon"/> | ||||
| <author initials="M." | <author initials="M." | |||
| surname="Thomson" | surname="Thomson" | |||
| fullname="M. Thomson" | fullname="Martin Thomson" | |||
| role="editor"/> | role="editor"/> | |||
| <date year="2015" month="May"/> | <author initials="C." | |||
| surname="Benfield" | ||||
| fullname="Cory Benfield" | ||||
| role="editor"/> | ||||
| <date year="2022" month="June"/> | ||||
| </front> | </front> | |||
| <seriesInfo name="RFC" value="7540"/> | <seriesInfo name="RFC" value="9113"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC7540"/> | <seriesInfo name="DOI" value="10.17487/RFC9113"/> | |||
| </reference> | </reference> | |||
| <reference anchor="HPACK" target="https://www.rfc-editor.org/info/rf c7541"> | <reference anchor="HPACK" target="https://www.rfc-editor.org/info/rf c7541"> | |||
| <front> | <front> | |||
| <title>HPACK: Header Compression for HTTP/2</title> | <title>HPACK: Header Compression for HTTP/2</title> | |||
| <author initials="R." surname="Peon" fullname="R. Peon"/> | <author initials="R." surname="Peon" fullname="R. Peon"/> | |||
| <author initials="H." surname="Ruellan" fullname="H. Ruellan"/ > | <author initials="H." surname="Ruellan" fullname="H. Ruellan"/ > | |||
| <date year="2015" month="May"/> | <date year="2015" month="May"/> | |||
| </front> | </front> | |||
| <seriesInfo name="RFC" value="7541"/> | <seriesInfo name="RFC" value="7541"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC7541"/> | <seriesInfo name="DOI" value="10.17487/RFC7541"/> | |||
| </reference> | </reference> | |||
| <reference anchor="RFC5905" target="https://www.rfc-editor.org/info/ | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5905. | |||
| rfc5905"> | xml"/> | |||
| <front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6454. | |||
| <title>Network Time Protocol Version 4: Protocol and Algorithm | xml"/> | |||
| s Specification</title> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7230. | |||
| <author initials="D." surname="Mills" fullname="David L. Mills | xml"/> | |||
| "/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7231. | |||
| <author initials="J." | xml"/> | |||
| surname="Martin" | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7232. | |||
| fullname="Jim Martin" | xml"/> | |||
| role="editor"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7233. | |||
| <author initials="J." surname="Burbank" fullname="Jack Burbank | xml"/> | |||
| "/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7234. | |||
| <author initials="W." surname="Kasch" fullname="William Kasch" | xml"/> | |||
| /> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7235. | |||
| <date year="2010" month="June"/> | xml"/> | |||
| </front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7578. | |||
| <seriesInfo name="RFC" value="5905"/> | xml"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC5905"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7615. | |||
| </reference> | xml"/> | |||
| <reference anchor="RFC6454" target="https://www.rfc-editor.org/info/ | ||||
| rfc6454"> | ||||
| <front> | ||||
| <title>The Web Origin Concept</title> | ||||
| <author initials="A." surname="Barth" fullname="A. Barth"/> | ||||
| <date year="2011" month="December"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6454"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6454"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7230" target="https://www.rfc-editor.org/info/ | ||||
| rfc7230"> | ||||
| <front> | ||||
| <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax | ||||
| and Routing</title> | ||||
| <author initials="R." | ||||
| surname="Fielding" | ||||
| fullname="Roy T. Fielding" | ||||
| role="editor"/> | ||||
| <author initials="J. F." | ||||
| surname="Reschke" | ||||
| fullname="Julian F. Reschke" | ||||
| role="editor"/> | ||||
| <date month="June" year="2014"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7230"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7230"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7231" target="https://www.rfc-editor.org/info/ | ||||
| rfc7231"> | ||||
| <front> | ||||
| <title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and C | ||||
| ontent</title> | ||||
| <author initials="R." | ||||
| surname="Fielding" | ||||
| fullname="Roy T. Fielding" | ||||
| role="editor"/> | ||||
| <author initials="J. F." | ||||
| surname="Reschke" | ||||
| fullname="Julian F. Reschke" | ||||
| role="editor"/> | ||||
| <date month="June" year="2014"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7231"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7231"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7232" target="https://www.rfc-editor.org/info/ | ||||
| rfc7232"> | ||||
| <front> | ||||
| <title>Hypertext Transfer Protocol (HTTP/1.1): Conditional Req | ||||
| uests</title> | ||||
| <author fullname="Roy T. Fielding" | ||||
| initials="R." | ||||
| role="editor" | ||||
| surname="Fielding"/> | ||||
| <author fullname="Julian F. Reschke" | ||||
| initials="J. F." | ||||
| role="editor" | ||||
| surname="Reschke"/> | ||||
| <date month="June" year="2014"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7232"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7232"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7233" target="https://www.rfc-editor.org/info/ | ||||
| rfc7233"> | ||||
| <front> | ||||
| <title>Hypertext Transfer Protocol (HTTP/1.1): Range Requests< | ||||
| /title> | ||||
| <author initials="R." | ||||
| surname="Fielding" | ||||
| fullname="Roy T. Fielding" | ||||
| role="editor"/> | ||||
| <author initials="Y." | ||||
| surname="Lafon" | ||||
| fullname="Yves Lafon" | ||||
| role="editor"/> | ||||
| <author initials="J. F." | ||||
| surname="Reschke" | ||||
| fullname="Julian F. Reschke" | ||||
| role="editor"/> | ||||
| <date month="June" year="2014"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7233"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7233"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7234" target="https://www.rfc-editor.org/info/ | ||||
| rfc7234"> | ||||
| <front> | ||||
| <title>Hypertext Transfer Protocol (HTTP): Caching</title> | ||||
| <author initials="R." | ||||
| surname="Fielding" | ||||
| fullname="Roy T. Fielding" | ||||
| role="editor"/> | ||||
| <author initials="M." | ||||
| surname="Nottingham" | ||||
| fullname="Mark Nottingham" | ||||
| role="editor"/> | ||||
| <author initials="J. F." | ||||
| surname="Reschke" | ||||
| fullname="Julian F. Reschke" | ||||
| role="editor"/> | ||||
| <date month="June" year="2014"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7234"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7234"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7235" target="https://www.rfc-editor.org/info/ | ||||
| rfc7235"> | ||||
| <front> | ||||
| <title>Hypertext Transfer Protocol (HTTP/1.1): Authentication< | ||||
| /title> | ||||
| <author initials="R." | ||||
| surname="Fielding" | ||||
| fullname="Roy T. Fielding" | ||||
| role="editor"/> | ||||
| <author initials="J. F." | ||||
| surname="Reschke" | ||||
| fullname="Julian F. Reschke" | ||||
| role="editor"/> | ||||
| <date month="June" year="2014"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7235"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7235"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7578" target="https://www.rfc-editor.org/info/ | ||||
| rfc7578"> | ||||
| <front> | ||||
| <title>Returning Values from Forms: multipart/form-data</title | ||||
| > | ||||
| <author initials="L." surname="Masinter" fullname="Larry Masin | ||||
| ter"/> | ||||
| <date year="2015" month="July"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7578"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7578"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7615" target="https://www.rfc-editor.org/info/ | ||||
| rfc7615"> | ||||
| <front> | ||||
| <title>HTTP Authentication-Info and Proxy-Authentication-Info | ||||
| Response Header Fields</title> | ||||
| <author initials="J. F." surname="Reschke" fullname="Julian F. | ||||
| Reschke"/> | ||||
| <date year="2015" month="September"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7615"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7615"/> | ||||
| </reference> | ||||
| <reference anchor="ALTSVC" target="https://www.rfc-editor.org/info/r fc7838"> | <reference anchor="ALTSVC" target="https://www.rfc-editor.org/info/r fc7838"> | |||
| <front> | <front> | |||
| <title>HTTP Alternative Services</title> | <title>HTTP Alternative Services</title> | |||
| <author initials="M." surname="Nottingham" fullname="M. Nottin gham"/> | <author initials="M." surname="Nottingham" fullname="M. Nottin gham"/> | |||
| <author initials="P." surname="McManus" fullname="P. McManus"/ > | <author initials="P." surname="McManus" fullname="P. McManus"/ > | |||
| <author initials="J." surname="Reschke" fullname="J. Reschke"/ > | <author initials="J." surname="Reschke" fullname="J. Reschke"/ > | |||
| <date year="2016" month="April"/> | <date year="2016" month="April"/> | |||
| </front> | </front> | |||
| <seriesInfo name="RFC" value="7838"/> | <seriesInfo name="RFC" value="7838"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC7838"/> | <seriesInfo name="DOI" value="10.17487/RFC7838"/> | |||
| </reference> | </reference> | |||
| <reference anchor="RFC8336" target="https://www.rfc-editor.org/info/ | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8336. | |||
| rfc8336"> | xml"/> | |||
| <front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8615. | |||
| <title>The ORIGIN HTTP/2 Frame</title> | xml"/> | |||
| <author initials="M." surname="Nottingham" fullname="M. Nottin | ||||
| gham"/> | <reference anchor='HTTP3' target='https://www.rfc-editor.org/info/rf | |||
| <author initials="E." surname="Nygren" fullname="E. Nygren"/> | c9114'> | |||
| <date year="2018" month="March"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8336"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8336"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8615" target="https://www.rfc-editor.org/info/ | ||||
| rfc8615"> | ||||
| <front> | ||||
| <title>Well-Known Uniform Resource Identifiers (URIs)</title> | ||||
| <author initials="M." surname="Nottingham" fullname="M. Nottin | ||||
| gham"/> | ||||
| <date year="2019" month="May"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8615"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8615"/> | ||||
| </reference> | ||||
| <reference anchor="HTTP3"> | ||||
| <front> | ||||
| <title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title> | ||||
| <author initials="M." surname="Bishop" fullname="Mike Bishop"/ | ||||
| > | ||||
| <date year="2021" month="February" day="2"/> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-quic-http-34" | ||||
| /> | ||||
| </reference> | ||||
| <reference anchor="BCP13" target="https://www.rfc-editor.org/info/bc | ||||
| p13"> | ||||
| <front> | ||||
| <title>Media Type Specifications and Registration Procedures</ | ||||
| title> | ||||
| <author initials="N." surname="Freed" fullname="Ned Freed"/> | ||||
| <author initials="J." surname="Klensin" fullname="John C. Klen | ||||
| sin"/> | ||||
| <author initials="T." surname="Hansen" fullname="Tony Hansen"/ | ||||
| > | ||||
| <date year="2013" month="January"/> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="13"/> | ||||
| <seriesInfo name="RFC" value="6838"/> | ||||
| </reference> | ||||
| <reference anchor="BCP35" target="https://www.rfc-editor.org/info/bc | ||||
| p35"> | ||||
| <front> | <front> | |||
| <title>Guidelines and Registration Procedures for URI Schemes< | <title>HTTP/3</title> | |||
| /title> | <author initials="M." | |||
| <author initials="D." | surname="Bishop" | |||
| surname="Thaler" | fullname="Mike Bishop" | |||
| fullname="Dave Thaler" | ||||
| role="editor"/> | role="editor"/> | |||
| <author initials="T." surname="Hansen" fullname="Tony Hansen"/ | <date year="2022" month="June"/> | |||
| > | ||||
| <author initials="T." surname="Hardie" fullname="Ted Hardie"/> | ||||
| <date year="2015" month="June"/> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="35"/> | ||||
| <seriesInfo name="RFC" value="7595"/> | ||||
| </reference> | ||||
| <reference anchor="BCP178" target="https://www.rfc-editor.org/info/b | ||||
| cp178"> | ||||
| <front> | ||||
| <title>Deprecating the "X-" Prefix and Similar Constructs in A | ||||
| pplication Protocols</title> | ||||
| <author initials="P." surname="Saint-Andre" fullname="Peter Sa | ||||
| int-Andre"/> | ||||
| <author initials="D." surname="Crocker" fullname="Dave Crocker | ||||
| "/> | ||||
| <author initials="M." surname="Nottingham" fullname="Mark Nott | ||||
| ingham"/> | ||||
| <date year="2012" month="June"/> | ||||
| </front> | </front> | |||
| <seriesInfo name="BCP" value="178"/> | <seriesInfo name="RFC" value="9114"/> | |||
| <seriesInfo name="RFC" value="6648"/> | <seriesInfo name="DOI" value="10.17487/RFC9114"/> | |||
| </reference> | </reference> | |||
| <referencegroup anchor="BCP13" target="https://www.rfc-editor.org/in | ||||
| fo/bcp13"> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/refe | ||||
| rence.RFC.4289.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/refe | ||||
| rence.RFC.6838.xml"/> | ||||
| </referencegroup> | ||||
| <referencegroup anchor="BCP35" target="https://www.rfc-editor.org/in | ||||
| fo/bcp35"> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/refe | ||||
| rence.RFC.7595.xml"/> | ||||
| </referencegroup> | ||||
| <referencegroup anchor="BCP178" target="https://www.rfc-editor.org/i | ||||
| nfo/bcp178"> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/refe | ||||
| rence.RFC.6648.xml"/> | ||||
| </referencegroup> | ||||
| <reference anchor="RFC3864" target="https://www.rfc-editor.org/info/ rfc3864"> | <reference anchor="RFC3864" target="https://www.rfc-editor.org/info/ rfc3864"> | |||
| <front> | <front> | |||
| <title>Registration Procedures for Message Header Fields</titl e> | <title>Registration Procedures for Message Header Fields</titl e> | |||
| <author initials="G." surname="Klyne" fullname="G. Klyne"/> | <author initials="G." surname="Klyne" fullname="G. Klyne"/> | |||
| <author initials="M." surname="Nottingham" fullname="M. Nottin gham"/> | <author initials="M." surname="Nottingham" fullname="M. Nottin gham"/> | |||
| <author initials="J." surname="Mogul" fullname="J. Mogul"/> | <author initials="J." surname="Mogul" fullname="J. Mogul"/> | |||
| <date year="2004" month="September"/> | <date year="2004" month="September"/> | |||
| </front> | </front> | |||
| <seriesInfo name="BCP" value="90"/> | <seriesInfo name="BCP" value="90"/> | |||
| <seriesInfo name="RFC" value="3864"/> | <seriesInfo name="RFC" value="3864"/> | |||
| skipping to change at line 12641 ¶ | skipping to change at line 12141 ¶ | |||
| </reference> | </reference> | |||
| <reference anchor="COOKIE" target="https://www.rfc-editor.org/info/r fc6265"> | <reference anchor="COOKIE" target="https://www.rfc-editor.org/info/r fc6265"> | |||
| <front> | <front> | |||
| <title>HTTP State Management Mechanism</title> | <title>HTTP State Management Mechanism</title> | |||
| <author initials="A." surname="Barth" fullname="Adam Barth"/> | <author initials="A." surname="Barth" fullname="Adam Barth"/> | |||
| <date year="2011" month="April"/> | <date year="2011" month="April"/> | |||
| </front> | </front> | |||
| <seriesInfo name="RFC" value="6265"/> | <seriesInfo name="RFC" value="6265"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC6265"/> | <seriesInfo name="DOI" value="10.17487/RFC6265"/> | |||
| </reference> | </reference> | |||
| <reference anchor="RFC6585" target="https://www.rfc-editor.org/info/ | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6585. | |||
| rfc6585"> | xml"/> | |||
| <front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7538. | |||
| <title>Additional HTTP Status Codes</title> | xml"/> | |||
| <author initials="M." surname="Nottingham" fullname="M. Nottin | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7540. | |||
| gham"/> | xml"/> | |||
| <author initials="R." surname="Fielding" fullname="R. Fielding | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7616. | |||
| "/> | xml"/> | |||
| <date year="2012" month="April"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7617. | |||
| </front> | xml"/> | |||
| <seriesInfo name="RFC" value="6585"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7694. | |||
| <seriesInfo name="DOI" value="10.17487/RFC6585"/> | xml"/> | |||
| </reference> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8126. | |||
| <reference anchor="RFC7538" target="https://www.rfc-editor.org/info/ | xml"/> | |||
| rfc7538"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8187. | |||
| <front> | xml"/> | |||
| <title>The Hypertext Transfer Protocol Status Code 308 (Perman | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8246. | |||
| ent Redirect)</title> | xml"/> | |||
| <author initials="J. F." surname="Reschke" fullname="Julian F. | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8288. | |||
| Reschke"/> | xml"/> | |||
| <date month="April" year="2015"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8941. | |||
| </front> | xml"/> | |||
| <seriesInfo name="RFC" value="7538"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7538"/> | <reference anchor="OWASP" target="https://www.owasp.org/" quote-titl | |||
| </reference> | e="false"> | |||
| <reference anchor="RFC7616" target="https://www.rfc-editor.org/info/ | ||||
| rfc7616"> | ||||
| <front> | ||||
| <title>HTTP Digest Access Authentication</title> | ||||
| <author initials="R." | ||||
| surname="Shekh-Yusef" | ||||
| fullname="R. Shekh-Yusef" | ||||
| role="editor"/> | ||||
| <author initials="D." surname="Ahrens" fullname="D. Ahrens"/> | ||||
| <author initials="S." surname="Bremer" fullname="S. Bremer"/> | ||||
| <date year="2015" month="September"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7616"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7616"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7617" target="https://www.rfc-editor.org/info/ | ||||
| rfc7617"> | ||||
| <front> | ||||
| <title>The 'Basic' HTTP Authentication Scheme</title> | ||||
| <author initials="J. F." surname="Reschke" fullname="Julian F. | ||||
| Reschke"/> | ||||
| <date year="2015" month="September"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7617"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7617"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7694" target="https://www.rfc-editor.org/info/ | ||||
| rfc7694"> | ||||
| <front> | ||||
| <title>Hypertext Transfer Protocol (HTTP) Client-Initiated Con | ||||
| tent-Encoding</title> | ||||
| <author initials="J. F." surname="Reschke" fullname="Julian F. | ||||
| Reschke"/> | ||||
| <date year="2015" month="November"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7694"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7694"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/ | ||||
| rfc8126"> | ||||
| <front> | ||||
| <title>Guidelines for Writing an IANA Considerations Section i | ||||
| n RFCs</title> | ||||
| <author initials="M." surname="Cotton" fullname="M. Cotton"/> | ||||
| <author initials="B." surname="Leiba" fullname="B. Leiba"/> | ||||
| <author initials="T." surname="Narten" fullname="T. Narten"/> | ||||
| <date year="2017" month="June"/> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="26"/> | ||||
| <seriesInfo name="RFC" value="8126"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8126"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8187" target="https://www.rfc-editor.org/info/ | ||||
| rfc8187"> | ||||
| <front> | ||||
| <title>Indicating Character Encoding and Language for HTTP Hea | ||||
| der Field Parameters</title> | ||||
| <author initials="J. F." surname="Reschke" fullname="Julian F. | ||||
| Reschke"/> | ||||
| <date month="September" year="2017"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8187"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8187"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8246" target="https://www.rfc-editor.org/info/ | ||||
| rfc8246"> | ||||
| <front> | ||||
| <title>HTTP Immutable Responses</title> | ||||
| <author initials="P." surname="McManus" fullname="P. McManus"/ | ||||
| > | ||||
| <date year="2017" month="September"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8246"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8246"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8288" target="https://www.rfc-editor.org/info/ | ||||
| rfc8288"> | ||||
| <front> | ||||
| <title>Web Linking</title> | ||||
| <author initials="M." surname="Nottingham" fullname="M. Nottin | ||||
| gham"/> | ||||
| <date year="2017" month="October"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8288"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8288"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8941" target="https://www.rfc-editor.org/info/ | ||||
| rfc8941"> | ||||
| <front> | ||||
| <title>Structured Field Values for HTTP</title> | ||||
| <author initials="M." surname="Nottingham" fullname="Mark Nott | ||||
| ingham"/> | ||||
| <author initials="P-H." surname="Kamp" fullname="Poul-Henning | ||||
| Kamp"/> | ||||
| <date month="February" year="2021"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8941"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8941"/> | ||||
| </reference> | ||||
| <reference anchor="OWASP" target="https://www.owasp.org/"> | ||||
| <front> | <front> | |||
| <title abbrev="OWASP">A Guide to Building Secure Web Applicati | <title>The Open Web Application Security Project</title> | |||
| ons and Web Services</title> | <author> | |||
| <author role="editor" | <organization/> | |||
| initials="A." | </author> | |||
| surname="van der Stock" | <date/> | |||
| fullname="Andrew van der Stock"/> | ||||
| <date month="July" day="27" year="2005"/> | ||||
| </front> | </front> | |||
| <seriesInfo name="The Open Web Application Security Project (OWAS P)" value="2.0.1"/> | ||||
| </reference> | </reference> | |||
| </references> | </references> | |||
| </references> | </references> | |||
| <section anchor="collected.abnf" title="Collected ABNF"> | <section anchor="collected.abnf" title="Collected ABNF"> | |||
| <t>In the collected ABNF below, list rules are expanded as per <xref ta | <t>In the collected ABNF below, list rules are expanded per <xref targe | |||
| rget="abnf.extension"/>.</t> | t="abnf.extension"/>.</t> | |||
| <sourcecode type="abnf" name="draft-ietf-httpbis-semantics-latest.parse | <sourcecode type="abnf" name="rfc9110.parsed-abnf"><![CDATA[Accept = [ | |||
| d-abnf"><![CDATA[Accept = [ ( media-range [ weight ] ) *( OWS "," OWS ( media-ra | ( media-range [ weight ] ) *( OWS "," OWS ( media-range [ | |||
| nge [ | ||||
| weight ] ) ) ] | weight ] ) ) ] | |||
| Accept-Charset = [ ( ( token / "*" ) [ weight ] ) *( OWS "," OWS ( ( | Accept-Charset = [ ( ( token / "*" ) [ weight ] ) *( OWS "," OWS ( ( | |||
| token / "*" ) [ weight ] ) ) ] | token / "*" ) [ weight ] ) ) ] | |||
| Accept-Encoding = [ ( codings [ weight ] ) *( OWS "," OWS ( codings [ | Accept-Encoding = [ ( codings [ weight ] ) *( OWS "," OWS ( codings [ | |||
| weight ] ) ) ] | weight ] ) ) ] | |||
| Accept-Language = [ ( language-range [ weight ] ) *( OWS "," OWS ( | Accept-Language = [ ( language-range [ weight ] ) *( OWS "," OWS ( | |||
| language-range [ weight ] ) ) ] | language-range [ weight ] ) ) ] | |||
| Accept-Ranges = acceptable-ranges | Accept-Ranges = acceptable-ranges | |||
| Allow = [ method *( OWS "," OWS method ) ] | Allow = [ method *( OWS "," OWS method ) ] | |||
| Authentication-Info = [ auth-param *( OWS "," OWS auth-param ) ] | Authentication-Info = [ auth-param *( OWS "," OWS auth-param ) ] | |||
| skipping to change at line 12982 ¶ | skipping to change at line 12392 ¶ | |||
| unsatisfied-range = "*/" complete-length | unsatisfied-range = "*/" complete-length | |||
| uri-host = <host, see [URI], Section 3.2.2> | uri-host = <host, see [URI], Section 3.2.2> | |||
| weak = %x57.2F ; W/ | weak = %x57.2F ; W/ | |||
| weight = OWS ";" OWS "q=" qvalue | weight = OWS ";" OWS "q=" qvalue | |||
| year = 4DIGIT | year = 4DIGIT | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| </section> | </section> | |||
| <section anchor="changes.from.previous.rfcs" title="Changes from previous RFCs"> | <section anchor="changes.from.previous.rfcs" title="Changes from Previous RFCs"> | |||
| <section anchor="changes.from.rfc.2818" title="Changes from RFC 2818"> | <section anchor="changes.from.rfc.2818" title="Changes from RFC 2818"> | |||
| <t> | <t> | |||
| None. | None. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="changes.from.rfc.7230" title="Changes from RFC 7230"> | <section anchor="changes.from.rfc.7230" title="Changes from RFC 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, and | conformance criteria, protocol versioning, URIs, message routing, and | |||
| 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 permission to | The requirement on semantic conformance has been replaced with permission to | |||
| ignore/workaround 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 servers has | The description of an origin and authoritative access to origin servers has | |||
| been extended for both "http" and "https" URIs to account for alternative | been extended for both "http" and "https" URIs to account for alternative | |||
| services and secured connections that are not necessarily based on TCP. | services and secured connections that are not necessarily based on TCP. | |||
| (<xref target="http.uri"/>, <xref target="https.uri"/>, | (Sections <xref target="http.uri" format="counter"/>, <xref target="https.uri | |||
| <xref target="origin"/>, <xref target="routing.origin"/>) | " format="counter"/>, | |||
| <xref target="origin" format="counter"/>, and <xref target="routing.origin" f | ||||
| ormat="counter"/>) | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Explicit requirements have been added to check the target URI scheme's semant ics | Explicit requirements have been added to check the target URI scheme's semant ics | |||
| 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 are combined | "Field value" now refers to the value after multiple field lines are combined | |||
| with commas — by far the most common use. To refer to a single header | with commas -- by far the most common use. To refer to a single header | |||
| 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 encoding. | Trailer field semantics now transcend the specifics of chunked transfer codin | |||
| Use of trailer fields has been further limited to only allow generation | g. | |||
| as a trailer field when the sender knows the field defines that usage and | The use of trailer fields has been further limited to allow generation | |||
| to only allow merging into the header section if the recipient knows the | as a trailer field only when the sender knows the field defines that usage an | |||
| d | ||||
| to allow merging into the header section only if the recipient knows 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 to either store the trailer | other cases, implementations are encouraged either to store the trailer | |||
| fields separately or 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> | |||
| Made 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 by origin servers explicit, to align with proxy handling. | header field by origin servers has been made explicit to align with proxy han | |||
| dling. | ||||
| (<xref target="field.host"/>) | (<xref target="field.host"/>) | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The grammar definition for the Via field's "received-by" was | The grammar definition for the Via field's "received-by" was | |||
| expanded in 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 charaters for a host name in | change removed comma from the allowed set of characters for a host name in | |||
| received-by. | received-by. | |||
| (<xref target="field.via"/>) | (<xref target="field.via"/>) | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="changes.from.rfc.7231" title="Changes from RFC 7231"> | <section anchor="changes.from.rfc.7231" title="Changes from RFC 7231"> | |||
| <t> | <t> | |||
| Minimum URI lengths to be supported by implementations are now recommended. | Minimum URI lengths to be supported by implementations are now recommended. | |||
| (<xref target="resources"/>) | (<xref target="uri.references"/>) | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Clarified that CR and NUL in field values are to be rejected or | The following have been clarified: CR and NUL in field values are to be rejec | |||
| mapped to SP and that leading and trailing whitespace need to be | ted or | |||
| mapped to SP, and leading and trailing whitespace needs 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 define the | An abstract data type for HTTP messages has been introduced to define the | |||
| skipping to change at line 13085 ¶ | skipping to change at line 12495 ¶ | |||
| The terms "payload" and "payload body" have been replaced with "content", to better | The terms "payload" and "payload body" have been replaced with "content", to better | |||
| align with its usage elsewhere (e.g., in field names) and to avoid confusion | align with its usage elsewhere (e.g., in field names) and to avoid confusion | |||
| with frame payloads in HTTP/2 and HTTP/3. | with frame payloads in HTTP/2 and HTTP/3. | |||
| (<xref target="content"/>) | (<xref target="content"/>) | |||
| </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 implementation | Restrictions on client retries have been loosened to reflect implementation | |||
| behavior. | behavior. | |||
| (<xref target="idempotent.methods"/>) | (<xref target="idempotent.methods"/>) | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Clarified that request bodies on GET, HEAD, and DELETE are not interoperable. | The fact that request bodies on GET, HEAD, and DELETE are not interoperable h | |||
| (<xref target="GET"/>, <xref target="HEAD"/>, <xref target="DELETE"/>) | as been clarified. | |||
| (Sections <xref target="GET" format="counter"/>, <xref target="HEAD" format=" | ||||
| counter"/>, and <xref target="DELETE" format="counter"/>) | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Allowed use of the <xref target="field.content-range" format="none">Content-R | The use of the <xref target="field.content-range" format="none">Content-Range | |||
| ange</xref> header field | </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 allowe | |||
| d. | ||||
| (<xref target="PUT"/>) | (<xref target="PUT"/>) | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Removed a superfluous requirement about setting <xref target="field.content-l | A superfluous requirement about setting <xref target="field.content-length" f | |||
| ength" format="none">Content-Length</xref> | ormat="none">Content-Length</xref> | |||
| 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> | |||
| Removed normative requirement to use the "message/http" media type in | The normative requirement to use the "message/http" media type in | |||
| TRACE responses. | TRACE responses has been removed. | |||
| (<xref target="TRACE"/>) | (<xref target="TRACE"/>) | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Restore list-based grammar for <xref target="field.expect" format="none">Expe ct</xref> for compatibility with | List-based grammar for <xref target="field.expect" format="none">Expect</xref > has been restored for compatibility with | |||
| RFC 2616. | RFC 2616. | |||
| (<xref target="field.expect"/>) | (<xref target="field.expect"/>) | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Allow <xref target="field.accept" format="none">Accept</xref> and <xref targe t="field.accept-encoding" format="none">Accept-Encoding</xref> in response | <xref target="field.accept" format="none">Accept</xref> and <xref target="fie ld.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 is now 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</xre f> header field when other | The semantics of "*" in the <xref target="field.vary" format="none">Vary</xre f> 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> | |||
| Use of "Accept-Ranges" is not restricted to origin servers. | The use of the Accept-Ranges field is not restricted to origin servers. | |||
| (<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> | |||
| Added status code 308 (previously defined in <xref target="RFC7538"/>) | Status code 308 (previously defined in <xref target="RFC7538"/>) | |||
| so that it's defined closer to status codes 301, 302, and 307. | has been added so that it's defined closer to status codes 301, 302, and 307. | |||
| (<xref target="status.308"/>) | (<xref target="status.308"/>) | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Added status code 421 (previously defined in | Status code 421 (previously defined in | |||
| <xref target="HTTP2" section="9.1.2"/>) because of its general | <xref target="RFC7540" section="9.1.2"/>) has been added because of its gener | |||
| applicability. 421 is no longer defined as heuristically cacheable, since | al | |||
| 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> | |||
| Added status code 422 (previously defined in | Status code 422 (previously defined in | |||
| <xref target="WEBDAV" section="11.2"/>) because of its general | <xref target="WEBDAV" section="11.2"/>) has been added because of its general | |||
| applicability. | applicability. | |||
| (<xref target="status.422"/>) | (<xref target="status.422"/>) | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="changes.from.rfc.7232" title="Changes from RFC 7232"> | <section anchor="changes.from.rfc.7232" title="Changes from RFC 7232"> | |||
| <t> | <t> | |||
| Previous revisions of HTTP imposed an arbitrary 60-second limit on the | Previous revisions of HTTP imposed an arbitrary 60-second limit on the | |||
| determination of whether Last-Modified was a strong validator to guard | determination of whether Last-Modified was a strong validator to guard | |||
| against the possibility that the Date and Last-Modified values are | against the possibility that the Date and Last-Modified values are | |||
| generated from different clocks or at somewhat different times during the | generated from different clocks or at somewhat different times during the | |||
| 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> | |||
| <t> | <t> | |||
| Removed edge case requirement on If-Match and If-Unmodified-Since that a | An edge-case requirement on If-Match and If-Unmodified-Since | |||
| validator not be sent in a 2xx response when validation fails and the server | has been removed that required a validator not to be sent in a 2xx | |||
| decides that the same change request has already been applied. | response if validation fails because the change request has already | |||
| (<xref target="field.if-match"/> and | been applied. | |||
| <xref target="field.if-unmodified-since"/>) | (Sections <xref target="field.if-match" format="counter"/> and | |||
| <xref target="field.if-unmodified-since" format="counter"/>) | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Clarified that If-Unmodified-Since doesn't apply to a resource without a | The fact that If-Unmodified-Since does not apply to a resource without a | |||
| concept of modification time. | 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 processed | Preconditions can now be evaluated before the request content is processed | |||
| rather than waiting until the response would otherwise be successful. | rather than waiting until the response would otherwise be successful. | |||
| (<xref target="evaluation"/>) | (<xref target="evaluation"/>) | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="changes.from.rfc.7233" title="Changes from RFC 7233"> | <section anchor="changes.from.rfc.7233" title="Changes from RFC 7233"> | |||
| <t> | <t> | |||
| skipping to change at line 13231 ¶ | skipping to change at line 12642 ¶ | |||
| None. | None. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="changes.from.rfc.7615" title="Changes from RFC 7615"> | <section anchor="changes.from.rfc.7615" title="Changes from RFC 7615"> | |||
| <t> | <t> | |||
| None. | None. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="changes.from.rfc.7694" title="Changes from RFC 7694"> | <section anchor="changes.from.rfc.7694" title="Changes from RFC 7694"> | |||
| <t> | <t> | |||
| This specification includes the extension defined in <xref target="RFC7694"/> , | This specification includes the extension defined in <xref target="RFC7694"/> | |||
| but leaves out examples and deployment considerations. | but leaves out examples and deployment considerations. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="change.log" title="Change Log"> | ||||
| <t>This section is to be removed before publishing as an RFC.</t> | ||||
| <section anchor="changes.since.publication.as.rfc" | ||||
| title="Between RFC723x and draft 00"> | ||||
| <t> | ||||
| The changes were purely editorial: | ||||
| </t> | ||||
| <ul> | ||||
| <li>Change boilerplate and abstract to indicate the "draft" statu | ||||
| s, and update references to ancestor specifications.</li> | ||||
| <li>Remove version "1.1" from document title, indicating that thi | ||||
| s specification applies to all HTTP versions.</li> | ||||
| <li>Adjust historical notes.</li> | ||||
| <li>Update links to sibling specifications.</li> | ||||
| <li>Replace sections listing changes from RFC 2616 by new empty s | ||||
| ections referring to RFC 723x.</li> | ||||
| <li>Remove acknowledgements specific to RFC 723x.</li> | ||||
| <li>Move "Acknowledgements" to the very end and make them unnumbe | ||||
| red.</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.00" title="Since draft-ietf-httpbis-sema | ||||
| ntics-00"> | ||||
| <t> | ||||
| The changes in this draft are editorial, with respect to HTTP as a whole, | ||||
| to merge core HTTP semantics into this document: | ||||
| </t> | ||||
| <ul> | ||||
| <li>Merged introduction, architecture, conformance, and ABNF exte | ||||
| nsions from | ||||
| <xref target="RFC7230" format="none">RFC 7230 (Messaging)</xref>.</li> | ||||
| <li>Rearranged architecture to extract conformance, http(s) schem | ||||
| es, and | ||||
| protocol versioning into a separate major section.</li> | ||||
| <li>Moved discussion of MIME differences to <xref target="HTTP11" | ||||
| /> since | ||||
| that is primarily concerned with transforming 1.1 messages.</li> | ||||
| <li>Merged entire content of <xref target="RFC7232" format="none" | ||||
| >RFC 7232 (Conditional Requests)</xref>.</li> | ||||
| <li>Merged entire content of <xref target="RFC7233" format="none" | ||||
| >RFC 7233 (Range Requests)</xref>.</li> | ||||
| <li>Merged entire content of <xref target="RFC7235" format="none" | ||||
| >RFC 7235 (Auth Framework)</xref>.</li> | ||||
| <li>Moved all extensibility tips, registration procedures, and re | ||||
| gistry | ||||
| tables from the IANA considerations to normative sections, reducing the | ||||
| IANA considerations to just instructions that will be removed prior to | ||||
| publication as an RFC.</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.01" title="Since draft-ietf-httpbis-sema | ||||
| ntics-01"> | ||||
| <ul> | ||||
| <li>Improve [Welch] citation (<eref target="https://github.com/ht | ||||
| tpwg/http-core/issues/63" brackets="angle"/>)</li> | ||||
| <li>Remove HTTP/1.1-ism about Range Requests (<eref target="https | ||||
| ://github.com/httpwg/http-core/issues/71" brackets="angle"/>)</li> | ||||
| <li>Cite RFC 8126 instead of RFC 5226 (<eref target="https://gith | ||||
| ub.com/httpwg/http-core/issues/75" brackets="angle"/>)</li> | ||||
| <li>Cite RFC 7538 instead of RFC 7238 (<eref target="https://gith | ||||
| ub.com/httpwg/http-core/issues/76" brackets="angle"/>)</li> | ||||
| <li>Cite RFC 8288 instead of RFC 5988 (<eref target="https://gith | ||||
| ub.com/httpwg/http-core/issues/77" brackets="angle"/>)</li> | ||||
| <li>Cite RFC 8187 instead of RFC 5987 (<eref target="https://gith | ||||
| ub.com/httpwg/http-core/issues/78" brackets="angle"/>)</li> | ||||
| <li>Cite RFC 7578 instead of RFC 2388 (<eref target="https://gith | ||||
| ub.com/httpwg/http-core/issues/79" brackets="angle"/>)</li> | ||||
| <li>Cite RFC 7595 instead of RFC 4395 (<eref target="https://gith | ||||
| ub.com/httpwg/http-core/issues/80" brackets="angle"/>)</li> | ||||
| <li>improve ABNF readability for qdtext (<eref target="https://gi | ||||
| thub.com/httpwg/http-core/issues/81" brackets="angle"/>, <eref target="https://w | ||||
| ww.rfc-editor.org/errata/eid4891" brackets="angle"/>)</li> | ||||
| <li>Clarify "resource" vs "representation" in definition of statu | ||||
| s code 416 (<eref target="https://github.com/httpwg/http-core/issues/83" bracket | ||||
| s="angle"/>, <eref target="https://www.rfc-editor.org/errata/eid4664" brackets=" | ||||
| angle"/>)</li> | ||||
| <li>Resolved erratum 4072, no change needed here (<eref target="h | ||||
| ttps://github.com/httpwg/http-core/issues/84" brackets="angle"/>, <eref target=" | ||||
| https://www.rfc-editor.org/errata/eid4072" brackets="angle"/>)</li> | ||||
| <li>Clarify DELETE status code suggestions (<eref target="https:/ | ||||
| /github.com/httpwg/http-core/issues/85" brackets="angle"/>, <eref target="https: | ||||
| //www.rfc-editor.org/errata/eid4436" brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.content-range"/>, fix ABNF for "other- | ||||
| range-resp" to use VCHAR instead of CHAR (<eref target="https://github.com/httpw | ||||
| g/http-core/issues/86" brackets="angle"/>, <eref target="https://www.rfc-editor. | ||||
| org/errata/eid4707" brackets="angle"/>)</li> | ||||
| <li>Resolved erratum 5162, no change needed here (<eref target="h | ||||
| ttps://github.com/httpwg/http-core/issues/89" brackets="angle"/>, <eref target=" | ||||
| https://www.rfc-editor.org/errata/eid5162" brackets="angle"/>)</li> | ||||
| <li>Replace "response code" with "response status code" and "stat | ||||
| us-code" (the ABNF production name from the HTTP/1.1 message format) by "status | ||||
| code" (<eref target="https://github.com/httpwg/http-core/issues/94" brackets="an | ||||
| gle"/>, <eref target="https://www.rfc-editor.org/errata/eid4050" brackets="angle | ||||
| "/>)</li> | ||||
| <li>Added a missing word in <xref target="status.3xx"/> (<eref ta | ||||
| rget="https://github.com/httpwg/http-core/issues/98" brackets="angle"/>, <eref t | ||||
| arget="https://www.rfc-editor.org/errata/eid4452" brackets="angle"/>)</li> | ||||
| <li>In <xref target="abnf.extension"/>, fixed an example that had | ||||
| trailing whitespace where it shouldn't (<eref target="https://github.com/httpwg | ||||
| /http-core/issues/104" | ||||
| brackets="angle"/>, <eref target="https://www.rfc-editor | ||||
| .org/errata/eid4169" brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.206"/>, remove words that were potent | ||||
| ially misleading with respect to the relation to the requested ranges (<eref tar | ||||
| get="https://github.com/httpwg/http-core/issues/102" | ||||
| brackets="angle"/>, <eref target="https://www.rfc-editor | ||||
| .org/errata/eid4358" brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.02" title="Since draft-ietf-httpbis-sema | ||||
| ntics-02"> | ||||
| <ul> | ||||
| <li>Included (Proxy-)Auth-Info header field definition from RFC 7 | ||||
| 615 (<eref target="https://github.com/httpwg/http-core/issues/9" brackets="angle | ||||
| "/>)</li> | ||||
| <li>In <xref target="POST"/>, clarify POST caching (<eref target= | ||||
| "https://github.com/httpwg/http-core/issues/17" brackets="angle"/>)</li> | ||||
| <li>Add <xref target="status.418"/> to reserve the 418 status cod | ||||
| e (<eref target="https://github.com/httpwg/http-core/issues/43" brackets="angle" | ||||
| />)</li> | ||||
| <li>In <xref target="messages"/> and <xref target="field.expect"/ | ||||
| >, clarified when a response can be sent (<eref target="https://github.com/httpw | ||||
| g/http-core/issues/82" brackets="angle"/>)</li> | ||||
| <li>In <xref target="charset"/>, explain the difference between t | ||||
| he "token" production, the RFC 2978 ABNF for charset names, and the actual regis | ||||
| tration practice (<eref target="https://github.com/httpwg/http-core/issues/100" | ||||
| brackets="angle"/>, <eref target="https://www.rfc-editor | ||||
| .org/errata/eid4689" brackets="angle"/>)</li> | ||||
| <li>In <xref target="resources"/>, removed the fragment component | ||||
| in the URI scheme definitions as per <xref target="URI" section="4.3"/>, | ||||
| furthermore moved fragment discussion into a separate section | ||||
| (<eref target="https://github.com/httpwg/http-core/issues/103" | ||||
| brackets="angle"/>, <eref target="https://www.rfc-editor | ||||
| .org/errata/eid4251" brackets="angle"/>, <eref target="https://www.rfc-editor.or | ||||
| g/errata/eid4252" brackets="angle"/>)</li> | ||||
| <li>In <xref target="protocol.version"/>, add language about mino | ||||
| r HTTP version number defaulting (<eref target="https://github.com/httpwg/http-c | ||||
| ore/issues/115" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Added <xref target="status.422"/> for status code 422, previo | ||||
| usly defined in <xref target="WEBDAV" section="11.2"/> (<eref target="https://gi | ||||
| thub.com/httpwg/http-core/issues/123" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.416"/>, fixed prose about byte range | ||||
| comparison (<eref target="https://github.com/httpwg/http-core/issues/135" | ||||
| brackets="angle"/>, <eref target="https://www.rfc-edito | ||||
| r.org/errata/eid5474" brackets="angle"/>)</li> | ||||
| <li>In <xref target="messages"/>, explain that request/response c | ||||
| orrelation is version specific (<eref target="https://github.com/httpwg/http-cor | ||||
| e/issues/145" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.03" title="Since draft-ietf-httpbis-sema | ||||
| ntics-03"> | ||||
| <ul> | ||||
| <li>In <xref target="status.308"/>, include status code 308 from | ||||
| RFC 7538 (<eref target="https://github.com/httpwg/http-core/issues/3" brackets=" | ||||
| angle"/>)</li> | ||||
| <li>In <xref target="media.type"/>, clarify that the charset para | ||||
| meter value is case-insensitive due to the definition in RFC 2046 (<eref target= | ||||
| "https://github.com/httpwg/http-core/issues/13" brackets="angle"/>)</li> | ||||
| <li>Define a separate registry for HTTP header field names (<eref | ||||
| target="https://github.com/httpwg/http-core/issues/42" brackets="angle"/>)</li> | ||||
| <li>In <xref target="proactive.negotiation"/>, refactor and clari | ||||
| fy description of wildcard ("*") handling (<eref target="https://github.com/http | ||||
| wg/http-core/issues/46" brackets="angle"/>)</li> | ||||
| <li>Deprecate Accept-Charset (<eref target="https://github.com/ht | ||||
| tpwg/http-core/issues/61" brackets="angle"/>)</li> | ||||
| <li>In <xref target="evaluation"/>, mention Cache-Control: immuta | ||||
| ble (<eref target="https://github.com/httpwg/http-core/issues/69" brackets="angl | ||||
| e"/>)</li> | ||||
| <li>In <xref target="fields.order"/>, clarify when header field c | ||||
| ombination is allowed (<eref target="https://github.com/httpwg/http-core/issues/ | ||||
| 74" brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.name.registration"/>, instruct IANA to | ||||
| mark Content-MD5 as obsolete (<eref target="https://github.com/httpwg/http-core | ||||
| /issues/93" brackets="angle"/>)</li> | ||||
| <li>Use RFC 7405 ABNF notation for case-sensitive string constant | ||||
| s (<eref target="https://github.com/httpwg/http-core/issues/133" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Rework <xref target="messages"/> to be more version-independe | ||||
| nt (<eref target="https://github.com/httpwg/http-core/issues/142" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="DELETE"/>, clarify that DELETE needs to be s | ||||
| uccessful to invalidate cache (<eref target="https://github.com/httpwg/http-core | ||||
| /issues/167" | ||||
| brackets="angle"/>, <eref target="https://www.rfc-editor | ||||
| .org/errata/eid5541" brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.04" title="Since draft-ietf-httpbis-sema | ||||
| ntics-04"> | ||||
| <ul> | ||||
| <li>In <xref target="fields.values"/>, fix field-content ABNF (<e | ||||
| ref target="https://github.com/httpwg/http-core/issues/19" brackets="angle"/>, < | ||||
| eref target="https://www.rfc-editor.org/errata/eid4189" brackets="angle"/>)</li> | ||||
| <li>Move <xref target="parameter"/> into its own section (<eref t | ||||
| arget="https://github.com/httpwg/http-core/issues/45" brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.content-type"/>, reference MIME Sniffi | ||||
| ng (<eref target="https://github.com/httpwg/http-core/issues/51" brackets="angle | ||||
| "/>)</li> | ||||
| <li>In <xref target="abnf.extension"/>, simplify the #rule mappin | ||||
| g for recipients (<eref target="https://github.com/httpwg/http-core/issues/164" | ||||
| brackets="angle"/>, <eref target="https://www.rfc-editor | ||||
| .org/errata/eid5257" brackets="angle"/>)</li> | ||||
| <li>In <xref target="OPTIONS"/>, remove misleading text about "ex | ||||
| tension" of HTTP is needed to define method content (<eref target="https://githu | ||||
| b.com/httpwg/http-core/issues/204" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Fix editorial issue in <xref target="representations"/> (<ere | ||||
| f target="https://github.com/httpwg/http-core/issues/223" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.422"/>, rephrase language not to use | ||||
| "entity" anymore, and also avoid lowercase "may" (<eref target="https://github.c | ||||
| om/httpwg/http-core/issues/224" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Move discussion of retries from <xref target="HTTP11"/> into | ||||
| <xref target="idempotent.methods"/> (<eref target="https://github.com/httpwg/htt | ||||
| p-core/issues/230" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.05" title="Since draft-ietf-httpbis-sema | ||||
| ntics-05"> | ||||
| <ul> | ||||
| <li>Moved transport-independent part of the description of traile | ||||
| rs into <xref target="trailer.fields"/> (<eref target="https://github.com/httpwg | ||||
| /http-core/issues/16" brackets="angle"/>)</li> | ||||
| <li>Loosen requirements on retries based upon implementation beha | ||||
| vior (<eref target="https://github.com/httpwg/http-core/issues/27" brackets="ang | ||||
| le"/>)</li> | ||||
| <li>In <xref target="port.reg"/>, update IANA port registry for T | ||||
| CP/UDP on ports 80 and 443 (<eref target="https://github.com/httpwg/http-core/is | ||||
| sues/36" brackets="angle"/>)</li> | ||||
| <li>In <xref target="considerations.for.new.field.values"/>, revi | ||||
| se guidelines for new header field names (<eref target="https://github.com/httpw | ||||
| g/http-core/issues/47" brackets="angle"/>)</li> | ||||
| <li>In <xref target="cacheable.methods"/>, remove concept of "cac | ||||
| heable methods" in favor of prose (<eref target="https://github.com/httpwg/http- | ||||
| core/issues/54" brackets="angle"/>, <eref target="https://www.rfc-editor.org/err | ||||
| ata/eid5300" brackets="angle"/>)</li> | ||||
| <li>In <xref target="establishing.authority"/>, mention that the | ||||
| concept of authority can be modified by protocol extensions (<eref target="https | ||||
| ://github.com/httpwg/http-core/issues/143" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Create new subsection on content in <xref target="content"/>, | ||||
| taken from portions of message body (<eref target="https://github.com/httpwg/ht | ||||
| tp-core/issues/159" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Moved definition of "Whitespace" into new container "Generic | ||||
| Syntax" (<eref target="https://github.com/httpwg/http-core/issues/162" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="resources"/>, recommend minimum URI size sup | ||||
| port for implementations (<eref target="https://github.com/httpwg/http-core/issu | ||||
| es/169" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="range.units"/>, refactored the range-unit an | ||||
| d ranges-specifier grammars (<eref target="https://github.com/httpwg/http-core/i | ||||
| ssues/196" | ||||
| brackets="angle"/>, <eref target="https://www.rfc-editor | ||||
| .org/errata/eid5620" brackets="angle"/>)</li> | ||||
| <li>In <xref target="GET"/>, caution against a request content mo | ||||
| re strongly (<eref target="https://github.com/httpwg/http-core/issues/202" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Reorganized text in <xref target="considerations.for.new.fiel | ||||
| d.values"/> (<eref target="https://github.com/httpwg/http-core/issues/214" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.403"/>, replace "authorize" with "ful | ||||
| fill" (<eref target="https://github.com/httpwg/http-core/issues/218" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="OPTIONS"/>, removed a misleading statement a | ||||
| bout Content-Length (<eref target="https://github.com/httpwg/http-core/issues/23 | ||||
| 5" | ||||
| brackets="angle"/>, <eref target="https://www.rfc-editor | ||||
| .org/errata/eid5806" brackets="angle"/>)</li> | ||||
| <li>In <xref target="establishing.authority"/>, add text from RFC | ||||
| 2818 (<eref target="https://github.com/httpwg/http-core/issues/236" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Changed "cacheable by default" to "heuristically cacheable" t | ||||
| hroughout (<eref target="https://github.com/httpwg/http-core/issues/242" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.06" title="Since draft-ietf-httpbis-sema | ||||
| ntics-06"> | ||||
| <ul> | ||||
| <li>In <xref target="field.via"/>, simplify received-by grammar ( | ||||
| and disallow comma character) (<eref target="https://github.com/httpwg/http-core | ||||
| /issues/24" brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.names"/>, give guidance on interopera | ||||
| ble field names (<eref target="https://github.com/httpwg/http-core/issues/30" br | ||||
| ackets="angle"/>)</li> | ||||
| <li>In <xref target="whitespace"/>, define the semantics and poss | ||||
| ible replacement of whitespace when it is known to occur (<eref target="https:// | ||||
| github.com/httpwg/http-core/issues/53" brackets="angle"/>, <eref target="https:/ | ||||
| /www.rfc-editor.org/errata/eid5163" brackets="angle"/>)</li> | ||||
| <li>In <xref target="header.fields"/>, introduce field terminolog | ||||
| y and distinguish between field line values and field values; use terminology co | ||||
| nsistently throughout (<eref target="https://github.com/httpwg/http-core/issues/ | ||||
| 111" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Moved #rule definition into <xref target="fields.values"/> an | ||||
| d whitespace into <xref target="notation"/> (<eref target="https://github.com/ht | ||||
| tpwg/http-core/issues/162" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="range.units"/>, explicitly call out range un | ||||
| it names as case-insensitive, and encourage registration (<eref target="https:// | ||||
| github.com/httpwg/http-core/issues/179" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="content.codings"/>, explicitly call out cont | ||||
| ent codings as case-insensitive, and encourage registration (<eref target="https | ||||
| ://github.com/httpwg/http-core/issues/179" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.names"/>, explicitly call out field n | ||||
| ames as case-insensitive (<eref target="https://github.com/httpwg/http-core/issu | ||||
| es/179" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="fingerprinting"/>, cite <xref target="Bujlow | ||||
| "/> (<eref target="https://github.com/httpwg/http-core/issues/185" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.codes"/>, formally define "final" and | ||||
| "interim" status codes (<eref target="https://github.com/httpwg/http-core/issue | ||||
| s/245" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="DELETE"/>, caution against a request content | ||||
| more strongly (<eref target="https://github.com/httpwg/http-core/issues/258" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.etag"/>, note that Etag can be used in | ||||
| trailers (<eref target="https://github.com/httpwg/http-core/issues/262" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.name.registration"/>, consider reserve | ||||
| d fields as well (<eref target="https://github.com/httpwg/http-core/issues/273" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="http.userinfo"/>, be more correct about what | ||||
| was deprecated by RFC 3986 (<eref target="https://github.com/httpwg/http-core/i | ||||
| ssues/278" | ||||
| brackets="angle"/>, <eref target="https://www.rfc-editor | ||||
| .org/errata/eid5964" brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.order"/>, recommend comma SP when com | ||||
| bining field lines (<eref target="https://github.com/httpwg/http-core/issues/148 | ||||
| " | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.host"/>, make explicit requirements on | ||||
| origin server to use authority from absolute-form when available (<eref target= | ||||
| "https://github.com/httpwg/http-core/issues/191" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="http.uri"/>, <xref target="https.uri"/>, <xr | ||||
| ef target="origin"/>, and <xref target="routing.origin"/>, refactored schemes to | ||||
| define origin and authoritative access to an origin server for both "http" and | ||||
| "https" URIs to account for alternative services and secured connections that ar | ||||
| e not necessarily based on TCP (<eref target="https://github.com/httpwg/http-cor | ||||
| e/issues/237" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="requirements.notation"/>, reference RFC 8174 | ||||
| as well (<eref target="https://github.com/httpwg/http-core/issues/303" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.07" title="Since draft-ietf-httpbis-sema | ||||
| ntics-07"> | ||||
| <ul> | ||||
| <li>In <xref target="field.range"/>, explicitly reference the def | ||||
| inition of representation data as including any content codings (<eref target="h | ||||
| ttps://github.com/httpwg/http-core/issues/11" brackets="angle"/>)</li> | ||||
| <li>Move TE: trailers from <xref target="HTTP11"/> into <xref tar | ||||
| get="trailers.limitations"/> (<eref target="https://github.com/httpwg/http-core/ | ||||
| issues/18" brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.content-length"/>, adjust requirements | ||||
| for handling multiple content-length values (<eref target="https://github.com/h | ||||
| ttpwg/http-core/issues/59" brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.if-match"/> and <xref target="field.if | ||||
| -none-match"/>, clarified condition evaluation (<eref target="https://github.com | ||||
| /httpwg/http-core/issues/72" brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.values"/>, remove concept of obs-fold | ||||
| , as that is HTTP/1-specific (<eref target="https://github.com/httpwg/http-core/ | ||||
| issues/116" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="content.negotiation"/>, introduce the concep | ||||
| t of request content negotiation (<xref target="request.content.negotiation"/>) | ||||
| and define for <xref target="field.accept-encoding" format="none">Accept-Encodin | ||||
| g</xref> (<eref target="https://github.com/httpwg/http-core/issues/119" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.205"/>, <xref target="status.408"/>, | ||||
| and <xref target="status.413"/>, remove HTTP/1-specific, connection-related requ | ||||
| irements (<eref target="https://github.com/httpwg/http-core/issues/144" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="CONNECT"/>, correct language about what is f | ||||
| orwarded (<eref target="https://github.com/httpwg/http-core/issues/170" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Throughout, replace "effective request URI", "request-target" | ||||
| and similar with "target URI" (<eref target="https://github.com/httpwg/http-cor | ||||
| e/issues/259" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="considerations.for.new.field.values"/> and < | ||||
| xref target="considerations.for.new.status.codes"/>, describe how extensions sho | ||||
| uld consider scope of applicability (<eref target="https://github.com/httpwg/htt | ||||
| p-core/issues/265" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="messages"/>, don't rely on the HTTP/1.1 Mess | ||||
| aging specification to define "message" (<eref target="https://github.com/httpwg | ||||
| /http-core/issues/311" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.content-location"/> and <xref target=" | ||||
| field.referer"/>, note that URL resolution is necessary (<eref target="https://g | ||||
| ithub.com/httpwg/http-core/issues/321" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="representations"/>, explicitly reference 206 | ||||
| as one of the status codes that provide representation data (<eref target="http | ||||
| s://github.com/httpwg/http-core/issues/325" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.if-unmodified-since"/>, refine require | ||||
| ments so that they don't apply to resources without a concept of modification ti | ||||
| me (<eref target="https://github.com/httpwg/http-core/issues/326" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.proxy-authenticate"/>, specify the sco | ||||
| pe as a request, not a target resource (<eref target="https://github.com/httpwg/ | ||||
| http-core/issues/331" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="messages"/>, introduce concept of "complete" | ||||
| messages (<eref target="https://github.com/httpwg/http-core/issues/334" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="target.resource"/>, <xref target="CONNECT"/> | ||||
| , and <xref target="OPTIONS"/>, refine use of "request target" (<eref target="ht | ||||
| tps://github.com/httpwg/http-core/issues/340" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Throughout, remove "status-line" and "request-line", as these | ||||
| are HTTP/1.1-specific (<eref target="https://github.com/httpwg/http-core/issues | ||||
| /361" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.08" title="Since draft-ietf-httpbis-sema | ||||
| ntics-08"> | ||||
| <ul> | ||||
| <li>In <xref target="status.416"/>, remove duplicate definition o | ||||
| f what makes a range satisfiable and refer instead to each range unit's definiti | ||||
| on (<eref target="https://github.com/httpwg/http-core/issues/12" brackets="angle | ||||
| "/>)</li> | ||||
| <li>In <xref target="byte.ranges"/> and <xref target="field.range | ||||
| "/>, clarify that a selected representation of zero length can only be satisfiab | ||||
| le as a suffix range and that a server can still ignore Range for that case (<er | ||||
| ef target="https://github.com/httpwg/http-core/issues/12" brackets="angle"/>)</l | ||||
| i> | ||||
| <li>In <xref target="field.accept"/> and <xref target="status.415 | ||||
| "/>, allow "Accept" as response field (<eref target="https://github.com/httpwg/h | ||||
| ttp-core/issues/48" brackets="angle"/>)</li> | ||||
| <li> | ||||
| <xref target="collected.abnf"/> now uses the sender variant of | ||||
| the "#" list expansion (<eref target="https://github.com/httpwg/http-core/issue | ||||
| s/192" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.vary"/>, make the field list-based eve | ||||
| n when "*" is present (<eref target="https://github.com/httpwg/http-core/issues/ | ||||
| 272" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.registry"/>, add optional "Comments" | ||||
| entry (<eref target="https://github.com/httpwg/http-core/issues/273" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.name.registration"/>, reserve "*" as f | ||||
| ield name (<eref target="https://github.com/httpwg/http-core/issues/274" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="method.registration"/>, reserve "*" as metho | ||||
| d name (<eref target="https://github.com/httpwg/http-core/issues/274" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.if-match"/> and <xref target="field.if | ||||
| -none-match"/>, state that multiple "*" is unlikely to be interoperable (<eref t | ||||
| arget="https://github.com/httpwg/http-core/issues/305" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.accept"/>, avoid use of obsolete media | ||||
| type parameter on text/html (<eref target="https://github.com/httpwg/http-core/ | ||||
| issues/375" | ||||
| brackets="angle"/>, <eref target="https://www.rfc-editor | ||||
| .org/errata/eid6149" brackets="angle"/>)</li> | ||||
| <li>Rephrase prose in <xref target="messages"/> to become version | ||||
| -agnostic (<eref target="https://github.com/httpwg/http-core/issues/372" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.values"/>, instruct recipients how to | ||||
| deal with control characters in field values (<eref target="https://github.com/ | ||||
| httpwg/http-core/issues/377" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.values"/>, update note about field AB | ||||
| NF (<eref target="https://github.com/httpwg/http-core/issues/380" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Add <xref target="extending"/> about Extending and Versioning | ||||
| HTTP (<eref target="https://github.com/httpwg/http-core/issues/384" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="overview.of.status.codes"/>, include status | ||||
| 308 in list of heuristically cacheable status codes (<eref target="https://githu | ||||
| b.com/httpwg/http-core/issues/385" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.content-encoding"/>, make it clearer t | ||||
| hat "identity" is not to be included (<eref target="https://github.com/httpwg/ht | ||||
| tp-core/issues/388" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.09" title="Since draft-ietf-httpbis-sema | ||||
| ntics-09"> | ||||
| <ul> | ||||
| <li>Switch to xml2rfc v3 mode for draft generation (<eref target= | ||||
| "https://github.com/httpwg/http-core/issues/394" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.10" title="Since draft-ietf-httpbis-sema | ||||
| ntics-10"> | ||||
| <ul> | ||||
| <li>In <xref target="compression.attacks"/>, mention compression | ||||
| attacks (<eref target="https://github.com/httpwg/http-core/issues/6" brackets="a | ||||
| ngle"/>)</li> | ||||
| <li>In <xref target="content.coding.registry"/>, advise to make n | ||||
| ew content codings self-descriptive (<eref target="https://github.com/httpwg/htt | ||||
| p-core/issues/21" brackets="angle"/>)</li> | ||||
| <li>In <xref target="parameter"/>, introduced the "parameters" AB | ||||
| NF rule, allowing empty parameters and trailing semicolons within media type, me | ||||
| dia range, and expectation (<eref target="https://github.com/httpwg/http-core/is | ||||
| sues/33" brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.3xx"/>, explain how to create a redir | ||||
| ected request (<eref target="https://github.com/httpwg/http-core/issues/38" brac | ||||
| kets="angle"/>)</li> | ||||
| <li>In <xref target="field.content-type"/>, defined error handlin | ||||
| g for multiple members (<eref target="https://github.com/httpwg/http-core/issues | ||||
| /39" brackets="angle"/>)</li> | ||||
| <li>In <xref target="introduction"/>, revise the introduction and | ||||
| introduce HTTP/2 and HTTP/3 (<eref target="https://github.com/httpwg/http-core/ | ||||
| issues/64" brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.content-length"/>, added a definition | ||||
| for <xref target="field.content-length" format="none">Content-Length</xref> that | ||||
| encompasses its various roles in describing message content or selected represe | ||||
| ntation length; in <xref target="status.206"/>, noted that <xref target="field.c | ||||
| ontent-length" format="none">Content-Length</xref> counts only the message conte | ||||
| nt (not the selected representation) and that the representation length is in ea | ||||
| ch <xref target="field.content-range" format="none">Content-Range</xref> (<eref | ||||
| target="https://github.com/httpwg/http-core/issues/118" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Noted that "WWW-Authenticate" with more than one value on a l | ||||
| ine is sometimes not interoperable <xref target="HTTP11"/> (<eref target="https: | ||||
| //github.com/httpwg/http-core/issues/136" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.if-match"/> and <xref target="field.if | ||||
| -unmodified-since"/>, removed requirement that a validator not be sent in a 2xx | ||||
| response when validation fails and the server decides that the same change reque | ||||
| st has already been applied (<eref target="https://github.com/httpwg/http-core/ | ||||
| issues/166" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Moved requirements specific to HTTP/1.1 from <xref target="fi | ||||
| eld.host"/> to <xref target="HTTP11"/> (<eref target="https://github.com/httpwg/ | ||||
| http-core/issues/182" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.values"/>, introduce the terms "singl | ||||
| eton field" and "list-based field" (also - in various places - discuss what to | ||||
| do when a singleton field is received as a list) (<eref target="https://github.c | ||||
| om/httpwg/http-core/issues/193" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.expect"/>, change the ABNF back to be | ||||
| a list of expectations, as defined in RFC 2616 (<eref target="https://github.com | ||||
| /httpwg/http-core/issues/203" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.trailer"/> (<xref target="field.traile | ||||
| r" format="none">Trailer</xref>), | ||||
| <xref target="field.via"/> (<xref target="field.via" format="none">Via< | ||||
| /xref>), | ||||
| <xref target="field.upgrade"/> (<xref target="field.upgrade" format="no | ||||
| ne">Upgrade</xref>), | ||||
| <xref target="field.connection"/> (<xref target="field.connection" form | ||||
| at="none">Connection</xref>), | ||||
| <xref target="field.content-encoding"/> (<xref target="field.content-en | ||||
| coding" format="none">Content-Encoding</xref>), | ||||
| <xref target="field.content-language"/> (<xref target="field.content-la | ||||
| nguage" format="none">Content-Language</xref>), | ||||
| <xref target="field.expect"/> (<xref target="field.expect" format="none | ||||
| ">Expect</xref>), | ||||
| <xref target="field.if-match"/> (<xref target="field.if-match" format=" | ||||
| none">If-Match</xref>), | ||||
| <xref target="field.if-none-match"/> (<xref target="field.if-none-match | ||||
| " format="none">If-None-Match</xref>), | ||||
| <xref target="field.accept-charset"/> (<xref target="field.accept-chars | ||||
| et" format="none">Accept-Charset</xref>), | ||||
| <xref target="field.accept-language"/> (<xref target="field.accept-lang | ||||
| uage" format="none">Accept-Language</xref>), | ||||
| <xref target="field.vary"/> (<xref target="field.vary" format="none">Va | ||||
| ry</xref>), | ||||
| <xref target="field.www-authenticate"/> (<xref target="field.www-authen | ||||
| ticate" format="none">WWW-Authenticate</xref>), and | ||||
| <xref target="field.proxy-authenticate"/> (<xref target="field.proxy-au | ||||
| thenticate" format="none">Proxy-Authenticate</xref>), | ||||
| adjust ABNF to allow empty lists (<eref target="https://github.com/http | ||||
| wg/http-core/issues/210" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="GET"/> and <xref target="sensitive.informati | ||||
| on.in.uris"/>, provide a more nuanced explanation of sensitive data in GET-based | ||||
| forms and describe workarounds (<eref target="https://github.com/httpwg/http-co | ||||
| re/issues/277" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="evaluation"/>, allow preconditions to be eva | ||||
| luated before the request content (if any) is processed (<eref target="https://g | ||||
| ithub.com/httpwg/http-core/issues/261" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="header.fields"/> and <xref target="trailers. | ||||
| processing"/>, allow for trailer fields in multiple trailer sections, depending | ||||
| on the HTTP version and framing in use, with processing being iterative as each | ||||
| section is received (<eref target="https://github.com/httpwg/http-core/issues/31 | ||||
| 3" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Moved definitions of "TE" and "Upgrade" from <xref target="HT | ||||
| TP11"/> (<eref target="https://github.com/httpwg/http-core/issues/392" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Moved 1.1-specific discussion of TLS to Messaging and rewrote | ||||
| <xref target="https.verify"/> to refer to RFC6125 (<eref target="https://github | ||||
| .com/httpwg/http-core/issues/404" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Moved definition of "Connection" from <xref target="HTTP11"/> | ||||
| (<eref target="https://github.com/httpwg/http-core/issues/407" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.11" title="Since draft-ietf-httpbis-sema | ||||
| ntics-11"> | ||||
| <ul> | ||||
| <li>The entire document has been reorganized, with no changes to | ||||
| content except editorial for the reorganization (<eref target="https://github.co | ||||
| m/httpwg/http-core/issues/368" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Move IANA Upgrade Token Registry instructions from <xref targ | ||||
| et="HTTP11"/> (<eref target="https://github.com/httpwg/http-core/issues/450" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.12" title="Since draft-ietf-httpbis-sema | ||||
| ntics-12"> | ||||
| <ul> | ||||
| <li>In <xref xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-n | ||||
| s#" | ||||
| xmlns:x="http://purl.org/net/xml2rfc/ext" | ||||
| target="acks">Appendix "Acknowledgements"</xref>, added | ||||
| acks for the work since 2014 (<eref target="https://github.com/httpwg/http-core/ | ||||
| issues/442" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.206"/>, specifically require that a c | ||||
| lient check the 206 response header fields to determine what ranges are enclosed | ||||
| , since it cannot assume they exactly match those requested (<eref target="https | ||||
| ://github.com/httpwg/http-core/issues/445" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.extensibility"/>, explain why new fie | ||||
| lds need to be backwards-compatible (<eref target="https://github.com/httpwg/htt | ||||
| p-core/issues/448" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.order"/>, constrain field combination | ||||
| to be within a section (<eref target="https://github.com/httpwg/http-core/issue | ||||
| s/454" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="http.date"/>, mention that caching relaxes d | ||||
| ate sensitivity (<eref target="https://github.com/httpwg/http-core/issues/473" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.name.registration"/>, moved "*" field | ||||
| registration into main table (<eref target="https://github.com/httpwg/http-core/ | ||||
| issues/476" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="history.and.evolution"/>, reference HTTP/0.9 | ||||
| (<eref target="https://github.com/httpwg/http-core/issues/497" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="PUT"/>, clarify handling of unrecognized fie | ||||
| lds (<eref target="https://github.com/httpwg/http-core/issues/502" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.1xx"/>, align language about bodies a | ||||
| nd trailers with 204 and 304 (<eref target="https://github.com/httpwg/http-core/ | ||||
| issues/503" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Moved table of content codings into <xref target="content.cod | ||||
| ing.registration"/>, moved table of range units into <xref target="range.unit.re | ||||
| gistration"/> (<eref target="https://github.com/httpwg/http-core/issues/506" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="message.abstraction"/>, add an abstract data | ||||
| type for message to help define semantics without being dependent on the specif | ||||
| ic structure of HTTP/1.1 (<eref target="https://github.com/httpwg/http-core/issu | ||||
| es/557" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="lastmod.comparison"/>, relax arbitrary 60-se | ||||
| cond comparison limit (<eref target="https://github.com/httpwg/http-core/issues/ | ||||
| 510" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.host"/>, add ":authority" pseudo-heade | ||||
| r to Host discussion and make section applicable to both (<eref target="https:// | ||||
| github.com/httpwg/http-core/issues/511" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.name.registration"/>, note that this d | ||||
| ocument updates <xref target="RFC3864"/> (<eref target="https://github.com/httpw | ||||
| g/http-core/issues/515" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Moved transfer-coding ABNF from <xref target="HTTP11"/> to <x | ||||
| ref target="field.te"/> and replaced "t-ranking" ABNF by equivalent "weight" (<e | ||||
| ref target="https://github.com/httpwg/http-core/issues/531" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="protection.space"/>, replace "canonical root | ||||
| URI" by "origin" (<eref target="https://github.com/httpwg/http-core/issues/542" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.expect"/>, remove obsolete note about | ||||
| a change in RFC 723x (<eref target="https://github.com/httpwg/http-core/issues/5 | ||||
| 47" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Changed to using "payload" when defining requirements about t | ||||
| he data being conveyed within a message, instead of the terms "payload body" or | ||||
| "response body" or "representation body", since they often get confused with the | ||||
| HTTP/1.1 message body (which includes transfer coding) (<eref target="https://g | ||||
| ithub.com/httpwg/http-core/issues/553" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Rewrite definition of <xref target="HEAD" format="none">HEAD< | ||||
| /xref> method (<eref target="https://github.com/httpwg/http-core/issues/559" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.if-range"/>, fix an off-by-one bug abo | ||||
| ut how many chars to consider when checking for etags (<eref target="https://git | ||||
| hub.com/httpwg/http-core/issues/570" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="overview.of.status.codes"/>, clarify that "n | ||||
| o reason phrase" is fine as well (<eref target="https://github.com/httpwg/http-c | ||||
| ore/issues/571" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.203"/>, remove an obsolete reference | ||||
| to the Warning response header field (<eref target="https://github.com/httpwg/ht | ||||
| tp-core/issues/573" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.408"/>, rephrase prose about connecti | ||||
| on re-use (<eref target="https://github.com/httpwg/http-core/issues/579" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.range"/>, potentially allow Range hand | ||||
| ling on methods other than GET (<eref target="https://github.com/httpwg/http-cor | ||||
| e/issues/581" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.code.registration"/>, remove redundan | ||||
| t text about status code 418 (<eref target="https://github.com/httpwg/http-core/ | ||||
| issues/583" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="confidentiality.of.credentials"/>, rewrite r | ||||
| equirement to refer to "secured connection" (<eref target="https://github.com/ht | ||||
| tpwg/http-core/issues/587" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Make reference to <xref target="TLS13"/> normative (<eref tar | ||||
| get="https://github.com/httpwg/http-core/issues/589" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.13" title="Since draft-ietf-httpbis-sema | ||||
| ntics-13"> | ||||
| <ul> | ||||
| <li>In <xref target="field.accept"/>, remove the unused "accept p | ||||
| arameters" (<eref target="https://github.com/httpwg/http-core/issues/568" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="history.and.evolution"/>, mention that RFC 1 | ||||
| 945 describes HTTP/0.9 as well (<eref target="https://github.com/httpwg/http-cor | ||||
| e/issues/614" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="partial.PUT"/>, describe non-standard use of | ||||
| the <xref target="field.content-range" format="none">Content-Range</xref> heade | ||||
| r field (<xref target="field.content-range"/>) as a request modifier to perform | ||||
| a partial PUT (<eref target="https://github.com/httpwg/http-core/issues/618" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.421"/>, import the 421 (Misdirected R | ||||
| equest) status code from <xref target="HTTP2"/> (<eref target="https://github.co | ||||
| m/httpwg/http-core/issues/622" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="length.requirements"/>, rephrase the actual | ||||
| recipient parsing requirements (<eref target="https://github.com/httpwg/http-cor | ||||
| e/issues/634" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="considerations.for.new.methods"/>, mention r | ||||
| equest target forms in considerations for new methods (<eref target="https://git | ||||
| hub.com/httpwg/http-core/issues/636" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Changed to using "content" instead of "payload" or "payload d | ||||
| ata" to avoid confusion with the payload of version-specific messaging frames (< | ||||
| eref target="https://github.com/httpwg/http-core/issues/654" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.if-modified-since"/>, <xref target="fi | ||||
| eld.if-unmodified-since"/>, and <xref target="field.if-range"/>, specify evaluat | ||||
| ion in a way similar to other conditional header fields (<eref target="https://g | ||||
| ithub.com/httpwg/http-core/issues/665" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.date"/>, specify that recipients can r | ||||
| eplace an invalid Date header field value with the time received (<eref target=" | ||||
| https://github.com/httpwg/http-core/issues/669" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.14" title="Since draft-ietf-httpbis-sema | ||||
| ntics-14"> | ||||
| <ul> | ||||
| <li>In <xref target="fields.values"/>, relax prohibition of chara | ||||
| cters in field values to CR and NUL (<eref target="https://github.com/httpwg/htt | ||||
| p-core/issues/683" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.codes"/>, clarify that status code va | ||||
| lues outside the range 100..599 are invalid, and recommend error handling (<eref | ||||
| target="https://github.com/httpwg/http-core/issues/684" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="requirements.notation"/>, replaced requireme | ||||
| nt on semantic conformance with permission to ignore/workaround implementation-s | ||||
| pecific failures (<eref target="https://github.com/httpwg/http-core/issues/687" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Avoid the term "whitelist" (<eref target="https://github.com/ | ||||
| httpwg/http-core/issues/688" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="TRACE"/>, remove the normative requirement t | ||||
| o use the message/http media type (<eref target="https://github.com/httpwg/http- | ||||
| core/issues/690" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="message.forwarding"/>, discuss extensibility | ||||
| (<eref target="https://github.com/httpwg/http-core/issues/692" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.values"/>, tighten the recommendation | ||||
| for characters in newly defined fields, making it consistent with obs-text (<er | ||||
| ef target="https://github.com/httpwg/http-core/issues/696" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.values"/>, leading/trailing whitespac | ||||
| e removal is at time of use, not parsing (<eref target="https://github.com/httpw | ||||
| g/http-core/issues/697" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="message.abstraction"/>, clarify that HTTP se | ||||
| lf-descriptive messages have an exception in that the request must be understood | ||||
| in order to parse and interpret the response (<eref target="https://github.com/ | ||||
| httpwg/http-core/issues/700" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Remove "Canonicalization and Text Defaults" (<eref target="ht | ||||
| tps://github.com/httpwg/http-core/issues/703" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.referer"/>, refine what can be sent in | ||||
| Referer, and when (<eref target="https://github.com/httpwg/http-core/issues/709 | ||||
| " | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="protection.space"/>, explain that the protec | ||||
| tion space is not defined without additional information (<eref target="https:// | ||||
| github.com/httpwg/http-core/issues/710" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Simplify description of reactive content negotiation in <xref | ||||
| target="reactive.negotiation"/> (<eref target="https://github.com/httpwg/http-c | ||||
| ore/issues/712" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="charset"/>, remove the "charset" ABNF produc | ||||
| tion, and clarify where charsets appear (<eref target="https://github.com/httpwg | ||||
| /http-core/issues/713" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.accept-encoding"/>, clarify that selec | ||||
| tion <em>between</em> multiple acceptable codings is only relevant when they hav | ||||
| e the same purpose (<eref target="https://github.com/httpwg/http-core/issues/714 | ||||
| " | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="conditional.requests"/>, rewrite introductio | ||||
| n, mentioning extensibility (<eref target="https://github.com/httpwg/http-core/i | ||||
| ssues/715" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Throughout, be consistent about 'content coding' vs 'content- | ||||
| coding' (<eref target="https://github.com/httpwg/http-core/issues/719" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="CONNECT"/>, clarify that the port is mandato | ||||
| ry in a CONNECT request target (<eref target="https://github.com/httpwg/http-cor | ||||
| e/issues/736" | ||||
| brackets="angle"/>) and that the tunnel begins after the | ||||
| header section (<eref target="https://github.com/httpwg/http-core/issues/737" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="trailer.fields"/>, remove mid-stream trailer | ||||
| s (<eref target="https://github.com/httpwg/http-core/issues/740" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="connections"/>, clarify duplexing semantics | ||||
| (<eref target="https://github.com/httpwg/http-core/issues/741" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="connections"/>, explain the implications of | ||||
| statelessness more clearly (<eref target="https://github.com/httpwg/http-core/is | ||||
| sues/743" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.content-length"/>, be more explicit ab | ||||
| out invalid and incorrect values (<eref target="https://github.com/httpwg/http-c | ||||
| ore/issues/748" | ||||
| brackets="angle"/> and <eref target="https://github.com/ | ||||
| httpwg/http-core/issues/749" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Move discussion of statelessness from <xref target="intermedi | ||||
| aries"/> to <xref target="connections"/> (<eref target="https://github.com/httpw | ||||
| g/http-core/issues/753" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.101"/>, clarify that the upgraded pro | ||||
| tocol is in effect after the 101 response (<eref target="https://github.com/http | ||||
| wg/http-core/issues/776" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="CONNECT"/>, state that data received after t | ||||
| he headers of a CONNECT message is version-specific (<eref target="https://githu | ||||
| b.com/httpwg/http-core/issues/780" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="uri.comparison"/>, clarify how normalization | ||||
| works, and align with RF3986 (<eref target="https://github.com/httpwg/http-core | ||||
| /issues/788" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.trailer"/>, note that the Trailer fiel | ||||
| d can be used to discover deleted trailers (<eref target="https://github.com/htt | ||||
| pwg/http-core/issues/793" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Throughout, remove unneeded normative references to <xref tar | ||||
| get="HTTP11"/> (<eref target="https://github.com/httpwg/http-core/issues/795" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.te"/>, explicitly require listing in C | ||||
| onnection (<eref target="https://github.com/httpwg/http-core/issues/809" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.15" title="Since draft-ietf-httpbis-sema | ||||
| ntics-15"> | ||||
| <ul> | ||||
| <li>For <xref target="HTTP3"/>, add an RFC Editor note to rename | ||||
| to "RFCnnn" before publication (<eref target="https://github.com/httpwg/http-cor | ||||
| e/issues/815" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="HEAD"/>, align prose about content in HEAD r | ||||
| equests with description of GET (<eref target="https://github.com/httpwg/http-co | ||||
| re/issues/826" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.order"/>, remove the restriction to n | ||||
| on-empty field line values (<eref target="https://github.com/httpwg/http-core/is | ||||
| sues/836" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Add forward references to definition of OWS (<eref target="ht | ||||
| tps://github.com/httpwg/http-core/issues/841" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="underscore.in.fields"/>, add a security cons | ||||
| ideration regarding application handling of field names (<eref target="https://g | ||||
| ithub.com/httpwg/http-core/issues/843" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.16" title="Since draft-ietf-httpbis-sema | ||||
| ntics-16"> | ||||
| <t> | ||||
| This draft addresses mostly editorial issues raised during or past IETF | ||||
| Last Call; see <eref target="https://github.com/httpwg/http-core/issues?q=labe | ||||
| l%3Asemantics+created%3A%3E2021-05-26" | ||||
| brackets="angle"/> | ||||
| for a summary. | ||||
| </t> | ||||
| <t> | ||||
| Furthermore: | ||||
| </t> | ||||
| <ul> | ||||
| <li>In <xref target="status.206"/>, reinstate 'to a request' (<er | ||||
| ef target="https://github.com/httpwg/http-core/issues/857" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Align <xref target="fields.registry"/> with <xref target="con | ||||
| siderations.for.new.field.names"/> (<eref target="https://github.com/httpwg/http | ||||
| -core/issues/857" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.accept-ranges"/>, clarify that Accept- | ||||
| Ranges can be sent by any server, remove "none" from the ABNF because it is now | ||||
| a reserved range unit, and allow the field to be sent in a trailer section while | ||||
| noting why that is much less useful than as a header field (<eref target="https | ||||
| ://github.com/httpwg/http-core/issues/857" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.via"/>, don't specify TCP (<eref targe | ||||
| t="https://github.com/httpwg/http-core/issues/865" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="content"/>, explain the "Content-" prefix (< | ||||
| eref target="https://github.com/httpwg/http-core/issues/878" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="routing.reject"/>, check all target URIs for | ||||
| scheme semantic mismatches (<eref target="https://github.com/httpwg/http-core/i | ||||
| ssues/896" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="GET"/>, <xref target="HEAD"/>, and <xref tar | ||||
| get="DELETE"/>, clarify (again) that sending content in a request for a method t | ||||
| hat does not define such content will not interoperate without prior agreement, | ||||
| even if it is parsed correctly, and cannot be relied upon by an origin server un | ||||
| less they control the entire request chain (<eref target="https://github.com/htt | ||||
| pwg/http-core/issues/904" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.17" title="Since draft-ietf-httpbis-sema | ||||
| ntics-17"> | ||||
| <ul> | ||||
| <li>Move ABNF for obs-text into <xref target="fields.values"/> (< | ||||
| eref target="https://github.com/httpwg/http-core/issues/914" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="content.semantics"/>, note that response met | ||||
| adata can be relevant as well (<eref target="https://github.com/httpwg/http-core | ||||
| /issues/914" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.trailer"/>, use the term "signature" t | ||||
| hrougout and lower expectations on what Trailer indicates without a trailer sect | ||||
| ion (<eref target="https://github.com/httpwg/http-core/issues/914" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.content-type"/>, cleanup mime sniffing | ||||
| discussion (<eref target="https://github.com/httpwg/http-core/issues/914" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.te"/>, add a forward reference to "wei | ||||
| ght" (<eref target="https://github.com/httpwg/http-core/issues/914" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.accept-encoding"/>, clarify that the e | ||||
| xamples contains multiple values; also remove obsolete HTTP/1.0 note about qvalu | ||||
| es (<eref target="https://github.com/httpwg/http-core/issues/914" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.3xx"/>, remove incorrect mention of E | ||||
| tag as request field (<eref target="https://github.com/httpwg/http-core/issues/9 | ||||
| 14" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Move text about obs-fold in message/http to <xref target="HTT | ||||
| P11"/>; also note that LF is forbidden in field values just as CR and NUL (<eref | ||||
| target="https://github.com/httpwg/http-core/issues/923" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="message.transformations"/>, properly refer t | ||||
| o text that has moved to <xref target="HTTP11"/> (<eref target="https://github.c | ||||
| om/httpwg/http-core/issues/930" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Rewrite description of validators and move cache-related aspe | ||||
| cts into <xref target="CACHING"/> (<eref target="https://github.com/httpwg/http- | ||||
| core/issues/933" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.vary"/>, rephrase description to be mo | ||||
| re explanatory (<eref target="https://github.com/httpwg/http-core/issues/938" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="precedence"/>, clarify that a false If-Range | ||||
| means ignore the Range (<eref target="https://github.com/httpwg/http-core/issue | ||||
| s/940" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.if-modified-since"/> and <xref target= | ||||
| "field.if-unmodified-since"/>, restore text about missing modification date (<er | ||||
| ef target="https://github.com/httpwg/http-core/issues/942" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="abnf.extension.sender"/>, avoid duplicate no | ||||
| rmative requirement (<eref target="https://github.com/httpwg/http-core/issues/94 | ||||
| 3" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="lastmod.generation"/>, reference 'Date' more | ||||
| visibly (<eref target="https://github.com/httpwg/http-core/issues/945" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.proxy-authentication-info"/>, state th | ||||
| at Proxy-Authentication-Info can be used as trailer (<eref target="https://githu | ||||
| b.com/httpwg/http-core/issues/946" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.3xx"/>, slightly clarify history of r | ||||
| edirect status codes (<eref target="https://github.com/httpwg/http-core/issues/9 | ||||
| 47" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="fields.registry"/>, fix requirements for pro | ||||
| visional registrations (<eref target="https://github.com/httpwg/http-core/issues | ||||
| /950" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="authoritative.access"/>, explicitly refer to | ||||
| how this spec defines access to http or https resources (<eref target="https:// | ||||
| github.com/httpwg/http-core/issues/951" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.date"/>, make clock a defined term and | ||||
| use that definition throughout the spec (<eref target="https://github.com/httpw | ||||
| g/http-core/issues/953" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="preconditions"/>, make preconditions consist | ||||
| ent on when they are required to be evaluated (<eref target="https://github.com/ | ||||
| httpwg/http-core/issues/954" | ||||
| brackets="angle"/>)</li> | ||||
| <li>Throughout, disambiguate "selected representation" and "selec | ||||
| ted response" (now "chosen response") (<eref target="https://github.com/httpwg/h | ||||
| ttp-core/issues/958" | ||||
| brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="changes.since.18" title="Since draft-ietf-httpbis-sema | ||||
| ntics-18"> | ||||
| <ul> | ||||
| <li>In <xref target="field.accept"/>, align text about "q" parame | ||||
| ter with recent changes to IANA media types registry, | ||||
| and instruct IANA to reference this document with respect to the "q" special c | ||||
| ase (<eref target="https://github.com/httpwg/http-core/issues/970" | ||||
| brackets="angle"/>)</li> | ||||
| <li>In <xref target="field.name.registration"/>, rephrase text ab | ||||
| out the relation with <xref target="RFC3864"/> (<eref target="https://github.com | ||||
| /httpwg/http-core/pull/973" brackets="angle"/>)</li> | ||||
| <li>In <xref target="intermediaries"/>, avoid bare "for the sake | ||||
| of security" (<eref target="https://github.com/httpwg/http-core/pull/974" bracke | ||||
| ts="angle"/>)</li> | ||||
| <li>In <xref target="reactive.negotiation"/>, wordsmith future gu | ||||
| idance on reactive negotiation (<eref target="https://github.com/httpwg/http-cor | ||||
| e/pull/975" brackets="angle"/>)</li> | ||||
| <li>In <xref target="status.301"/> and <xref target="status.308"/ | ||||
| >, improve text about automatic link-editing (<eref target="https://github.com/h | ||||
| ttpwg/http-core/pull/976" brackets="angle"/>)</li> | ||||
| <li>In <xref target="security.considerations"/>, reference <xref | ||||
| target="URI"/> security considerations (<eref target="https://github.com/httpwg/ | ||||
| http-core/pull/977" brackets="angle"/>)</li> | ||||
| </ul> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="acks" numbered="false" title="Acknowledgements"> | <section anchor="acks" numbered="false" title="Acknowledgements"> | |||
| <t> | <t> | |||
| Aside from the current editors, the following individuals deserve special | Aside from the current editors, the following individuals deserve special | |||
| recognition for their contributions to early aspects of HTTP and its | recognition for their contributions to early aspects of HTTP and its | |||
| core specifications: | core specifications: | |||
| Marc Andreessen, Tim Berners-Lee, Robert Cailliau, Daniel W. Connolly, | <contact fullname="Marc Andreessen"/>, <contact fullname="Tim Berners-Lee"/>, | |||
| Bob Denny, John Franks, Jim Gettys, | <contact fullname="Robert Cailliau"/>, <contact fullname="Daniel W. Connolly"/> | |||
| , | ||||
| <contact fullname="Bob Denny"/>, <contact fullname="John Franks"/>, <contact | ||||
| fullname="Jim Gettys"/>, | ||||
| <contact fullname="Jean-François Groff"/>, | <contact fullname="Jean-François Groff"/>, | |||
| <contact fullname="Phillip M. Hallam-Baker"/>, | <contact fullname="Phillip M. Hallam-Baker"/>, | |||
| Koen Holtman, <contact fullname="Jeffery L. Hostetler"/>, Shel Kaphan, | <contact fullname="Koen Holtman"/>, <contact fullname="Jeffery L. Hostetler"/ | |||
| Dave Kristol, Yves Lafon, <contact fullname="Scott D. Lawrence"/>, | >, <contact fullname="Shel Kaphan"/>, | |||
| <contact fullname="Dave Kristol"/>, <contact fullname="Yves Lafon"/>, <contac | ||||
| t fullname="Scott D. Lawrence"/>, | ||||
| <contact fullname="Paul J. Leach"/>, <contact fullname="Håkon W. Lie"/>, | <contact fullname="Paul J. Leach"/>, <contact fullname="Håkon W. Lie"/>, | |||
| Ari Luotonen, Larry Masinter, Rob McCool, | <contact fullname="Ari Luotonen"/>, <contact fullname="Larry Masinter"/>, <co | |||
| <contact fullname="Jeffrey C. Mogul"/>, Lou Montulli, | ntact fullname="Rob McCool"/>, | |||
| David Morris, Henrik Frystyk Nielsen, Dave Raggett, Eric Rescorla, | <contact fullname="Jeffrey C. Mogul"/>, <contact fullname="Lou Montulli"/>, | |||
| Tony Sanders, <contact fullname="Lawrence C. Stewart"/>, | <contact fullname="David Morris"/>, <contact fullname="Henrik Frystyk Nielsen | |||
| Marc VanHeyningen, and Steve Zilles. | "/>, <contact fullname="Dave Raggett"/>, <contact fullname="Eric Rescorla"/>, | |||
| <contact fullname="Tony Sanders"/>, <contact fullname="Lawrence C. Stewart"/> | ||||
| , | ||||
| <contact fullname="Marc VanHeyningen"/>, and <contact fullname="Steve Zilles" | ||||
| />. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| This edition builds on the many contributions | This document builds on the many contributions | |||
| that went into past specifications of HTTP, including | that went into past specifications of HTTP, including | |||
| <xref target="HTTP10" format="none">RFC 1945</xref>, | <xref target="HTTP10" format="default"/>, | |||
| <xref target="RFC2068" format="none">RFC 2068</xref>, | <xref target="RFC2068" format="default"/>, | |||
| <xref target="RFC2145" format="none">RFC 2145</xref>, | <xref target="RFC2145" format="default"/>, | |||
| <xref target="RFC2616" format="none">RFC 2616</xref>, | <xref target="RFC2616" format="default"/>, | |||
| <xref target="RFC2617" format="none">RFC 2617</xref>, | <xref target="RFC2617" format="default"/>, | |||
| <xref target="RFC2818" format="none">RFC 2818</xref>, | <xref target="RFC2818" format="default"/>, | |||
| <xref target="RFC7230" format="none">RFC 7230</xref>, | <xref target="RFC7230" format="default"/>, | |||
| <xref target="RFC7231" format="none">RFC 7231</xref>, | <xref target="RFC7231" format="default"/>, | |||
| <xref target="RFC7232" format="none">RFC 7232</xref>, | <xref target="RFC7232" format="default"/>, | |||
| <xref target="RFC7233" format="none">RFC 7233</xref>, | <xref target="RFC7233" format="default"/>, | |||
| <xref target="RFC7234" format="none">RFC 7234</xref>, and | <xref target="RFC7234" format="default"/>, and | |||
| <xref target="RFC7235" format="none">RFC 7235</xref>. | <xref target="RFC7235" format="default"/>. | |||
| The acknowledgements within those documents still apply. | The acknowledgements within those documents still apply. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Since 2014, the following contributors have helped improve this | Since 2014, the following contributors have helped improve this | |||
| specification by reporting bugs, asking smart questions, drafting or | specification by reporting bugs, asking smart questions, drafting or | |||
| reviewing text, and evaluating open issues: | reviewing text, and evaluating issues: | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <contact fullname="Alan Egerton"/>, | <contact fullname="Alan Egerton"/>, | |||
| <contact fullname="Alex Rousskov"/>, | <contact fullname="Alex Rousskov"/>, | |||
| <contact fullname="Amichai Rothman"/>, | <contact fullname="Amichai Rothman"/>, | |||
| <contact fullname="Amos Jeffries"/>, | <contact fullname="Amos Jeffries"/>, | |||
| <contact fullname="Anders Kaseorg"/>, | <contact fullname="Anders Kaseorg"/>, | |||
| <contact fullname="Andreas Gebhardt"/>, | <contact fullname="Andreas Gebhardt"/>, | |||
| <contact fullname="Anne van Kesteren"/>, | <contact fullname="Anne van Kesteren"/>, | |||
| <contact fullname="Armin Abfalterer"/>, | <contact fullname="Armin Abfalterer"/>, | |||
| skipping to change at line 13940 ¶ | skipping to change at line 12783 ¶ | |||
| <contact fullname="Vasiliy Faronov"/>, | <contact fullname="Vasiliy Faronov"/>, | |||
| <contact fullname="Vladimir Lashchev"/>, | <contact fullname="Vladimir Lashchev"/>, | |||
| <contact fullname="Wenbo Zhu"/>, | <contact fullname="Wenbo Zhu"/>, | |||
| <contact fullname="William A. Rowe Jr."/>, | <contact fullname="William A. Rowe Jr."/>, | |||
| <contact fullname="Willy Tarreau"/>, | <contact fullname="Willy Tarreau"/>, | |||
| <contact fullname="Xingwei Liu"/>, | <contact fullname="Xingwei Liu"/>, | |||
| <contact fullname="Yishuai Li"/>, and | <contact fullname="Yishuai Li"/>, and | |||
| <contact fullname="Zaheduzzaman Sarker"/>. | <contact fullname="Zaheduzzaman Sarker"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 608 change blocks. | ||||
| 2831 lines changed or deleted | 1100 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/ | ||||