draft-ietf-httpbis-http2-07.txt | draft-ietf-httpbis-http2-08.txt | |||
---|---|---|---|---|
HTTPbis Working Group M. Belshe | HTTPbis Working Group M. Belshe | |||
Internet-Draft Twist | Internet-Draft Twist | |||
Intended status: Standards Track R. Peon | Intended status: Standards Track R. Peon | |||
Expires: April 24, 2014 Google, Inc | Expires: May 15, 2014 Google, Inc | |||
M. Thomson, Ed. | M. Thomson, Ed. | |||
Microsoft | Microsoft | |||
A. Melnikov, Ed. | A. Melnikov, Ed. | |||
Isode Ltd | Isode Ltd | |||
October 21, 2013 | November 11, 2013 | |||
Hypertext Transfer Protocol version 2.0 | Hypertext Transfer Protocol version 2.0 | |||
draft-ietf-httpbis-http2-07 | draft-ietf-httpbis-http2-08 | |||
Abstract | Abstract | |||
This specification describes an optimized expression of the syntax of | This specification describes an optimized expression of the syntax of | |||
the Hypertext Transfer Protocol (HTTP). HTTP/2.0 enables a more | the Hypertext Transfer Protocol (HTTP). HTTP/2.0 enables a more | |||
efficient use of network resources and a reduced perception of | efficient use of network resources and a reduced perception of | |||
latency by introducing header field compression and allowing multiple | latency by introducing header field compression and allowing multiple | |||
concurrent messages on the same connection. It also introduces | concurrent messages on the same connection. It also introduces | |||
unsolicited push of representations from servers to clients. | unsolicited push of representations from servers to clients. | |||
This document is an alternative to, but does not obsolete, the | This document is an alternative to, but does not obsolete, the | |||
HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged. | HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged. | |||
This version of the draft has been marked for implementation. | ||||
Interoperability testing will occur in the HTTP/2.0 interim in | ||||
Zurich, CH, starting 2014-01-22. | ||||
Editorial Note (To be removed by RFC Editor) | Editorial Note (To be removed by RFC Editor) | |||
Discussion of this draft takes place on the HTTPBIS working group | Discussion of this draft takes place on the HTTPBIS working group | |||
mailing list (ietf-http-wg@w3.org), which is archived at | mailing list (ietf-http-wg@w3.org), which is archived at | |||
<http://lists.w3.org/Archives/Public/ietf-http-wg/>. | <http://lists.w3.org/Archives/Public/ietf-http-wg/>. | |||
Working Group information and related documents can be found at | Working Group information and related documents can be found at | |||
<http://tools.ietf.org/wg/httpbis/> (Wiki) and | <http://tools.ietf.org/wg/httpbis/> (Wiki) and | |||
<https://github.com/http2/http2-spec> (source code and issues | <https://github.com/http2/http2-spec> (source code and issues | |||
tracker). | tracker). | |||
The changes in this draft are summarized in Appendix A.1. | The changes in this draft are summarized in Appendix A. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
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 April 24, 2014. | This Internet-Draft will expire on May 15, 2014. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2013 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 48 | skipping to change at page 3, line 4 | |||
3.2. Starting HTTP/2.0 for "http" URIs . . . . . . . . . . . . 8 | 3.2. Starting HTTP/2.0 for "http" URIs . . . . . . . . . . . . 8 | |||
3.2.1. HTTP2-Settings Header Field . . . . . . . . . . . . . 10 | 3.2.1. HTTP2-Settings Header Field . . . . . . . . . . . . . 10 | |||
3.3. Starting HTTP/2.0 for "https" URIs . . . . . . . . . . . . 10 | 3.3. Starting HTTP/2.0 for "https" URIs . . . . . . . . . . . . 10 | |||
3.4. Starting HTTP/2.0 with Prior Knowledge . . . . . . . . . . 10 | 3.4. Starting HTTP/2.0 with Prior Knowledge . . . . . . . . . . 10 | |||
3.5. HTTP/2.0 Connection Header . . . . . . . . . . . . . . . . 11 | 3.5. HTTP/2.0 Connection Header . . . . . . . . . . . . . . . . 11 | |||
4. HTTP Frames . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 4. HTTP Frames . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.1. Frame Format . . . . . . . . . . . . . . . . . . . . . . . 12 | 4.1. Frame Format . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
4.2. Frame Size . . . . . . . . . . . . . . . . . . . . . . . . 13 | 4.2. Frame Size . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
4.3. Header Compression and Decompression . . . . . . . . . . . 13 | 4.3. Header Compression and Decompression . . . . . . . . . . . 13 | |||
5. Streams and Multiplexing . . . . . . . . . . . . . . . . . . . 14 | 5. Streams and Multiplexing . . . . . . . . . . . . . . . . . . . 14 | |||
5.1. Stream States . . . . . . . . . . . . . . . . . . . . . . 14 | 5.1. Stream States . . . . . . . . . . . . . . . . . . . . . . 15 | |||
5.1.1. Stream Identifiers . . . . . . . . . . . . . . . . . . 19 | 5.1.1. Stream Identifiers . . . . . . . . . . . . . . . . . . 19 | |||
5.1.2. Stream Concurrency . . . . . . . . . . . . . . . . . . 19 | 5.1.2. Stream Concurrency . . . . . . . . . . . . . . . . . . 19 | |||
5.2. Flow Control . . . . . . . . . . . . . . . . . . . . . . . 20 | 5.2. Flow Control . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
5.2.1. Flow Control Principles . . . . . . . . . . . . . . . 20 | 5.2.1. Flow Control Principles . . . . . . . . . . . . . . . 20 | |||
5.2.2. Appropriate Use of Flow Control . . . . . . . . . . . 21 | 5.2.2. Appropriate Use of Flow Control . . . . . . . . . . . 21 | |||
5.3. Stream priority . . . . . . . . . . . . . . . . . . . . . 22 | 5.3. Stream priority . . . . . . . . . . . . . . . . . . . . . 22 | |||
5.4. Error Handling . . . . . . . . . . . . . . . . . . . . . . 22 | 5.4. Error Handling . . . . . . . . . . . . . . . . . . . . . . 22 | |||
5.4.1. Connection Error Handling . . . . . . . . . . . . . . 22 | 5.4.1. Connection Error Handling . . . . . . . . . . . . . . 22 | |||
5.4.2. Stream Error Handling . . . . . . . . . . . . . . . . 23 | 5.4.2. Stream Error Handling . . . . . . . . . . . . . . . . 23 | |||
5.4.3. Connection Termination . . . . . . . . . . . . . . . . 23 | 5.4.3. Connection Termination . . . . . . . . . . . . . . . . 23 | |||
skipping to change at page 4, line 14 | skipping to change at page 4, line 19 | |||
12.2. Frame Type Registry . . . . . . . . . . . . . . . . . . . 54 | 12.2. Frame Type Registry . . . . . . . . . . . . . . . . . . . 54 | |||
12.3. Error Code Registry . . . . . . . . . . . . . . . . . . . 55 | 12.3. Error Code Registry . . . . . . . . . . . . . . . . . . . 55 | |||
12.4. Settings Registry . . . . . . . . . . . . . . . . . . . . 55 | 12.4. Settings Registry . . . . . . . . . . . . . . . . . . . . 55 | |||
12.5. HTTP2-Settings Header Field Registration . . . . . . . . . 56 | 12.5. HTTP2-Settings Header Field Registration . . . . . . . . . 56 | |||
13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 56 | 13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 56 | |||
14. References . . . . . . . . . . . . . . . . . . . . . . . . . . 57 | 14. References . . . . . . . . . . . . . . . . . . . . . . . . . . 57 | |||
14.1. Normative References . . . . . . . . . . . . . . . . . . . 57 | 14.1. Normative References . . . . . . . . . . . . . . . . . . . 57 | |||
14.2. Informative References . . . . . . . . . . . . . . . . . . 58 | 14.2. Informative References . . . . . . . . . . . . . . . . . . 58 | |||
Appendix A. Change Log (to be removed by RFC Editor before | Appendix A. Change Log (to be removed by RFC Editor before | |||
publication) . . . . . . . . . . . . . . . . . . . . 59 | publication) . . . . . . . . . . . . . . . . . . . . 59 | |||
A.1. Since draft-ietf-httpbis-http2-06 . . . . . . . . . . . . 59 | A.1. Since draft-ietf-httpbis-http2-07 . . . . . . . . . . . . 59 | |||
A.2. Since draft-ietf-httpbis-http2-05 . . . . . . . . . . . . 59 | A.2. Since draft-ietf-httpbis-http2-06 . . . . . . . . . . . . 59 | |||
A.3. Since draft-ietf-httpbis-http2-04 . . . . . . . . . . . . 59 | A.3. Since draft-ietf-httpbis-http2-05 . . . . . . . . . . . . 59 | |||
A.4. Since draft-ietf-httpbis-http2-03 . . . . . . . . . . . . 60 | A.4. Since draft-ietf-httpbis-http2-04 . . . . . . . . . . . . 59 | |||
A.5. Since draft-ietf-httpbis-http2-02 . . . . . . . . . . . . 60 | A.5. Since draft-ietf-httpbis-http2-03 . . . . . . . . . . . . 60 | |||
A.6. Since draft-ietf-httpbis-http2-01 . . . . . . . . . . . . 60 | A.6. Since draft-ietf-httpbis-http2-02 . . . . . . . . . . . . 60 | |||
A.7. Since draft-ietf-httpbis-http2-00 . . . . . . . . . . . . 61 | A.7. Since draft-ietf-httpbis-http2-01 . . . . . . . . . . . . 60 | |||
A.8. Since draft-mbelshe-httpbis-spdy-00 . . . . . . . . . . . 61 | A.8. Since draft-ietf-httpbis-http2-00 . . . . . . . . . . . . 61 | |||
A.9. Since draft-mbelshe-httpbis-spdy-00 . . . . . . . . . . . 61 | ||||
1. Introduction | 1. Introduction | |||
The Hypertext Transfer Protocol (HTTP) is a wildly successful | The Hypertext Transfer Protocol (HTTP) is a wildly successful | |||
protocol. However, the HTTP/1.1 message format ([HTTP-p1], Section | protocol. However, the HTTP/1.1 message format ([HTTP-p1], Section | |||
3) is optimized for implementation simplicity and accessibility, not | 3) is optimized for implementation simplicity and accessibility, not | |||
application performance. As such it has several characteristics that | application performance. As such it has several characteristics that | |||
have a negative overall effect on application performance. | have a negative overall effect on application performance. | |||
In particular, HTTP/1.0 only allows one request to be outstanding at | In particular, HTTP/1.0 only allows one request to be outstanding at | |||
skipping to change at page 9, line 20 | skipping to change at page 9, line 20 | |||
Upgrade: HTTP/2.0 | Upgrade: HTTP/2.0 | |||
HTTP2-Settings: <base64url encoding of HTTP/2.0 SETTINGS payload> | HTTP2-Settings: <base64url encoding of HTTP/2.0 SETTINGS payload> | |||
Requests that contain an entity body MUST be sent in their entirety | Requests that contain an entity body MUST be sent in their entirety | |||
before the client can send HTTP/2.0 frames. This means that a large | before the client can send HTTP/2.0 frames. This means that a large | |||
request entity can block the use of the connection until it is | request entity can block the use of the connection until it is | |||
completely sent. | completely sent. | |||
If concurrency of an initial request with subsequent requests is | If concurrency of an initial request with subsequent requests is | |||
important, a small request can be used to perform the upgrade to | important, a small request can be used to perform the upgrade to | |||
HTTP/2.0, at the cost of an additional round trip. | HTTP/2.0, at the cost of an additional round-trip. | |||
A server that does not support HTTP/2.0 can respond to the request as | A server that does not support HTTP/2.0 can respond to the request as | |||
though the Upgrade header field were absent: | though the Upgrade header field were absent: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 243 | Content-Length: 243 | |||
Content-Type: text/html | Content-Type: text/html | |||
... | ... | |||
skipping to change at page 12, line 18 | skipping to change at page 12, line 18 | |||
using HTTP/2.0. | using HTTP/2.0. | |||
4. HTTP Frames | 4. HTTP Frames | |||
Once the HTTP/2.0 connection is established, endpoints can begin | Once the HTTP/2.0 connection is established, endpoints can begin | |||
exchanging frames. | exchanging frames. | |||
4.1. Frame Format | 4.1. Frame Format | |||
All frames begin with an 8-octet header followed by a payload of | All frames begin with an 8-octet header followed by a payload of | |||
between 0 and 16383 octets. | between 0 and 16,383 octets. | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| R | Length (14) | Type (8) | Flags (8) | | | R | Length (14) | Type (8) | Flags (8) | | |||
+-+-+-----------+---------------+-------------------------------+ | +-+-+-----------+---------------+-------------------------------+ | |||
|R| Stream Identifier (31) | | |R| Stream Identifier (31) | | |||
+-+-------------------------------------------------------------+ | +-+-------------------------------------------------------------+ | |||
| Frame Payload (0...) ... | | Frame Payload (0...) ... | |||
+---------------------------------------------------------------+ | +---------------------------------------------------------------+ | |||
skipping to change at page 13, line 46 | skipping to change at page 13, line 46 | |||
associated values. They are used within HTTP request and response | associated values. They are used within HTTP request and response | |||
messages as well as server push operations (see Section 8.2). | messages as well as server push operations (see Section 8.2). | |||
Header sets are logical collections of zero or more header fields | Header sets are logical collections of zero or more header fields | |||
arranged at the application layer. When transmitted over a | arranged at the application layer. When transmitted over a | |||
connection, the header set is serialized into a header block using | connection, the header set is serialized into a header block using | |||
HTTP Header Compression [COMPRESSION]. The serialized header block | HTTP Header Compression [COMPRESSION]. The serialized header block | |||
is then divided into one or more octet sequences, called header block | is then divided into one or more octet sequences, called header block | |||
fragments, and transmitted within the payload of HEADERS | fragments, and transmitted within the payload of HEADERS | |||
(Section 6.2), PUSH_PROMISE (Section 6.6) or CONTINUATION | (Section 6.2), PUSH_PROMISE (Section 6.6) or CONTINUATION | |||
(Section 6.10) frames. The receiving endpoint reassembles the header | (Section 6.10) frames. | |||
block by concatenating the individual fragments, then decompresses | ||||
the block to reconstruct the header set. | ||||
Header block fragments can only be sent as the payload of HEADERS, | A receiving endpoint reassembles the header block by concatenating | |||
PUSH_PROMISE or CONTINUATION frames. | the individual fragments, then decompresses the block to reconstruct | |||
the header set. | ||||
A compressed and encoded header block is transmitted in a HEADERS or | A complete header block consists of either: | |||
PUSH_PROMISE frame, followed by zero or more CONTINUATION frames. If | ||||
the number of octets in the block is greater than the space remaining | o a single HEADERS or PUSH_PROMISE frame each respectively with the | |||
in the frame, the block is divided into multiple fragments, which are | END_HEADERS or END_PUSH_PROMISE flag set, or | |||
then transmitted in multiple frames. | ||||
o a HEADERS or PUSH_PROMISE frame with the END_HEADERS or | ||||
END_PUSH_PROMISE flag cleared and one or more CONTINUATION frames, | ||||
where the last CONTINUATION frame has the END_HEADER flag set. | ||||
Header blocks MUST be transmitted as a contiguous sequence of frames, | Header blocks MUST be transmitted as a contiguous sequence of frames, | |||
with no interleaved frames of any other type, or from any other | with no interleaved frames of any other type, or from any other | |||
stream. The last frame in a sequence of HEADERS/CONTINUATION frames | stream. The last frame in a sequence of HEADERS or CONTINUATION | |||
MUST have the END_HEADERS flag set. The last frame in a sequence of | frames MUST have the END_HEADERS flag set. The last frame in a | |||
PUSH_PROMISE/CONTINUATION frames MUST have the END_PUSH_PROMISE/ | sequence of PUSH_PROMISEor CONTINUATION frames MUST have the | |||
END_HEADERS flag set (respectively). | END_PUSH_PROMISE or END_HEADERS flag set (respectively). | |||
HEADERS, PUSH_PROMISE and CONTINUATION frames carry data that can | Header block fragments can only be sent as the payload of HEADERS, | |||
modify the compression context maintained by a receiver. An endpoint | PUSH_PROMISE or CONTINUATION frames. HEADERS, PUSH_PROMISE and | |||
receiving HEADERS, PUSH_PROMISE or CONTINUATION frames MUST | CONTINUATION frames carry data that can modify the compression | |||
reassemble header blocks and perform decompression even if the frames | context maintained by a receiver. An endpoint receiving HEADERS, | |||
are to be discarded. A receiver MUST terminate the connection with a | PUSH_PROMISE or CONTINUATION frames MUST reassemble header blocks and | |||
connection error (Section 5.4.1) of type COMPRESSION_ERROR, if it | perform decompression even if the frames are to be discarded. A | |||
does not decompress a header block. | receiver MUST terminate the connection with a connection error | |||
(Section 5.4.1) of type COMPRESSION_ERROR, if it does not decompress | ||||
a header block. | ||||
5. Streams and Multiplexing | 5. Streams and Multiplexing | |||
A "stream" is an independent, bi-directional sequence of HEADERS and | A "stream" is an independent, bi-directional sequence of HEADERS and | |||
DATA frames exchanged between the client and server within an | DATA frames exchanged between the client and server within an | |||
HTTP/2.0 connection. Streams have several important characteristics: | HTTP/2.0 connection. Streams have several important characteristics: | |||
o A single HTTP/2.0 connection can contain multiple concurrently | o A single HTTP/2.0 connection can contain multiple concurrently | |||
open streams, with either endpoint interleaving frames from | open streams, with either endpoint interleaving frames from | |||
multiple streams. | multiple streams. | |||
skipping to change at page 23, line 38 | skipping to change at page 23, line 38 | |||
A RST_STREAM is the last frame that an endpoint can send on a stream. | A RST_STREAM is the last frame that an endpoint can send on a stream. | |||
The peer that sends the RST_STREAM frame MUST be prepared to receive | The peer that sends the RST_STREAM frame MUST be prepared to receive | |||
any frames that were sent or enqueued for sending by the remote peer. | any frames that were sent or enqueued for sending by the remote peer. | |||
These frames can be ignored, except where they modify connection | These frames can be ignored, except where they modify connection | |||
state (such as the state maintained for header compression | state (such as the state maintained for header compression | |||
(Section 4.3)). | (Section 4.3)). | |||
Normally, an endpoint SHOULD NOT send more than one RST_STREAM frame | Normally, an endpoint SHOULD NOT send more than one RST_STREAM frame | |||
for any stream. However, an endpoint MAY send additional RST_STREAM | for any stream. However, an endpoint MAY send additional RST_STREAM | |||
frames if it receives frames on a closed stream after more than a | frames if it receives frames on a closed stream after more than a | |||
round trip time. This behavior is permitted to deal with misbehaving | round-trip time. This behavior is permitted to deal with misbehaving | |||
implementations. | implementations. | |||
An endpoint MUST NOT send a RST_STREAM in response to an RST_STREAM | An endpoint MUST NOT send a RST_STREAM in response to an RST_STREAM | |||
frame, to avoid looping. | frame, to avoid looping. | |||
5.4.3. Connection Termination | 5.4.3. Connection Termination | |||
If the TCP connection is torn down while streams remain in open or | If the TCP connection is torn down while streams remain in open or | |||
half closed states, then the endpoint MUST assume that the stream was | half closed states, then the endpoint MUST assume that the stream was | |||
abnormally interrupted and could be incomplete. | abnormally interrupted and could be incomplete. | |||
skipping to change at page 24, line 31 | skipping to change at page 24, line 31 | |||
6.1. DATA | 6.1. DATA | |||
DATA frames (type=0x0) convey arbitrary, variable-length sequences of | DATA frames (type=0x0) convey arbitrary, variable-length sequences of | |||
octets associated with a stream. One or more DATA frames are used, | octets associated with a stream. One or more DATA frames are used, | |||
for instance, to carry HTTP request or response payloads. | for instance, to carry HTTP request or response payloads. | |||
The DATA frame defines the following flags: | The DATA frame defines the following flags: | |||
END_STREAM (0x1): Bit 1 being set indicates that this frame is the | END_STREAM (0x1): Bit 1 being set indicates that this frame is the | |||
last that the endpoint will send for the identified stream. | last that the endpoint will send for the identified stream. | |||
Setting this flag causes the stream to enter a "half closed" or | Setting this flag causes the stream to enter one of "half closed" | |||
"closed" state (Section 5.1). | states or "closed" state (Section 5.1). | |||
RESERVED (0x2): Bit 2 is reserved for future use. | RESERVED (0x2): Bit 2 is reserved for future use. | |||
DATA frames MUST be associated with a stream. If a DATA frame is | DATA frames MUST be associated with a stream. If a DATA frame is | |||
received whose stream identifier field is 0x0, the recipient MUST | received whose stream identifier field is 0x0, the recipient MUST | |||
respond with a connection error (Section 5.4.1) of type | respond with a connection error (Section 5.4.1) of type | |||
PROTOCOL_ERROR. | PROTOCOL_ERROR. | |||
DATA frames are subject to flow control and can only be sent when a | DATA frames are subject to flow control and can only be sent when a | |||
stream is in the "open" or "half closed (remote)" states. | stream is in the "open" or "half closed (remote)" states. If a DATA | |||
frame is received whose stream is not in "open" or "half closed | ||||
(local)" state, the recipient MUST respond with a connection error | ||||
(Section 5.4.1) of type PROTOCOL_ERROR. | ||||
6.2. HEADERS | 6.2. HEADERS | |||
The HEADERS frame (type=0x1) carries name-value pairs. It is used to | The HEADERS frame (type=0x1) carries name-value pairs. It is used to | |||
open a stream (Section 5.1). HEADERS frames can be sent on a stream | open a stream (Section 5.1). HEADERS frames can be sent on a stream | |||
in the "open" or "half closed (remote)" states. | in the "open" or "half closed (remote)" states. | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|X| Priority (31) | | |X| Priority (31) | | |||
+-+-------------------------------------------------------------+ | +-+-------------------------------------------------------------+ | |||
| Header Block Fragment (*) ... | | Header Block Fragment (*) ... | |||
+---------------------------------------------------------------+ | +---------------------------------------------------------------+ | |||
HEADERS Frame Payload | HEADERS Frame Payload | |||
The HEADERS frame defines the following flags: | The HEADERS frame defines the following flags: | |||
END_STREAM (0x1): Bit 1 being set indicates that this frame is the | END_STREAM (0x1): Bit 1 being set indicates that the header block | |||
last that the endpoint will send for the identified stream. | (Section 4.3) is the last that the endpoint will send for the | |||
Setting this flag causes the stream to enter a "half closed" state | identified stream. Setting this flag causes the stream to enter | |||
(Section 5.1). | one of "half closed" states (Section 5.1). | |||
A HEADERS frame that is followed by CONTINUATION frames carries | A HEADERS frame that is followed by CONTINUATION frames carries | |||
the flag that signals the end of a stream. A CONTINUATION frame | the END_STREAM flag that signals the end of a stream. A | |||
cannot be used to terminate a stream. | CONTINUATION frame cannot be used to terminate a stream. | |||
RESERVED (0x2): Bit 2 is reserved for future use. | RESERVED (0x2): Bit 2 is reserved for future use. | |||
END_HEADERS (0x4): Bit 3 being set indicates that this frame ends | END_HEADERS (0x4): Bit 3 being set indicates that this frame | |||
the sequence of header block fragments necessary to provide a | contains an entire header block (Section 4.3) and is not followed | |||
complete set of header fields. | by any CONTINUATION frames. | |||
The payload for a complete header block is provided by a sequence | ||||
of that starts with a HEADERS frame, followed by zero or more | ||||
CONTINUATION frames. The sequence is terminated by a frame with | ||||
the END_HEADERS flag set. Once the sequence terminates, the | ||||
payload of all HEADERS and CONTINUATION frames are concatenated | ||||
and interpreted as a single block. | ||||
A HEADERS frame without the END_HEADERS flag set MUST be followed | A HEADERS frame without the END_HEADERS flag set MUST be followed | |||
by a CONTINUATION frame for the same stream. A receiver MUST | by a CONTINUATION frame for the same stream. A receiver MUST | |||
treat the receipt of any other type of frame or a frame on a | treat the receipt of any other type of frame or a frame on a | |||
different stream as a connection error (Section 5.4.1) of type | different stream as a connection error (Section 5.4.1) of type | |||
PROTOCOL_ERROR. | PROTOCOL_ERROR. | |||
PRIORITY (0x8): Bit 4 being set indicates that the first four octets | PRIORITY (0x8): Bit 4 being set indicates that the first four octets | |||
of this frame contain a single reserved bit and a 31-bit priority; | of this frame contain a single reserved bit and a 31-bit priority; | |||
see Section 5.3. If this bit is not set, the four bytes do not | see Section 5.3. If this bit is not set, the four bytes do not | |||
skipping to change at page 27, line 44 | skipping to change at page 27, line 38 | |||
If a RST_STREAM frame identifying an idle stream is received, the | If a RST_STREAM frame identifying an idle stream is received, the | |||
recipient MUST treat this as a connection error (Section 5.4.1) of | recipient MUST treat this as a connection error (Section 5.4.1) of | |||
type PROTOCOL_ERROR. | type PROTOCOL_ERROR. | |||
6.5. SETTINGS | 6.5. SETTINGS | |||
The SETTINGS frame (type=0x4) conveys configuration parameters that | The SETTINGS frame (type=0x4) conveys configuration parameters that | |||
affect how endpoints communicate. The parameters are either | affect how endpoints communicate. The parameters are either | |||
constraints on peer behavior or preferences. | constraints on peer behavior or preferences. | |||
Settings are not negotiated. Settings describe characteristics of | ||||
the sending peer, which are used by the receiving peer. Different | ||||
values for the same setting can be advertised by each peer. For | ||||
example, a client might set a high initial flow control window, | ||||
whereas a server might set a lower value to conserve resources. | ||||
SETTINGS frames MUST be sent at the start of a connection, and MAY be | SETTINGS frames MUST be sent at the start of a connection, and MAY be | |||
sent at any other time by either endpoint over the lifetime of the | sent at any other time by either endpoint over the lifetime of the | |||
connection. | connection. | |||
Implementations MUST support all of the settings defined by this | Implementations MUST support all of the settings defined by this | |||
specification and MAY support additional settings defined by | specification and MAY support additional settings defined by | |||
extensions. Unsupported or unrecognized settings MUST be ignored. | extensions. Unsupported or unrecognized settings MUST be ignored. | |||
New settings MUST NOT be defined or implemented in a way that | New settings MUST NOT be defined or implemented in a way that | |||
requires endpoints to understand them in order to communicate | requires endpoints to understand them in order to communicate | |||
successfully. | successfully. | |||
skipping to change at page 29, line 11 | skipping to change at page 29, line 11 | |||
+---------------------------------------------------------------+ | +---------------------------------------------------------------+ | |||
Setting Format | Setting Format | |||
6.5.2. Defined Settings | 6.5.2. Defined Settings | |||
The following settings are defined: | The following settings are defined: | |||
SETTINGS_HEADER_TABLE_SIZE (1): Allows the sender to inform the | SETTINGS_HEADER_TABLE_SIZE (1): Allows the sender to inform the | |||
remote endpoint of the size of the header compression table used | remote endpoint of the size of the header compression table used | |||
to decode header blocks. The default value is 4096 bytes. | to decode header blocks. The space available for encoding cannot | |||
be changed; it is determined by the setting sent by the peer that | ||||
receives the header blocks. The initial value is 4096 bytes. | ||||
SETTINGS_ENABLE_PUSH (2): This setting can be use to disable server | SETTINGS_ENABLE_PUSH (2): This setting can be use to disable server | |||
push (Section 8.2). An endpoint MUST NOT send a PUSH_PROMISE | push (Section 8.2). An endpoint MUST NOT send a PUSH_PROMISE | |||
frame if it receives this setting set to a value of 0. The | frame if it receives this setting set to a value of 0. The | |||
default value is 1, which indicates that push is permitted. | initial value is 1, which indicates that push is permitted. | |||
SETTINGS_MAX_CONCURRENT_STREAMS (4): Indicates the maximum number of | SETTINGS_MAX_CONCURRENT_STREAMS (4): Indicates the maximum number of | |||
concurrent streams that the sender will allow. This limit is | concurrent streams that the sender will allow. This limit is | |||
directional: it applies to the number of streams that the sender | directional: it applies to the number of streams that the sender | |||
permits the receiver to create. By default there is no limit. It | permits the receiver to create. Initially there is no limit to | |||
is recommended that this value be no smaller than 100, so as to | this value. It is recommended that this value be no smaller than | |||
not unnecessarily limit parallelism. | 100, so as to not unnecessarily limit parallelism. | |||
SETTINGS_INITIAL_WINDOW_SIZE (7): Indicates the sender's initial | SETTINGS_INITIAL_WINDOW_SIZE (7): Indicates the sender's initial | |||
window size (in bytes) for stream level flow control. | window size (in bytes) for stream level flow control. | |||
This settings affects the window size of all streams, including | This settings affects the window size of all streams, including | |||
existing streams, see Section 6.9.2. | existing streams, see Section 6.9.2. | |||
SETTINGS_FLOW_CONTROL_OPTIONS (10): Indicates flow control options. | SETTINGS_FLOW_CONTROL_OPTIONS (10): Indicates flow control options. | |||
The least significant bit (0x1) of the value is set to indicate | The least significant bit (0x1) of the value is set to indicate | |||
that the sender has disabled all flow control. This bit cannot be | that the sender has disabled all flow control. This bit cannot be | |||
skipping to change at page 29, line 46 | skipping to change at page 29, line 48 | |||
All bits other than the least significant are reserved. | All bits other than the least significant are reserved. | |||
6.5.3. Settings Synchronization | 6.5.3. Settings Synchronization | |||
Most values in SETTINGS benefit from or require an understanding of | Most values in SETTINGS benefit from or require an understanding of | |||
when the peer has received and applied the changed setting values. | when the peer has received and applied the changed setting values. | |||
In order to provide such synchronization timepoints, the recipient of | In order to provide such synchronization timepoints, the recipient of | |||
a SETTINGS frame in which the ACK flag is not set MUST apply the | a SETTINGS frame in which the ACK flag is not set MUST apply the | |||
updated settings as soon as possible upon receipt. | updated settings as soon as possible upon receipt. | |||
The values in the SETTINGS frame MUST be applied in sequence, with no | The values in the SETTINGS frame MUST be applied in the order they | |||
other frame processing between values. Once all values have been | appear, with no other frame processing between values. Once all | |||
applied, the recipient MUST immediately emit a SETTINGS frame with | values have been applied, the recipient MUST immediately emit a | |||
the ACK flag set. | SETTINGS frame with the ACK flag set. The sender of altered settings | |||
applies changes upon receiving a SETTINGS frame with the ACK flag | ||||
set. | ||||
If the sender of a SETTINGS frame does not receive an acknowledgement | If the sender of a SETTINGS frame does not receive an acknowledgement | |||
within a reasonable amount of time, it MAY issue a connection error | within a reasonable amount of time, it MAY issue a connection error | |||
(Section 5.4.1) of type SETTINGS_TIMEOUT. | (Section 5.4.1) of type SETTINGS_TIMEOUT. | |||
6.6. PUSH_PROMISE | 6.6. PUSH_PROMISE | |||
The PUSH_PROMISE frame (type=0x5) is used to notify the peer endpoint | The PUSH_PROMISE frame (type=0x5) is used to notify the peer endpoint | |||
in advance of streams the sender intends to initiate. The | in advance of streams the sender intends to initiate. The | |||
PUSH_PROMISE frame includes the unsigned 31-bit identifier of the | PUSH_PROMISE frame includes the unsigned 31-bit identifier of the | |||
stream the endpoint plans to create along with a minimal set of | stream the endpoint plans to create along with a set of headers that | |||
headers that provide additional context for the stream. Section 8.2 | provide additional context for the stream. Section 8.2 contains a | |||
contains a thorough description of the use of PUSH_PROMISE frames. | thorough description of the use of PUSH_PROMISE frames. | |||
PUSH_PROMISE MUST NOT be sent if the SETTINGS_ENABLE_PUSH setting of | PUSH_PROMISE MUST NOT be sent if the SETTINGS_ENABLE_PUSH setting of | |||
the peer endpoint is set to 0. | the peer endpoint is set to 0. | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|X| Promised-Stream-ID (31) | | |X| Promised-Stream-ID (31) | | |||
+-+-------------------------------------------------------------+ | +-+-------------------------------------------------------------+ | |||
| Header Block Fragment (*) ... | | Header Block Fragment (*) ... | |||
skipping to change at page 30, line 44 | skipping to change at page 30, line 48 | |||
Following the "Promised-Stream-ID" is a header block fragment | Following the "Promised-Stream-ID" is a header block fragment | |||
(Section 4.3). | (Section 4.3). | |||
PUSH_PROMISE frames MUST be associated with an existing, peer- | PUSH_PROMISE frames MUST be associated with an existing, peer- | |||
initiated stream. If the stream identifier field specifies the value | initiated stream. If the stream identifier field specifies the value | |||
0x0, a recipient MUST respond with a connection error (Section 5.4.1) | 0x0, a recipient MUST respond with a connection error (Section 5.4.1) | |||
of type PROTOCOL_ERROR. | of type PROTOCOL_ERROR. | |||
The PUSH_PROMISE frame defines the following flags: | The PUSH_PROMISE frame defines the following flags: | |||
END_PUSH_PROMISE (0x4): The END_PUSH_PROMISE bit indicates that this | END_PUSH_PROMISE (0x4): Bit 3 being set indicates that this frame | |||
frame ends the sequence of header block fragments necessary to | contains an entire header block (Section 4.3) and is not followed | |||
provide a complete set of headers. | by any CONTINUATION frames. | |||
The payload for a complete header block is provided by a sequence | ||||
of frames that starts with a PUSH_PROMISE frame, followed by zero | ||||
or more CONTINUATION frames. The sequence terminates by a | ||||
PUSH_PROMISE frame with the END_PUSH_PROMISE flag set or a | ||||
CONTINUATION frame with the END_HEADERS flag set. Once the | ||||
sequence terminates, the payload of all frames in the sequence are | ||||
concatenated and interpreted as a single block. | ||||
A PUSH_PROMISE frame without the END_PUSH_PROMISE flag set MUST be | A PUSH_PROMISE frame without the END_PUSH_PROMISE flag set MUST be | |||
followed by a CONTINUATION frame for the same stream. A receiver | followed by a CONTINUATION frame for the same stream. A receiver | |||
MUST treat the receipt of any other type of frame or a frame on a | MUST treat the receipt of any other type of frame or a frame on a | |||
different stream as a connection error (Section 5.4.1) of type | different stream as a connection error (Section 5.4.1) of type | |||
PROTOCOL_ERROR. | PROTOCOL_ERROR. | |||
Promised streams are not required to be used in order promised. The | Promised streams are not required to be used in order promised. The | |||
PUSH_PROMISE only reserves stream identifiers for later use. | PUSH_PROMISE only reserves stream identifiers for later use. | |||
skipping to change at page 38, line 21 | skipping to change at page 38, line 21 | |||
re-enable flow control - by sending a WINDOW_UPDATE or by clearing | re-enable flow control - by sending a WINDOW_UPDATE or by clearing | |||
the bits on the SETTINGS_FLOW_CONTROL_OPTIONS setting - MUST be | the bits on the SETTINGS_FLOW_CONTROL_OPTIONS setting - MUST be | |||
rejected with a FLOW_CONTROL_ERROR error code. | rejected with a FLOW_CONTROL_ERROR error code. | |||
6.10. CONTINUATION | 6.10. CONTINUATION | |||
The CONTINUATION frame (type=0xA) is used to continue a sequence of | The CONTINUATION frame (type=0xA) is used to continue a sequence of | |||
header block fragments (Section 4.3). Any number of CONTINUATION | header block fragments (Section 4.3). Any number of CONTINUATION | |||
frames can be sent on an existing stream, as long as the preceding | frames can be sent on an existing stream, as long as the preceding | |||
frame on the same stream is one of HEADERS, PUSH_PROMISE or | frame on the same stream is one of HEADERS, PUSH_PROMISE or | |||
CONTINUATION. | CONTINUATION without the END_HEADERS or END_PUSH_PROMISE flag set. | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Header Block Fragment (*) ... | | Header Block Fragment (*) ... | |||
+---------------------------------------------------------------+ | +---------------------------------------------------------------+ | |||
CONTINUATION Frame Payload | CONTINUATION Frame Payload | |||
The CONTINUATION frame defines the following flags: | The CONTINUATION frame defines the following flags: | |||
END_HEADERS (0x4): The END_HEADERS bit indicates that this frame | END_HEADERS (0x4): Bit 3 being set indicates that this frame ends a | |||
ends the sequence of header block fragments necessary to provide a | header block (Section 4.3). | |||
complete set of header fields. | ||||
The payload for a complete header block is provided by a sequence | ||||
that starts with a HEADERS or PUSH_PROMISE frame and zero or more | ||||
CONTINUATION frames, terminated by a HEADERS or CONTINUATION frame | ||||
with the END_HEADERS flag set, or PUSH_PROMISE frame with the | ||||
END_PUSH_PROMISE flag set. Once the sequence terminates, the | ||||
payload of all frames in the sequence are concatenated and | ||||
interpreted as a single block. | ||||
A HEADERS, PUSH_PROMISE, or CONTINUATION frame without the | If the END_HEADERS bit is not set, this frame MUST be followed by | |||
END_HEADERS flag set MUST be followed by a CONTINUATION frame for | another CONTINUATION frame. A receiver MUST treat the receipt of | |||
the same stream. A receiver MUST treat the receipt of any other | any other type of frame or a frame on a different stream as a | |||
type of frame or a frame on a different stream as a connection | connection error (Section 5.4.1) of type PROTOCOL_ERROR. | |||
error (Section 5.4.1) of type PROTOCOL_ERROR. | ||||
The payload of a CONTINUATION frame contains a header block fragment | The payload of a CONTINUATION frame contains a header block fragment | |||
(Section 4.3). | (Section 4.3). | |||
The CONTINUATION frame changes the connection state as defined in | The CONTINUATION frame changes the connection state as defined in | |||
Section 4.3. | Section 4.3. | |||
CONTINUATION frames MUST be associated with a stream. If a | CONTINUATION frames MUST be associated with a stream. If a | |||
CONTINUATION frame is received whose stream identifier field is 0x0, | CONTINUATION frame is received whose stream identifier field is 0x0, | |||
the recipient MUST respond with a connection error (Section 5.4.1) of | the recipient MUST respond with a connection error (Section 5.4.1) of | |||
type PROTOCOL_ERROR. | type PROTOCOL_ERROR. | |||
A CONTINUATION frame MUST be preceded by a HEADERS, PUSH_PROMISE or | A CONTINUATION frame MUST be preceded by a HEADERS, PUSH_PROMISE or | |||
CONTINUATION frame. A recipient that observes violation of this rule | CONTINUATION frame without the END_HEADERS flag set. A recipient | |||
MUST respond with a connection error (Section 5.4.1) of type | that observes violation of this rule MUST respond with a connection | |||
PROTOCOL_ERROR. | error (Section 5.4.1) of type PROTOCOL_ERROR. | |||
7. Error Codes | 7. Error Codes | |||
Error codes are 32-bit fields that are used in RST_STREAM and GOAWAY | Error codes are 32-bit fields that are used in RST_STREAM and GOAWAY | |||
frames to convey the reasons for the stream or connection error. | frames to convey the reasons for the stream or connection error. | |||
Error codes share a common code space. Some error codes only apply | Error codes share a common code space. Some error codes only apply | |||
to specific conditions and have no defined semantics in certain frame | to specific conditions and have no defined semantics in certain frame | |||
types. | types. | |||
skipping to change at page 45, line 37 | skipping to change at page 45, line 35 | |||
A malformed request or response is one that uses a valid sequence of | A malformed request or response is one that uses a valid sequence of | |||
HTTP/2.0 frames, but is otherwise invalid due to the presence of | HTTP/2.0 frames, but is otherwise invalid due to the presence of | |||
prohibited header fields, the absence of mandatory header fields, or | prohibited header fields, the absence of mandatory header fields, or | |||
the inclusion of uppercase header field names. | the inclusion of uppercase header field names. | |||
A request or response that includes an entity body can include a | A request or response that includes an entity body can include a | |||
"content-length" header field. A request or response is also | "content-length" header field. A request or response is also | |||
malformed if the value of a "content-length" header field does not | malformed if the value of a "content-length" header field does not | |||
equal the sum of the DATA frame payload lengths that form the body. | equal the sum of the DATA frame payload lengths that form the body. | |||
Intermediaries MAY forward a malformed request or response, but only | Intermediaries that process HTTP requests or responses (i.e., all | |||
if the frames are forwarded without inspection of header fields. | intermediaries other than those acting as tunnels) MUST NOT forward a | |||
malformed request or response. | ||||
Implementations that detect malformed requests or responses need to | Implementations that detect malformed requests or responses need to | |||
ensure that the stream ends. For malformed requests, a server MAY | ensure that the stream ends. For malformed requests, a server MAY | |||
send an HTTP response to prior to closing or resetting the stream. | send an HTTP response to prior to closing or resetting the stream. | |||
Clients MUST NOT accept a malformed response. | Clients MUST NOT accept a malformed response. | |||
8.1.4. Request Reliability Mechanisms in HTTP/2.0 | 8.1.4. Request Reliability Mechanisms in HTTP/2.0 | |||
In HTTP/1.1, an HTTP client is unable to retry a non-idempotent | In HTTP/1.1, an HTTP client is unable to retry a non-idempotent | |||
request when an error occurs, because there is no means to determine | request when an error occurs, because there is no means to determine | |||
skipping to change at page 52, line 23 | skipping to change at page 52, line 23 | |||
to HTTP/2.0 MUST remove any instances of the "obs-fold" production | to HTTP/2.0 MUST remove any instances of the "obs-fold" production | |||
from header field values. | from header field values. | |||
10.4. Cacheability of Pushed Resources | 10.4. Cacheability of Pushed Resources | |||
Pushed resources are responses without an explicit request; the | Pushed resources are responses without an explicit request; the | |||
request for a pushed resource is synthesized from the request that | request for a pushed resource is synthesized from the request that | |||
triggered the push, plus resource identification information provided | triggered the push, plus resource identification information provided | |||
by the server. Request header fields are necessary for HTTP cache | by the server. Request header fields are necessary for HTTP cache | |||
control validations (such as the Vary header field) to work. For | control validations (such as the Vary header field) to work. For | |||
this reason, caches MUST inherit request header fields from the | this reason, caches MUST associate the request header fields from the | |||
associated stream for the push. This includes the Cookie header | PUSH_PROMISE frame with the response headers and content delivered on | |||
field. | the pushed stream. This includes the Cookie header field. | |||
Caching resources that are pushed is possible, based on the guidance | Caching resources that are pushed is possible, based on the guidance | |||
provided by the origin server in the Cache-Control header field. | provided by the origin server in the Cache-Control header field. | |||
However, this can cause issues if a single server hosts more than one | However, this can cause issues if a single server hosts more than one | |||
tenant. For example, a server might offer multiple users each a | tenant. For example, a server might offer multiple users each a | |||
small portion of its URI space. | small portion of its URI space. | |||
Where multiple tenants share space on the same server, that server | Where multiple tenants share space on the same server, that server | |||
MUST ensure that tenants are not able to push representations of | MUST ensure that tenants are not able to push representations of | |||
resources that they do not have authority over. Failure to enforce | resources that they do not have authority over. Failure to enforce | |||
skipping to change at page 59, line 8 | skipping to change at page 59, line 8 | |||
[RFC1323] Jacobson, V., Braden, B., and D. Borman, "TCP | [RFC1323] Jacobson, V., Braden, B., and D. Borman, "TCP | |||
Extensions for High Performance", RFC 1323, May 1992. | Extensions for High Performance", RFC 1323, May 1992. | |||
[TALKING] Huang, L-S., Chen, E., Barth, A., Rescorla, E., and C. | [TALKING] Huang, L-S., Chen, E., Barth, A., Rescorla, E., and C. | |||
Jackson, "Talking to Yourself for Fun and Profit", | Jackson, "Talking to Yourself for Fun and Profit", | |||
2011, <http://w2spconf.com/2011/papers/websocket.pdf>. | 2011, <http://w2spconf.com/2011/papers/websocket.pdf>. | |||
Appendix A. Change Log (to be removed by RFC Editor before publication) | Appendix A. Change Log (to be removed by RFC Editor before publication) | |||
A.1. Since draft-ietf-httpbis-http2-06 | A.1. Since draft-ietf-httpbis-http2-07 | |||
Marked draft for implementation. | ||||
A.2. Since draft-ietf-httpbis-http2-06 | ||||
Adding definition for CONNECT method. | Adding definition for CONNECT method. | |||
Constraining the use of push to safe, cacheable methods with no | Constraining the use of push to safe, cacheable methods with no | |||
request body. | request body. | |||
Changing from :host to :authority to remove any potential confusion. | Changing from :host to :authority to remove any potential confusion. | |||
Adding setting for header compression table size. | Adding setting for header compression table size. | |||
Adding settings acknowledgement. | Adding settings acknowledgement. | |||
Removing unnecessary and potentially problematic flags from | Removing unnecessary and potentially problematic flags from | |||
CONTINUATION. | CONTINUATION. | |||
Added denial of service considerations. | Added denial of service considerations. | |||
A.2. Since draft-ietf-httpbis-http2-05 | A.3. Since draft-ietf-httpbis-http2-05 | |||
Marking the draft ready for implementation. | Marking the draft ready for implementation. | |||
Renumbering END_PUSH_PROMISE flag. | Renumbering END_PUSH_PROMISE flag. | |||
Editorial clarifications and changes. | Editorial clarifications and changes. | |||
A.3. Since draft-ietf-httpbis-http2-04 | A.4. Since draft-ietf-httpbis-http2-04 | |||
Added CONTINUATION frame for HEADERS and PUSH_PROMISE. | Added CONTINUATION frame for HEADERS and PUSH_PROMISE. | |||
PUSH_PROMISE is no longer implicitly prohibited if | PUSH_PROMISE is no longer implicitly prohibited if | |||
SETTINGS_MAX_CONCURRENT_STREAMS is zero. | SETTINGS_MAX_CONCURRENT_STREAMS is zero. | |||
Push expanded to allow all safe methods without a request body. | Push expanded to allow all safe methods without a request body. | |||
Clarified the use of HTTP header fields in requests and responses. | Clarified the use of HTTP header fields in requests and responses. | |||
Prohibited HTTP/1.1 hop-by-hop header fields. | Prohibited HTTP/1.1 hop-by-hop header fields. | |||
skipping to change at page 60, line 12 | skipping to change at page 60, line 15 | |||
Clarified requirements around handling different frames after stream | Clarified requirements around handling different frames after stream | |||
close, stream reset and GOAWAY. | close, stream reset and GOAWAY. | |||
Added more specific prohibitions for sending of different frame types | Added more specific prohibitions for sending of different frame types | |||
in various stream states. | in various stream states. | |||
Making the last received setting value the effective value. | Making the last received setting value the effective value. | |||
Clarified requirements on TLS version, extension and ciphers. | Clarified requirements on TLS version, extension and ciphers. | |||
A.4. Since draft-ietf-httpbis-http2-03 | A.5. Since draft-ietf-httpbis-http2-03 | |||
Committed major restructuring atrocities. | Committed major restructuring atrocities. | |||
Added reference to first header compression draft. | Added reference to first header compression draft. | |||
Added more formal description of frame lifecycle. | Added more formal description of frame lifecycle. | |||
Moved END_STREAM (renamed from FINAL) back to HEADERS/DATA. | Moved END_STREAM (renamed from FINAL) back to HEADERS/DATA. | |||
Removed HEADERS+PRIORITY, added optional priority to HEADERS frame. | Removed HEADERS+PRIORITY, added optional priority to HEADERS frame. | |||
Added PRIORITY frame. | Added PRIORITY frame. | |||
A.5. Since draft-ietf-httpbis-http2-02 | A.6. Since draft-ietf-httpbis-http2-02 | |||
Added continuations to frames carrying header blocks. | Added continuations to frames carrying header blocks. | |||
Replaced use of "session" with "connection" to avoid confusion with | Replaced use of "session" with "connection" to avoid confusion with | |||
other HTTP stateful concepts, like cookies. | other HTTP stateful concepts, like cookies. | |||
Removed "message". | Removed "message". | |||
Switched to TLS ALPN from NPN. | Switched to TLS ALPN from NPN. | |||
Editorial changes. | Editorial changes. | |||
A.6. Since draft-ietf-httpbis-http2-01 | A.7. Since draft-ietf-httpbis-http2-01 | |||
Added IANA considerations section for frame types, error codes and | Added IANA considerations section for frame types, error codes and | |||
settings. | settings. | |||
Removed data frame compression. | Removed data frame compression. | |||
Added PUSH_PROMISE. | Added PUSH_PROMISE. | |||
Added globally applicable flags to framing. | Added globally applicable flags to framing. | |||
skipping to change at page 61, line 23 | skipping to change at page 61, line 27 | |||
Restructured frame header. Removed distinction between data and | Restructured frame header. Removed distinction between data and | |||
control frames. | control frames. | |||
Altered flow control properties to include session-level limits. | Altered flow control properties to include session-level limits. | |||
Added note on cacheability of pushed resources and multiple tenant | Added note on cacheability of pushed resources and multiple tenant | |||
servers. | servers. | |||
Changed protocol label form based on discussions. | Changed protocol label form based on discussions. | |||
A.7. Since draft-ietf-httpbis-http2-00 | A.8. Since draft-ietf-httpbis-http2-00 | |||
Changed title throughout. | Changed title throughout. | |||
Removed section on Incompatibilities with SPDY draft#2. | Removed section on Incompatibilities with SPDY draft#2. | |||
Changed INTERNAL_ERROR on GOAWAY to have a value of 2 <https:// | Changed INTERNAL_ERROR on GOAWAY to have a value of 2 <https:// | |||
groups.google.com/forum/?fromgroups#!topic/spdy-dev/cfUef2gL3iU>. | groups.google.com/forum/?fromgroups#!topic/spdy-dev/cfUef2gL3iU>. | |||
Replaced abstract and introduction. | Replaced abstract and introduction. | |||
Added section on starting HTTP/2.0, including upgrade mechanism. | Added section on starting HTTP/2.0, including upgrade mechanism. | |||
Removed unused references. | Removed unused references. | |||
Added flow control principles (Section 5.2.1) based on <http:// | Added flow control principles (Section 5.2.1) based on <http:// | |||
tools.ietf.org/html/draft-montenegro-httpbis-http2-fc-principles-01>. | tools.ietf.org/html/draft-montenegro-httpbis-http2-fc-principles-01>. | |||
A.8. Since draft-mbelshe-httpbis-spdy-00 | A.9. Since draft-mbelshe-httpbis-spdy-00 | |||
Adopted as base for draft-ietf-httpbis-http2. | Adopted as base for draft-ietf-httpbis-http2. | |||
Updated authors/editors list. | Updated authors/editors list. | |||
Added status note. | Added status note. | |||
Authors' Addresses | Authors' Addresses | |||
Mike Belshe | Mike Belshe | |||
skipping to change at page 62, line 23 | skipping to change at page 62, line 23 | |||
Google, Inc | Google, Inc | |||
EMail: fenix@google.com | EMail: fenix@google.com | |||
Martin Thomson (editor) | Martin Thomson (editor) | |||
Microsoft | Microsoft | |||
3210 Porter Drive | 3210 Porter Drive | |||
Palo Alto 94304 | Palo Alto 94304 | |||
US | US | |||
EMail: martin.thomson@skype.net | EMail: martin.thomson@gmail.com | |||
Alexey Melnikov (editor) | Alexey Melnikov (editor) | |||
Isode Ltd | Isode Ltd | |||
5 Castle Business Village | 5 Castle Business Village | |||
36 Station Road | 36 Station Road | |||
Hampton, Middlesex TW12 2BX | Hampton, Middlesex TW12 2BX | |||
UK | UK | |||
EMail: Alexey.Melnikov@isode.com | EMail: Alexey.Melnikov@isode.com | |||
End of changes. 43 change blocks. | ||||
114 lines changed or deleted | 116 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |