rfc9112v1.txt | rfc9112.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) R. Fielding, Ed. | Internet Engineering Task Force (IETF) R. Fielding, Ed. | |||
Request for Comments: 9112 Adobe | Request for Comments: 9112 Adobe | |||
STD: 97 M. Nottingham, Ed. | STD: 97 M. Nottingham, Ed. | |||
Obsoletes: 7230 Fastly | Obsoletes: 7230 Fastly | |||
Category: Standards Track J. Reschke, Ed. | Category: Standards Track J. Reschke, Ed. | |||
ISSN: 2070-1721 greenbytes | ISSN: 2070-1721 greenbytes | |||
October 2021 | January 2022 | |||
HTTP/1.1 | HTTP/1.1 | |||
Abstract | Abstract | |||
The Hypertext Transfer Protocol (HTTP) is a stateless application- | The Hypertext Transfer Protocol (HTTP) is a stateless application- | |||
level protocol for distributed, collaborative, hypertext information | level protocol for distributed, collaborative, hypertext information | |||
systems. This document specifies the HTTP/1.1 message syntax, | systems. This document specifies the HTTP/1.1 message syntax, | |||
message parsing, connection management, and related security | message parsing, connection management, and related security | |||
concerns. | concerns. | |||
skipping to change at line 38 ¶ | skipping to change at line 38 ¶ | |||
received public review and has been approved for publication by the | received public review and has been approved for publication by the | |||
Internet Engineering Steering Group (IESG). Further information on | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | Internet Standards is available in Section 2 of RFC 7841. | |||
Information about the current status of this document, any errata, | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | and how to provide feedback on it may be obtained at | |||
https://www.rfc-editor.org/info/rfc9112. | https://www.rfc-editor.org/info/rfc9112. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Revised BSD License text as described in Section 4.e of the | include Revised BSD License text as described in Section 4.e of the | |||
Trust Legal Provisions and are provided without warranty as described | Trust Legal Provisions and are provided without warranty as described | |||
skipping to change at line 732 ¶ | skipping to change at line 732 ¶ | |||
before the first non-whitespace octet of the field line value, or | before the first non-whitespace octet of the field line value, or | |||
after the last non-whitespace octet of the field line value, is | after the last non-whitespace octet of the field line value, is | |||
excluded by parsers when extracting the field line value from a field | excluded by parsers when extracting the field line value from a field | |||
line. | line. | |||
5.2. Obsolete Line Folding | 5.2. Obsolete Line Folding | |||
Historically, HTTP/1.x field values could be extended over multiple | Historically, HTTP/1.x field values could be extended over multiple | |||
lines by preceding each extra line with at least one space or | lines by preceding each extra line with at least one space or | |||
horizontal tab (obs-fold). This specification deprecates such line | horizontal tab (obs-fold). This specification deprecates such line | |||
folding except within the message/http media type (Section 10.1). | folding except within the "message/http" media type (Section 10.1). | |||
obs-fold = OWS CRLF RWS | obs-fold = OWS CRLF RWS | |||
; obsolete line folding | ; obsolete line folding | |||
A sender MUST NOT generate a message that includes line folding | A sender MUST NOT generate a message that includes line folding | |||
(i.e., that has any field line value that contains a match to the | (i.e., that has any field line value that contains a match to the | |||
obs-fold rule) unless the message is intended for packaging within | obs-fold rule) unless the message is intended for packaging within | |||
the message/http media type. | the message/http media type. | |||
A server that receives an obs-fold in a request message that is not | A server that receives an obs-fold in a request message that is not | |||
skipping to change at line 1343 ¶ | skipping to change at line 1343 ¶ | |||
HTTP/1.1 defaults to the use of _persistent connections_, allowing | HTTP/1.1 defaults to the use of _persistent connections_, allowing | |||
multiple requests and responses to be carried over a single | multiple requests and responses to be carried over a single | |||
connection. HTTP implementations SHOULD support persistent | connection. HTTP implementations SHOULD support persistent | |||
connections. | connections. | |||
A recipient determines whether a connection is persistent or not | A recipient determines whether a connection is persistent or not | |||
based on the protocol version and Connection header field | based on the protocol version and Connection header field | |||
(Section 7.6.1 of [HTTP]) in the most recently received message, if | (Section 7.6.1 of [HTTP]) in the most recently received message, if | |||
any: | any: | |||
* If the close connection option is present (Section 9.6), the | * If the "close" connection option is present (Section 9.6), the | |||
connection will not persist after the current response; else, | connection will not persist after the current response; else, | |||
* If the received protocol is HTTP/1.1 (or later), the connection | * If the received protocol is HTTP/1.1 (or later), the connection | |||
will persist after the current response; else, | will persist after the current response; else, | |||
* If the received protocol is HTTP/1.0, the "keep-alive" connection | * If the received protocol is HTTP/1.0, the "keep-alive" connection | |||
option is present, either the recipient is not a proxy or the | option is present, either the recipient is not a proxy or the | |||
message is a response, and the recipient wishes to honor the | message is a response, and the recipient wishes to honor the | |||
HTTP/1.0 "keep-alive" mechanism, the connection will persist after | HTTP/1.0 "keep-alive" mechanism, the connection will persist after | |||
the current response; otherwise, | the current response; otherwise, | |||
* The connection will close after the current response. | * The connection will close after the current response. | |||
A client that does not support persistent connections MUST send the | A client that does not support persistent connections MUST send the | |||
close connection option in every request message. | "close" connection option in every request message. | |||
A server that does not support persistent connections MUST send the | A server that does not support persistent connections MUST send the | |||
close connection option in every response message that does not have | "close" connection option in every response message that does not | |||
a 1xx (Informational) status code. | have a 1xx (Informational) status code. | |||
A client MAY send additional requests on a persistent connection | A client MAY send additional requests on a persistent connection | |||
until it sends or receives a close connection option or receives an | until it sends or receives a "close" connection option or receives an | |||
HTTP/1.0 response without a "keep-alive" connection option. | HTTP/1.0 response without a "keep-alive" connection option. | |||
In order to remain persistent, all messages on a connection need to | In order to remain persistent, all messages on a connection need to | |||
have a self-defined message length (i.e., one not defined by closure | have a self-defined message length (i.e., one not defined by closure | |||
of the connection), as described in Section 6. A server MUST read | of the connection), as described in Section 6. A server MUST read | |||
the entire request message body or close the connection after sending | the entire request message body or close the connection after sending | |||
its response; otherwise, the remaining data on a persistent | its response; otherwise, the remaining data on a persistent | |||
connection would be misinterpreted as the next request. Likewise, a | connection would be misinterpreted as the next request. Likewise, a | |||
client MUST read the entire response message body if it intends to | client MUST read the entire response message body if it intends to | |||
reuse the same connection for a subsequent request. | reuse the same connection for a subsequent request. | |||
skipping to change at line 1499 ¶ | skipping to change at line 1499 ¶ | |||
client sees a response that indicates the server does not wish to | client sees a response that indicates the server does not wish to | |||
receive the message body and is closing the connection, the client | receive the message body and is closing the connection, the client | |||
SHOULD immediately cease transmitting the body and close its side of | SHOULD immediately cease transmitting the body and close its side of | |||
the connection. | the connection. | |||
9.6. Tear-down | 9.6. Tear-down | |||
The "close" connection option is defined as a signal that the sender | The "close" connection option is defined as a signal that the sender | |||
will close this connection after completion of the response. A | will close this connection after completion of the response. A | |||
sender SHOULD send a Connection header field (Section 7.6.1 of | sender SHOULD send a Connection header field (Section 7.6.1 of | |||
[HTTP]) containing the close connection option when it intends to | [HTTP]) containing the "close" connection option when it intends to | |||
close a connection. For example, | close a connection. For example, | |||
Connection: close | Connection: close | |||
as a request header field indicates that this is the last request | as a request header field indicates that this is the last request | |||
that the client will send on this connection, while in a response, | that the client will send on this connection, while in a response, | |||
the same field indicates that the server is going to close this | the same field indicates that the server is going to close this | |||
connection after the response message is complete. | connection after the response message is complete. | |||
Note that the field name "Close" is reserved, since using that name | Note that the field name "Close" is reserved, since using that name | |||
as a header field might conflict with the close connection option. | as a header field might conflict with the "close" connection option. | |||
A client that sends a close connection option MUST NOT send further | A client that sends a "close" connection option MUST NOT send further | |||
requests on that connection (after the one containing the close) and | requests on that connection (after the one containing the close) and | |||
MUST close the connection after reading the final response message | MUST close the connection after reading the final response message | |||
corresponding to this request. | corresponding to this request. | |||
A server that receives a close connection option MUST initiate | A server that receives a "close" connection option MUST initiate | |||
closure of the connection (see below) after it sends the final | closure of the connection (see below) after it sends the final | |||
response to the request that contained the close connection option. | response to the request that contained the "close" connection option. | |||
The server SHOULD send a close connection option in its final | The server SHOULD send a "close" connection option in its final | |||
response on that connection. The server MUST NOT process any further | response on that connection. The server MUST NOT process any further | |||
requests received on that connection. | requests received on that connection. | |||
A server that sends a close connection option MUST initiate closure | A server that sends a "close" connection option MUST initiate closure | |||
of the connection (see below) after it sends the response containing | of the connection (see below) after it sends the response containing | |||
the close connection option. The server MUST NOT process any further | the "close" connection option. The server MUST NOT process any | |||
requests received on that connection. | further requests received on that connection. | |||
A client that receives a close connection option MUST cease sending | A client that receives a "close" connection option MUST cease sending | |||
requests on that connection and close the connection after reading | requests on that connection and close the connection after reading | |||
the response message containing the close connection option; if | the response message containing the "close" connection option; if | |||
additional pipelined requests had been sent on the connection, the | additional pipelined requests had been sent on the connection, the | |||
client SHOULD NOT assume that they will be processed by the server. | client SHOULD NOT assume that they will be processed by the server. | |||
If a server performs an immediate close of a TCP connection, there is | If a server performs an immediate close of a TCP connection, there is | |||
a significant risk that the client will not be able to read the last | a significant risk that the client will not be able to read the last | |||
HTTP response. If the server receives additional data from the | HTTP response. If the server receives additional data from the | |||
client on a fully closed connection, such as another request sent by | client on a fully closed connection, such as another request sent by | |||
the client before receiving the server's response, the server's TCP | the client before receiving the server's response, the server's TCP | |||
stack will send a reset packet to the client; unfortunately, the | stack will send a reset packet to the client; unfortunately, the | |||
reset packet might erase the client's unacknowledged input buffers | reset packet might erase the client's unacknowledged input buffers | |||
skipping to change at line 1685 ¶ | skipping to change at line 1685 ¶ | |||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: N/A | Restrictions on usage: N/A | |||
Author: See Authors' Addresses section. | Author: See Authors' Addresses section. | |||
Change controller: IESG | Change controller: IESG | |||
10.2. Media Type application/http | 10.2. Media Type application/http | |||
The application/http media type can be used to enclose a pipeline of | The "application/http" media type can be used to enclose a pipeline | |||
one or more HTTP request or response messages (not intermixed). | of one or more HTTP request or response messages (not intermixed). | |||
Type name: application | Type name: application | |||
Subtype name: http | Subtype name: http | |||
Required parameters: N/A | Required parameters: N/A | |||
Optional parameters: version, msgtype | Optional parameters: version, msgtype | |||
version: The HTTP-version number of the enclosed messages (e.g., | version: The HTTP-version number of the enclosed messages (e.g., | |||
skipping to change at line 1845 ¶ | skipping to change at line 1845 ¶ | |||
can be used over many forms of encrypted connection, with the | can be used over many forms of encrypted connection, with the | |||
selection of such transports being identified by the choice of URI | selection of such transports being identified by the choice of URI | |||
scheme or within user agent configuration. | scheme or within user agent configuration. | |||
The "https" scheme can be used to identify resources that require a | The "https" scheme can be used to identify resources that require a | |||
confidential connection, as described in Section 4.2.2 of [HTTP]. | confidential connection, as described in Section 4.2.2 of [HTTP]. | |||
12. IANA Considerations | 12. IANA Considerations | |||
The change controller for the following registrations is: "IETF | The change controller for the following registrations is: "IETF | |||
(iesg@ietf.org) -- Internet Engineering Task Force". | (iesg@ietf.org) - Internet Engineering Task Force". | |||
12.1. Field Name Registration | 12.1. Field Name Registration | |||
IANA has added the following field names to the "Hypertext Transfer | IANA has added the following field names to the "Hypertext Transfer | |||
Protocol (HTTP) Field Name Registry" at | Protocol (HTTP) Field Name Registry" at | |||
<https://www.iana.org/assignments/http-fields>, as described in | <https://www.iana.org/assignments/http-fields>, as described in | |||
Section 18.4 of [HTTP]. | Section 18.4 of [HTTP]. | |||
+===================+==========+==============+============+ | +===================+===========+======+============+ | |||
| Field Name | Status | Ref. | Comments | | | Field Name | Status | Ref. | Comments | | |||
+===================+==========+==============+============+ | +===================+===========+======+============+ | |||
| Close | standard | Section 9.6 | (reserved) | | | Close | permanent | 9.6 | (reserved) | | |||
+-------------------+----------+--------------+------------+ | +-------------------+-----------+------+------------+ | |||
| MIME-Version | standard | Appendix B.1 | | | | MIME-Version | permanent | B.1 | | | |||
+-------------------+----------+--------------+------------+ | +-------------------+-----------+------+------------+ | |||
| Transfer-Encoding | standard | Section 6.1 | | | | Transfer-Encoding | permanent | 6.1 | | | |||
+-------------------+----------+--------------+------------+ | +-------------------+-----------+------+------------+ | |||
Table 1 | Table 1 | |||
12.2. Media Type Registration | 12.2. Media Type Registration | |||
IANA has updated the "Media Types" registry at | IANA has updated the "Media Types" registry at | |||
<https://www.iana.org/assignments/media-types> with the registration | <https://www.iana.org/assignments/media-types> with the registration | |||
information in Sections 10.1 and 10.2 for the media types "message/ | information in Sections 10.1 and 10.2 for the media types "message/ | |||
http" and "application/http", respectively. | http" and "application/http", respectively. | |||
12.3. Transfer Coding Registration | 12.3. Transfer Coding Registration | |||
IANA has updated the "HTTP Transfer Coding Registry" at | IANA has updated the "HTTP Transfer Coding Registry" at | |||
<https://www.iana.org/assignments/http-parameters/> with the content | <https://www.iana.org/assignments/http-parameters/> with the | |||
coding names summarized in the table below, per the registration | registration procedure of Section 7.3 and the content coding names | |||
procedure in Section 7.3. | summarized in the table below. | |||
+============+=========================================+===========+ | +============+=========================================+===========+ | |||
| Name | Description | Reference | | | Name | Description | Reference | | |||
+============+=========================================+===========+ | +============+=========================================+===========+ | |||
| chunked | Transfer in a series of chunks | Section | | | chunked | Transfer in a series of chunks | Section | | |||
| | | 7.1 | | | | | 7.1 | | |||
+------------+-----------------------------------------+-----------+ | +------------+-----------------------------------------+-----------+ | |||
| compress | UNIX "compress" data format [Welch] | Section | | | compress | UNIX "compress" data format [Welch] | Section | | |||
| | | 7.2 | | | | | 7.2 | | |||
+------------+-----------------------------------------+-----------+ | +------------+-----------------------------------------+-----------+ | |||
skipping to change at line 1932 ¶ | skipping to change at line 1932 ¶ | |||
+----------+-----------------------------+-----------+ | +----------+-----------------------------+-----------+ | |||
Table 3 | Table 3 | |||
13. References | 13. References | |||
13.1. Normative References | 13.1. Normative References | |||
[CACHING] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [CACHING] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Ed., "HTTP Caching", RFC 9111, DOI 10.17487/RFC9111, | Ed., "HTTP Caching", RFC 9111, DOI 10.17487/RFC9111, | |||
December 2021, <https://www.rfc-editor.org/info/rfc9111>. | January 2022, <https://www.rfc-editor.org/info/rfc9111>. | |||
[HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Ed., "HTTP Semantics", RFC 9110, DOI 10.17487/RFC9110, | Ed., "HTTP Semantics", RFC 9110, DOI 10.17487/RFC9110, | |||
December 2021, <https://www.rfc-editor.org/info/rfc9110>. | January 2022, <https://www.rfc-editor.org/info/rfc9110>. | |||
[RFC1950] Deutsch, P. and J-L. Gailly, "ZLIB Compressed Data Format | [RFC1950] Deutsch, P. and J-L. Gailly, "ZLIB Compressed Data Format | |||
Specification version 3.3", RFC 1950, | Specification version 3.3", RFC 1950, | |||
DOI 10.17487/RFC1950, May 1996, | DOI 10.17487/RFC1950, May 1996, | |||
<https://www.rfc-editor.org/info/rfc1950>. | <https://www.rfc-editor.org/info/rfc1950>. | |||
[RFC1951] Deutsch, P., "DEFLATE Compressed Data Format Specification | [RFC1951] Deutsch, P., "DEFLATE Compressed Data Format Specification | |||
version 1.3", RFC 1951, DOI 10.17487/RFC1951, May 1996, | version 1.3", RFC 1951, DOI 10.17487/RFC1951, May 1996, | |||
<https://www.rfc-editor.org/info/rfc1951>. | <https://www.rfc-editor.org/info/rfc1951>. | |||
End of changes. 23 change blocks. | ||||
37 lines changed or deleted | 37 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/ |