| draft-ietf-httpbis-early-hints-02.txt | draft-ietf-httpbis-early-hints-03.txt | |||
|---|---|---|---|---|
| HTTP Working Group K. Oku | HTTP Working Group K. Oku | |||
| Internet-Draft DeNA Co., Ltd. | Internet-Draft Fastly | |||
| Intended status: Experimental May 16, 2017 | Intended status: Experimental June 20, 2017 | |||
| Expires: November 17, 2017 | Expires: December 22, 2017 | |||
| An HTTP Status Code for Indicating Hints | An HTTP Status Code for Indicating Hints | |||
| draft-ietf-httpbis-early-hints-02 | draft-ietf-httpbis-early-hints-03 | |||
| Abstract | Abstract | |||
| This memo introduces an informational HTTP status code that can be | This memo introduces an informational HTTP status code that can be | |||
| used to convey hints that help a client make preparations for | used to convey hints that help a client make preparations for | |||
| processing the final response. | processing the final response. | |||
| Note to Readers | Note to Readers | |||
| Discussion of this draft takes place on the HTTP working group | Discussion of this draft takes place on the HTTP working group | |||
| skipping to change at page 1, line 42 ¶ | skipping to change at page 1, line 42 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on November 17, 2017. | This Internet-Draft will expire on December 22, 2017. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 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 | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://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 | |||
| skipping to change at page 2, line 21 ¶ | skipping to change at page 2, line 21 ¶ | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 1.1. Notational Conventions . . . . . . . . . . . . . . . . . 3 | 1.1. Notational Conventions . . . . . . . . . . . . . . . . . 3 | |||
| 2. 103 Early Hints . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. 103 Early Hints . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Security Considerations . . . . . . . . . . . . . . . . . . . 4 | 3. Security Considerations . . . . . . . . . . . . . . . . . . . 4 | |||
| 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 4 | 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 4 | 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 6. Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 6. Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 6.1. Since draft-ietf-httpbis-early-hints-01 . . . . . . . . . 4 | 6.1. Since draft-ietf-httpbis-early-hints-02 . . . . . . . . . 5 | |||
| 6.2. Since draft-ietf-httpbis-early-hints-00 . . . . . . . . . 4 | 6.2. Since draft-ietf-httpbis-early-hints-01 . . . . . . . . . 5 | |||
| 6.3. Since draft-ietf-httpbis-early-hints-00 . . . . . . . . . 5 | ||||
| 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 7.1. Normative References . . . . . . . . . . . . . . . . . . 5 | 7.1. Normative References . . . . . . . . . . . . . . . . . . 5 | |||
| 7.2. Informative References . . . . . . . . . . . . . . . . . 5 | 7.2. Informative References . . . . . . . . . . . . . . . . . 6 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 5 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 1. Introduction | 1. Introduction | |||
| It is common for HTTP responses to contain links to external | It is common for HTTP responses to contain links to external | |||
| resources that need to be fetched prior to their use; for example, | resources that need to be fetched prior to their use; for example, | |||
| rendering HTML by a Web browser. Having such links available to the | rendering HTML by a Web browser. Having such links available to the | |||
| client as early as possible helps to minimize perceived latency. | client as early as possible helps to minimize perceived latency. | |||
| The "preload" ([Preload]) link relation can be used to convey such | The "preload" ([Preload]) link relation can be used to convey such | |||
| links in the Link header field of an HTTP response. However, it is | links in the Link header field of an HTTP response. However, it is | |||
| not always possible for an origin server to generate a response | not always possible for an origin server to generate the header block | |||
| header block immediately after receiving a request. For example, the | of a final response immediately after receiving a request. For | |||
| origin server might need to query a database before generating a | example, the origin server might delegate a request to an upstream | |||
| response, or it might delegate a request to an upstream HTTP server | HTTP server running at a distant location, or the status code might | |||
| running at a distant location. | depend on the result of a database query. | |||
| The dilemma here is that even though it is preferable for an origin | The dilemma here is that even though it is preferable for an origin | |||
| server to send some headers as soon as it receives a request, it | server to send some header fields as soon as it receives a request, | |||
| cannot do so until the status code and the full headers of the final | it cannot do so until the status code and the full header fields of | |||
| HTTP response are determined. | the final HTTP response are determined. | |||
| HTTP/2 ([RFC7540]) server push can be used as a solution to this | HTTP/2 ([RFC7540]) server push can be used as a solution to this | |||
| issue, but has its own limitations. The responses that can be pushed | issue, but has its own limitations. The responses that can be pushed | |||
| using HTTP/2 are limited to those belonging to the same origin. | using HTTP/2 are limited to those belonging to the same origin. | |||
| Also, it is impossible to send only the links using server push. | Also, it is impossible to send only the links using server push. | |||
| Finally, sending HTTP responses for every resource is an inefficient | Finally, sending HTTP responses for every resource is an inefficient | |||
| way of using bandwidth, especially when a caching server exists as an | way of using bandwidth, especially when a caching server exists as an | |||
| intermediary. | intermediary. | |||
| This memo defines a status code for sending an informational response | This memo defines a status code for sending an informational response | |||
| ([RFC7231], section 6.2) that contains headers that are likely to be | ([RFC7231], Section 6.2) that contains header fields that are likely | |||
| included in the final response. A server can send the informational | to be included in the final response. A server can send the | |||
| response containing some of the headers to help the client start | informational response containing some of the header fields to help | |||
| making preparations for processing the final response, and then run | the client start making preparations for processing the final | |||
| time-consuming operations to generate the final response. The | response, and then run time-consuming operations to generate the | |||
| informational response can also be used by an origin server to | final response. The informational response can also be used by an | |||
| trigger HTTP/2 server push at a caching intermediary. | origin server to trigger HTTP/2 server push at a caching | |||
| intermediary. | ||||
| 1.1. Notational Conventions | 1.1. Notational Conventions | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| 2. 103 Early Hints | 2. 103 Early Hints | |||
| The 103 (Early Hints) informational status code indicates the client | The 103 (Early Hints) informational status code indicates to the | |||
| that the server is likely to send a final response with the headers | client that the server is likely to send a final response with the | |||
| included in the informational response. | header fields included in the informational response. | |||
| A server MUST NOT include Content-Length, Transfer-Encoding, or any | A server MUST NOT include Content-Length, Transfer-Encoding, or any | |||
| hop-by-hop header fields ([RFC7230], section 6.1) in a 103 (Early | hop-by-hop header fields ([RFC7230], Section 6.1) in a 103 (Early | |||
| Hints) response. | Hints) response. | |||
| A client MAY speculatively evaluate the headers included in a 103 | A client can speculatively evaluate the header fields included in a | |||
| (Early Hints) response while waiting for the final response. For | 103 (Early Hints) response while waiting for the final response. For | |||
| example, a client might recognize a Link header field value | example, a client might recognize a Link header field value | |||
| containing the relation type "preload" and start fetching the target | containing the relation type "preload" and start fetching the target | |||
| resource. | resource. | |||
| However, this MUST NOT affect how the final response is processed; | However, these header fields only provide hints to the client; they | |||
| when handling it, the client MUST behave as if it had not seen the | do not replace the header fields on the final response. Aside from | |||
| informational response. In particular, a client MUST NOT process the | performance optimizations, such evaluation of the 103 (Early Hints) | |||
| headers included in the final response as if they belonged to the | response's header fields MUST NOT affect how the final response is | |||
| informational response, or vice versa. | processed. A client MUST NOT interpret the 103 (Early Hints) | |||
| response header fields as if they applied to the informational | ||||
| response itself (e.g., as metadata about the 103 (Early Hints) | ||||
| response). | ||||
| An intermediary MAY drop the informational response. It MAY send | An intermediary MAY drop the informational response. It MAY send | |||
| HTTP/2 ([RFC7540]) server pushes using the information found in the | HTTP/2 ([RFC7540]) server pushes using the information found in the | |||
| 103 (Early Hints) response. | 103 (Early Hints) response. | |||
| The following example illustrates a typical message exchange that | ||||
| involves a 103 (Early Hints) response. | ||||
| Client request: | ||||
| GET / HTTP/1.1 | ||||
| Host: example.com | ||||
| Server response: | ||||
| HTTP/1.1 103 Early Hints | ||||
| Link: </style.css>; rel=preload; as=style | ||||
| Link: </script.js>; rel=preload; as=script | ||||
| HTTP/1.1 200 OK | ||||
| Date: Fri, 26 May 2017 10:02:11 GMT | ||||
| Content-Length: 1234 | ||||
| Content-Type: text/html; charset=utf-8 | ||||
| Link: </style.css>; rel=preload; as=style | ||||
| Link: </script.js>; rel=preload; as=script | ||||
| <!doctype html> | ||||
| [... rest of the response body is ommitted from the example ...] | ||||
| 3. Security Considerations | 3. Security Considerations | |||
| Some clients may have issues handling 103 (Early Hints), since | Some clients might have issues handling 103 (Early Hints), since | |||
| informational responses are rarely used in reply to requests not | informational responses are rarely used in reply to requests not | |||
| including an Expect header ([RFC7231], section 5.1.1). | including an Expect header ([RFC7231], Section 5.1.1). | |||
| In particular, an HTTP/1.1 client that mishandles an informational | In particular, an HTTP/1.1 client that mishandles an informational | |||
| response as a final response is likely to consider all responses to | response as a final response is likely to consider all responses to | |||
| the succeeding requests sent over the same connection to be part of | the succeeding requests sent over the same connection to be part of | |||
| the final response. Such behavior may constitute a cross-origin | the final response. Such behavior may constitute a cross-origin | |||
| information disclosure vulnerability in case the client multiplexes | information disclosure vulnerability in case the client multiplexes | |||
| requests to different origins onto a single persistent connection. | requests to different origins onto a single persistent connection. | |||
| Therefore, a server might refrain from sending Early Hints over | Therefore, a server might refrain from sending Early Hints over | |||
| HTTP/1.1 unless when the client is known to handle informational | HTTP/1.1 unless when the client is known to handle informational | |||
| responses correctly. | responses correctly. | |||
| HTTP/2 clients are less likely to suffer from incorrect framing since | HTTP/2 clients are less likely to suffer from incorrect framing since | |||
| handling of the response headers does not affect how the end of the | handling of the response header fields does not affect how the end of | |||
| response body is determined. | the response body is determined. | |||
| 4. IANA Considerations | 4. IANA Considerations | |||
| The HTTP Status Codes Registry will be updated with the following | The HTTP Status Codes Registry will be updated with the following | |||
| entry: | entry: | |||
| o Code: 103 | o Code: 103 | |||
| o Description: Early Hints | o Description: Early Hints | |||
| o Specification: [this document] | o Specification: [this document] | |||
| 5. Acknowledgements | 5. Acknowledgements | |||
| Thanks to Tatsuhiro Tsujikawa for coming up with the idea of sending | Thanks to Tatsuhiro Tsujikawa for coming up with the idea of sending | |||
| the link headers using an informational response. | the Link header fields using an informational response. | |||
| 6. Changes | 6. Changes | |||
| 6.1. Since draft-ietf-httpbis-early-hints-01 | 6.1. Since draft-ietf-httpbis-early-hints-02 | |||
| o Editorial changes. | o Editorial changes. | |||
| 6.2. Since draft-ietf-httpbis-early-hints-00 | o Added an example. | |||
| 6.2. Since draft-ietf-httpbis-early-hints-01 | ||||
| o Editorial changes. | ||||
| 6.3. Since draft-ietf-httpbis-early-hints-00 | ||||
| o Forbid processing the headers of a 103 response as part of the | o Forbid processing the headers of a 103 response as part of the | |||
| informational response. | informational response. | |||
| 7. References | 7. References | |||
| 7.1. Normative References | 7.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| skipping to change at page 5, line 31 ¶ | skipping to change at page 6, line 17 ¶ | |||
| DOI 10.17487/RFC7231, June 2014, | DOI 10.17487/RFC7231, June 2014, | |||
| <http://www.rfc-editor.org/info/rfc7231>. | <http://www.rfc-editor.org/info/rfc7231>. | |||
| [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | |||
| Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | |||
| DOI 10.17487/RFC7540, May 2015, | DOI 10.17487/RFC7540, May 2015, | |||
| <http://www.rfc-editor.org/info/rfc7540>. | <http://www.rfc-editor.org/info/rfc7540>. | |||
| 7.2. Informative References | 7.2. Informative References | |||
| [Preload] Grigorik, I., "Preload", September 2016, | [Preload] Grigorik, I., "Preload", n.d., <https://w3c.github.io/ | |||
| <https://w3c.github.io/preload/>. | preload/>. | |||
| Author's Address | Author's Address | |||
| Kazuho Oku | Kazuho Oku | |||
| DeNA Co., Ltd. | Fastly | |||
| Email: kazuhooku@gmail.com | Email: kazuhooku@gmail.com | |||
| End of changes. 21 change blocks. | ||||
| 48 lines changed or deleted | 83 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||