OSDN Git Service

new repo
[bytom/vapor.git] / vendor / golang.org / x / net / http2 / testdata / draft-ietf-httpbis-http2.xml
1 <?xml version="1.0"?>
2 <?xml-stylesheet type="text/xsl" href="lib/rfc2629.xslt"?>
3 <?rfc toc="yes" ?>
4 <?rfc symrefs="yes" ?>
5 <?rfc sortrefs="yes" ?>
6 <?rfc compact="yes"?>
7 <?rfc subcompact="no" ?>
8 <?rfc linkmailto="no" ?>
9 <?rfc editing="no" ?>
10 <?rfc comments="yes" ?>
11 <?rfc inline="yes"?>
12 <?rfc rfcedstyle="yes"?>
13 <?rfc-ext allow-markup-in-artwork="yes" ?>
14 <?rfc-ext include-index="no" ?>
15
16 <rfc ipr="trust200902"
17      category="std"
18      docName="draft-ietf-httpbis-http2-latest"
19      x:maturity-level="proposed"
20      xmlns:x="http://purl.org/net/xml2rfc/ext">
21   <x:feedback template="mailto:ietf-http-wg@w3.org?subject={docname},%20%22{section}%22&amp;body=&lt;{ref}&gt;:"/>
22   <front>
23     <title abbrev="HTTP/2">Hypertext Transfer Protocol version 2</title>
24
25     <author initials="M." surname="Belshe" fullname="Mike Belshe">
26       <organization>Twist</organization>
27       <address>
28         <email>mbelshe@chromium.org</email>
29       </address>
30     </author>
31
32     <author initials="R." surname="Peon" fullname="Roberto Peon">
33       <organization>Google, Inc</organization>
34       <address>
35         <email>fenix@google.com</email>
36       </address>
37     </author>
38
39     <author initials="M." surname="Thomson" fullname="Martin Thomson" role="editor">
40       <organization>Mozilla</organization>
41       <address>
42         <postal>
43           <street>331 E Evelyn Street</street>
44           <city>Mountain View</city>
45           <region>CA</region>
46           <code>94041</code>
47           <country>US</country>
48         </postal>
49         <email>martin.thomson@gmail.com</email>
50       </address>
51     </author>
52
53     <date year="2014" />
54     <area>Applications</area>
55     <workgroup>HTTPbis</workgroup>
56     <keyword>HTTP</keyword>
57     <keyword>SPDY</keyword>
58     <keyword>Web</keyword>
59
60     <abstract>
61       <t>
62         This specification describes an optimized expression of the semantics of the Hypertext
63         Transfer Protocol (HTTP). HTTP/2 enables a more efficient use of network resources and a
64         reduced perception of latency by introducing header field compression and allowing multiple
65         concurrent messages on the same connection. It also introduces unsolicited push of
66         representations from servers to clients.
67       </t>
68       <t>
69         This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.
70         HTTP's existing semantics remain unchanged.
71       </t>
72     </abstract>
73
74     <note title="Editorial Note (To be removed by RFC Editor)">
75       <t>
76         Discussion of this draft takes place on the HTTPBIS working group mailing list
77         (ietf-http-wg@w3.org), which is archived at <eref
78         target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
79       </t>
80       <t>
81         Working Group information can be found at <eref
82         target="https://tools.ietf.org/wg/httpbis/"/>; that specific to HTTP/2 are at <eref
83         target="https://http2.github.io/"/>.
84       </t>
85       <t>
86         The changes in this draft are summarized in <xref
87         target="change.log"/>.
88       </t>
89     </note>
90
91   </front>
92
93   <middle>
94     <section anchor="intro" title="Introduction">
95
96       <t>
97         The Hypertext Transfer Protocol (HTTP) is a wildly successful protocol. However, the
98         HTTP/1.1 message format (<xref target="RFC7230" x:fmt="," x:rel="#http.message"/>) has
99         several characteristics that have a negative overall effect on application performance
100         today.
101       </t>
102       <t>
103         In particular, HTTP/1.0 allowed only one request to be outstanding at a time on a given
104         TCP connection. HTTP/1.1 added request pipelining, but this only partially addressed
105         request concurrency and still suffers from head-of-line blocking. Therefore, HTTP/1.1
106         clients that need to make many requests typically use multiple connections to a server in
107         order to achieve concurrency and thereby reduce latency.
108       </t>
109       <t>
110         Furthermore, HTTP header fields are often repetitive and verbose, causing unnecessary
111         network traffic, as well as causing the initial <xref target="TCP">TCP</xref> congestion
112         window to quickly fill. This can result in excessive latency when multiple requests are
113         made on a new TCP connection.
114       </t>
115       <t>
116         HTTP/2 addresses these issues by defining an optimized mapping of HTTP's semantics to an
117         underlying connection. Specifically, it allows interleaving of request and response
118         messages on the same connection and uses an efficient coding for HTTP header fields. It
119         also allows prioritization of requests, letting more important requests complete more
120         quickly, further improving performance.
121       </t>
122       <t>
123         The resulting protocol is more friendly to the network, because fewer TCP connections can
124         be used in comparison to HTTP/1.x. This means less competition with other flows, and
125         longer-lived connections, which in turn leads to better utilization of available network
126         capacity.
127       </t>
128       <t>
129         Finally, HTTP/2 also enables more efficient processing of messages through use of binary
130         message framing.
131       </t>
132     </section>
133
134     <section anchor="Overview" title="HTTP/2 Protocol Overview">
135       <t>
136         HTTP/2 provides an optimized transport for HTTP semantics.  HTTP/2 supports all of the core
137         features of HTTP/1.1, but aims to be more efficient in several ways.
138       </t>
139       <t>
140         The basic protocol unit in HTTP/2 is a <xref target="FrameHeader">frame</xref>.  Each frame
141         type serves a different purpose.  For example, <x:ref>HEADERS</x:ref> and
142         <x:ref>DATA</x:ref> frames form the basis of <xref target="HttpSequence">HTTP requests and
143         responses</xref>; other frame types like <x:ref>SETTINGS</x:ref>,
144         <x:ref>WINDOW_UPDATE</x:ref>, and <x:ref>PUSH_PROMISE</x:ref> are used in support of other
145         HTTP/2 features.
146       </t>
147       <t>
148         Multiplexing of requests is achieved by having each HTTP request-response exchange
149         associated with its own <xref target="StreamsLayer">stream</xref>. Streams are largely
150         independent of each other, so a blocked or stalled request or response does not prevent
151         progress on other streams.
152       </t>
153       <t>
154         Flow control and prioritization ensure that it is possible to efficiently use multiplexed
155         streams.  <xref target="FlowControl">Flow control</xref> helps to ensure that only data that
156         can be used by a receiver is transmitted.  <xref
157         target="StreamPriority">Prioritization</xref> ensures that limited resources can be directed
158         to the most important streams first.
159       </t>
160       <t>
161         HTTP/2 adds a new interaction mode, whereby a server can <xref target="PushResources">push
162         responses to a client</xref>.  Server push allows a server to speculatively send a client
163         data that the server anticipates the client will need, trading off some network usage
164         against a potential latency gain.  The server does this by synthesizing a request, which it
165         sends as a <x:ref>PUSH_PROMISE</x:ref> frame.  The server is then able to send a response to
166         the synthetic request on a separate stream.
167       </t>
168       <t>
169         Frames that contain HTTP header fields are <xref target="HeaderBlock">compressed</xref>.
170         HTTP requests can be highly redundant, so compression can reduce the size of requests and
171         responses significantly.
172       </t>
173
174       <section title="Document Organization">
175         <t>
176           The HTTP/2 specification is split into four parts:
177           <list style="symbols">
178             <t>
179               <xref target="starting">Starting HTTP/2</xref> covers how an HTTP/2 connection is
180               initiated.
181             </t>
182             <t>
183               The <xref target="FramingLayer">framing</xref> and <xref
184               target="StreamsLayer">streams</xref> layers describe the way HTTP/2 frames are
185               structured and formed into multiplexed streams.
186             </t>
187             <t>
188               <xref target="FrameTypes">Frame</xref> and <xref target="ErrorCodes">error</xref>
189               definitions include details of the frame and error types used in HTTP/2.
190             </t>
191             <t>
192               <xref target="HTTPLayer">HTTP mappings</xref> and <xref target="HttpExtra">additional
193               requirements</xref> describe how HTTP semantics are expressed using frames and
194               streams.
195           </t>
196           </list>
197         </t>
198         <t>
199           While some of the frame and stream layer concepts are isolated from HTTP, this
200           specification does not define a completely generic framing layer. The framing and streams
201           layers are tailored to the needs of the HTTP protocol and server push.
202         </t>
203       </section>
204
205       <section title="Conventions and Terminology">
206         <t>
207           The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD
208           NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
209           described in <xref target="RFC2119">RFC 2119</xref>.
210         </t>
211         <t>
212           All numeric values are in network byte order.  Values are unsigned unless otherwise
213           indicated.  Literal values are provided in decimal or hexadecimal as appropriate.
214           Hexadecimal literals are prefixed with <spanx style="verb">0x</spanx> to distinguish them
215           from decimal literals.
216         </t>
217         <t>
218           The following terms are used:
219           <list style="hanging">
220             <t hangText="client:">
221               The endpoint initiating the HTTP/2 connection.
222             </t>
223             <t hangText="connection:">
224               A transport-layer connection between two endpoints.
225             </t>
226             <t hangText="connection error:">
227               An error that affects the entire HTTP/2 connection.
228             </t>
229             <t hangText="endpoint:">
230               Either the client or server of the connection.
231             </t>
232             <t hangText="frame:">
233               The smallest unit of communication within an HTTP/2 connection, consisting of a header
234               and a variable-length sequence of octets structured according to the frame type.
235             </t>
236             <t hangText="peer:">
237               An endpoint.  When discussing a particular endpoint, "peer" refers to the endpoint
238               that is remote to the primary subject of discussion.
239             </t>
240             <t hangText="receiver:">
241               An endpoint that is receiving frames.
242             </t>
243             <t hangText="sender:">
244               An endpoint that is transmitting frames.
245             </t>
246             <t hangText="server:">
247               The endpoint which did not initiate the HTTP/2 connection.
248             </t>
249             <t hangText="stream:">
250               A bi-directional flow of frames across a virtual channel within the HTTP/2 connection.
251             </t>
252             <t hangText="stream error:">
253               An error on the individual HTTP/2 stream.
254             </t>
255           </list>
256         </t>
257         <t>
258           Finally, the terms "gateway", "intermediary", "proxy", and "tunnel" are defined
259           in <xref target="RFC7230" x:fmt="of" x:rel="#intermediaries"/>.
260         </t>
261       </section>
262     </section>
263
264     <section anchor="starting" title="Starting HTTP/2">
265       <t>
266         An HTTP/2 connection is an application layer protocol running on top of a TCP connection
267         (<xref target="TCP"/>). The client is the TCP connection initiator.
268       </t>
269       <t>
270         HTTP/2 uses the same "http" and "https" URI schemes used by HTTP/1.1. HTTP/2 shares the same
271         default port numbers: 80 for "http" URIs and 443 for "https" URIs.  As a result,
272         implementations processing requests for target resource URIs like <spanx
273         style="verb">http://example.org/foo</spanx> or <spanx
274         style="verb">https://example.com/bar</spanx> are required to first discover whether the
275         upstream server (the immediate peer to which the client wishes to establish a connection)
276         supports HTTP/2.
277       </t>
278
279       <t>
280         The means by which support for HTTP/2 is determined is different for "http" and "https"
281         URIs. Discovery for "http" URIs is described in <xref target="discover-http"/>.  Discovery
282         for "https" URIs is described in <xref target="discover-https"/>.
283       </t>
284
285       <section anchor="versioning" title="HTTP/2 Version Identification">
286         <t>
287           The protocol defined in this document has two identifiers.
288           <list style="symbols">
289             <x:lt>
290               <t>
291                 The string "h2" identifies the protocol where HTTP/2 uses <xref
292                 target="TLS12">TLS</xref>.  This identifier is used in the <xref
293                 target="TLS-ALPN">TLS application layer protocol negotiation extension (ALPN)</xref>
294                 field and any place that HTTP/2 over TLS is identified.
295               </t>
296               <t>
297                 The "h2" string is serialized into an ALPN protocol identifier as the two octet
298                 sequence: 0x68, 0x32.
299               </t>
300             </x:lt>
301             <x:lt>
302               <t>
303                 The string "h2c" identifies the protocol where HTTP/2 is run over cleartext TCP.
304                 This identifier is used in the HTTP/1.1 Upgrade header field and any place that
305                 HTTP/2 over TCP is identified.
306               </t>
307             </x:lt>
308           </list>
309         </t>
310         <t>
311           Negotiating "h2" or "h2c" implies the use of the transport, security, framing and message
312           semantics described in this document.
313         </t>
314         <t>
315           <cref>RFC Editor's Note: please remove the remainder of this section prior to the
316           publication of a final version of this document.</cref>
317         </t>
318         <t>
319           Only implementations of the final, published RFC can identify themselves as "h2" or "h2c".
320           Until such an RFC exists, implementations MUST NOT identify themselves using these
321           strings.
322         </t>
323         <t>
324           Examples and text throughout the rest of this document use "h2" as a matter of
325           editorial convenience only.  Implementations of draft versions MUST NOT identify using
326           this string.
327         </t>
328         <t>
329           Implementations of draft versions of the protocol MUST add the string "-" and the
330           corresponding draft number to the identifier. For example, draft-ietf-httpbis-http2-11
331           over TLS is identified using the string "h2-11".
332         </t>
333         <t>
334           Non-compatible experiments that are based on these draft versions MUST append the string
335           "-" and an experiment name to the identifier.  For example, an experimental implementation
336           of packet mood-based encoding based on draft-ietf-httpbis-http2-09 might identify itself
337           as "h2-09-emo".  Note that any label MUST conform to the "token" syntax defined in
338           <xref target="RFC7230" x:fmt="of" x:rel="#field.components"/>.  Experimenters are
339           encouraged to coordinate their experiments on the ietf-http-wg@w3.org mailing list.
340         </t>
341       </section>
342
343       <section anchor="discover-http" title="Starting HTTP/2 for &quot;http&quot; URIs">
344         <t>
345           A client that makes a request for an "http" URI without prior knowledge about support for
346           HTTP/2 uses the HTTP Upgrade mechanism (<xref target="RFC7230" x:fmt="of"
347           x:rel="#header.upgrade"/>).  The client makes an HTTP/1.1 request that includes an Upgrade
348           header field identifying HTTP/2 with the "h2c" token.  The HTTP/1.1 request MUST include
349           exactly one <xref target="Http2SettingsHeader">HTTP2-Settings</xref> header field.
350         </t>
351         <figure>
352           <preamble>For example:</preamble>
353           <artwork type="message/http; msgtype=&#34;request&#34;" x:indent-with="  "><![CDATA[
354 GET / HTTP/1.1
355 Host: server.example.com
356 Connection: Upgrade, HTTP2-Settings
357 Upgrade: h2c
358 HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>
359
360 ]]></artwork>
361         </figure>
362         <t>
363           Requests that contain an entity body MUST be sent in their entirety before the client can
364           send HTTP/2 frames.  This means that a large request entity can block the use of the
365           connection until it is completely sent.
366         </t>
367         <t>
368           If concurrency of an initial request with subsequent requests is important, an OPTIONS
369           request can be used to perform the upgrade to HTTP/2, at the cost of an additional
370           round-trip.
371         </t>
372         <t>
373           A server that does not support HTTP/2 can respond to the request as though the Upgrade
374           header field were absent:
375         </t>
376         <figure>
377           <artwork type="message/http; msgtype=&#34;response&#34;" x:indent-with="  ">
378 HTTP/1.1 200 OK
379 Content-Length: 243
380 Content-Type: text/html
381
382 ...
383 </artwork>
384         </figure>
385         <t>
386           A server MUST ignore a "h2" token in an Upgrade header field.  Presence of a token with
387           "h2" implies HTTP/2 over TLS, which is instead negotiated as described in <xref
388           target="discover-https"/>.
389         </t>
390         <t>
391           A server that supports HTTP/2 can accept the upgrade with a 101 (Switching Protocols)
392           response.  After the empty line that terminates the 101 response, the server can begin
393           sending HTTP/2 frames.  These frames MUST include a response to the request that initiated
394           the Upgrade.
395         </t>
396
397         <figure>
398           <preamble>
399             For example:
400           </preamble>
401           <artwork type="message/http; msgtype=&#34;response&#34;" x:indent-with="  ">
402 HTTP/1.1 101 Switching Protocols
403 Connection: Upgrade
404 Upgrade: h2c
405
406 [ HTTP/2 connection ...
407 </artwork>
408         </figure>
409         <t>
410           The first HTTP/2 frame sent by the server is a <x:ref>SETTINGS</x:ref> frame (<xref
411           target="SETTINGS"/>) as the server connection preface (<xref
412           target="ConnectionHeader"/>). Upon receiving the 101 response, the client sends a <xref
413           target="ConnectionHeader">connection preface</xref>, which includes a
414           <x:ref>SETTINGS</x:ref> frame.
415         </t>
416         <t>
417           The HTTP/1.1 request that is sent prior to upgrade is assigned stream identifier 1 and is
418           assigned <xref target="pri-default">default priority values</xref>.  Stream 1 is
419           implicitly half closed from the client toward the server, since the request is completed
420           as an HTTP/1.1 request.  After commencing the HTTP/2 connection, stream 1 is used for the
421           response.
422         </t>
423
424         <section anchor="Http2SettingsHeader" title="HTTP2-Settings Header Field">
425           <t>
426             A request that upgrades from HTTP/1.1 to HTTP/2 MUST include exactly one <spanx
427             style="verb">HTTP2-Settings</spanx> header field.  The <spanx
428             style="verb">HTTP2-Settings</spanx> header field is a connection-specific header field
429             that includes parameters that govern the HTTP/2 connection, provided in anticipation of
430             the server accepting the request to upgrade.
431           </t>
432           <figure>
433             <artwork type="abnf" x:indent-with="  "><![CDATA[
434 HTTP2-Settings    = token68
435 ]]></artwork>
436           </figure>
437           <t>
438             A server MUST NOT upgrade the connection to HTTP/2 if this header field is not present,
439             or if more than one is present. A server MUST NOT send this header field.
440           </t>
441
442           <t>
443             The content of the <spanx style="verb">HTTP2-Settings</spanx> header field is the
444             payload of a <x:ref>SETTINGS</x:ref> frame (<xref target="SETTINGS"/>), encoded as a
445             base64url string (that is, the URL- and filename-safe Base64 encoding described in <xref
446             target="RFC4648" x:fmt="of" x:sec="5"/>, with any trailing '=' characters omitted).  The
447             <xref target="RFC5234">ABNF</xref> production for <spanx style="verb">token68</spanx> is
448             defined in <xref target="RFC7235" x:fmt="of" x:rel="#challenge.and.response"/>.
449           </t>
450           <t>
451             Since the upgrade is only intended to apply to the immediate connection, a client
452             sending <spanx style="verb">HTTP2-Settings</spanx> MUST also send <spanx
453             style="verb">HTTP2-Settings</spanx> as a connection option in the <spanx
454             style="verb">Connection</spanx> header field to prevent it from being forwarded
455             downstream.
456           </t>
457           <t>
458             A server decodes and interprets these values as it would any other
459             <x:ref>SETTINGS</x:ref> frame.  <xref target="SettingsSync">Acknowledgement of the
460             SETTINGS parameters</xref> is not necessary, since a 101 response serves as implicit
461             acknowledgment.  Providing these values in the Upgrade request gives a client an
462             opportunity to provide parameters prior to receiving any frames from the server.
463           </t>
464         </section>
465       </section>
466
467       <section anchor="discover-https" title="Starting HTTP/2 for &quot;https&quot; URIs">
468         <t>
469           A client that makes a request to an "https" URI uses <xref target="TLS12">TLS</xref>
470           with the <xref target="TLS-ALPN">application layer protocol negotiation extension</xref>.
471         </t>
472         <t>
473           HTTP/2 over TLS uses the "h2" application token.  The "h2c" token MUST NOT be sent by a
474           client or selected by a server.
475         </t>
476         <t>
477           Once TLS negotiation is complete, both the client and the server send a <xref
478           target="ConnectionHeader">connection preface</xref>.
479         </t>
480       </section>
481
482       <section anchor="known-http" title="Starting HTTP/2 with Prior Knowledge">
483         <t>
484           A client can learn that a particular server supports HTTP/2 by other means.  For example,
485           <xref target="ALT-SVC"/> describes a mechanism for advertising this capability.
486         </t>
487         <t>
488           A client MAY immediately send HTTP/2 frames to a server that is known to support HTTP/2,
489           after the <xref target="ConnectionHeader">connection preface</xref>; a server can
490           identify such a connection by the presence of the connection preface. This only affects
491           the establishment of HTTP/2 connections over cleartext TCP; implementations that support
492           HTTP/2 over TLS MUST use <xref target="TLS-ALPN">protocol negotiation in TLS</xref>.
493         </t>
494         <t>
495           Without additional information, prior support for HTTP/2 is not a strong signal that a
496           given server will support HTTP/2 for future connections. For example, it is possible for
497           server configurations to change, for configurations to differ between instances in
498           clustered servers, or for network conditions to change.
499         </t>
500       </section>
501
502       <section anchor="ConnectionHeader" title="HTTP/2 Connection Preface">
503         <t>
504           Upon establishment of a TCP connection and determination that HTTP/2 will be used by both
505           peers, each endpoint MUST send a connection preface as a final confirmation and to
506           establish the initial SETTINGS parameters for the HTTP/2 connection.  The client and
507           server each send a different connection preface.
508         </t>
509         <t>
510           The client connection preface starts with a sequence of 24 octets, which in hex notation
511           are:
512         </t>
513         <figure>
514           <artwork type="inline" x:indent-with="  "><![CDATA[
515 0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a
516 ]]></artwork>
517         </figure>
518         <t>
519           (the string <spanx style="verb">PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n</spanx>).  This sequence
520           is followed by a <x:ref>SETTINGS</x:ref> frame (<xref target="SETTINGS"/>).  The
521           <x:ref>SETTINGS</x:ref> frame MAY be empty.  The client sends the client connection
522           preface immediately upon receipt of a 101 Switching Protocols response (indicating a
523           successful upgrade), or as the first application data octets of a TLS connection. If
524           starting an HTTP/2 connection with prior knowledge of server support for the protocol, the
525           client connection preface is sent upon connection establishment.
526         </t>
527         <t>
528           <list>
529             <t>
530               The client connection preface is selected so that a large proportion of HTTP/1.1 or
531               HTTP/1.0 servers and intermediaries do not attempt to process further frames.  Note
532               that this does not address the concerns raised in <xref target="TALKING"/>.
533             </t>
534           </list>
535         </t>
536         <t>
537           The server connection preface consists of a potentially empty <x:ref>SETTINGS</x:ref>
538           frame (<xref target="SETTINGS"/>) that MUST be the first frame the server sends in the
539           HTTP/2 connection.
540         </t>
541         <t>
542           The <x:ref>SETTINGS</x:ref> frames received from a peer as part of the connection preface
543           MUST be acknowledged (see <xref target="SettingsSync"/>) after sending the connection
544           preface.
545         </t>
546         <t>
547           To avoid unnecessary latency, clients are permitted to send additional frames to the
548           server immediately after sending the client connection preface, without waiting to receive
549           the server connection preface.  It is important to note, however, that the server
550           connection preface <x:ref>SETTINGS</x:ref> frame might include parameters that necessarily
551           alter how a client is expected to communicate with the server. Upon receiving the
552           <x:ref>SETTINGS</x:ref> frame, the client is expected to honor any parameters established.
553           In some configurations, it is possible for the server to transmit <x:ref>SETTINGS</x:ref>
554           before the client sends additional frames, providing an opportunity to avoid this issue.
555         </t>
556         <t>
557           Clients and servers MUST treat an invalid connection preface as a <xref
558           target="ConnectionErrorHandler">connection error</xref> of type
559           <x:ref>PROTOCOL_ERROR</x:ref>.  A <x:ref>GOAWAY</x:ref> frame (<xref target="GOAWAY"/>)
560           MAY be omitted in this case, since an invalid preface indicates that the peer is not using
561           HTTP/2.
562         </t>
563       </section>
564     </section>
565
566     <section anchor="FramingLayer" title="HTTP Frames">
567       <t>
568         Once the HTTP/2 connection is established, endpoints can begin exchanging frames.
569       </t>
570
571       <section anchor="FrameHeader" title="Frame Format">
572         <t>
573           All frames begin with a fixed 9-octet header followed by a variable-length payload.
574         </t>
575         <figure title="Frame Layout">
576           <artwork type="inline"><![CDATA[
577   0                   1                   2                   3
578   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
579  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
580  |                 Length (24)                   |
581  +---------------+---------------+---------------+
582  |   Type (8)    |   Flags (8)   |
583  +-+-+-----------+---------------+-------------------------------+
584  |R|                 Stream Identifier (31)                      |
585  +=+=============================================================+
586  |                   Frame Payload (0...)                      ...
587  +---------------------------------------------------------------+
588 ]]></artwork>
589         </figure>
590         <t>
591           The fields of the frame header are defined as:
592           <list style="hanging">
593             <x:lt hangText="Length:">
594               <t>
595                 The length of the frame payload expressed as an unsigned 24-bit integer.  Values
596                 greater than 2<x:sup>14</x:sup> (16,384) MUST NOT be sent unless the receiver has
597                 set a larger value for <x:ref>SETTINGS_MAX_FRAME_SIZE</x:ref>.
598               </t>
599               <t>
600                 The 9 octets of the frame header are not included in this value.
601               </t>
602             </x:lt>
603             <x:lt hangText="Type:">
604               <t>
605                 The 8-bit type of the frame.  The frame type determines the format and semantics of
606                 the frame.  Implementations MUST ignore and discard any frame that has a type that
607                 is unknown.
608               </t>
609             </x:lt>
610             <x:lt hangText="Flags:">
611               <t>
612                 An 8-bit field reserved for frame-type specific boolean flags.
613               </t>
614               <t>
615                 Flags are assigned semantics specific to the indicated frame type.  Flags that have
616                 no defined semantics for a particular frame type MUST be ignored, and MUST be left
617                 unset (0) when sending.
618               </t>
619             </x:lt>
620             <x:lt hangText="R:">
621               <t>
622                 A reserved 1-bit field.  The semantics of this bit are undefined and the bit MUST
623                 remain unset (0) when sending and MUST be ignored when receiving.
624               </t>
625             </x:lt>
626             <x:lt hangText="Stream Identifier:">
627               <t>
628                 A 31-bit stream identifier (see <xref target="StreamIdentifiers"/>).  The value 0 is
629                 reserved for frames that are associated with the connection as a whole as opposed to
630                 an individual stream.
631               </t>
632             </x:lt>
633           </list>
634         </t>
635         <t>
636           The structure and content of the frame payload is dependent entirely on the frame type.
637         </t>
638       </section>
639
640       <section anchor="FrameSize" title="Frame Size">
641         <t>
642           The size of a frame payload is limited by the maximum size that a receiver advertises in
643           the <x:ref>SETTINGS_MAX_FRAME_SIZE</x:ref> setting.  This setting can have any value
644           between 2<x:sup>14</x:sup> (16,384) and 2<x:sup>24</x:sup>-1 (16,777,215) octets,
645           inclusive.
646         </t>
647         <t>
648           All implementations MUST be capable of receiving and minimally processing frames up to
649           2<x:sup>14</x:sup> octets in length, plus the 9 octet <xref target="FrameHeader">frame
650           header</xref>.  The size of the frame header is not included when describing frame sizes.
651           <list style="hanging">
652             <t hangText="Note:">
653               Certain frame types, such as <xref target="PING">PING</xref>, impose additional limits
654               on the amount of payload data allowed.
655             </t>
656           </list>
657         </t>
658         <t>
659           If a frame size exceeds any defined limit, or is too small to contain mandatory frame
660           data, the endpoint MUST send a <x:ref>FRAME_SIZE_ERROR</x:ref> error. A frame size error
661           in a frame that could alter the state of the entire connection MUST be treated as a <xref
662           target="ConnectionErrorHandler">connection error</xref>; this includes any frame carrying
663           a <xref target="HeaderBlock">header block</xref> (that is, <x:ref>HEADERS</x:ref>,
664           <x:ref>PUSH_PROMISE</x:ref>, and <x:ref>CONTINUATION</x:ref>), <x:ref>SETTINGS</x:ref>,
665           and any <x:ref>WINDOW_UPDATE</x:ref> frame with a stream identifier of 0.
666         </t>
667         <t>
668           Endpoints are not obligated to use all available space in a frame. Responsiveness can be
669           improved by using frames that are smaller than the permitted maximum size. Sending large
670           frames can result in delays in sending time-sensitive frames (such
671           <x:ref>RST_STREAM</x:ref>, <x:ref>WINDOW_UPDATE</x:ref>, or <x:ref>PRIORITY</x:ref>)
672           which if blocked by the transmission of a large frame, could affect performance.
673         </t>
674       </section>
675
676       <section anchor="HeaderBlock" title="Header Compression and Decompression">
677         <t>
678           Just as in HTTP/1, a header field in HTTP/2 is a name with one or more associated values.
679           They are used within HTTP request and response messages as well as server push operations
680           (see <xref target="PushResources" />).
681         </t>
682         <t>
683           Header lists are collections of zero or more header fields.  When transmitted over a
684           connection, a header list is serialized into a header block using <xref
685           target="COMPRESSION">HTTP Header Compression</xref>.  The serialized header block is then
686           divided into one or more octet sequences, called header block fragments, and transmitted
687           within the payload of <xref target="HEADERS">HEADERS</xref>, <xref
688           target="PUSH_PROMISE">PUSH_PROMISE</xref> or <xref
689           target="CONTINUATION">CONTINUATION</xref> frames.
690         </t>
691         <t>
692           The <xref target="COOKIE">Cookie header field</xref> is treated specially by the HTTP
693           mapping (see <xref target="CompressCookie"/>).
694         </t>
695         <t>
696           A receiving endpoint reassembles the header block by concatenating its fragments, then
697           decompresses the block to reconstruct the header list.
698         </t>
699         <t>
700           A complete header block consists of either:
701           <list style="symbols">
702             <t>
703               a single <x:ref>HEADERS</x:ref> or <x:ref>PUSH_PROMISE</x:ref> frame,
704               with the END_HEADERS flag set, or
705             </t>
706             <t>
707               a <x:ref>HEADERS</x:ref> or <x:ref>PUSH_PROMISE</x:ref> frame with the END_HEADERS
708               flag cleared and one or more <x:ref>CONTINUATION</x:ref> frames,
709               where the last <x:ref>CONTINUATION</x:ref> frame has the END_HEADERS flag set.
710             </t>
711           </list>
712         </t>
713         <t>
714           Header compression is stateful.  One compression context and one decompression context is
715           used for the entire connection.  Each header block is processed as a discrete unit.
716           Header blocks MUST be transmitted as a contiguous sequence of frames, with no interleaved
717           frames of any other type or from any other stream.  The last frame in a sequence of
718           <x:ref>HEADERS</x:ref> or <x:ref>CONTINUATION</x:ref> frames MUST have the END_HEADERS
719           flag set.  The last frame in a sequence of <x:ref>PUSH_PROMISE</x:ref> or
720           <x:ref>CONTINUATION</x:ref> frames MUST have the END_HEADERS flag set.  This allows a
721           header block to be logically equivalent to a single frame.
722         </t>
723         <t>
724           Header block fragments can only be sent as the payload of <x:ref>HEADERS</x:ref>,
725           <x:ref>PUSH_PROMISE</x:ref> or <x:ref>CONTINUATION</x:ref> frames, because these frames
726           carry data that can modify the compression context maintained by a receiver.  An endpoint
727           receiving <x:ref>HEADERS</x:ref>, <x:ref>PUSH_PROMISE</x:ref> or
728           <x:ref>CONTINUATION</x:ref> frames MUST reassemble header blocks and perform decompression
729           even if the frames are to be discarded.  A receiver MUST terminate the connection with a
730           <xref target="ConnectionErrorHandler">connection error</xref> of type
731           <x:ref>COMPRESSION_ERROR</x:ref> if it does not decompress a header block.
732         </t>
733       </section>
734     </section>
735
736     <section anchor="StreamsLayer" title="Streams and Multiplexing">
737       <t>
738         A "stream" is an independent, bi-directional sequence of frames exchanged between the client
739         and server within an HTTP/2 connection.  Streams have several important characteristics:
740         <list style="symbols">
741           <t>
742             A single HTTP/2 connection can contain multiple concurrently open streams, with either
743             endpoint interleaving frames from multiple streams.
744           </t>
745           <t>
746             Streams can be established and used unilaterally or shared by either the client or
747             server.
748           </t>
749           <t>
750             Streams can be closed by either endpoint.
751           </t>
752           <t>
753             The order in which frames are sent on a stream is significant. Recipients process frames
754             in the order they are received.  In particular, the order of <x:ref>HEADERS</x:ref>,
755             and <x:ref>DATA</x:ref> frames is semantically significant.
756           </t>
757           <t>
758             Streams are identified by an integer.  Stream identifiers are assigned to streams by the
759             endpoint initiating the stream.
760           </t>
761         </list>
762       </t>
763
764       <section anchor="StreamStates" title="Stream States">
765         <t>
766           The lifecycle of a stream is shown in <xref target="StreamStatesFigure"/>.
767         </t>
768
769         <figure anchor="StreamStatesFigure" title="Stream States">
770           <artwork type="drawing">
771             <![CDATA[
772                            +--------+
773                      PP    |        |    PP
774                   ,--------|  idle  |--------.
775                  /         |        |         \
776                 v          +--------+          v
777          +----------+          |           +----------+
778          |          |          | H         |          |
779      ,---| reserved |          |           | reserved |---.
780      |   | (local)  |          v           | (remote) |   |
781      |   +----------+      +--------+      +----------+   |
782      |      |          ES  |        |  ES          |      |
783      |      | H    ,-------|  open  |-------.      | H    |
784      |      |     /        |        |        \     |      |
785      |      v    v         +--------+         v    v      |
786      |   +----------+          |           +----------+   |
787      |   |   half   |          |           |   half   |   |
788      |   |  closed  |          | R         |  closed  |   |
789      |   | (remote) |          |           | (local)  |   |
790      |   +----------+          |           +----------+   |
791      |        |                v                 |        |
792      |        |  ES / R    +--------+  ES / R    |        |
793      |        `----------->|        |<-----------'        |
794      |  R                  | closed |                  R  |
795      `-------------------->|        |<--------------------'
796                            +--------+
797
798        H:  HEADERS frame (with implied CONTINUATIONs)
799        PP: PUSH_PROMISE frame (with implied CONTINUATIONs)
800        ES: END_STREAM flag
801        R:  RST_STREAM frame
802 ]]>
803           </artwork>
804         </figure>
805
806         <t>
807           Note that this diagram shows stream state transitions and the frames and flags that affect
808           those transitions only.  In this regard, <x:ref>CONTINUATION</x:ref> frames do not result
809           in state transitions; they are effectively part of the <x:ref>HEADERS</x:ref> or
810           <x:ref>PUSH_PROMISE</x:ref> that they follow.  For this purpose, the END_STREAM flag is
811           processed as a separate event to the frame that bears it; a <x:ref>HEADERS</x:ref> frame
812           with the END_STREAM flag set can cause two state transitions.
813         </t>
814         <t>
815           Both endpoints have a subjective view of the state of a stream that could be different
816           when frames are in transit.  Endpoints do not coordinate the creation of streams; they are
817           created unilaterally by either endpoint.  The negative consequences of a mismatch in
818           states are limited to the "closed" state after sending <x:ref>RST_STREAM</x:ref>, where
819           frames might be received for some time after closing.
820         </t>
821         <t>
822           Streams have the following states:
823           <list style="hanging">
824
825             <x:lt hangText="idle:">
826               <t>
827                 <vspace blankLines="0"/>
828                 All streams start in the "idle" state.  In this state, no frames have been
829                 exchanged.
830               </t>
831               <t>
832                 The following transitions are valid from this state:
833                 <list style="symbols">
834                   <t>
835                     Sending or receiving a <x:ref>HEADERS</x:ref> frame causes the stream to become
836                     "open".  The stream identifier is selected as described in <xref
837                     target="StreamIdentifiers"/>.  The same <x:ref>HEADERS</x:ref> frame can also
838                     cause a stream to immediately become "half closed".
839                   </t>
840                   <t>
841                     Sending a <x:ref>PUSH_PROMISE</x:ref> frame marks the associated stream for
842                     later use.  The stream state for the reserved stream transitions to "reserved
843                     (local)".
844                   </t>
845                   <t>
846                     Receiving a <x:ref>PUSH_PROMISE</x:ref> frame marks the associated stream as
847                     reserved by the remote peer.  The state of the stream becomes "reserved
848                     (remote)".
849                   </t>
850                 </list>
851               </t>
852               <t>
853                 Receiving any frames other than <x:ref>HEADERS</x:ref> or
854                 <x:ref>PUSH_PROMISE</x:ref> on a stream in this state MUST be treated as a <xref
855                 target="ConnectionErrorHandler">connection error</xref> of type
856                 <x:ref>PROTOCOL_ERROR</x:ref>.
857               </t>
858             </x:lt>
859
860             <x:lt hangText="reserved (local):">
861               <t>
862                 <vspace blankLines="0"/>
863                 A stream in the "reserved (local)" state is one that has been promised by sending a
864                 <x:ref>PUSH_PROMISE</x:ref> frame.  A <x:ref>PUSH_PROMISE</x:ref> frame reserves an
865                 idle stream by associating the stream with an open stream that was initiated by the
866                 remote peer (see <xref target="PushResources"/>).
867               </t>
868               <t>
869                 In this state, only the following transitions are possible:
870                 <list style="symbols">
871                   <t>
872                     The endpoint can send a <x:ref>HEADERS</x:ref> frame.  This causes the stream to
873                     open in a "half closed (remote)" state.
874                   </t>
875                   <t>
876                     Either endpoint can send a <x:ref>RST_STREAM</x:ref> frame to cause the stream
877                     to become "closed".  This releases the stream reservation.
878                   </t>
879                 </list>
880               </t>
881               <t>
882                 An endpoint MUST NOT send any type of frame other than <x:ref>HEADERS</x:ref> or
883                 <x:ref>RST_STREAM</x:ref> in this state.
884               </t>
885               <t>
886                 A <x:ref>PRIORITY</x:ref> frame MAY be received in this state.  Receiving any type
887                 of frame other than <x:ref>RST_STREAM</x:ref> or <x:ref>PRIORITY</x:ref> on a stream
888                 in this state MUST be treated as a <xref target="ConnectionErrorHandler">connection
889                 error</xref> of type <x:ref>PROTOCOL_ERROR</x:ref>.
890               </t>
891             </x:lt>
892
893             <x:lt hangText="reserved (remote):">
894               <t>
895                 <vspace blankLines="0"/>
896                 A stream in the "reserved (remote)" state has been reserved by a remote peer.
897               </t>
898               <t>
899                 In this state, only the following transitions are possible:
900                 <list style="symbols">
901                   <t>
902                     Receiving a <x:ref>HEADERS</x:ref> frame causes the stream to transition to
903                     "half closed (local)".
904                   </t>
905                   <t>
906                     Either endpoint can send a <x:ref>RST_STREAM</x:ref> frame to cause the stream
907                     to become "closed".  This releases the stream reservation.
908                   </t>
909                 </list>
910               </t>
911               <t>
912                 An endpoint MAY send a <x:ref>PRIORITY</x:ref> frame in this state to reprioritize
913                 the reserved stream.  An endpoint MUST NOT send any type of frame other than
914                 <x:ref>RST_STREAM</x:ref>, <x:ref>WINDOW_UPDATE</x:ref>, or <x:ref>PRIORITY</x:ref>
915                 in this state.
916               </t>
917               <t>
918                 Receiving any type of frame other than <x:ref>HEADERS</x:ref> or
919                 <x:ref>RST_STREAM</x:ref> on a stream in this state MUST be treated as a <xref
920                 target="ConnectionErrorHandler">connection error</xref> of type
921                 <x:ref>PROTOCOL_ERROR</x:ref>.
922               </t>
923             </x:lt>
924
925             <x:lt hangText="open:">
926               <t>
927                 <vspace blankLines="0"/>
928                 A stream in the "open" state may be used by both peers to send frames of any type.
929                 In this state, sending peers observe advertised <xref target="FlowControl">stream
930                 level flow control limits</xref>.
931               </t>
932               <t>
933                 From this state either endpoint can send a frame with an END_STREAM flag set, which
934                 causes the stream to transition into one of the "half closed" states: an endpoint
935                 sending an END_STREAM flag causes the stream state to become "half closed (local)";
936                 an endpoint receiving an END_STREAM flag causes the stream state to become "half
937                 closed (remote)".
938               </t>
939               <t>
940                 Either endpoint can send a <x:ref>RST_STREAM</x:ref> frame from this state, causing
941                 it to transition immediately to "closed".
942               </t>
943             </x:lt>
944
945             <x:lt hangText="half closed (local):">
946               <t>
947                 <vspace blankLines="0"/>
948                 A stream that is in the "half closed (local)" state cannot be used for sending
949                 frames.  Only <x:ref>WINDOW_UPDATE</x:ref>, <x:ref>PRIORITY</x:ref> and
950                 <x:ref>RST_STREAM</x:ref> frames can be sent in this state.
951               </t>
952               <t>
953                 A stream transitions from this state to "closed" when a frame that contains an
954                 END_STREAM flag is received, or when either peer sends a <x:ref>RST_STREAM</x:ref>
955                 frame.
956               </t>
957               <t>
958                 A receiver can ignore <x:ref>WINDOW_UPDATE</x:ref> frames in this state, which might
959                 arrive for a short period after a frame bearing the END_STREAM flag is sent.
960               </t>
961               <t>
962                 <x:ref>PRIORITY</x:ref> frames received in this state are used to reprioritize
963                 streams that depend on the current stream.
964               </t>
965             </x:lt>
966
967             <x:lt hangText="half closed (remote):">
968               <t>
969                 <vspace blankLines="0"/>
970                 A stream that is "half closed (remote)" is no longer being used by the peer to send
971                 frames.  In this state, an endpoint is no longer obligated to maintain a receiver
972                 flow control window if it performs flow control.
973               </t>
974               <t>
975                 If an endpoint receives additional frames for a stream that is in this state, other
976                 than <x:ref>WINDOW_UPDATE</x:ref>, <x:ref>PRIORITY</x:ref> or
977                 <x:ref>RST_STREAM</x:ref>, it MUST respond with a <xref
978                 target="StreamErrorHandler">stream error</xref> of type
979                 <x:ref>STREAM_CLOSED</x:ref>.
980               </t>
981               <t>
982                 A stream that is "half closed (remote)" can be used by the endpoint to send frames
983                 of any type. In this state, the endpoint continues to observe advertised <xref
984                 target="FlowControl">stream level flow control limits</xref>.
985               </t>
986               <t>
987                 A stream can transition from this state to "closed" by sending a frame that contains
988                 an END_STREAM flag, or when either peer sends a <x:ref>RST_STREAM</x:ref> frame.
989               </t>
990             </x:lt>
991
992             <x:lt hangText="closed:">
993               <t>
994                 <vspace blankLines="0"/>
995                 The "closed" state is the terminal state.
996               </t>
997               <t>
998                 An endpoint MUST NOT send frames other than <x:ref>PRIORITY</x:ref> on a closed
999                 stream.  An endpoint that receives any frame other than <x:ref>PRIORITY</x:ref>
1000                 after receiving a <x:ref>RST_STREAM</x:ref> MUST treat that as a <xref
1001                 target="StreamErrorHandler">stream error</xref> of type
1002                 <x:ref>STREAM_CLOSED</x:ref>.  Similarly, an endpoint that receives any frames after
1003                 receiving a frame with the END_STREAM flag set MUST treat that as a <xref
1004                 target="ConnectionErrorHandler">connection error</xref> of type
1005                 <x:ref>STREAM_CLOSED</x:ref>, unless the frame is permitted as described below.
1006               </t>
1007               <t>
1008                 <x:ref>WINDOW_UPDATE</x:ref> or <x:ref>RST_STREAM</x:ref> frames can be received in
1009                 this state for a short period after a <x:ref>DATA</x:ref> or <x:ref>HEADERS</x:ref>
1010                 frame containing an END_STREAM flag is sent.  Until the remote peer receives and
1011                 processes <x:ref>RST_STREAM</x:ref> or the frame bearing the END_STREAM flag, it
1012                 might send frames of these types.  Endpoints MUST ignore
1013                 <x:ref>WINDOW_UPDATE</x:ref> or <x:ref>RST_STREAM</x:ref> frames received in this
1014                 state, though endpoints MAY choose to treat frames that arrive a significant time
1015                 after sending END_STREAM as a <xref target="ConnectionErrorHandler">connection
1016                 error</xref> of type <x:ref>PROTOCOL_ERROR</x:ref>.
1017               </t>
1018               <t>
1019                 <x:ref>PRIORITY</x:ref> frames can be sent on closed streams to prioritize streams
1020                 that are dependent on the closed stream.  Endpoints SHOULD process
1021                 <x:ref>PRIORITY</x:ref> frame, though they can be ignored if the stream has been
1022                 removed from the dependency tree (see <xref target="priority-gc"/>).
1023               </t>
1024               <t>
1025                 If this state is reached as a result of sending a <x:ref>RST_STREAM</x:ref> frame,
1026                 the peer that receives the <x:ref>RST_STREAM</x:ref> might have already sent - or
1027                 enqueued for sending - frames on the stream that cannot be withdrawn.  An endpoint
1028                 MUST ignore frames that it receives on closed streams after it has sent a
1029                 <x:ref>RST_STREAM</x:ref> frame.  An endpoint MAY choose to limit the period over
1030                 which it ignores frames and treat frames that arrive after this time as being in
1031                 error.
1032               </t>
1033               <t>
1034                 Flow controlled frames (i.e., <x:ref>DATA</x:ref>) received after sending
1035                 <x:ref>RST_STREAM</x:ref> are counted toward the connection flow control window.
1036                 Even though these frames might be ignored, because they are sent before the sender
1037                 receives the <x:ref>RST_STREAM</x:ref>, the sender will consider the frames to count
1038                 against the flow control window.
1039               </t>
1040               <t>
1041                 An endpoint might receive a <x:ref>PUSH_PROMISE</x:ref> frame after it sends
1042                 <x:ref>RST_STREAM</x:ref>.  <x:ref>PUSH_PROMISE</x:ref> causes a stream to become
1043                 "reserved" even if the associated stream has been reset.  Therefore, a
1044                 <x:ref>RST_STREAM</x:ref> is needed to close an unwanted promised stream.
1045               </t>
1046             </x:lt>
1047           </list>
1048         </t>
1049         <t>
1050           In the absence of more specific guidance elsewhere in this document, implementations
1051           SHOULD treat the receipt of a frame that is not expressly permitted in the description of
1052           a state as a <xref target="ConnectionErrorHandler">connection error</xref> of type
1053           <x:ref>PROTOCOL_ERROR</x:ref>.  Frame of unknown types are ignored.
1054         </t>
1055         <t>
1056           An example of the state transitions for an HTTP request/response exchange can be found in
1057           <xref target="HttpSequence"/>.  An example of the state transitions for server push can be
1058           found in <xref target="PushRequests"/> and <xref target="PushResponses"/>.
1059         </t>
1060
1061         <section anchor="StreamIdentifiers" title="Stream Identifiers">
1062           <t>
1063             Streams are identified with an unsigned 31-bit integer.  Streams initiated by a client
1064             MUST use odd-numbered stream identifiers; those initiated by the server MUST use
1065             even-numbered stream identifiers.  A stream identifier of zero (0x0) is used for
1066             connection control messages; the stream identifier zero cannot be used to establish a
1067             new stream.
1068           </t>
1069           <t>
1070             HTTP/1.1 requests that are upgraded to HTTP/2 (see <xref target="discover-http"/>) are
1071             responded to with a stream identifier of one (0x1).  After the upgrade
1072             completes, stream 0x1 is "half closed (local)" to the client.  Therefore, stream 0x1
1073             cannot be selected as a new stream identifier by a client that upgrades from HTTP/1.1.
1074           </t>
1075           <t>
1076             The identifier of a newly established stream MUST be numerically greater than all
1077             streams that the initiating endpoint has opened or reserved.  This governs streams that
1078             are opened using a <x:ref>HEADERS</x:ref> frame and streams that are reserved using
1079             <x:ref>PUSH_PROMISE</x:ref>.  An endpoint that receives an unexpected stream identifier
1080             MUST respond with a <xref target="ConnectionErrorHandler">connection error</xref> of
1081             type <x:ref>PROTOCOL_ERROR</x:ref>.
1082           </t>
1083           <t>
1084             The first use of a new stream identifier implicitly closes all streams in the "idle"
1085             state that might have been initiated by that peer with a lower-valued stream identifier.
1086             For example, if a client sends a <x:ref>HEADERS</x:ref> frame on stream 7 without ever
1087             sending a frame on stream 5, then stream 5 transitions to the "closed" state when the
1088             first frame for stream 7 is sent or received.
1089           </t>
1090           <t>
1091             Stream identifiers cannot be reused.  Long-lived connections can result in an endpoint
1092             exhausting the available range of stream identifiers.  A client that is unable to
1093             establish a new stream identifier can establish a new connection for new streams.  A
1094             server that is unable to establish a new stream identifier can send a
1095             <x:ref>GOAWAY</x:ref> frame so that the client is forced to open a new connection for
1096             new streams.
1097           </t>
1098         </section>
1099
1100         <section title="Stream Concurrency">
1101           <t>
1102             A peer can limit the number of concurrently active streams using the
1103             <x:ref>SETTINGS_MAX_CONCURRENT_STREAMS</x:ref> parameter (see <xref
1104             target="SettingValues"/>) within a <x:ref>SETTINGS</x:ref> frame. The maximum concurrent
1105             streams setting is specific to each endpoint and applies only to the peer that receives
1106             the setting. That is, clients specify the maximum number of concurrent streams the
1107             server can initiate, and servers specify the maximum number of concurrent streams the
1108             client can initiate.
1109           </t>
1110           <t>
1111             Streams that are in the "open" state, or either of the "half closed" states count toward
1112             the maximum number of streams that an endpoint is permitted to open.  Streams in any of
1113             these three states count toward the limit advertised in the
1114             <x:ref>SETTINGS_MAX_CONCURRENT_STREAMS</x:ref> setting.  Streams in either of the
1115             "reserved" states do not count toward the stream limit.
1116           </t>
1117           <t>
1118             Endpoints MUST NOT exceed the limit set by their peer.  An endpoint that receives a
1119             <x:ref>HEADERS</x:ref> frame that causes their advertised concurrent stream limit to be
1120             exceeded MUST treat this as a <xref target="StreamErrorHandler">stream error</xref>.  An
1121             endpoint that wishes to reduce the value of
1122             <x:ref>SETTINGS_MAX_CONCURRENT_STREAMS</x:ref> to a value that is below the current
1123             number of open streams can either close streams that exceed the new value or allow
1124             streams to complete.
1125           </t>
1126         </section>
1127       </section>
1128
1129      <section anchor="FlowControl" title="Flow Control">
1130         <t>
1131           Using streams for multiplexing introduces contention over use of the TCP connection,
1132           resulting in blocked streams.  A flow control scheme ensures that streams on the same
1133           connection do not destructively interfere with each other.  Flow control is used for both
1134           individual streams and for the connection as a whole.
1135         </t>
1136         <t>
1137           HTTP/2 provides for flow control through use of the <xref
1138           target="WINDOW_UPDATE">WINDOW_UPDATE frame</xref>.
1139         </t>
1140
1141         <section anchor="fc-principles" title="Flow Control Principles">
1142           <t>
1143             HTTP/2 stream flow control aims to allow a variety of flow control algorithms to be
1144             used without requiring protocol changes. Flow control in HTTP/2 has the following
1145             characteristics:
1146             <list style="numbers">
1147               <t>
1148                 Flow control is specific to a connection; i.e., it is "hop-by-hop", not
1149                 "end-to-end".
1150               </t>
1151               <t>
1152                 Flow control is based on window update frames.  Receivers advertise how many octets
1153                 they are prepared to receive on a stream and for the entire connection.  This is a
1154                 credit-based scheme.
1155               </t>
1156               <t>
1157                 Flow control is directional with overall control provided by the receiver.  A
1158                 receiver MAY choose to set any window size that it desires for each stream and for
1159                 the entire connection.  A sender MUST respect flow control limits imposed by a
1160                 receiver.  Clients, servers and intermediaries all independently advertise their
1161                 flow control window as a receiver and abide by the flow control limits set by
1162                 their peer when sending.
1163               </t>
1164               <t>
1165                 The initial value for the flow control window is 65,535 octets for both new streams
1166                 and the overall connection.
1167               </t>
1168               <t>
1169                 The frame type determines whether flow control applies to a frame.  Of the frames
1170                 specified in this document, only <x:ref>DATA</x:ref> frames are subject to flow
1171                 control; all other frame types do not consume space in the advertised flow control
1172                 window.  This ensures that important control frames are not blocked by flow control.
1173               </t>
1174               <t>
1175                 Flow control cannot be disabled.
1176               </t>
1177               <t>
1178                 HTTP/2 defines only the format and semantics of the <x:ref>WINDOW_UPDATE</x:ref>
1179                 frame (<xref target="WINDOW_UPDATE"/>).  This document does not stipulate how a
1180                 receiver decides when to send this frame or the value that it sends, nor does it
1181                 specify how a sender chooses to send packets.  Implementations are able to select
1182                 any algorithm that suits their needs.
1183               </t>
1184             </list>
1185           </t>
1186           <t>
1187             Implementations are also responsible for managing how requests and responses are sent
1188             based on priority; choosing how to avoid head of line blocking for requests; and
1189             managing the creation of new streams.  Algorithm choices for these could interact with
1190             any flow control algorithm.
1191           </t>
1192         </section>
1193
1194         <section anchor="DisableFlowControl" title="Appropriate Use of Flow Control">
1195           <t>
1196             Flow control is defined to protect endpoints that are operating under resource
1197             constraints.  For example, a proxy needs to share memory between many connections, and
1198             also might have a slow upstream connection and a fast downstream one.  Flow control
1199             addresses cases where the receiver is unable process data on one stream, yet wants to
1200             continue to process other streams in the same connection.
1201           </t>
1202           <t>
1203             Deployments that do not require this capability can advertise a flow control window of
1204             the maximum size, incrementing the available space when new data is received.  This
1205             effectively disables flow control for that receiver.  Conversely, a sender is always
1206             subject to the flow control window advertised by the receiver.
1207           </t>
1208           <t>
1209             Deployments with constrained resources (for example, memory) can employ flow control to
1210             limit the amount of memory a peer can consume.  Note, however, that this can lead to
1211             suboptimal use of available network resources if flow control is enabled without
1212             knowledge of the bandwidth-delay product (see <xref target="RFC1323"/>).
1213           </t>
1214           <t>
1215             Even with full awareness of the current bandwidth-delay product, implementation of flow
1216             control can be difficult.  When using flow control, the receiver MUST read from the TCP
1217             receive buffer in a timely fashion.  Failure to do so could lead to a deadlock when
1218             critical frames, such as <x:ref>WINDOW_UPDATE</x:ref>, are not read and acted upon.
1219           </t>
1220         </section>
1221       </section>
1222
1223       <section anchor="StreamPriority" title="Stream priority">
1224         <t>
1225           A client can assign a priority for a new stream by including prioritization information in
1226           the <xref target="HEADERS">HEADERS frame</xref> that opens the stream.  For an existing
1227           stream, the <xref target="PRIORITY">PRIORITY frame</xref> can be used to change the
1228           priority.
1229         </t>
1230         <t>
1231           The purpose of prioritization is to allow an endpoint to express how it would prefer its
1232           peer allocate resources when managing concurrent streams.  Most importantly, priority can
1233           be used to select streams for transmitting frames when there is limited capacity for
1234           sending.
1235         </t>
1236         <t>
1237           Streams can be prioritized by marking them as dependent on the completion of other streams
1238           (<xref target="pri-depend"/>).  Each dependency is assigned a relative weight, a number
1239           that is used to determine the relative proportion of available resources that are assigned
1240           to streams dependent on the same stream.
1241         </t>
1242         <!--
1243           Note that stream dependencies have not yet been validated in practice.  The theory
1244           might be fairly sound, but there are no implementations currently sending these.  If it
1245           turns out that they are not useful, or actively harmful, implementations will be requested
1246           to avoid creating stream dependencies.
1247         -->
1248         <t>
1249           Explicitly setting the priority for a stream is input to a prioritization process.  It
1250           does not guarantee any particular processing or transmission order for the stream relative
1251           to any other stream.  An endpoint cannot force a peer to process concurrent streams in a
1252           particular order using priority.  Expressing priority is therefore only ever a suggestion.
1253         </t>
1254         <t>
1255           Providing prioritization information is optional, so default values are used if no
1256           explicit indicator is provided (<xref target="pri-default"/>).
1257         </t>
1258
1259         <section title="Stream Dependencies" anchor="pri-depend">
1260           <t>
1261             Each stream can be given an explicit dependency on another stream.  Including a
1262             dependency expresses a preference to allocate resources to the identified stream rather
1263             than to the dependent stream.
1264           </t>
1265           <t>
1266             A stream that is not dependent on any other stream is given a stream dependency of 0x0.
1267             In other words, the non-existent stream 0 forms the root of the tree.
1268           </t>
1269           <t>
1270             A stream that depends on another stream is a dependent stream. The stream upon which a
1271             stream is dependent is a parent stream. A dependency on a stream that is not currently
1272             in the tree - such as a stream in the "idle" state - results in that stream being given
1273             a <xref target="pri-default">default priority</xref>.
1274           </t>
1275           <t>
1276             When assigning a dependency on another stream, the stream is added as a new dependency
1277             of the parent stream.  Dependent streams that share the same parent are not ordered with
1278             respect to each other.  For example, if streams B and C are dependent on stream A, and
1279             if stream D is created with a dependency on stream A, this results in a dependency order
1280             of A followed by B, C, and D in any order.
1281           </t>
1282           <figure title="Example of Default Dependency Creation">
1283             <artwork type="inline"><![CDATA[
1284     A                 A
1285    / \      ==>      /|\
1286   B   C             B D C
1287 ]]></artwork>
1288           </figure>
1289           <t>
1290             An exclusive flag allows for the insertion of a new level of dependencies.  The
1291             exclusive flag causes the stream to become the sole dependency of its parent stream,
1292             causing other dependencies to become dependent on the exclusive stream.  In the
1293             previous example, if stream D is created with an exclusive dependency on stream A, this
1294             results in D becoming the dependency parent of B and C.
1295           </t>
1296           <figure title="Example of Exclusive Dependency Creation">
1297             <artwork type="inline"><![CDATA[
1298                       A
1299     A                 |
1300    / \      ==>       D
1301   B   C              / \
1302                     B   C
1303 ]]></artwork>
1304           </figure>
1305           <t>
1306             Inside the dependency tree, a dependent stream SHOULD only be allocated resources if all
1307             of the streams that it depends on (the chain of parent streams up to 0x0) are either
1308             closed, or it is not possible to make progress on them.
1309           </t>
1310           <t>
1311             A stream cannot depend on itself.  An endpoint MUST treat this as a <xref
1312             target="StreamErrorHandler">stream error</xref> of type <x:ref>PROTOCOL_ERROR</x:ref>.
1313           </t>
1314         </section>
1315
1316         <section title="Dependency Weighting">
1317           <t>
1318             All dependent streams are allocated an integer weight between 1 and 256 (inclusive).
1319           </t>
1320           <t>
1321             Streams with the same parent SHOULD be allocated resources proportionally based on their
1322             weight.  Thus, if stream B depends on stream A with weight 4, and C depends on stream A
1323             with weight 12, and if no progress can be made on A, stream B ideally receives one third
1324             of the resources allocated to stream C.
1325           </t>
1326         </section>
1327
1328         <section anchor="reprioritize" title="Reprioritization">
1329           <t>
1330             Stream priorities are changed using the <x:ref>PRIORITY</x:ref> frame.  Setting a
1331             dependency causes a stream to become dependent on the identified parent stream.
1332           </t>
1333           <t>
1334             Dependent streams move with their parent stream if the parent is reprioritized.  Setting
1335             a dependency with the exclusive flag for a reprioritized stream moves all the
1336             dependencies of the new parent stream to become dependent on the reprioritized stream.
1337           </t>
1338           <t>
1339             If a stream is made dependent on one of its own dependencies, the formerly dependent
1340             stream is first moved to be dependent on the reprioritized stream's previous parent.
1341             The moved dependency retains its weight.
1342           </t>
1343           <figure title="Example of Dependency Reordering">
1344             <preamble>
1345               For example, consider an original dependency tree where B and C depend on A, D and E
1346               depend on C, and F depends on D.  If A is made dependent on D, then D takes the place
1347               of A.  All other dependency relationships stay the same, except for F, which becomes
1348               dependent on A if the reprioritization is exclusive.
1349             </preamble>
1350             <artwork type="inline"><![CDATA[
1351     ?                ?                ?                 ?
1352     |               / \               |                 |
1353     A              D   A              D                 D
1354    / \            /   / \            / \                |
1355   B   C     ==>  F   B   C   ==>    F   A       OR      A
1356      / \                 |             / \             /|\
1357     D   E                E            B   C           B C F
1358     |                                     |             |
1359     F                                     E             E
1360                (intermediate)   (non-exclusive)    (exclusive)
1361 ]]></artwork>
1362           </figure>
1363         </section>
1364
1365         <section anchor="priority-gc" title="Prioritization State Management">
1366           <t>
1367             When a stream is removed from the dependency tree, its dependencies can be moved to
1368             become dependent on the parent of the closed stream.  The weights of new dependencies
1369             are recalculated by distributing the weight of the dependency of the closed stream
1370             proportionally based on the weights of its dependencies.
1371           </t>
1372           <t>
1373             Streams that are removed from the dependency tree cause some prioritization information
1374             to be lost.  Resources are shared between streams with the same parent stream, which
1375             means that if a stream in that set closes or becomes blocked, any spare capacity
1376             allocated to a stream is distributed to the immediate neighbors of the stream.  However,
1377             if the common dependency is removed from the tree, those streams share resources with
1378             streams at the next highest level.
1379           </t>
1380           <t>
1381             For example, assume streams A and B share a parent, and streams C and D both depend on
1382             stream A. Prior to the removal of stream A, if streams A and D are unable to proceed,
1383             then stream C receives all the resources dedicated to stream A.  If stream A is removed
1384             from the tree, the weight of stream A is divided between streams C and D.  If stream D
1385             is still unable to proceed, this results in stream C receiving a reduced proportion of
1386             resources.  For equal starting weights, C receives one third, rather than one half, of
1387             available resources.
1388           </t>
1389           <t>
1390             It is possible for a stream to become closed while prioritization information that
1391             creates a dependency on that stream is in transit.  If a stream identified in a
1392             dependency has no associated priority information, then the dependent stream is instead
1393             assigned a <xref target="pri-default">default priority</xref>.  This potentially creates
1394             suboptimal prioritization, since the stream could be given a priority that is different
1395             to what is intended.
1396           </t>
1397           <t>
1398             To avoid these problems, an endpoint SHOULD retain stream prioritization state for a
1399             period after streams become closed.  The longer state is retained, the lower the chance
1400             that streams are assigned incorrect or default priority values.
1401           </t>
1402           <t>
1403             This could create a large state burden for an endpoint, so this state MAY be limited.
1404             An endpoint MAY apply a fixed upper limit on the number of closed streams for which
1405             prioritization state is tracked to limit state exposure.  The amount of additional state
1406             an endpoint maintains could be dependent on load; under high load, prioritization state
1407             can be discarded to limit resource commitments.  In extreme cases, an endpoint could
1408             even discard prioritization state for active or reserved streams. If a fixed limit is
1409             applied, endpoints SHOULD maintain state for at least as many streams as allowed by
1410             their setting for <x:ref>SETTINGS_MAX_CONCURRENT_STREAMS</x:ref>.
1411           </t>
1412           <t>
1413             An endpoint receiving a <x:ref>PRIORITY</x:ref> frame that changes the priority of a
1414             closed stream SHOULD alter the dependencies of the streams that depend on it, if it has
1415             retained enough state to do so.
1416           </t>
1417         </section>
1418
1419         <section title="Default Priorities" anchor="pri-default">
1420           <t>
1421             Providing priority information is optional.  Streams are assigned a non-exclusive
1422             dependency on stream 0x0 by default.  <xref target="PushResources">Pushed streams</xref>
1423             initially depend on their associated stream.  In both cases, streams are assigned a
1424             default weight of 16.
1425           </t>
1426         </section>
1427       </section>
1428
1429       <section title="Error Handling">
1430         <t>
1431           HTTP/2 framing permits two classes of error:
1432           <list style="symbols">
1433             <t>
1434               An error condition that renders the entire connection unusable is a connection error.
1435             </t>
1436             <t>
1437               An error in an individual stream is a stream error.
1438             </t>
1439           </list>
1440         </t>
1441         <t>
1442           A list of error codes is included in <xref target="ErrorCodes"/>.
1443         </t>
1444
1445         <section anchor="ConnectionErrorHandler" title="Connection Error Handling">
1446           <t>
1447             A connection error is any error which prevents further processing of the framing layer,
1448             or which corrupts any connection state.
1449           </t>
1450           <t>
1451             An endpoint that encounters a connection error SHOULD first send a <x:ref>GOAWAY</x:ref>
1452             frame (<xref target="GOAWAY"/>) with the stream identifier of the last stream that it
1453             successfully received from its peer.  The <x:ref>GOAWAY</x:ref> frame includes an error
1454             code that indicates why the connection is terminating.  After sending the
1455             <x:ref>GOAWAY</x:ref> frame, the endpoint MUST close the TCP connection.
1456           </t>
1457           <t>
1458             It is possible that the <x:ref>GOAWAY</x:ref> will not be reliably received by the
1459             receiving endpoint (see <xref target="RFC7230" x:fmt=","
1460             x:rel="#persistent.tear-down"/>).  In the event of a connection error,
1461             <x:ref>GOAWAY</x:ref> only provides a best effort attempt to communicate with the peer
1462             about why the connection is being terminated.
1463           </t>
1464           <t>
1465             An endpoint can end a connection at any time.  In particular, an endpoint MAY choose to
1466             treat a stream error as a connection error.  Endpoints SHOULD send a
1467             <x:ref>GOAWAY</x:ref> frame when ending a connection, providing that circumstances
1468             permit it.
1469           </t>
1470         </section>
1471
1472         <section anchor="StreamErrorHandler" title="Stream Error Handling">
1473           <t>
1474             A stream error is an error related to a specific stream that does not affect processing
1475             of other streams.
1476           </t>
1477           <t>
1478             An endpoint that detects a stream error sends a <x:ref>RST_STREAM</x:ref> frame (<xref
1479             target="RST_STREAM"/>) that contains the stream identifier of the stream where the error
1480             occurred.  The <x:ref>RST_STREAM</x:ref> frame includes an error code that indicates the
1481             type of error.
1482           </t>
1483           <t>
1484             A <x:ref>RST_STREAM</x:ref> is the last frame that an endpoint can send on a stream.
1485             The peer that sends the <x:ref>RST_STREAM</x:ref> frame MUST be prepared to receive any
1486             frames that were sent or enqueued for sending by the remote peer.  These frames can be
1487             ignored, except where they modify connection state (such as the state maintained for
1488             <xref target="HeaderBlock">header compression</xref>, or flow control).
1489           </t>
1490           <t>
1491             Normally, an endpoint SHOULD NOT send more than one <x:ref>RST_STREAM</x:ref> frame for
1492             any stream. However, an endpoint MAY send additional <x:ref>RST_STREAM</x:ref> frames if
1493             it receives frames on a closed stream after more than a round-trip time.  This behavior
1494             is permitted to deal with misbehaving implementations.
1495           </t>
1496           <t>
1497             An endpoint MUST NOT send a <x:ref>RST_STREAM</x:ref> in response to an
1498             <x:ref>RST_STREAM</x:ref> frame, to avoid looping.
1499           </t>
1500         </section>
1501
1502         <section title="Connection Termination">
1503           <t>
1504             If the TCP connection is closed or reset while streams remain in open or half closed
1505             states, then the endpoint MUST assume that those streams were abnormally interrupted and
1506             could be incomplete.
1507           </t>
1508         </section>
1509       </section>
1510
1511       <section anchor="extensibility" title="Extending HTTP/2">
1512         <t>
1513           HTTP/2 permits extension of the protocol.  Protocol extensions can be used to provide
1514           additional services or alter any aspect of the protocol, within the limitations described
1515           in this section.  Extensions are effective only within the scope of a single HTTP/2
1516           connection.
1517         </t>
1518         <t>
1519           Extensions are permitted to use new <xref target="FrameHeader">frame types</xref>, new
1520           <xref target="SettingValues">settings</xref>, or new <xref target="ErrorCodes">error
1521           codes</xref>.  Registries are established for managing these extension points: <xref
1522           target="iana-frames">frame types</xref>, <xref target="iana-settings">settings</xref> and
1523           <xref target="iana-errors">error codes</xref>.
1524         </t>
1525         <t>
1526           Implementations MUST ignore unknown or unsupported values in all extensible protocol
1527           elements.  Implementations MUST discard frames that have unknown or unsupported types.
1528           This means that any of these extension points can be safely used by extensions without
1529           prior arrangement or negotiation.  However, extension frames that appear in the middle of
1530           a <xref target="HeaderBlock">header block</xref> are not permitted; these MUST be treated
1531           as a <xref target="ConnectionErrorHandler">connection error</xref> of type
1532           <x:ref>PROTOCOL_ERROR</x:ref>.
1533         </t>
1534         <t>
1535           However, extensions that could change the semantics of existing protocol components MUST
1536           be negotiated before being used.  For example, an extension that changes the layout of the
1537           <x:ref>HEADERS</x:ref> frame cannot be used until the peer has given a positive signal
1538           that this is acceptable.  In this case, it could also be necessary to coordinate when the
1539           revised layout comes into effect.  Note that treating any frame other than
1540           <x:ref>DATA</x:ref> frames as flow controlled is such a change in semantics, and can only
1541           be done through negotiation.
1542         </t>
1543         <t>
1544           This document doesn't mandate a specific method for negotiating the use of an extension,
1545           but notes that a <xref target="SettingValues">setting</xref> could be used for that
1546           purpose.  If both peers set a value that indicates willingness to use the extension, then
1547           the extension can be used.  If a setting is used for extension negotiation, the initial
1548           value MUST be defined so that the extension is initially disabled.
1549         </t>
1550       </section>
1551     </section>
1552
1553     <section anchor="FrameTypes" title="Frame Definitions">
1554       <t>
1555         This specification defines a number of frame types, each identified by a unique 8-bit type
1556         code. Each frame type serves a distinct purpose either in the establishment and management
1557         of the connection as a whole, or of individual streams.
1558       </t>
1559       <t>
1560         The transmission of specific frame types can alter the state of a connection. If endpoints
1561         fail to maintain a synchronized view of the connection state, successful communication
1562         within the connection will no longer be possible. Therefore, it is important that endpoints
1563         have a shared comprehension of how the state is affected by the use any given frame.
1564       </t>
1565
1566       <section anchor="DATA" title="DATA">
1567         <t>
1568           DATA frames (type=0x0) convey arbitrary, variable-length sequences of octets associated
1569           with a stream. One or more DATA frames are used, for instance, to carry HTTP request or
1570           response payloads.
1571         </t>
1572         <t>
1573           DATA frames MAY also contain arbitrary padding.  Padding can be added to DATA frames to
1574           obscure the size of messages.
1575         </t>
1576         <figure title="DATA Frame Payload">
1577           <artwork type="inline"><![CDATA[
1578   0                   1                   2                   3
1579   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
1580  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1581  |Pad Length? (8)|
1582  +---------------+-----------------------------------------------+
1583  |                            Data (*)                         ...
1584  +---------------------------------------------------------------+
1585  |                           Padding (*)                       ...
1586  +---------------------------------------------------------------+
1587 ]]></artwork>
1588         </figure>
1589         <t>
1590           The DATA frame contains the following fields:
1591           <list style="hanging">
1592             <t hangText="Pad Length:">
1593               An 8-bit field containing the length of the frame padding in units of octets.  This
1594               field is optional and is only present if the PADDED flag is set.
1595             </t>
1596             <t hangText="Data:">
1597               Application data.  The amount of data is the remainder of the frame payload after
1598               subtracting the length of the other fields that are present.
1599             </t>
1600             <t hangText="Padding:">
1601               Padding octets that contain no application semantic value.  Padding octets MUST be set
1602               to zero when sending and ignored when receiving.
1603             </t>
1604           </list>
1605         </t>
1606
1607         <t>
1608           The DATA frame defines the following flags:
1609           <list style="hanging">
1610             <t hangText="END_STREAM (0x1):">
1611               Bit 1 being set indicates that this frame is the last that the endpoint will send for
1612               the identified stream.  Setting this flag causes the stream to enter one of <xref
1613               target="StreamStates">the "half closed" states or the "closed" state</xref>.
1614             </t>
1615             <t hangText="PADDED (0x8):">
1616               Bit 4 being set indicates that the Pad Length field and any padding that it describes
1617               is present.
1618             </t>
1619           </list>
1620         </t>
1621         <t>
1622           DATA frames MUST be associated with a stream. If a DATA frame is received whose stream
1623           identifier field is 0x0, the recipient MUST respond with a <xref
1624           target="ConnectionErrorHandler">connection error</xref> of type
1625           <x:ref>PROTOCOL_ERROR</x:ref>.
1626         </t>
1627         <t>
1628           DATA frames are subject to flow control and can only be sent when a stream is in the
1629           "open" or "half closed (remote)" states. The entire DATA frame payload is included in flow
1630           control, including Pad Length and Padding fields if present.  If a DATA frame is received
1631           whose stream is not in "open" or "half closed (local)" state, the recipient MUST respond
1632           with a <xref target="StreamErrorHandler">stream error</xref> of type
1633           <x:ref>STREAM_CLOSED</x:ref>.
1634         </t>
1635         <t>
1636           The total number of padding octets is determined by the value of the Pad Length field. If
1637           the length of the padding is greater than the length of the frame payload, the recipient
1638           MUST treat this as a <xref target="ConnectionErrorHandler">connection error</xref> of
1639           type <x:ref>PROTOCOL_ERROR</x:ref>.
1640           <list style="hanging">
1641             <t hangText="Note:">
1642               A frame can be increased in size by one octet by including a Pad Length field with a
1643               value of zero.
1644             </t>
1645           </list>
1646         </t>
1647         <t>
1648           Padding is a security feature; see <xref target="padding"/>.
1649         </t>
1650       </section>
1651
1652       <section anchor="HEADERS" title="HEADERS">
1653         <t>
1654           The HEADERS frame (type=0x1) is used to <xref target="StreamStates">open a stream</xref>,
1655           and additionally carries a header block fragment. HEADERS frames can be sent on a stream
1656           in the "open" or "half closed (remote)" states.
1657         </t>
1658         <figure title="HEADERS Frame Payload">
1659           <artwork type="inline"><![CDATA[
1660   0                   1                   2                   3
1661   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
1662  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1663  |Pad Length? (8)|
1664  +-+-------------+-----------------------------------------------+
1665  |E|                 Stream Dependency? (31)                     |
1666  +-+-------------+-----------------------------------------------+
1667  |  Weight? (8)  |
1668  +-+-------------+-----------------------------------------------+
1669  |                   Header Block Fragment (*)                 ...
1670  +---------------------------------------------------------------+
1671  |                           Padding (*)                       ...
1672  +---------------------------------------------------------------+
1673 ]]></artwork>
1674         </figure>
1675         <t>
1676           The HEADERS frame payload has the following fields:
1677           <list style="hanging">
1678             <t hangText="Pad Length:">
1679               An 8-bit field containing the length of the frame padding in units of octets.  This
1680               field is only present if the PADDED flag is set.
1681             </t>
1682             <t hangText="E:">
1683               A single bit flag indicates that the stream dependency is exclusive, see <xref
1684               target="StreamPriority"/>.  This field is only present if the PRIORITY flag is set.
1685             </t>
1686             <t hangText="Stream Dependency:">
1687               A 31-bit stream identifier for the stream that this stream depends on, see <xref
1688               target="StreamPriority"/>.  This field is only present if the PRIORITY flag is set.
1689             </t>
1690             <t hangText="Weight:">
1691               An 8-bit weight for the stream, see <xref target="StreamPriority"/>.  Add one to the
1692               value to obtain a weight between 1 and 256.  This field is only present if the
1693               PRIORITY flag is set.
1694             </t>
1695             <t hangText="Header Block Fragment:">
1696               A <xref target="HeaderBlock">header block fragment</xref>.
1697             </t>
1698             <t hangText="Padding:">
1699               Padding octets that contain no application semantic value.  Padding octets MUST be set
1700               to zero when sending and ignored when receiving.
1701             </t>
1702           </list>
1703         </t>
1704
1705         <t>
1706           The HEADERS frame defines the following flags:
1707           <list style="hanging">
1708             <x:lt hangText="END_STREAM (0x1):">
1709               <t>
1710                 Bit 1 being set indicates that the <xref target="HeaderBlock">header block</xref> is
1711                 the last that the endpoint will send for the identified stream.  Setting this flag
1712                 causes the stream to enter one of <xref target="StreamStates">"half closed"
1713                 states</xref>.
1714               </t>
1715               <t>
1716                 A HEADERS frame carries the END_STREAM flag that signals the end of a stream.
1717                 However, a HEADERS frame with the END_STREAM flag set can be followed by
1718                 <x:ref>CONTINUATION</x:ref> frames on the same stream.  Logically, the
1719                 <x:ref>CONTINUATION</x:ref> frames are part of the HEADERS frame.
1720               </t>
1721             </x:lt>
1722             <x:lt hangText="END_HEADERS (0x4):">
1723               <t>
1724                 Bit 3 being set indicates that this frame contains an entire <xref
1725                 target="HeaderBlock">header block</xref> and is not followed by any
1726                 <x:ref>CONTINUATION</x:ref> frames.
1727               </t>
1728               <t>
1729                 A HEADERS frame without the END_HEADERS flag set MUST be followed by a
1730                 <x:ref>CONTINUATION</x:ref> frame for the same stream.  A receiver MUST treat the
1731                 receipt of any other type of frame or a frame on a different stream as a <xref
1732                 target="ConnectionErrorHandler">connection error</xref> of type
1733                 <x:ref>PROTOCOL_ERROR</x:ref>.
1734               </t>
1735             </x:lt>
1736             <x:lt hangText="PADDED (0x8):">
1737               <t>
1738                 Bit 4 being set indicates that the Pad Length field and any padding that it
1739                 describes is present.
1740               </t>
1741             </x:lt>
1742             <x:lt hangText="PRIORITY (0x20):">
1743               <t>
1744                 Bit 6 being set indicates that the Exclusive Flag (E), Stream Dependency, and Weight
1745                 fields are present; see <xref target="StreamPriority"/>.
1746               </t>
1747             </x:lt>
1748           </list>
1749         </t>
1750
1751         <t>
1752           The payload of a HEADERS frame contains a <xref target="HeaderBlock">header block
1753           fragment</xref>.  A header block that does not fit within a HEADERS frame is continued in
1754           a <xref target="CONTINUATION">CONTINUATION frame</xref>.
1755         </t>
1756
1757         <t>
1758           HEADERS frames MUST be associated with a stream. If a HEADERS frame is received whose
1759           stream identifier field is 0x0, the recipient MUST respond with a <xref
1760           target="ConnectionErrorHandler">connection error</xref> of type
1761           <x:ref>PROTOCOL_ERROR</x:ref>.
1762         </t>
1763
1764         <t>
1765           The HEADERS frame changes the connection state as described in <xref
1766           target="HeaderBlock"/>.
1767         </t>
1768
1769         <t>
1770           The HEADERS frame includes optional padding.  Padding fields and flags are identical to
1771           those defined for <xref target="DATA">DATA frames</xref>.
1772         </t>
1773         <t>
1774           Prioritization information in a HEADERS frame is logically equivalent to a separate
1775           <x:ref>PRIORITY</x:ref> frame, but inclusion in HEADERS avoids the potential for churn in
1776           stream prioritization when new streams are created.  Priorization fields in HEADERS frames
1777           subsequent to the first on a stream <xref target="reprioritize">reprioritize the
1778           stream</xref>.
1779         </t>
1780       </section>
1781
1782       <section anchor="PRIORITY" title="PRIORITY">
1783         <t>
1784           The PRIORITY frame (type=0x2) specifies the <xref target="StreamPriority">sender-advised
1785           priority of a stream</xref>.  It can be sent at any time for an existing stream, including
1786           closed streams.  This enables reprioritization of existing streams.
1787         </t>
1788         <figure title="PRIORITY Frame Payload">
1789           <artwork type="inline"><![CDATA[
1790   0                   1                   2                   3
1791   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
1792  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1793  |E|                  Stream Dependency (31)                     |
1794  +-+-------------+-----------------------------------------------+
1795  |   Weight (8)  |
1796  +-+-------------+
1797 ]]></artwork>
1798         </figure>
1799         <t>
1800           The payload of a PRIORITY frame contains the following fields:
1801           <list style="hanging">
1802             <t hangText="E:">
1803               A single bit flag indicates that the stream dependency is exclusive, see <xref
1804               target="StreamPriority"/>.
1805             </t>
1806             <t hangText="Stream Dependency:">
1807               A 31-bit stream identifier for the stream that this stream depends on, see <xref
1808               target="StreamPriority"/>.
1809             </t>
1810             <t hangText="Weight:">
1811               An 8-bit weight for the identified stream dependency, see <xref
1812               target="StreamPriority"/>.  Add one to the value to obtain a weight between 1 and 256.
1813             </t>
1814           </list>
1815         </t>
1816
1817         <t>
1818           The PRIORITY frame does not define any flags.
1819         </t>
1820
1821         <t>
1822           The PRIORITY frame is associated with an existing stream. If a PRIORITY frame is received
1823           with a stream identifier of 0x0, the recipient MUST respond with a <xref
1824           target="ConnectionErrorHandler">connection error</xref> of type
1825           <x:ref>PROTOCOL_ERROR</x:ref>.
1826         </t>
1827         <t>
1828           The PRIORITY frame can be sent on a stream in any of the "reserved (remote)", "open",
1829           "half closed (local)", "half closed (remote)", or "closed" states, though it cannot be
1830           sent between consecutive frames that comprise a single <xref target="HeaderBlock">header
1831           block</xref>.  Note that this frame could arrive after processing or frame sending has
1832           completed, which would cause it to have no effect on the current stream.  For a stream
1833           that is in the "half closed (remote)" or "closed" - state, this frame can only affect
1834           processing of the current stream and not frame transmission.
1835         </t>
1836         <t>
1837           The PRIORITY frame is the only frame that can be sent for a stream in the "closed" state.
1838           This allows for the reprioritization of a group of dependent streams by altering the
1839           priority of a parent stream, which might be closed.  However, a PRIORITY frame sent on a
1840           closed stream risks being ignored due to the peer having discarded priority state
1841           information for that stream.
1842         </t>
1843       </section>
1844
1845       <section anchor="RST_STREAM" title="RST_STREAM">
1846         <t>
1847           The RST_STREAM frame (type=0x3) allows for abnormal termination of a stream.  When sent by
1848           the initiator of a stream, it indicates that they wish to cancel the stream or that an
1849           error condition has occurred.  When sent by the receiver of a stream, it indicates that
1850           either the receiver is rejecting the stream, requesting that the stream be cancelled, or
1851           that an error condition has occurred.
1852         </t>
1853         <figure title="RST_STREAM Frame Payload">
1854           <artwork type="inline"><![CDATA[
1855   0                   1                   2                   3
1856   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
1857  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1858  |                        Error Code (32)                        |
1859  +---------------------------------------------------------------+
1860 ]]></artwork>
1861         </figure>
1862
1863         <t>
1864           The RST_STREAM frame contains a single unsigned, 32-bit integer identifying the <xref
1865           target="ErrorCodes">error code</xref>.  The error code indicates why the stream is being
1866           terminated.
1867         </t>
1868
1869         <t>
1870           The RST_STREAM frame does not define any flags.
1871         </t>
1872
1873         <t>
1874           The RST_STREAM frame fully terminates the referenced stream and causes it to enter the
1875           closed state. After receiving a RST_STREAM on a stream, the receiver MUST NOT send
1876           additional frames for that stream, with the exception of <x:ref>PRIORITY</x:ref>. However,
1877           after sending the RST_STREAM, the sending endpoint MUST be prepared to receive and process
1878           additional frames sent on the stream that might have been sent by the peer prior to the
1879           arrival of the RST_STREAM.
1880         </t>
1881
1882         <t>
1883           RST_STREAM frames MUST be associated with a stream.  If a RST_STREAM frame is received
1884           with a stream identifier of 0x0, the recipient MUST treat this as a <xref
1885           target="ConnectionErrorHandler">connection error</xref> of type
1886           <x:ref>PROTOCOL_ERROR</x:ref>.
1887         </t>
1888
1889         <t>
1890           RST_STREAM frames MUST NOT be sent for a stream in the "idle" state.  If a RST_STREAM
1891           frame identifying an idle stream is received, the recipient MUST treat this as a <xref
1892           target="ConnectionErrorHandler">connection error</xref> of type
1893           <x:ref>PROTOCOL_ERROR</x:ref>.
1894         </t>
1895
1896       </section>
1897
1898       <section anchor="SETTINGS" title="SETTINGS">
1899         <t>
1900           The SETTINGS frame (type=0x4) conveys configuration parameters that affect how endpoints
1901           communicate, such as preferences and constraints on peer behavior.  The SETTINGS frame is
1902           also used to acknowledge the receipt of those parameters.  Individually, a SETTINGS
1903           parameter can also be referred to as a "setting".
1904         </t>
1905         <t>
1906           SETTINGS parameters are not negotiated; they describe characteristics of the sending peer,
1907           which are used by the receiving peer. Different values for the same parameter can be
1908           advertised by each peer. For example, a client might set a high initial flow control
1909           window, whereas a server might set a lower value to conserve resources.
1910         </t>
1911
1912         <t>
1913           A SETTINGS frame MUST be sent by both endpoints at the start of a connection, and MAY be
1914           sent at any other time by either endpoint over the lifetime of the connection.
1915           Implementations MUST support all of the parameters defined by this specification.
1916         </t>
1917
1918         <t>
1919           Each parameter in a SETTINGS frame replaces any existing value for that parameter.
1920           Parameters are processed in the order in which they appear, and a receiver of a SETTINGS
1921           frame does not need to maintain any state other than the current value of its
1922           parameters. Therefore, the value of a SETTINGS parameter is the last value that is seen by
1923           a receiver.
1924         </t>
1925         <t>
1926           SETTINGS parameters are acknowledged by the receiving peer. To enable this, the SETTINGS
1927           frame defines the following flag:
1928           <list style="hanging">
1929             <t hangText="ACK (0x1):">
1930               Bit 1 being set indicates that this frame acknowledges receipt and application of the
1931               peer's SETTINGS frame.  When this bit is set, the payload of the SETTINGS frame MUST
1932               be empty.  Receipt of a SETTINGS frame with the ACK flag set and a length field value
1933               other than 0 MUST be treated as a <xref target="ConnectionErrorHandler">connection
1934               error</xref> of type <x:ref>FRAME_SIZE_ERROR</x:ref>.  For more info, see <xref
1935               target="SettingsSync">Settings Synchronization</xref>.
1936             </t>
1937           </list>
1938         </t>
1939         <t>
1940           SETTINGS frames always apply to a connection, never a single stream.  The stream
1941           identifier for a SETTINGS frame MUST be zero (0x0). If an endpoint receives a SETTINGS
1942           frame whose stream identifier field is anything other than 0x0, the endpoint MUST respond
1943           with a <xref target="ConnectionErrorHandler">connection error</xref> of type
1944           <x:ref>PROTOCOL_ERROR</x:ref>.
1945         </t>
1946         <t>
1947           The SETTINGS frame affects connection state.  A badly formed or incomplete SETTINGS frame
1948           MUST be treated as a <xref target="ConnectionErrorHandler">connection error</xref> of type
1949           <x:ref>PROTOCOL_ERROR</x:ref>.
1950         </t>
1951
1952         <section title="SETTINGS Format" anchor="SettingFormat">
1953           <t>
1954             The payload of a SETTINGS frame consists of zero or more parameters, each consisting of
1955             an unsigned 16-bit setting identifier and an unsigned 32-bit value.
1956           </t>
1957
1958           <figure title="Setting Format">
1959             <artwork type="inline"><![CDATA[
1960   0                   1                   2                   3
1961   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
1962  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1963  |       Identifier (16)         |
1964  +-------------------------------+-------------------------------+
1965  |                        Value (32)                             |
1966  +---------------------------------------------------------------+
1967 ]]></artwork>
1968           </figure>
1969         </section>
1970
1971         <section anchor="SettingValues" title="Defined SETTINGS Parameters">
1972           <t>
1973             The following parameters are defined:
1974             <list style="hanging">
1975               <x:lt hangText="SETTINGS_HEADER_TABLE_SIZE (0x1):"
1976                     anchor="SETTINGS_HEADER_TABLE_SIZE">
1977                 <t>
1978                   Allows the sender to inform the remote endpoint of the maximum size of the header
1979                   compression table used to decode header blocks, in octets. The encoder can select
1980                   any size equal to or less than this value by using signaling specific to the
1981                   header compression format inside a header block. The initial value is 4,096
1982                   octets.
1983                 </t>
1984               </x:lt>
1985               <x:lt hangText="SETTINGS_ENABLE_PUSH (0x2):"
1986                     anchor="SETTINGS_ENABLE_PUSH">
1987                 <t>
1988                   This setting can be use to disable <xref target="PushResources">server
1989                   push</xref>. An endpoint MUST NOT send a <x:ref>PUSH_PROMISE</x:ref> frame if it
1990                   receives this parameter set to a value of 0. An endpoint that has both set this
1991                   parameter to 0 and had it acknowledged MUST treat the receipt of a
1992                   <x:ref>PUSH_PROMISE</x:ref> frame as a <xref
1993                   target="ConnectionErrorHandler">connection error</xref> of type
1994                   <x:ref>PROTOCOL_ERROR</x:ref>.
1995                 </t>
1996                 <t>
1997                   The initial value is 1, which indicates that server push is permitted.  Any value
1998                   other than 0 or 1 MUST be treated as a <xref
1999                   target="ConnectionErrorHandler">connection error</xref> of type
2000                   <x:ref>PROTOCOL_ERROR</x:ref>.
2001                 </t>
2002               </x:lt>
2003               <x:lt hangText="SETTINGS_MAX_CONCURRENT_STREAMS (0x3):"
2004                     anchor="SETTINGS_MAX_CONCURRENT_STREAMS">
2005                 <t>
2006                   Indicates the maximum number of concurrent streams that the sender will allow.
2007                   This limit is directional: it applies to the number of streams that the sender
2008                   permits the receiver to create. Initially there is no limit to this value.  It is
2009                   recommended that this value be no smaller than 100, so as to not unnecessarily
2010                   limit parallelism.
2011                 </t>
2012                 <t>
2013                   A value of 0 for SETTINGS_MAX_CONCURRENT_STREAMS SHOULD NOT be treated as special
2014                   by endpoints.  A zero value does prevent the creation of new streams, however this
2015                   can also happen for any limit that is exhausted with active streams.  Servers
2016                   SHOULD only set a zero value for short durations; if a server does not wish to
2017                   accept requests, closing the connection could be preferable.
2018                 </t>
2019               </x:lt>
2020               <x:lt hangText="SETTINGS_INITIAL_WINDOW_SIZE (0x4):"
2021                     anchor="SETTINGS_INITIAL_WINDOW_SIZE">
2022                 <t>
2023                   Indicates the sender's initial window size (in octets) for stream level flow
2024                   control.  The initial value is 2<x:sup>16</x:sup>-1 (65,535) octets.
2025                 </t>
2026                 <t>
2027                   This setting affects the window size of all streams, including existing streams,
2028                   see <xref target="InitialWindowSize"/>.
2029                 </t>
2030                 <t>
2031                   Values above the maximum flow control window size of 2<x:sup>31</x:sup>-1 MUST
2032                   be treated as a <xref target="ConnectionErrorHandler">connection error</xref> of
2033                   type <x:ref>FLOW_CONTROL_ERROR</x:ref>.
2034                 </t>
2035               </x:lt>
2036               <x:lt hangText="SETTINGS_MAX_FRAME_SIZE (0x5):"
2037                     anchor="SETTINGS_MAX_FRAME_SIZE">
2038                 <t>
2039                   Indicates the size of the largest frame payload that the sender is willing to
2040                   receive, in octets.
2041                 </t>
2042                 <t>
2043                   The initial value is 2<x:sup>14</x:sup> (16,384) octets.  The value advertised by
2044                   an endpoint MUST be between this initial value and the maximum allowed frame size
2045                   (2<x:sup>24</x:sup>-1 or 16,777,215 octets), inclusive.  Values outside this range
2046                   MUST be treated as a <xref target="ConnectionErrorHandler">connection error</xref>
2047                   of type <x:ref>PROTOCOL_ERROR</x:ref>.
2048                 </t>
2049               </x:lt>
2050               <x:lt hangText="SETTINGS_MAX_HEADER_LIST_SIZE (0x6):"
2051                     anchor="SETTINGS_MAX_HEADER_LIST_SIZE">
2052                 <t>
2053                   This advisory setting informs a peer of the maximum size of header list that the
2054                   sender is prepared to accept, in octets. The value is based on the uncompressed
2055                   size of header fields, including the length of the name and value in octets plus
2056                   an overhead of 32 octets for each header field.
2057                 </t>
2058                 <t>
2059                   For any given request, a lower limit than what is advertised MAY be enforced.  The
2060                   initial value of this setting is unlimited.
2061                 </t>
2062               </x:lt>
2063             </list>
2064           </t>
2065           <t>
2066             An endpoint that receives a SETTINGS frame with any unknown or unsupported identifier
2067             MUST ignore that setting.
2068           </t>
2069         </section>
2070
2071         <section anchor="SettingsSync" title="Settings Synchronization">
2072           <t>
2073             Most values in SETTINGS benefit from or require an understanding of when the peer has
2074             received and applied the changed parameter values. In order to provide
2075             such synchronization timepoints, the recipient of a SETTINGS frame in which the ACK flag
2076             is not set MUST apply the updated parameters as soon as possible upon receipt.
2077           </t>
2078           <t>
2079             The values in the SETTINGS frame MUST be processed in the order they appear, with no
2080             other frame processing between values.  Unsupported parameters MUST be ignored.  Once
2081             all values have been processed, the recipient MUST immediately emit a SETTINGS frame
2082             with the ACK flag set. Upon receiving a SETTINGS frame with the ACK flag set, the sender
2083             of the altered parameters can rely on the setting having been applied.
2084           </t>
2085           <t>
2086             If the sender of a SETTINGS frame does not receive an acknowledgement within a
2087             reasonable amount of time, it MAY issue a <xref
2088             target="ConnectionErrorHandler">connection error</xref> of type
2089             <x:ref>SETTINGS_TIMEOUT</x:ref>.
2090           </t>
2091         </section>
2092       </section>
2093
2094       <section anchor="PUSH_PROMISE" title="PUSH_PROMISE">
2095         <t>
2096           The PUSH_PROMISE frame (type=0x5) is used to notify the peer endpoint in advance of
2097           streams the sender intends to initiate.  The PUSH_PROMISE frame includes the unsigned
2098           31-bit identifier of the stream the endpoint plans to create along with a set of headers
2099           that provide additional context for the stream.  <xref target="PushResources"/> contains a
2100           thorough description of the use of PUSH_PROMISE frames.
2101         </t>
2102
2103         <figure title="PUSH_PROMISE Payload Format">
2104           <artwork type="inline"><![CDATA[
2105   0                   1                   2                   3
2106   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
2107  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2108  |Pad Length? (8)|
2109  +-+-------------+-----------------------------------------------+
2110  |R|                  Promised Stream ID (31)                    |
2111  +-+-----------------------------+-------------------------------+
2112  |                   Header Block Fragment (*)                 ...
2113  +---------------------------------------------------------------+
2114  |                           Padding (*)                       ...
2115  +---------------------------------------------------------------+
2116 ]]></artwork>
2117         </figure>
2118         <t>
2119           The PUSH_PROMISE frame payload has the following fields:
2120           <list style="hanging">
2121             <t hangText="Pad Length:">
2122               An 8-bit field containing the length of the frame padding in units of octets.  This
2123               field is only present if the PADDED flag is set.
2124             </t>
2125             <t hangText="R:">
2126               A single reserved bit.
2127             </t>
2128             <t hangText="Promised Stream ID:">
2129               An unsigned 31-bit integer that identifies the stream that is reserved by the
2130               PUSH_PROMISE.  The promised stream identifier MUST be a valid choice for the next
2131               stream sent by the sender (see <xref target="StreamIdentifiers">new stream
2132               identifier</xref>).
2133             </t>
2134             <t hangText="Header Block Fragment:">
2135               A <xref target="HeaderBlock">header block fragment</xref> containing request header
2136               fields.
2137             </t>
2138             <t hangText="Padding:">
2139               Padding octets.
2140             </t>
2141           </list>
2142         </t>
2143
2144         <t>
2145           The PUSH_PROMISE frame defines the following flags:
2146           <list style="hanging">
2147             <x:lt hangText="END_HEADERS (0x4):">
2148               <t>
2149                 Bit 3 being set indicates that this frame contains an entire <xref
2150                 target="HeaderBlock">header block</xref> and is not followed by any
2151                 <x:ref>CONTINUATION</x:ref> frames.
2152               </t>
2153               <t>
2154                 A PUSH_PROMISE frame without the END_HEADERS flag set MUST be followed by a
2155                 CONTINUATION frame for the same stream.  A receiver MUST treat the receipt of any
2156                 other type of frame or a frame on a different stream as a <xref
2157                 target="ConnectionErrorHandler">connection error</xref> of type
2158                 <x:ref>PROTOCOL_ERROR</x:ref>.
2159               </t>
2160             </x:lt>
2161             <x:lt hangText="PADDED (0x8):">
2162               <t>
2163                 Bit 4 being set indicates that the Pad Length field and any padding that it
2164                 describes is present.
2165               </t>
2166             </x:lt>
2167           </list>
2168         </t>
2169
2170         <t>
2171           PUSH_PROMISE frames MUST be associated with an existing, peer-initiated stream. The stream
2172           identifier of a PUSH_PROMISE frame indicates the stream it is associated with.  If the
2173           stream identifier field specifies the value 0x0, a recipient MUST respond with a <xref
2174           target="ConnectionErrorHandler">connection error</xref> of type
2175           <x:ref>PROTOCOL_ERROR</x:ref>.
2176         </t>
2177
2178         <t>
2179           Promised streams are not required to be used in the order they are promised.  The
2180           PUSH_PROMISE only reserves stream identifiers for later use.
2181         </t>
2182
2183         <t>
2184           PUSH_PROMISE MUST NOT be sent if the <x:ref>SETTINGS_ENABLE_PUSH</x:ref> setting of the
2185           peer endpoint is set to 0.  An endpoint that has set this setting and has received
2186           acknowledgement MUST treat the receipt of a PUSH_PROMISE frame as a <xref
2187           target="ConnectionErrorHandler">connection error</xref> of type
2188           <x:ref>PROTOCOL_ERROR</x:ref>.
2189         </t>
2190         <t>
2191           Recipients of PUSH_PROMISE frames can choose to reject promised streams by returning a
2192           <x:ref>RST_STREAM</x:ref> referencing the promised stream identifier back to the sender of
2193           the PUSH_PROMISE.
2194         </t>
2195
2196        <t>
2197           A PUSH_PROMISE frame modifies the connection state in two ways.  The inclusion of a <xref
2198           target="HeaderBlock">header block</xref> potentially modifies the state maintained for
2199           header compression.  PUSH_PROMISE also reserves a stream for later use, causing the
2200           promised stream to enter the "reserved" state.  A sender MUST NOT send a PUSH_PROMISE on a
2201           stream unless that stream is either "open" or "half closed (remote)"; the sender MUST
2202           ensure that the promised stream is a valid choice for a <xref
2203           target="StreamIdentifiers">new stream identifier</xref> (that is, the promised stream MUST
2204           be in the "idle" state).
2205         </t>
2206         <t>
2207           Since PUSH_PROMISE reserves a stream, ignoring a PUSH_PROMISE frame causes the stream
2208           state to become indeterminate.  A receiver MUST treat the receipt of a PUSH_PROMISE on a
2209           stream that is neither "open" nor "half closed (local)" as a <xref
2210           target="ConnectionErrorHandler">connection error</xref> of type
2211           <x:ref>PROTOCOL_ERROR</x:ref>.  However, an endpoint that has sent
2212           <x:ref>RST_STREAM</x:ref> on the associated stream MUST handle PUSH_PROMISE frames that
2213           might have been created before the <x:ref>RST_STREAM</x:ref> frame is received and
2214           processed.
2215         </t>
2216         <t>
2217           A receiver MUST treat the receipt of a PUSH_PROMISE that promises an <xref
2218           target="StreamIdentifiers">illegal stream identifier</xref> (that is, an identifier for a
2219           stream that is not currently in the "idle" state) as a <xref
2220           target="ConnectionErrorHandler">connection error</xref> of type
2221           <x:ref>PROTOCOL_ERROR</x:ref>.
2222         </t>
2223
2224         <t>
2225           The PUSH_PROMISE frame includes optional padding.  Padding fields and flags are identical
2226           to those defined for <xref target="DATA">DATA frames</xref>.
2227         </t>
2228       </section>
2229
2230       <section anchor="PING" title="PING">
2231         <t>
2232           The PING frame (type=0x6) is a mechanism for measuring a minimal round trip time from the
2233           sender, as well as determining whether an idle connection is still functional.  PING
2234           frames can be sent from any endpoint.
2235         </t>
2236         <figure title="PING Payload Format">
2237           <artwork type="inline"><![CDATA[
2238   0                   1                   2                   3
2239   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
2240  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2241  |                                                               |
2242  |                      Opaque Data (64)                         |
2243  |                                                               |
2244  +---------------------------------------------------------------+
2245 ]]></artwork>
2246         </figure>
2247
2248         <t>
2249           In addition to the frame header, PING frames MUST contain 8 octets of data in the payload.
2250           A sender can include any value it chooses and use those bytes in any fashion.
2251         </t>
2252         <t>
2253           Receivers of a PING frame that does not include an ACK flag MUST send a PING frame with
2254           the ACK flag set in response, with an identical payload.  PING responses SHOULD be given
2255           higher priority than any other frame.
2256         </t>
2257
2258         <t>
2259           The PING frame defines the following flags:
2260           <list style="hanging">
2261             <t hangText="ACK (0x1):">
2262               Bit 1 being set indicates that this PING frame is a PING response.  An endpoint MUST
2263               set this flag in PING responses.  An endpoint MUST NOT respond to PING frames
2264               containing this flag.
2265             </t>
2266           </list>
2267         </t>
2268         <t>
2269           PING frames are not associated with any individual stream. If a PING frame is received
2270           with a stream identifier field value other than 0x0, the recipient MUST respond with a
2271           <xref target="ConnectionErrorHandler">connection error</xref> of type
2272           <x:ref>PROTOCOL_ERROR</x:ref>.
2273         </t>
2274         <t>
2275           Receipt of a PING frame with a length field value other than 8 MUST be treated as a <xref
2276           target="ConnectionErrorHandler">connection error</xref> of type
2277           <x:ref>FRAME_SIZE_ERROR</x:ref>.
2278         </t>
2279
2280       </section>
2281
2282       <section anchor="GOAWAY" title="GOAWAY">
2283         <t>
2284           The GOAWAY frame (type=0x7) informs the remote peer to stop creating streams on this
2285           connection.  GOAWAY can be sent by either the client or the server.  Once sent, the sender
2286           will ignore frames sent on any new streams with identifiers higher than the included last
2287           stream identifier.  Receivers of a GOAWAY frame MUST NOT open additional streams on the
2288           connection, although a new connection can be established for new streams.
2289         </t>
2290         <t>
2291           The purpose of this frame is to allow an endpoint to gracefully stop accepting new
2292           streams, while still finishing processing of previously established streams.  This enables
2293           administrative actions, like server maintainance.
2294         </t>
2295         <t>
2296           There is an inherent race condition between an endpoint starting new streams and the
2297           remote sending a GOAWAY frame.  To deal with this case, the GOAWAY contains the stream
2298           identifier of the last peer-initiated stream which was or might be processed on the
2299           sending endpoint in this connection.  For instance, if the server sends a GOAWAY frame,
2300           the identified stream is the highest numbered stream initiated by the client.
2301         </t>
2302         <t>
2303           If the receiver of the GOAWAY has sent data on streams with a higher stream identifier
2304           than what is indicated in the GOAWAY frame, those streams are not or will not be
2305           processed.  The receiver of the GOAWAY frame can treat the streams as though they had
2306           never been created at all, thereby allowing those streams to be retried later on a new
2307           connection.
2308         </t>
2309         <t>
2310           Endpoints SHOULD always send a GOAWAY frame before closing a connection so that the remote
2311           can know whether a stream has been partially processed or not.  For example, if an HTTP
2312           client sends a POST at the same time that a server closes a connection, the client cannot
2313           know if the server started to process that POST request if the server does not send a
2314           GOAWAY frame to indicate what streams it might have acted on.
2315         </t>
2316         <t>
2317           An endpoint might choose to close a connection without sending GOAWAY for misbehaving
2318           peers.
2319         </t>
2320
2321         <figure title="GOAWAY Payload Format">
2322           <artwork type="inline"><![CDATA[
2323   0                   1                   2                   3
2324   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
2325  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2326  |R|                  Last-Stream-ID (31)                        |
2327  +-+-------------------------------------------------------------+
2328  |                      Error Code (32)                          |
2329  +---------------------------------------------------------------+
2330  |                  Additional Debug Data (*)                    |
2331  +---------------------------------------------------------------+
2332 ]]></artwork>
2333         </figure>
2334         <t>
2335           The GOAWAY frame does not define any flags.
2336         </t>
2337         <t>
2338           The GOAWAY frame applies to the connection, not a specific stream.  An endpoint MUST treat
2339           a <x:ref>GOAWAY</x:ref> frame with a stream identifier other than 0x0 as a <xref
2340           target="ConnectionErrorHandler">connection error</xref> of type
2341           <x:ref>PROTOCOL_ERROR</x:ref>.
2342         </t>
2343         <t>
2344           The last stream identifier in the GOAWAY frame contains the highest numbered stream
2345           identifier for which the sender of the GOAWAY frame might have taken some action on, or
2346           might yet take action on.  All streams up to and including the identified stream might
2347           have been processed in some way.  The last stream identifier can be set to 0 if no streams
2348           were processed.
2349           <list style="hanging">
2350             <t hangText="Note:">
2351               In this context, "processed" means that some data from the stream was passed to some
2352               higher layer of software that might have taken some action as a result.
2353             </t>
2354           </list>
2355           If a connection terminates without a GOAWAY frame, the last stream identifier is
2356           effectively the highest possible stream identifier.
2357         </t>
2358         <t>
2359           On streams with lower or equal numbered identifiers that were not closed completely prior
2360           to the connection being closed, re-attempting requests, transactions, or any protocol
2361           activity is not possible, with the exception of idempotent actions like HTTP GET, PUT, or
2362           DELETE.  Any protocol activity that uses higher numbered streams can be safely retried
2363           using a new connection.
2364         </t>
2365         <t>
2366           Activity on streams numbered lower or equal to the last stream identifier might still
2367           complete successfully.  The sender of a GOAWAY frame might gracefully shut down a
2368           connection by sending a GOAWAY frame, maintaining the connection in an open state until
2369           all in-progress streams complete.
2370         </t>
2371         <t>
2372           An endpoint MAY send multiple GOAWAY frames if circumstances change.  For instance, an
2373           endpoint that sends GOAWAY with <x:ref>NO_ERROR</x:ref> during graceful shutdown could
2374           subsequently encounter an condition that requires immediate termination of the connection.
2375           The last stream identifier from the last GOAWAY frame received indicates which streams
2376           could have been acted upon.  Endpoints MUST NOT increase the value they send in the last
2377           stream identifier, since the peers might already have retried unprocessed requests on
2378           another connection.
2379         </t>
2380         <t>
2381           A client that is unable to retry requests loses all requests that are in flight when the
2382           server closes the connection.  This is especially true for intermediaries that might
2383           not be serving clients using HTTP/2.  A server that is attempting to gracefully shut down
2384           a connection SHOULD send an initial GOAWAY frame with the last stream identifier set to
2385           2<x:sup>31</x:sup>-1 and a <x:ref>NO_ERROR</x:ref> code.  This signals to the client that
2386           a shutdown is imminent and that no further requests can be initiated.  After waiting at
2387           least one round trip time, the server can send another GOAWAY frame with an updated last
2388           stream identifier.  This ensures that a connection can be cleanly shut down without losing
2389           requests.
2390         </t>
2391
2392         <t>
2393           After sending a GOAWAY frame, the sender can discard frames for streams with identifiers
2394           higher than the identified last stream.  However, any frames that alter connection state
2395           cannot be completely ignored.  For instance, <x:ref>HEADERS</x:ref>,
2396           <x:ref>PUSH_PROMISE</x:ref> and <x:ref>CONTINUATION</x:ref> frames MUST be minimally
2397           processed to ensure the state maintained for header compression is consistent (see <xref
2398           target="HeaderBlock"/>); similarly DATA frames MUST be counted toward the connection flow
2399           control window.  Failure to process these frames can cause flow control or header
2400           compression state to become unsynchronized.
2401         </t>
2402
2403         <t>
2404           The GOAWAY frame also contains a 32-bit <xref target="ErrorCodes">error code</xref> that
2405           contains the reason for closing the connection.
2406         </t>
2407         <t>
2408           Endpoints MAY append opaque data to the payload of any GOAWAY frame.  Additional debug
2409           data is intended for diagnostic purposes only and carries no semantic value.  Debug
2410           information could contain security- or privacy-sensitive data.  Logged or otherwise
2411           persistently stored debug data MUST have adequate safeguards to prevent unauthorized
2412           access.
2413         </t>
2414       </section>
2415
2416       <section anchor="WINDOW_UPDATE" title="WINDOW_UPDATE">
2417         <t>
2418           The WINDOW_UPDATE frame (type=0x8) is used to implement flow control; see <xref
2419           target="FlowControl"/> for an overview.
2420         </t>
2421         <t>
2422           Flow control operates at two levels: on each individual stream and on the entire
2423           connection.
2424         </t>
2425         <t>
2426           Both types of flow control are hop-by-hop; that is, only between the two endpoints.
2427           Intermediaries do not forward WINDOW_UPDATE frames between dependent connections.
2428           However, throttling of data transfer by any receiver can indirectly cause the propagation
2429           of flow control information toward the original sender.
2430         </t>
2431         <t>
2432           Flow control only applies to frames that are identified as being subject to flow control.
2433           Of the frame types defined in this document, this includes only <x:ref>DATA</x:ref> frames.
2434           Frames that are exempt from flow control MUST be accepted and processed, unless the
2435           receiver is unable to assign resources to handling the frame.  A receiver MAY respond with
2436           a <xref target="StreamErrorHandler">stream error</xref> or <xref
2437           target="ConnectionErrorHandler">connection error</xref> of type
2438           <x:ref>FLOW_CONTROL_ERROR</x:ref> if it is unable to accept a frame.
2439         </t>
2440         <figure title="WINDOW_UPDATE Payload Format">
2441           <artwork type="inline"><![CDATA[
2442   0                   1                   2                   3
2443   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
2444  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2445  |R|              Window Size Increment (31)                     |
2446  +-+-------------------------------------------------------------+
2447 ]]></artwork>
2448         </figure>
2449         <t>
2450           The payload of a WINDOW_UPDATE frame is one reserved bit, plus an unsigned 31-bit integer
2451           indicating the number of octets that the sender can transmit in addition to the existing
2452           flow control window.  The legal range for the increment to the flow control window is 1 to
2453           2<x:sup>31</x:sup>-1 (0x7fffffff) octets.
2454         </t>
2455         <t>
2456           The WINDOW_UPDATE frame does not define any flags.
2457         </t>
2458         <t>
2459           The WINDOW_UPDATE frame can be specific to a stream or to the entire connection.  In the
2460           former case, the frame's stream identifier indicates the affected stream; in the latter,
2461           the value "0" indicates that the entire connection is the subject of the frame.
2462         </t>
2463         <t>
2464           A receiver MUST treat the receipt of a WINDOW_UPDATE frame with an flow control window
2465           increment of 0 as a <xref target="StreamErrorHandler">stream error</xref> of type
2466           <x:ref>PROTOCOL_ERROR</x:ref>; errors on the connection flow control window MUST be
2467           treated as a <xref target="ConnectionErrorHandler">connection error</xref>.
2468         </t>
2469         <t>
2470           WINDOW_UPDATE can be sent by a peer that has sent a frame bearing the END_STREAM flag.
2471           This means that a receiver could receive a WINDOW_UPDATE frame on a "half closed (remote)"
2472           or "closed" stream.  A receiver MUST NOT treat this as an error, see <xref
2473           target="StreamStates"/>.
2474         </t>
2475         <t>
2476           A receiver that receives a flow controlled frame MUST always account for its contribution
2477           against the connection flow control window, unless the receiver treats this as a <xref
2478           target="ConnectionErrorHandler">connection error</xref>.  This is necessary even if the
2479           frame is in error.  Since the sender counts the frame toward the flow control window, if
2480           the receiver does not, the flow control window at sender and receiver can become
2481           different.
2482         </t>
2483
2484         <section title="The Flow Control Window">
2485           <t>
2486             Flow control in HTTP/2 is implemented using a window kept by each sender on every
2487             stream. The flow control window is a simple integer value that indicates how many octets
2488             of data the sender is permitted to transmit; as such, its size is a measure of the
2489             buffering capacity of the receiver.
2490           </t>
2491           <t>
2492             Two flow control windows are applicable: the stream flow control window and the
2493             connection flow control window.  The sender MUST NOT send a flow controlled frame with a
2494             length that exceeds the space available in either of the flow control windows advertised
2495             by the receiver.  Frames with zero length with the END_STREAM flag set (that is, an
2496             empty <x:ref>DATA</x:ref> frame) MAY be sent if there is no available space in either
2497             flow control window.
2498           </t>
2499           <t>
2500             For flow control calculations, the 9 octet frame header is not counted.
2501           </t>
2502           <t>
2503             After sending a flow controlled frame, the sender reduces the space available in both
2504             windows by the length of the transmitted frame.
2505           </t>
2506           <t>
2507             The receiver of a frame sends a WINDOW_UPDATE frame as it consumes data and frees up
2508             space in flow control windows.  Separate WINDOW_UPDATE frames are sent for the stream
2509             and connection level flow control windows.
2510           </t>
2511           <t>
2512             A sender that receives a WINDOW_UPDATE frame updates the corresponding window by the
2513             amount specified in the frame.
2514           </t>
2515           <t>
2516             A sender MUST NOT allow a flow control window to exceed 2<x:sup>31</x:sup>-1 octets.
2517             If a sender receives a WINDOW_UPDATE that causes a flow control window to exceed this
2518             maximum it MUST terminate either the stream or the connection, as appropriate.  For
2519             streams, the sender sends a <x:ref>RST_STREAM</x:ref> with the error code of
2520             <x:ref>FLOW_CONTROL_ERROR</x:ref> code; for the connection, a <x:ref>GOAWAY</x:ref>
2521             frame with a <x:ref>FLOW_CONTROL_ERROR</x:ref> code.
2522           </t>
2523           <t>
2524             Flow controlled frames from the sender and WINDOW_UPDATE frames from the receiver are
2525             completely asynchronous with respect to each other. This property allows a receiver to
2526             aggressively update the window size kept by the sender to prevent streams from stalling.
2527           </t>
2528         </section>
2529
2530         <section anchor="InitialWindowSize" title="Initial Flow Control Window Size">
2531           <t>
2532             When an HTTP/2 connection is first established, new streams are created with an initial
2533             flow control window size of 65,535 octets. The connection flow control window is 65,535
2534             octets. Both endpoints can adjust the initial window size for new streams by including
2535             a value for <x:ref>SETTINGS_INITIAL_WINDOW_SIZE</x:ref> in the <x:ref>SETTINGS</x:ref>
2536             frame that forms part of the connection preface. The connection flow control window can
2537             only be changed using WINDOW_UPDATE frames.
2538           </t>
2539           <t>
2540             Prior to receiving a <x:ref>SETTINGS</x:ref> frame that sets a value for
2541             <x:ref>SETTINGS_INITIAL_WINDOW_SIZE</x:ref>, an endpoint can only use the default
2542             initial window size when sending flow controlled frames.  Similarly, the connection flow
2543             control window is set to the default initial window size until a WINDOW_UPDATE frame is
2544             received.
2545           </t>
2546           <t>
2547             A <x:ref>SETTINGS</x:ref> frame can alter the initial flow control window size for all
2548             current streams. When the value of <x:ref>SETTINGS_INITIAL_WINDOW_SIZE</x:ref> changes,
2549             a receiver MUST adjust the size of all stream flow control windows that it maintains by
2550             the difference between the new value and the old value.
2551           </t>
2552           <t>
2553             A change to <x:ref>SETTINGS_INITIAL_WINDOW_SIZE</x:ref> can cause the available space in
2554             a flow control window to become negative.  A sender MUST track the negative flow control
2555             window, and MUST NOT send new flow controlled frames until it receives WINDOW_UPDATE
2556             frames that cause the flow control window to become positive.
2557           </t>
2558           <t>
2559             For example, if the client sends 60KB immediately on connection establishment, and the
2560             server sets the initial window size to be 16KB, the client will recalculate the
2561             available flow control window to be -44KB on receipt of the <x:ref>SETTINGS</x:ref>
2562             frame.  The client retains a negative flow control window until WINDOW_UPDATE frames
2563             restore the window to being positive, after which the client can resume sending.
2564           </t>
2565           <t>
2566             A <x:ref>SETTINGS</x:ref> frame cannot alter the connection flow control window.
2567           </t>
2568           <t>
2569             An endpoint MUST treat a change to <x:ref>SETTINGS_INITIAL_WINDOW_SIZE</x:ref> that
2570             causes any flow control window to exceed the maximum size as a <xref
2571             target="ConnectionErrorHandler">connection error</xref> of type
2572             <x:ref>FLOW_CONTROL_ERROR</x:ref>.
2573           </t>
2574         </section>
2575
2576         <section title="Reducing the Stream Window Size">
2577           <t>
2578             A receiver that wishes to use a smaller flow control window than the current size can
2579             send a new <x:ref>SETTINGS</x:ref> frame.  However, the receiver MUST be prepared to
2580             receive data that exceeds this window size, since the sender might send data that
2581             exceeds the lower limit prior to processing the <x:ref>SETTINGS</x:ref> frame.
2582           </t>
2583           <t>
2584             After sending a SETTINGS frame that reduces the initial flow control window size, a
2585             receiver has two options for handling streams that exceed flow control limits:
2586             <list style="numbers">
2587               <t>
2588                 The receiver can immediately send <x:ref>RST_STREAM</x:ref> with
2589                 <x:ref>FLOW_CONTROL_ERROR</x:ref> error code for the affected streams.
2590               </t>
2591               <t>
2592                 The receiver can accept the streams and tolerate the resulting head of line
2593                 blocking, sending WINDOW_UPDATE frames as it consumes data.
2594               </t>
2595             </list>
2596           </t>
2597         </section>
2598       </section>
2599
2600       <section anchor="CONTINUATION" title="CONTINUATION">
2601         <t>
2602           The CONTINUATION frame (type=0x9) is used to continue a sequence of <xref
2603           target="HeaderBlock">header block fragments</xref>.  Any number of CONTINUATION frames can
2604           be sent on an existing stream, as long as the preceding frame is on the same stream and is
2605           a <x:ref>HEADERS</x:ref>, <x:ref>PUSH_PROMISE</x:ref> or CONTINUATION frame without the
2606           END_HEADERS flag set.
2607         </t>
2608
2609         <figure title="CONTINUATION Frame Payload">
2610           <artwork type="inline"><![CDATA[
2611   0                   1                   2                   3
2612   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
2613  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2614  |                   Header Block Fragment (*)                 ...
2615  +---------------------------------------------------------------+
2616 ]]></artwork>
2617         </figure>
2618         <t>
2619           The CONTINUATION frame payload contains a <xref target="HeaderBlock">header block
2620           fragment</xref>.
2621         </t>
2622
2623         <t>
2624           The CONTINUATION frame defines the following flag:
2625           <list style="hanging">
2626             <x:lt hangText="END_HEADERS (0x4):">
2627               <t>
2628                 Bit 3 being set indicates that this frame ends a <xref target="HeaderBlock">header
2629                 block</xref>.
2630               </t>
2631               <t>
2632                 If the END_HEADERS bit is not set, this frame MUST be followed by another
2633                 CONTINUATION frame.  A receiver MUST treat the receipt of any other type of frame or
2634                 a frame on a different stream as a <xref target="ConnectionErrorHandler">connection
2635                 error</xref> of type <x:ref>PROTOCOL_ERROR</x:ref>.
2636               </t>
2637             </x:lt>
2638           </list>
2639         </t>
2640
2641         <t>
2642           The CONTINUATION frame changes the connection state as defined in <xref
2643           target="HeaderBlock" />.
2644         </t>
2645
2646         <t>
2647           CONTINUATION frames MUST be associated with a stream. If a CONTINUATION frame is received
2648           whose stream identifier field is 0x0, the recipient MUST respond with a <xref
2649           target="ConnectionErrorHandler">connection error</xref> of type PROTOCOL_ERROR.
2650         </t>
2651
2652         <t>
2653           A CONTINUATION frame MUST be preceded by a <x:ref>HEADERS</x:ref>,
2654           <x:ref>PUSH_PROMISE</x:ref> or CONTINUATION frame without the END_HEADERS flag set.  A
2655           recipient that observes violation of this rule MUST respond with a <xref
2656           target="ConnectionErrorHandler"> connection error</xref> of type
2657           <x:ref>PROTOCOL_ERROR</x:ref>.
2658         </t>
2659       </section>
2660     </section>
2661
2662     <section anchor="ErrorCodes" title="Error Codes">
2663       <t>
2664         Error codes are 32-bit fields that are used in <x:ref>RST_STREAM</x:ref> and
2665         <x:ref>GOAWAY</x:ref> frames to convey the reasons for the stream or connection error.
2666       </t>
2667
2668       <t>
2669         Error codes share a common code space.  Some error codes apply only to either streams or the
2670         entire connection and have no defined semantics in the other context.
2671       </t>
2672
2673       <t>
2674         The following error codes are defined:
2675         <list style="hanging">
2676           <t hangText="NO_ERROR (0x0):" anchor="NO_ERROR">
2677             The associated condition is not as a result of an error.  For example, a
2678             <x:ref>GOAWAY</x:ref> might include this code to indicate graceful shutdown of a
2679             connection.
2680           </t>
2681           <t hangText="PROTOCOL_ERROR (0x1):" anchor="PROTOCOL_ERROR">
2682             The endpoint detected an unspecific protocol error.  This error is for use when a more
2683             specific error code is not available.
2684           </t>
2685           <t hangText="INTERNAL_ERROR (0x2):" anchor="INTERNAL_ERROR">
2686             The endpoint encountered an unexpected internal error.
2687           </t>
2688           <t hangText="FLOW_CONTROL_ERROR (0x3):" anchor="FLOW_CONTROL_ERROR">
2689             The endpoint detected that its peer violated the flow control protocol.
2690           </t>
2691           <t hangText="SETTINGS_TIMEOUT (0x4):" anchor="SETTINGS_TIMEOUT">
2692             The endpoint sent a <x:ref>SETTINGS</x:ref> frame, but did not receive a response in a
2693             timely manner.  See <xref target="SettingsSync">Settings Synchronization</xref>.
2694           </t>
2695           <t hangText="STREAM_CLOSED (0x5):" anchor="STREAM_CLOSED">
2696             The endpoint received a frame after a stream was half closed.
2697           </t>
2698           <t hangText="FRAME_SIZE_ERROR (0x6):" anchor="FRAME_SIZE_ERROR">
2699             The endpoint received a frame with an invalid size.
2700           </t>
2701           <t hangText="REFUSED_STREAM (0x7):" anchor="REFUSED_STREAM">
2702             The endpoint refuses the stream prior to performing any application processing, see
2703             <xref target="Reliability"/> for details.
2704           </t>
2705           <t hangText="CANCEL (0x8):" anchor="CANCEL">
2706             Used by the endpoint to indicate that the stream is no longer needed.
2707           </t>
2708           <t hangText="COMPRESSION_ERROR (0x9):" anchor="COMPRESSION_ERROR">
2709             The endpoint is unable to maintain the header compression context for the connection.
2710           </t>
2711           <t hangText="CONNECT_ERROR (0xa):" anchor="CONNECT_ERROR">
2712             The connection established in response to a <xref target="CONNECT">CONNECT
2713             request</xref> was reset or abnormally closed.
2714           </t>
2715           <t hangText="ENHANCE_YOUR_CALM (0xb):" anchor="ENHANCE_YOUR_CALM">
2716             The endpoint detected that its peer is exhibiting a behavior that might be generating
2717             excessive load.
2718           </t>
2719           <t hangText="INADEQUATE_SECURITY (0xc):" anchor="INADEQUATE_SECURITY">
2720             The underlying transport has properties that do not meet minimum security
2721             requirements (see <xref target="TLSUsage"/>).
2722           </t>
2723         </list>
2724       </t>
2725       <t>
2726         Unknown or unsupported error codes MUST NOT trigger any special behavior.  These MAY be
2727         treated by an implementation as being equivalent to <x:ref>INTERNAL_ERROR</x:ref>.
2728       </t>
2729     </section>
2730
2731     <section anchor="HTTPLayer" title="HTTP Message Exchanges">
2732       <t>
2733         HTTP/2 is intended to be as compatible as possible with current uses of HTTP. This means
2734         that, from the application perspective, the features of the protocol are largely
2735         unchanged. To achieve this, all request and response semantics are preserved, although the
2736         syntax of conveying those semantics has changed.
2737       </t>
2738       <t>
2739         Thus, the specification and requirements of HTTP/1.1 Semantics and Content <xref
2740         target="RFC7231"/>, Conditional Requests <xref target="RFC7232"/>, Range Requests <xref
2741         target="RFC7233"/>, Caching <xref target="RFC7234"/> and Authentication <xref
2742         target="RFC7235"/> are applicable to HTTP/2. Selected portions of HTTP/1.1 Message Syntax
2743         and Routing <xref target="RFC7230"/>, such as the HTTP and HTTPS URI schemes, are also
2744         applicable in HTTP/2, but the expression of those semantics for this protocol are defined
2745         in the sections below.
2746       </t>
2747
2748       <section anchor="HttpSequence" title="HTTP Request/Response Exchange">
2749         <t>
2750           A client sends an HTTP request on a new stream, using a previously unused <xref
2751           target="StreamIdentifiers">stream identifier</xref>.  A server sends an HTTP response on
2752           the same stream as the request.
2753         </t>
2754         <t>
2755           An HTTP message (request or response) consists of:
2756           <list style="numbers">
2757             <t>
2758               for a response only, zero or more <x:ref>HEADERS</x:ref> frames (each followed by zero
2759               or more <x:ref>CONTINUATION</x:ref> frames) containing the message headers of
2760               informational (1xx) HTTP responses (see <xref target="RFC7230" x:fmt=","
2761               x:rel="#header.fields"/> and <xref target="RFC7231" x:fmt="," x:rel="#status.1xx"/>),
2762               and
2763             </t>
2764             <t>
2765               one <x:ref>HEADERS</x:ref> frame (followed by zero or more <x:ref>CONTINUATION</x:ref>
2766               frames) containing the message headers (see <xref target="RFC7230" x:fmt=","
2767               x:rel="#header.fields"/>), and
2768             </t>
2769             <t>
2770               zero or more <x:ref>DATA</x:ref> frames containing the message payload (see <xref
2771               target="RFC7230" x:fmt="," x:rel="#message.body"/>), and
2772             </t>
2773             <t>
2774               optionally, one <x:ref>HEADERS</x:ref> frame, followed by zero or more
2775               <x:ref>CONTINUATION</x:ref> frames containing the trailer-part, if present (see <xref
2776               target="RFC7230" x:fmt="," x:rel="#chunked.trailer.part"/>).
2777             </t>
2778           </list>
2779           The last frame in the sequence bears an END_STREAM flag, noting that a
2780           <x:ref>HEADERS</x:ref> frame bearing the END_STREAM flag can be followed by
2781           <x:ref>CONTINUATION</x:ref> frames that carry any remaining portions of the header block.
2782         </t>
2783         <t>
2784           Other frames (from any stream) MUST NOT occur between either <x:ref>HEADERS</x:ref> frame
2785           and any <x:ref>CONTINUATION</x:ref> frames that might follow.
2786         </t>
2787
2788         <t>
2789           Trailing header fields are carried in a header block that also terminates the stream.
2790           That is, a sequence starting with a <x:ref>HEADERS</x:ref> frame, followed by zero or more
2791           <x:ref>CONTINUATION</x:ref> frames, where the <x:ref>HEADERS</x:ref> frame bears an
2792           END_STREAM flag.  Header blocks after the first that do not terminate the stream are not
2793           part of an HTTP request or response.
2794         </t>
2795         <t>
2796           A <x:ref>HEADERS</x:ref> frame (and associated <x:ref>CONTINUATION</x:ref> frames) can
2797           only appear at the start or end of a stream.  An endpoint that receives a
2798           <x:ref>HEADERS</x:ref> frame without the END_STREAM flag set after receiving a final
2799           (non-informational) status code MUST treat the corresponding request or response as <xref
2800           target="malformed">malformed</xref>.
2801         </t>
2802
2803         <t>
2804           An HTTP request/response exchange fully consumes a single stream.  A request starts with
2805           the <x:ref>HEADERS</x:ref> frame that puts the stream into an "open" state. The request
2806           ends with a frame bearing END_STREAM, which causes the stream to become "half closed
2807           (local)" for the client and "half closed (remote)" for the server.  A response starts with
2808           a <x:ref>HEADERS</x:ref> frame and ends with a frame bearing END_STREAM, which places the
2809           stream in the "closed" state.
2810           <!-- Yes, the response might be completed before the request does, but that's not a detail
2811                we need to expand upon.  It's complicated enough explaining this as it is.  -->
2812         </t>
2813
2814         <section anchor="informational-responses" title="Upgrading From HTTP/2">
2815           <t>
2816             HTTP/2 removes support for the 101 (Switching Protocols) informational status code
2817             (<xref target="RFC7231" x:fmt="," x:rel="#status.101"/>).
2818           </t>
2819           <t>
2820             The semantics of 101 (Switching Protocols) aren't applicable to a multiplexed protocol.
2821             Alternative protocols are able to use the same mechanisms that HTTP/2 uses to negotiate
2822             their use (see <xref target="starting"/>).
2823           </t>
2824         </section>
2825
2826         <section anchor="HttpHeaders" title="HTTP Header Fields">
2827           <t>
2828             HTTP header fields carry information as a series of key-value pairs. For a listing of
2829             registered HTTP headers, see the Message Header Field Registry maintained at <eref
2830             target="https://www.iana.org/assignments/message-headers"/>.
2831           </t>
2832
2833           <section anchor="PseudoHeaderFields" title="Pseudo-Header Fields">
2834             <t>
2835               While HTTP/1.x used the message start-line (see <xref target="RFC7230" x:fmt=","
2836               x:rel="#start.line"/>) to convey the target URI and method of the request, and the
2837               status code for the response, HTTP/2 uses special pseudo-header fields beginning with
2838               ':' character (ASCII 0x3a) for this purpose.
2839             </t>
2840             <t>
2841               Pseudo-header fields are not HTTP header fields. Endpoints MUST NOT generate
2842               pseudo-header fields other than those defined in this document.
2843             </t>
2844             <t>
2845               Pseudo-header fields are only valid in the context in which they are defined.
2846               Pseudo-header fields defined for requests MUST NOT appear in responses; pseudo-header
2847               fields defined for responses MUST NOT appear in requests.  Pseudo-header fields MUST
2848               NOT appear in trailers.  Endpoints MUST treat a request or response that contains
2849               undefined or invalid pseudo-header fields as <xref
2850               target="malformed">malformed</xref>.
2851             </t>
2852             <t>
2853               Just as in HTTP/1.x, header field names are strings of ASCII characters that are
2854               compared in a case-insensitive fashion. However, header field names MUST be converted
2855               to lowercase prior to their encoding in HTTP/2. A request or response containing
2856               uppercase header field names MUST be treated as <xref
2857               target="malformed">malformed</xref>.
2858             </t>
2859             <t>
2860               All pseudo-header fields MUST appear in the header block before regular header fields.
2861               Any request or response that contains a pseudo-header field that appears in a header
2862               block after a regular header field MUST be treated as <xref
2863               target="malformed">malformed</xref>.
2864             </t>
2865           </section>
2866
2867           <section title="Connection-Specific Header Fields">
2868             <t>
2869               HTTP/2 does not use the <spanx style="verb">Connection</spanx> header field to
2870               indicate connection-specific header fields; in this protocol, connection-specific
2871               metadata is conveyed by other means.  An endpoint MUST NOT generate a HTTP/2 message
2872               containing connection-specific header fields; any message containing
2873               connection-specific header fields MUST be treated as <xref
2874               target="malformed">malformed</xref>.
2875             </t>
2876             <t>
2877               This means that an intermediary transforming an HTTP/1.x message to HTTP/2 will need
2878               to remove any header fields nominated by the Connection header field, along with the
2879               Connection header field itself. Such intermediaries SHOULD also remove other
2880               connection-specific header fields, such as Keep-Alive, Proxy-Connection,
2881               Transfer-Encoding and Upgrade, even if they are not nominated by Connection.
2882             </t>
2883             <t>
2884               One exception to this is the TE header field, which MAY be present in an HTTP/2
2885               request, but when it is MUST NOT contain any value other than "trailers".
2886             </t>
2887             <t>
2888               <list style="hanging">
2889                 <t hangText="Note:">
2890                   HTTP/2 purposefully does not support upgrade to another protocol.  The handshake
2891                   methods described in <xref target="starting"/> are believed sufficient to
2892                   negotiate the use of alternative protocols.
2893                 </t>
2894               </list>
2895             </t>
2896           </section>
2897
2898           <section anchor="HttpRequest" title="Request Pseudo-Header Fields">
2899             <t>
2900               The following pseudo-header fields are defined for HTTP/2 requests:
2901               <list style="symbols">
2902                 <x:lt>
2903                   <t>
2904                     The <spanx style="verb">:method</spanx> pseudo-header field includes the HTTP
2905                     method (<xref target="RFC7231" x:fmt="," x:rel="#methods"/>).
2906                   </t>
2907                 </x:lt>
2908                 <x:lt>
2909                   <t>
2910                     The <spanx style="verb">:scheme</spanx> pseudo-header field includes the scheme
2911                     portion of the target URI (<xref target="RFC3986" x:fmt="," x:sec="3.1"/>).
2912                   </t>
2913                   <t>
2914                     <spanx style="verb">:scheme</spanx> is not restricted to <spanx
2915                     style="verb">http</spanx> and <spanx style="verb">https</spanx> schemed URIs.  A
2916                     proxy or gateway can translate requests for non-HTTP schemes, enabling the use
2917                     of HTTP to interact with non-HTTP services.
2918                   </t>
2919                 </x:lt>
2920                 <x:lt>
2921                   <t>
2922                     The <spanx style="verb">:authority</spanx> pseudo-header field includes the
2923                     authority portion of the target URI (<xref target="RFC3986" x:fmt=","
2924                     x:sec="3.2"/>). The authority MUST NOT include the deprecated <spanx
2925                     style="verb">userinfo</spanx> subcomponent for <spanx style="verb">http</spanx>
2926                     or <spanx style="verb">https</spanx> schemed URIs.
2927                   </t>
2928                   <t>
2929                     To ensure that the HTTP/1.1 request line can be reproduced accurately, this
2930                     pseudo-header field MUST be omitted when translating from an HTTP/1.1 request
2931                     that has a request target in origin or asterisk form (see <xref
2932                     target="RFC7230" x:fmt="," x:rel="#request-target"/>). Clients that generate
2933                     HTTP/2 requests directly SHOULD use the <spanx>:authority</spanx> pseudo-header
2934                     field instead of the <spanx style="verb">Host</spanx> header field. An
2935                     intermediary that converts an HTTP/2 request to HTTP/1.1 MUST create a <spanx
2936                     style="verb">Host</spanx> header field if one is not present in a request by
2937                     copying the value of the <spanx style="verb">:authority</spanx> pseudo-header
2938                     field.
2939                   </t>
2940                 </x:lt>
2941                 <x:lt>
2942                   <t>
2943                     The <spanx style="verb">:path</spanx> pseudo-header field includes the path and
2944                     query parts of the target URI (the <spanx style="verb">path-absolute</spanx>
2945                     production from <xref target="RFC3986"/> and optionally a '?' character
2946                     followed by the <spanx style="verb">query</spanx> production, see <xref
2947                     target="RFC3986" x:fmt="," x:sec="3.3"/> and <xref target="RFC3986" x:fmt=","
2948                     x:sec="3.4"/>). A request in asterisk form includes the value '*' for the
2949                     <spanx style="verb">:path</spanx> pseudo-header field.
2950                   </t>
2951                   <t>
2952                     This pseudo-header field MUST NOT be empty for <spanx style="verb">http</spanx>
2953                     or <spanx style="verb">https</spanx> URIs; <spanx style="verb">http</spanx> or
2954                     <spanx style="verb">https</spanx> URIs that do not contain a path component
2955                     MUST include a value of '/'. The exception to this rule is an OPTIONS request
2956                     for an <spanx style="verb">http</spanx> or <spanx style="verb">https</spanx>
2957                     URI that does not include a path component; these MUST include a <spanx
2958                     style="verb">:path</spanx> pseudo-header field with a value of '*' (see <xref
2959                     target="RFC7230" x:fmt="," x:rel="#asterisk-form"/>).
2960                   </t>
2961                 </x:lt>
2962               </list>
2963             </t>
2964             <t>
2965               All HTTP/2 requests MUST include exactly one valid value for the <spanx
2966               style="verb">:method</spanx>, <spanx style="verb">:scheme</spanx>, and <spanx
2967               style="verb">:path</spanx> pseudo-header fields, unless it is a <xref
2968               target="CONNECT">CONNECT request</xref>. An HTTP request that omits mandatory
2969               pseudo-header fields is <xref target="malformed">malformed</xref>.
2970             </t>
2971             <t>
2972               HTTP/2 does not define a way to carry the version identifier that is included in the
2973               HTTP/1.1 request line.
2974             </t>
2975           </section>
2976
2977           <section anchor="HttpResponse" title="Response Pseudo-Header Fields">
2978             <t>
2979               For HTTP/2 responses, a single <spanx style="verb">:status</spanx> pseudo-header
2980               field is defined that carries the HTTP status code field (see <xref target="RFC7231"
2981               x:fmt="," x:rel="#status.codes"/>). This pseudo-header field MUST be included in all
2982               responses, otherwise the response is <xref target="malformed">malformed</xref>.
2983             </t>
2984             <t>
2985               HTTP/2 does not define a way to carry the version or reason phrase that is included in
2986               an HTTP/1.1 status line.
2987             </t>
2988           </section>
2989
2990          <section anchor="CompressCookie" title="Compressing the Cookie Header Field">
2991             <t>
2992               The <xref target="COOKIE">Cookie header field</xref> can carry a significant amount of
2993               redundant data.
2994             </t>
2995             <t>
2996               The Cookie header field uses a semi-colon (";") to delimit cookie-pairs (or "crumbs").
2997               This header field doesn't follow the list construction rules in HTTP (see <xref
2998               target="RFC7230" x:fmt="," x:rel="#field.order"/>), which prevents cookie-pairs from
2999               being separated into different name-value pairs.  This can significantly reduce
3000               compression efficiency as individual cookie-pairs are updated.
3001             </t>
3002             <t>
3003               To allow for better compression efficiency, the Cookie header field MAY be split into
3004               separate header fields, each with one or more cookie-pairs.  If there are multiple
3005               Cookie header fields after decompression, these MUST be concatenated into a single
3006               octet string using the two octet delimiter of 0x3B, 0x20 (the ASCII string "; ")
3007               before being passed into a non-HTTP/2 context, such as an HTTP/1.1 connection, or a
3008               generic HTTP server application.
3009             </t>
3010             <figure>
3011               <preamble>
3012                 Therefore, the following two lists of Cookie header fields are semantically
3013                 equivalent.
3014               </preamble>
3015               <artwork type="inline"><![CDATA[
3016   cookie: a=b; c=d; e=f
3017
3018   cookie: a=b
3019   cookie: c=d
3020   cookie: e=f
3021 ]]></artwork>
3022             </figure>
3023           </section>
3024
3025           <section anchor="malformed" title="Malformed Requests and Responses">
3026             <t>
3027               A malformed request or response is one that is an otherwise valid sequence of HTTP/2
3028               frames, but is otherwise invalid due to the presence of extraneous frames, prohibited
3029               header fields, the absence of mandatory header fields, or the inclusion of uppercase
3030               header field names.
3031             </t>
3032             <t>
3033               A request or response that includes an entity body can include a <spanx
3034               style="verb">content-length</spanx> header field.  A request or response is also
3035               malformed if the value of a <spanx style="verb">content-length</spanx> header field
3036               does not equal the sum of the <x:ref>DATA</x:ref> frame payload lengths that form the
3037               body.  A response that is defined to have no payload, as described in <xref
3038               target="RFC7230" x:fmt="," x:rel="#header.content-length"/>, can have a non-zero
3039               <spanx style="verb">content-length</spanx> header field, even though no content is
3040               included in <x:ref>DATA</x:ref> frames.
3041             </t>
3042             <t>
3043               Intermediaries that process HTTP requests or responses (i.e., any intermediary not
3044               acting as a tunnel) MUST NOT forward a malformed request or response.  Malformed
3045               requests or responses that are detected MUST be treated as a <xref
3046               target="StreamErrorHandler">stream error</xref> of type <x:ref>PROTOCOL_ERROR</x:ref>.
3047             </t>
3048             <t>
3049               For malformed requests, a server MAY send an HTTP response prior to closing or
3050               resetting the stream.  Clients MUST NOT accept a malformed response. Note that these
3051               requirements are intended to protect against several types of common attacks against
3052               HTTP; they are deliberately strict, because being permissive can expose
3053               implementations to these vulnerabilities.
3054             </t>
3055           </section>
3056         </section>
3057
3058         <section title="Examples">
3059           <t>
3060             This section shows HTTP/1.1 requests and responses, with illustrations of equivalent
3061             HTTP/2 requests and responses.
3062           </t>
3063           <t>
3064             An HTTP GET request includes request header fields and no body and is therefore
3065             transmitted as a single <x:ref>HEADERS</x:ref> frame, followed by zero or more
3066             <x:ref>CONTINUATION</x:ref> frames containing the serialized block of request header
3067             fields.  The <x:ref>HEADERS</x:ref> frame in the following has both the END_HEADERS and
3068             END_STREAM flags set; no <x:ref>CONTINUATION</x:ref> frames are sent:
3069           </t>
3070
3071           <figure>
3072             <artwork type="inline"><![CDATA[
3073   GET /resource HTTP/1.1           HEADERS
3074   Host: example.org          ==>     + END_STREAM
3075   Accept: image/jpeg                 + END_HEADERS
3076                                        :method = GET
3077                                        :scheme = https
3078                                        :path = /resource
3079                                        host = example.org
3080                                        accept = image/jpeg
3081 ]]></artwork>
3082           </figure>
3083
3084           <t>
3085             Similarly, a response that includes only response header fields is transmitted as a
3086             <x:ref>HEADERS</x:ref> frame (again, followed by zero or more
3087             <x:ref>CONTINUATION</x:ref> frames) containing the serialized block of response header
3088             fields.
3089           </t>
3090
3091           <figure>
3092             <artwork type="inline"><![CDATA[
3093   HTTP/1.1 304 Not Modified        HEADERS
3094   ETag: "xyzzy"              ==>     + END_STREAM
3095   Expires: Thu, 23 Jan ...           + END_HEADERS
3096                                        :status = 304
3097                                        etag = "xyzzy"
3098                                        expires = Thu, 23 Jan ...
3099 ]]></artwork>
3100           </figure>
3101
3102           <t>
3103             An HTTP POST request that includes request header fields and payload data is transmitted
3104             as one <x:ref>HEADERS</x:ref> frame, followed by zero or more
3105             <x:ref>CONTINUATION</x:ref> frames containing the request header fields, followed by one
3106             or more <x:ref>DATA</x:ref> frames, with the last <x:ref>CONTINUATION</x:ref> (or
3107             <x:ref>HEADERS</x:ref>) frame having the END_HEADERS flag set and the final
3108             <x:ref>DATA</x:ref> frame having the END_STREAM flag set:
3109           </t>
3110
3111           <figure>
3112             <artwork type="inline"><![CDATA[
3113   POST /resource HTTP/1.1          HEADERS
3114   Host: example.org          ==>     - END_STREAM
3115   Content-Type: image/jpeg           - END_HEADERS
3116   Content-Length: 123                  :method = POST
3117                                        :path = /resource
3118   {binary data}                        :scheme = https
3119
3120                                    CONTINUATION
3121                                      + END_HEADERS
3122                                        content-type = image/jpeg
3123                                        host = example.org
3124                                        content-length = 123
3125
3126                                    DATA
3127                                      + END_STREAM
3128                                    {binary data}
3129 ]]></artwork>
3130             <postamble>
3131               Note that data contributing to any given header field could be spread between header
3132               block fragments.  The allocation of header fields to frames in this example is
3133               illustrative only.
3134             </postamble>
3135           </figure>
3136
3137           <t>
3138             A response that includes header fields and payload data is transmitted as a
3139             <x:ref>HEADERS</x:ref> frame, followed by zero or more <x:ref>CONTINUATION</x:ref>
3140             frames, followed by one or more <x:ref>DATA</x:ref> frames, with the last
3141             <x:ref>DATA</x:ref> frame in the sequence having the END_STREAM flag set:
3142           </t>
3143
3144           <figure>
3145             <artwork type="inline"><![CDATA[
3146   HTTP/1.1 200 OK                  HEADERS
3147   Content-Type: image/jpeg   ==>     - END_STREAM
3148   Content-Length: 123                + END_HEADERS
3149                                        :status = 200
3150   {binary data}                        content-type = image/jpeg
3151                                        content-length = 123
3152
3153                                    DATA
3154                                      + END_STREAM
3155                                    {binary data}
3156 ]]></artwork>
3157           </figure>
3158
3159           <t>
3160             Trailing header fields are sent as a header block after both the request or response
3161             header block and all the <x:ref>DATA</x:ref> frames have been sent.  The
3162             <x:ref>HEADERS</x:ref> frame starting the trailers header block has the END_STREAM flag
3163             set.
3164           </t>
3165
3166           <figure>
3167             <artwork type="inline"><![CDATA[
3168   HTTP/1.1 200 OK                  HEADERS
3169   Content-Type: image/jpeg   ==>     - END_STREAM
3170   Transfer-Encoding: chunked         + END_HEADERS
3171   Trailer: Foo                         :status = 200
3172                                        content-length = 123
3173   123                                  content-type = image/jpeg
3174   {binary data}                        trailer = Foo
3175   0
3176   Foo: bar                         DATA
3177                                      - END_STREAM
3178                                    {binary data}
3179
3180                                    HEADERS
3181                                      + END_STREAM
3182                                      + END_HEADERS
3183                                        foo = bar
3184 ]]></artwork>
3185           </figure>
3186
3187
3188           <figure>
3189            <preamble>
3190              An informational response using a 1xx status code other than 101 is transmitted as a
3191              <x:ref>HEADERS</x:ref> frame, followed by zero or more <x:ref>CONTINUATION</x:ref>
3192              frames:
3193            </preamble>
3194            <artwork type="inline"><![CDATA[
3195   HTTP/1.1 103 BAR                 HEADERS
3196   Extension-Field: bar       ==>     - END_STREAM
3197                                      + END_HEADERS
3198                                        :status = 103
3199                                        extension-field = bar
3200 ]]></artwork>
3201  </figure>
3202         </section>
3203
3204         <section anchor="Reliability" title="Request Reliability Mechanisms in HTTP/2">
3205           <t>
3206             In HTTP/1.1, an HTTP client is unable to retry a non-idempotent request when an error
3207             occurs, because there is no means to determine the nature of the error.  It is possible
3208             that some server processing occurred prior to the error, which could result in
3209             undesirable effects if the request were reattempted.
3210           </t>
3211           <t>
3212             HTTP/2 provides two mechanisms for providing a guarantee to a client that a request has
3213             not been processed:
3214             <list style="symbols">
3215               <t>
3216                 The <x:ref>GOAWAY</x:ref> frame indicates the highest stream number that might have
3217                 been processed.  Requests on streams with higher numbers are therefore guaranteed to
3218                 be safe to retry.
3219               </t>
3220               <t>
3221                 The <x:ref>REFUSED_STREAM</x:ref> error code can be included in a
3222                 <x:ref>RST_STREAM</x:ref> frame to indicate that the stream is being closed prior to
3223                 any processing having occurred.  Any request that was sent on the reset stream can
3224                 be safely retried.
3225               </t>
3226             </list>
3227           </t>
3228           <t>
3229             Requests that have not been processed have not failed; clients MAY automatically retry
3230             them, even those with non-idempotent methods.
3231           </t>
3232           <t>
3233             A server MUST NOT indicate that a stream has not been processed unless it can guarantee
3234             that fact.  If frames that are on a stream are passed to the application layer for any
3235             stream, then <x:ref>REFUSED_STREAM</x:ref> MUST NOT be used for that stream, and a
3236             <x:ref>GOAWAY</x:ref> frame MUST include a stream identifier that is greater than or
3237             equal to the given stream identifier.
3238           </t>
3239           <t>
3240             In addition to these mechanisms, the <x:ref>PING</x:ref> frame provides a way for a
3241             client to easily test a connection.  Connections that remain idle can become broken as
3242             some middleboxes (for instance, network address translators, or load balancers) silently
3243             discard connection bindings.  The <x:ref>PING</x:ref> frame allows a client to safely
3244             test whether a connection is still active without sending a request.
3245           </t>
3246         </section>
3247       </section>
3248
3249       <section anchor="PushResources" title="Server Push">
3250         <t>
3251           HTTP/2 allows a server to pre-emptively send (or "push") responses (along with
3252           corresponding "promised" requests) to a client in association with a previous
3253           client-initiated request. This can be useful when the server knows the client will need
3254           to have those responses available in order to fully process the response to the original
3255           request.
3256         </t>
3257
3258         <t>
3259           Pushing additional message exchanges in this fashion is optional, and is negotiated
3260           between individual endpoints. The <x:ref>SETTINGS_ENABLE_PUSH</x:ref> setting can be set
3261           to 0 to indicate that server push is disabled.
3262         </t>
3263         <t>
3264           Promised requests MUST be cacheable (see <xref target="RFC7231" x:fmt=","
3265           x:rel="#cacheable.methods"/>), MUST be safe (see <xref target="RFC7231" x:fmt=","
3266           x:rel="#safe.methods"/>) and MUST NOT include a request body. Clients that receive a
3267           promised request that is not cacheable, unsafe or that includes a request body MUST
3268           reset the stream with a <xref target="StreamErrorHandler">stream error</xref> of type
3269           <x:ref>PROTOCOL_ERROR</x:ref>.
3270         </t>
3271         <t>
3272           Pushed responses that are cacheable (see <xref target="RFC7234" x:fmt=","
3273           x:rel="#response.cacheability"/>) can be stored by the client, if it implements a HTTP
3274           cache.  Pushed responses are considered successfully validated on the origin server (e.g.,
3275           if the "no-cache" cache response directive <xref target="RFC7234" x:fmt=","
3276           x:rel="#cache-response-directive"/> is present) while the stream identified by the
3277           promised stream ID is still open.
3278         </t>
3279         <t>
3280           Pushed responses that are not cacheable MUST NOT be stored by any HTTP cache. They MAY
3281           be made available to the application separately.
3282         </t>
3283         <t>
3284           An intermediary can receive pushes from the server and choose not to forward them on to
3285           the client. In other words, how to make use of the pushed information is up to that
3286           intermediary. Equally, the intermediary might choose to make additional pushes to the
3287           client, without any action taken by the server.
3288         </t>
3289         <t>
3290           A client cannot push. Thus, servers MUST treat the receipt of a
3291           <x:ref>PUSH_PROMISE</x:ref> frame as a <xref target="ConnectionErrorHandler">connection
3292           error</xref> of type <x:ref>PROTOCOL_ERROR</x:ref>. Clients MUST reject any attempt to
3293           change the <x:ref>SETTINGS_ENABLE_PUSH</x:ref> setting to a value other than 0 by treating
3294           the message as a <xref target="ConnectionErrorHandler">connection error</xref> of type
3295           <x:ref>PROTOCOL_ERROR</x:ref>.
3296         </t>
3297
3298         <section anchor="PushRequests" title="Push Requests">
3299           <t>
3300             Server push is semantically equivalent to a server responding to a request; however, in
3301             this case that request is also sent by the server, as a <x:ref>PUSH_PROMISE</x:ref>
3302             frame.
3303           </t>
3304           <t>
3305             The <x:ref>PUSH_PROMISE</x:ref> frame includes a header block that contains a complete
3306             set of request header fields that the server attributes to the request. It is not
3307             possible to push a response to a request that includes a request body.
3308           </t>
3309
3310           <t>
3311             Pushed responses are always associated with an explicit request from the client. The
3312             <x:ref>PUSH_PROMISE</x:ref> frames sent by the server are sent on that explicit
3313             request's stream. The <x:ref>PUSH_PROMISE</x:ref> frame also includes a promised stream
3314             identifier, chosen from the stream identifiers available to the server (see <xref
3315             target="StreamIdentifiers"/>).
3316           </t>
3317
3318           <t>
3319             The header fields in <x:ref>PUSH_PROMISE</x:ref> and any subsequent
3320             <x:ref>CONTINUATION</x:ref> frames MUST be a valid and complete set of <xref
3321             target="HttpRequest">request header fields</xref>.  The server MUST include a method in
3322             the <spanx style="verb">:method</spanx> header field that is safe and cacheable.  If a
3323             client receives a <x:ref>PUSH_PROMISE</x:ref> that does not include a complete and valid
3324             set of header fields, or the <spanx style="verb">:method</spanx> header field identifies
3325             a method that is not safe, it MUST respond with a <xref
3326             target="StreamErrorHandler">stream error</xref> of type <x:ref>PROTOCOL_ERROR</x:ref>.
3327           </t>
3328
3329           <t>
3330             The server SHOULD send <x:ref>PUSH_PROMISE</x:ref> (<xref target="PUSH_PROMISE"/>)
3331             frames prior to sending any frames that reference the promised responses. This avoids a
3332             race where clients issue requests prior to receiving any <x:ref>PUSH_PROMISE</x:ref>
3333             frames.
3334           </t>
3335           <t>
3336             For example, if the server receives a request for a document containing embedded links
3337             to multiple image files, and the server chooses to push those additional images to the
3338             client, sending push promises before the <x:ref>DATA</x:ref> frames that contain the
3339             image links ensures that the client is able to see the promises before discovering
3340             embedded links. Similarly, if the server pushes responses referenced by the header block
3341             (for instance, in Link header fields), sending the push promises before sending the
3342             header block ensures that clients do not request them.
3343           </t>
3344
3345           <t>
3346             <x:ref>PUSH_PROMISE</x:ref> frames MUST NOT be sent by the client.
3347           </t>
3348           <t>
3349             <x:ref>PUSH_PROMISE</x:ref> frames can be sent by the server in response to any
3350             client-initiated stream, but the stream MUST be in either the "open" or "half closed
3351             (remote)" state with respect to the server.  <x:ref>PUSH_PROMISE</x:ref> frames are
3352             interspersed with the frames that comprise a response, though they cannot be
3353             interspersed with <x:ref>HEADERS</x:ref> and <x:ref>CONTINUATION</x:ref> frames that
3354             comprise a single header block.
3355           </t>
3356           <t>
3357             Sending a <x:ref>PUSH_PROMISE</x:ref> frame creates a new stream and puts the stream
3358             into the “reserved (local)” state for the server and the “reserved (remote)” state for
3359             the client.
3360           </t>
3361         </section>
3362
3363         <section anchor="PushResponses" title="Push Responses">
3364           <t>
3365             After sending the <x:ref>PUSH_PROMISE</x:ref> frame, the server can begin delivering the
3366             pushed response as a <xref target="HttpResponse">response</xref> on a server-initiated
3367             stream that uses the promised stream identifier.  The server uses this stream to
3368             transmit an HTTP response, using the same sequence of frames as defined in <xref
3369             target="HttpSequence"/>.  This stream becomes <xref target="StreamStates">"half closed"
3370             to the client</xref> after the initial <x:ref>HEADERS</x:ref> frame is sent.
3371           </t>
3372
3373           <t>
3374             Once a client receives a <x:ref>PUSH_PROMISE</x:ref> frame and chooses to accept the
3375             pushed response, the client SHOULD NOT issue any requests for the promised response
3376             until after the promised stream has closed.
3377           </t>
3378
3379           <t>
3380             If the client determines, for any reason, that it does not wish to receive the pushed
3381             response from the server, or if the server takes too long to begin sending the promised
3382             response, the client can send an <x:ref>RST_STREAM</x:ref> frame, using either the
3383             <x:ref>CANCEL</x:ref> or <x:ref>REFUSED_STREAM</x:ref> codes, and referencing the pushed
3384             stream's identifier.
3385           </t>
3386           <t>
3387             A client can use the <x:ref>SETTINGS_MAX_CONCURRENT_STREAMS</x:ref> setting to limit the
3388             number of responses that can be concurrently pushed by a server.  Advertising a
3389             <x:ref>SETTINGS_MAX_CONCURRENT_STREAMS</x:ref> value of zero disables server push by
3390             preventing the server from creating the necessary streams.  This does not prohibit a
3391             server from sending <x:ref>PUSH_PROMISE</x:ref> frames; clients need to reset any
3392             promised streams that are not wanted.
3393           </t>
3394
3395           <t>
3396             Clients receiving a pushed response MUST validate that either the server is
3397             authoritative (see <xref target="authority"/>), or the proxy that provided the pushed
3398             response is configured for the corresponding request. For example, a server that offers
3399             a certificate for only the <spanx style="verb">example.com</spanx> DNS-ID or Common Name
3400             is not permitted to push a response for <spanx
3401             style="verb">https://www.example.org/doc</spanx>.
3402           </t>
3403           <t>
3404             The response for a <x:ref>PUSH_PROMISE</x:ref> stream begins with a
3405             <x:ref>HEADERS</x:ref> frame, which immediately puts the stream into the “half closed
3406             (remote)” state for the server and “half closed (local)” state for the client, and ends
3407             with a frame bearing END_STREAM, which places the stream in the "closed" state.
3408             <list style="hanging">
3409               <t hangText="Note:">
3410                 The client never sends a frame with the END_STREAM flag for a server push.
3411               </t>
3412             </list>
3413           </t>
3414         </section>
3415
3416       </section>
3417
3418       <section anchor="CONNECT" title="The CONNECT Method">
3419         <t>
3420           In HTTP/1.x, the pseudo-method CONNECT (<xref target="RFC7231" x:fmt=","
3421           x:rel="#CONNECT"/>) is used to convert an HTTP connection into a tunnel to a remote host.
3422           CONNECT is primarily used with HTTP proxies to establish a TLS session with an origin
3423           server for the purposes of interacting with <spanx style="verb">https</spanx> resources.
3424         </t>
3425         <t>
3426           In HTTP/2, the CONNECT method is used to establish a tunnel over a single HTTP/2 stream to
3427           a remote host, for similar purposes. The HTTP header field mapping works as defined in
3428           <xref target="HttpRequest">Request Header Fields</xref>, with a few
3429           differences. Specifically:
3430           <list style="symbols">
3431             <t>
3432               The <spanx style="verb">:method</spanx> header field is set to <spanx
3433               style="verb">CONNECT</spanx>.
3434             </t>
3435             <t>
3436               The <spanx style="verb">:scheme</spanx> and <spanx style="verb">:path</spanx> header
3437               fields MUST be omitted.
3438             </t>
3439             <t>
3440               The <spanx style="verb">:authority</spanx> header field contains the host and port to
3441               connect to (equivalent to the authority-form of the request-target of CONNECT
3442               requests, see <xref target="RFC7230" x:fmt="," x:rel="#request-target"/>).
3443             </t>
3444           </list>
3445         </t>
3446         <t>
3447           A proxy that supports CONNECT establishes a <xref target="TCP">TCP connection</xref> to
3448           the server identified in the <spanx style="verb">:authority</spanx> header field. Once
3449           this connection is successfully established, the proxy sends a <x:ref>HEADERS</x:ref>
3450           frame containing a 2xx series status code to the client, as defined in <xref
3451           target="RFC7231" x:fmt="," x:rel="#CONNECT"/>.
3452         </t>
3453         <t>
3454           After the initial <x:ref>HEADERS</x:ref> frame sent by each peer, all subsequent
3455           <x:ref>DATA</x:ref> frames correspond to data sent on the TCP connection.  The payload of
3456           any <x:ref>DATA</x:ref> frames sent by the client is transmitted by the proxy to the TCP
3457           server; data received from the TCP server is assembled into <x:ref>DATA</x:ref> frames by
3458           the proxy.  Frame types other than <x:ref>DATA</x:ref> or stream management frames
3459           (<x:ref>RST_STREAM</x:ref>, <x:ref>WINDOW_UPDATE</x:ref>, and <x:ref>PRIORITY</x:ref>)
3460           MUST NOT be sent on a connected stream, and MUST be treated as a <xref
3461           target="StreamErrorHandler">stream error</xref> if received.
3462         </t>
3463         <t>
3464           The TCP connection can be closed by either peer.  The END_STREAM flag on a
3465           <x:ref>DATA</x:ref> frame is treated as being equivalent to the TCP FIN bit.  A client is
3466           expected to send a <x:ref>DATA</x:ref> frame with the END_STREAM flag set after receiving
3467           a frame bearing the END_STREAM flag.  A proxy that receives a <x:ref>DATA</x:ref> frame
3468           with the END_STREAM flag set sends the attached data with the FIN bit set on the last TCP
3469           segment.  A proxy that receives a TCP segment with the FIN bit set sends a
3470           <x:ref>DATA</x:ref> frame with the END_STREAM flag set.  Note that the final TCP segment
3471           or <x:ref>DATA</x:ref> frame could be empty.
3472         </t>
3473         <t>
3474           A TCP connection error is signaled with <x:ref>RST_STREAM</x:ref>.  A proxy treats any
3475           error in the TCP connection, which includes receiving a TCP segment with the RST bit set,
3476           as a <xref target="StreamErrorHandler">stream error</xref> of type
3477           <x:ref>CONNECT_ERROR</x:ref>.  Correspondingly, a proxy MUST send a TCP segment with the
3478           RST bit set if it detects an error with the stream or the HTTP/2 connection.
3479         </t>
3480       </section>
3481     </section>
3482
3483     <section anchor="HttpExtra" title="Additional HTTP Requirements/Considerations">
3484       <t>
3485         This section outlines attributes of the HTTP protocol that improve interoperability, reduce
3486         exposure to known security vulnerabilities, or reduce the potential for implementation
3487         variation.
3488       </t>
3489
3490       <section title="Connection Management">
3491         <t>
3492           HTTP/2 connections are persistent.  For best performance, it is expected clients will not
3493           close connections until it is determined that no further communication with a server is
3494           necessary (for example, when a user navigates away from a particular web page), or until
3495           the server closes the connection.
3496         </t>
3497         <t>
3498           Clients SHOULD NOT open more than one HTTP/2 connection to a given host and port pair,
3499           where host is derived from a URI, a selected <xref target="ALT-SVC">alternative
3500           service</xref>, or a configured proxy.
3501         </t>
3502         <t>
3503           A client can create additional connections as replacements, either to replace connections
3504           that are near to exhausting the available <xref target="StreamIdentifiers">stream
3505           identifier space</xref>, to refresh the keying material for a TLS connection, or to
3506           replace connections that have encountered <xref
3507           target="ConnectionErrorHandler">errors</xref>.
3508         </t>
3509         <t>
3510           A client MAY open multiple connections to the same IP address and TCP port using different
3511           <xref target="TLS-EXT">Server Name Indication</xref> values or to provide different TLS
3512           client certificates, but SHOULD avoid creating multiple connections with the same
3513           configuration.
3514         </t>
3515         <t>
3516           Servers are encouraged to maintain open connections for as long as possible, but are
3517           permitted to terminate idle connections if necessary.  When either endpoint chooses to
3518           close the transport-layer TCP connection, the terminating endpoint SHOULD first send a
3519           <x:ref>GOAWAY</x:ref> (<xref target="GOAWAY"/>) frame so that both endpoints can reliably
3520           determine whether previously sent frames have been processed and gracefully complete or
3521           terminate any necessary remaining tasks.
3522         </t>
3523
3524         <section anchor="reuse" title="Connection Reuse">
3525           <t>
3526             Connections that are made to an origin servers, either directly or through a tunnel
3527             created using the <xref target="CONNECT">CONNECT method</xref> MAY be reused for
3528             requests with multiple different URI authority components.  A connection can be reused
3529             as long as the origin server is <xref target="authority">authoritative</xref>.  For
3530             <spanx style="verb">http</spanx> resources, this depends on the host having resolved to
3531             the same IP address.
3532           </t>
3533           <t>
3534             For <spanx style="verb">https</spanx> resources, connection reuse additionally depends
3535             on having a certificate that is valid for the host in the URI.  An origin server might
3536             offer a certificate with multiple <spanx style="verb">subjectAltName</spanx> attributes,
3537             or names with wildcards, one of which is valid for the authority in the URI.  For
3538             example, a certificate with a <spanx style="verb">subjectAltName</spanx> of <spanx
3539             style="verb">*.example.com</spanx> might permit the use of the same connection for
3540             requests to URIs starting with <spanx style="verb">https://a.example.com/</spanx> and
3541             <spanx style="verb">https://b.example.com/</spanx>.
3542           </t>
3543           <t>
3544             In some deployments, reusing a connection for multiple origins can result in requests
3545             being directed to the wrong origin server.  For example, TLS termination might be
3546             performed by a middlebox that uses the TLS <xref target="TLS-EXT">Server Name Indication
3547             (SNI)</xref> extension to select an origin server.  This means that it is possible
3548             for clients to send confidential information to servers that might not be the intended
3549             target for the request, even though the server is otherwise authoritative.
3550           </t>
3551           <t>
3552             A server that does not wish clients to reuse connections can indicate that it is not
3553             authoritative for a request by sending a 421 (Misdirected Request) status code in response
3554             to the request (see <xref target="MisdirectedRequest"/>).
3555           </t>
3556           <t>
3557             A client that is configured to use a proxy over HTTP/2 directs requests to that proxy
3558             through a single connection.  That is, all requests sent via a proxy reuse the
3559             connection to the proxy.
3560           </t>
3561         </section>
3562
3563         <section anchor="MisdirectedRequest" title="The 421 (Misdirected Request) Status Code">
3564           <t>
3565             The 421 (Misdirected Request) status code indicates that the request was directed at a
3566             server that is not able to produce a response.  This can be sent by a server that is not
3567             configured to produce responses for the combination of scheme and authority that are
3568             included in the request URI.
3569           </t>
3570           <t>
3571             Clients receiving a 421 (Misdirected Request) response from a server MAY retry the
3572             request - whether the request method is idempotent or not - over a different connection.
3573             This is possible if a connection is reused (<xref target="reuse"/>) or if an alternative
3574             service is selected (<xref target="ALT-SVC"/>).
3575           </t>
3576           <t>
3577             This status code MUST NOT be generated by proxies.
3578           </t>
3579           <t>
3580             A 421 response is cacheable by default; i.e., unless otherwise indicated by the method
3581             definition or explicit cache controls (see <xref target="RFC7234"
3582             x:rel="#heuristic.freshness" x:fmt="of"/>).
3583           </t>
3584         </section>
3585       </section>
3586
3587       <section title="Use of TLS Features" anchor="TLSUsage">
3588         <t>
3589           Implementations of HTTP/2 MUST support <xref target="TLS12">TLS 1.2</xref> for HTTP/2 over
3590           TLS.  The general TLS usage guidance in <xref target="TLSBCP"/> SHOULD be followed, with
3591           some additional restrictions that are specific to HTTP/2.
3592         </t>
3593
3594         <t>
3595           An implementation of HTTP/2 over TLS MUST use TLS 1.2 or higher with the restrictions on
3596           feature set and cipher suite described in this section.  Due to implementation
3597           limitations, it might not be possible to fail TLS negotiation.  An endpoint MUST
3598           immediately terminate an HTTP/2 connection that does not meet these minimum requirements
3599           with a <xref target="ConnectionErrorHandler">connection error</xref> of type
3600           <x:ref>INADEQUATE_SECURITY</x:ref>.
3601         </t>
3602
3603         <section anchor="TLSFeatures" title="TLS Features">
3604           <t>
3605             The TLS implementation MUST support the <xref target="TLS-EXT">Server Name Indication
3606             (SNI)</xref> extension to TLS. HTTP/2 clients MUST indicate the target domain name when
3607             negotiating TLS.
3608           </t>
3609           <t>
3610             The TLS implementation MUST disable compression.  TLS compression can lead to the
3611             exposure of information that would not otherwise be revealed <xref target="RFC3749"/>.
3612             Generic compression is unnecessary since HTTP/2 provides compression features that are
3613             more aware of context and therefore likely to be more appropriate for use for
3614             performance, security or other reasons.
3615           </t>
3616           <t>
3617             The TLS implementation MUST disable renegotiation.  An endpoint MUST treat a TLS
3618             renegotiation as a <xref target="ConnectionErrorHandler">connection error</xref> of type
3619             <x:ref>PROTOCOL_ERROR</x:ref>.  Note that disabling renegotiation can result in
3620             long-lived connections becoming unusable due to limits on the number of messages the
3621             underlying cipher suite can encipher.
3622           </t>
3623           <t>
3624             A client MAY use renegotiation to provide confidentiality protection for client
3625             credentials offered in the handshake, but any renegotiation MUST occur prior to sending
3626             the connection preface.  A server SHOULD request a client certificate if it sees a
3627             renegotiation request immediately after establishing a connection.
3628           </t>
3629           <t>
3630             This effectively prevents the use of renegotiation in response to a request for a
3631             specific protected resource.  A future specification might provide a way to support this
3632             use case. <!-- <cref> We are tracking this in a non-blocking fashion in issue #496 and
3633             with a new draft. -->
3634           </t>
3635         </section>
3636
3637         <section title="TLS Cipher Suites">
3638           <t>
3639             The set of TLS cipher suites that are permitted in HTTP/2 is restricted.  HTTP/2 MUST
3640             only be used with cipher suites that have ephemeral key exchange, such as the <xref
3641             target="TLS12">ephemeral Diffie-Hellman (DHE)</xref> or the <xref
3642             target="RFC4492">elliptic curve variant (ECDHE)</xref>.  Ephemeral key exchange MUST
3643             have a minimum size of 2048 bits for DHE or security level of 128 bits for ECDHE.
3644             Clients MUST accept DHE sizes of up to 4096 bits.  HTTP MUST NOT be used with cipher
3645             suites that use stream or block ciphers.  Authenticated Encryption with Additional Data
3646             (AEAD) modes, such as the <xref target="RFC5288">Galois Counter Model (GCM) mode for
3647             AES</xref> are acceptable.
3648           </t>
3649           <t>
3650             The effect of these restrictions is that TLS 1.2 implementations could have
3651             non-intersecting sets of available cipher suites, since these prevent the use of the
3652             cipher suite that TLS 1.2 makes mandatory.  To avoid this problem, implementations of
3653             HTTP/2 that use TLS 1.2 MUST support TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 <xref
3654             target="TLS-ECDHE"/> with P256 <xref target="FIPS186"/>.
3655           </t>
3656           <t>
3657             Clients MAY advertise support of cipher suites that are prohibited by the above
3658             restrictions in order to allow for connection to servers that do not support HTTP/2.
3659             This enables a fallback to protocols without these constraints without the additional
3660             latency imposed by using a separate connection for fallback.
3661           </t>
3662         </section>
3663       </section>
3664     </section>
3665
3666     <section anchor="security" title="Security Considerations">
3667       <section title="Server Authority" anchor="authority">
3668         <t>
3669           HTTP/2 relies on the HTTP/1.1 definition of authority for determining whether a server is
3670           authoritative in providing a given response, see <xref target="RFC7230" x:fmt=","
3671           x:rel="#establishing.authority"/>.  This relies on local name resolution for the "http"
3672           URI scheme, and the authenticated server identity for the "https" scheme (see <xref
3673           target="RFC2818" x:fmt="," x:sec="3"/>).
3674         </t>
3675       </section>
3676
3677       <section title="Cross-Protocol Attacks">
3678         <t>
3679           In a cross-protocol attack, an attacker causes a client to initiate a transaction in one
3680           protocol toward a server that understands a different protocol.  An attacker might be able
3681           to cause the transaction to appear as valid transaction in the second protocol.  In
3682           combination with the capabilities of the web context, this can be used to interact with
3683           poorly protected servers in private networks.
3684         </t>
3685         <t>
3686           Completing a TLS handshake with an ALPN identifier for HTTP/2 can be considered sufficient
3687           protection against cross protocol attacks.  ALPN provides a positive indication that a
3688           server is willing to proceed with HTTP/2, which prevents attacks on other TLS-based
3689           protocols.
3690         </t>
3691         <t>
3692           The encryption in TLS makes it difficult for attackers to control the data which could be
3693           used in a cross-protocol attack on a cleartext protocol.
3694         </t>
3695         <t>
3696           The cleartext version of HTTP/2 has minimal protection against cross-protocol attacks.
3697           The <xref target="ConnectionHeader">connection preface</xref> contains a string that is
3698           designed to confuse HTTP/1.1 servers, but no special protection is offered for other
3699           protocols.  A server that is willing to ignore parts of an HTTP/1.1 request containing an
3700           Upgrade header field in addition to the client connection preface could be exposed to a
3701           cross-protocol attack.
3702         </t>
3703       </section>
3704
3705       <section title="Intermediary Encapsulation Attacks">
3706         <t>
3707           HTTP/2 header field names and values are encoded as sequences of octets with a length
3708           prefix.  This enables HTTP/2 to carry any string of octets as the name or value of a
3709           header field.  An intermediary that translates HTTP/2 requests or responses into HTTP/1.1
3710           directly could permit the creation of corrupted HTTP/1.1 messages.  An attacker might
3711           exploit this behavior to cause the intermediary to create HTTP/1.1 messages with illegal
3712           header fields, extra header fields, or even new messages that are entirely falsified.
3713         </t>
3714         <t>
3715           Header field names or values that contain characters not permitted by HTTP/1.1, including
3716           carriage return (ASCII 0xd) or line feed (ASCII 0xa) MUST NOT be translated verbatim by an
3717           intermediary, as stipulated in <xref target="RFC7230" x:rel="#field.parsing" x:fmt=","/>.
3718         </t>
3719         <t>
3720           Translation from HTTP/1.x to HTTP/2 does not produce the same opportunity to an attacker.
3721           Intermediaries that perform translation to HTTP/2 MUST remove any instances of the <spanx
3722           style="verb">obs-fold</spanx> production from header field values.
3723         </t>
3724       </section>
3725
3726       <section title="Cacheability of Pushed Responses">
3727         <t>
3728           Pushed responses do not have an explicit request from the client; the request
3729           is provided by the server in the <x:ref>PUSH_PROMISE</x:ref> frame.
3730         </t>
3731         <t>
3732           Caching responses that are pushed is possible based on the guidance provided by the origin
3733           server in the Cache-Control header field.  However, this can cause issues if a single
3734           server hosts more than one tenant.  For example, a server might offer multiple users each
3735           a small portion of its URI space.
3736         </t>
3737         <t>
3738           Where multiple tenants share space on the same server, that server MUST ensure that
3739           tenants are not able to push representations of resources that they do not have authority
3740           over.  Failure to enforce this would allow a tenant to provide a representation that would
3741           be served out of cache, overriding the actual representation that the authoritative tenant
3742           provides.
3743         </t>
3744         <t>
3745           Pushed responses for which an origin server is not authoritative (see
3746           <xref target="authority"/>) are never cached or used.
3747         </t>
3748       </section>
3749
3750       <section anchor="dos" title="Denial of Service Considerations">
3751         <t>
3752           An HTTP/2 connection can demand a greater commitment of resources to operate than a
3753           HTTP/1.1 connection.  The use of header compression and flow control depend on a
3754           commitment of resources for storing a greater amount of state.  Settings for these
3755           features ensure that memory commitments for these features are strictly bounded.
3756         </t>
3757         <t>
3758           The number of <x:ref>PUSH_PROMISE</x:ref> frames is not constrained in the same fashion.
3759           A client that accepts server push SHOULD limit the number of streams it allows to be in
3760           the "reserved (remote)" state.  Excessive number of server push streams can be treated as
3761           a <xref target="StreamErrorHandler">stream error</xref> of type
3762           <x:ref>ENHANCE_YOUR_CALM</x:ref>.
3763         </t>
3764         <t>
3765           Processing capacity cannot be guarded as effectively as state capacity.
3766         </t>
3767         <t>
3768           The <x:ref>SETTINGS</x:ref> frame can be abused to cause a peer to expend additional
3769           processing time. This might be done by pointlessly changing SETTINGS parameters, setting
3770           multiple undefined parameters, or changing the same setting multiple times in the same
3771           frame.  <x:ref>WINDOW_UPDATE</x:ref> or <x:ref>PRIORITY</x:ref> frames can be abused to
3772           cause an unnecessary waste of resources.
3773         </t>
3774         <t>
3775           Large numbers of small or empty frames can be abused to cause a peer to expend time
3776           processing frame headers.  Note however that some uses are entirely legitimate, such as
3777           the sending of an empty <x:ref>DATA</x:ref> frame to end a stream.
3778         </t>
3779         <t>
3780           Header compression also offers some opportunities to waste processing resources; see <xref
3781           target="COMPRESSION" x:fmt="of" x:rel="#Security"/> for more details on potential abuses.
3782         </t>
3783         <t>
3784           Limits in <x:ref>SETTINGS</x:ref> parameters cannot be reduced instantaneously, which
3785           leaves an endpoint exposed to behavior from a peer that could exceed the new limits. In
3786           particular, immediately after establishing a connection, limits set by a server are not
3787           known to clients and could be exceeded without being an obvious protocol violation.
3788         </t>
3789         <t>
3790           All these features - i.e., <x:ref>SETTINGS</x:ref> changes, small frames, header
3791           compression - have legitimate uses.  These features become a burden only when they are
3792           used unnecessarily or to excess.
3793         </t>
3794         <t>
3795           An endpoint that doesn't monitor this behavior exposes itself to a risk of denial of
3796           service attack.  Implementations SHOULD track the use of these features and set limits on
3797           their use.  An endpoint MAY treat activity that is suspicious as a <xref
3798           target="ConnectionErrorHandler">connection error</xref> of type
3799           <x:ref>ENHANCE_YOUR_CALM</x:ref>.
3800         </t>
3801
3802         <section anchor="MaxHeaderBlock" title="Limits on Header Block Size">
3803           <t>
3804             A large <xref target="HeaderBlock">header block</xref> can cause an implementation to
3805             commit a large amount of state.  Header fields that are critical for routing can appear
3806             toward the end of a header block, which prevents streaming of header fields to their
3807             ultimate destination. For this an other reasons, such as ensuring cache correctness,
3808             means that an endpoint might need to buffer the entire header block.  Since there is no
3809             hard limit to the size of a header block, some endpoints could be forced commit a large
3810             amount of available memory for header fields.
3811           </t>
3812           <t>
3813             An endpoint can use the <x:ref>SETTINGS_MAX_HEADER_LIST_SIZE</x:ref> to advise peers of
3814             limits that might apply on the size of header blocks.  This setting is only advisory, so
3815             endpoints MAY choose to send header blocks that exceed this limit and risk having the
3816             request or response being treated as malformed.  This setting specific to a connection,
3817             so any request or response could encounter a hop with a lower, unknown limit.  An
3818             intermediary can attempt to avoid this problem by passing on values presented by
3819             different peers, but they are not obligated to do so.
3820           </t>
3821           <t>
3822             A server that receives a larger header block than it is willing to handle can send an
3823             HTTP 431 (Request Header Fields Too Large) status code <xref target="RFC6585"/>.  A
3824             client can discard responses that it cannot process.  The header block MUST be processed
3825             to ensure a consistent connection state, unless the connection is closed.
3826           </t>
3827         </section>
3828       </section>
3829
3830       <section title="Use of Compression">
3831         <t>
3832           HTTP/2 enables greater use of compression for both header fields (<xref
3833           target="HeaderBlock"/>) and entity bodies.  Compression can allow an attacker to recover
3834           secret data when it is compressed in the same context as data under attacker control.
3835         </t>
3836         <t>
3837           There are demonstrable attacks on compression that exploit the characteristics of the web
3838           (e.g., <xref target="BREACH"/>).  The attacker induces multiple requests containing
3839           varying plaintext, observing the length of the resulting ciphertext in each, which
3840           reveals a shorter length when a guess about the secret is correct.
3841         </t>
3842         <t>
3843           Implementations communicating on a secure channel MUST NOT compress content that includes
3844           both confidential and attacker-controlled data unless separate compression dictionaries
3845           are used for each source of data.  Compression MUST NOT be used if the source of data
3846           cannot be reliably determined.  Generic stream compression, such as that provided by TLS
3847           MUST NOT be used with HTTP/2 (<xref target="TLSFeatures"/>).
3848         </t>
3849         <t>
3850           Further considerations regarding the compression of header fields are described in <xref
3851           target="COMPRESSION"/>.
3852         </t>
3853       </section>
3854
3855       <section title="Use of Padding" anchor="padding">
3856         <t>
3857           Padding within HTTP/2 is not intended as a replacement for general purpose padding, such
3858           as might be provided by <xref target="TLS12">TLS</xref>.  Redundant padding could even be
3859           counterproductive.  Correct application can depend on having specific knowledge of the
3860           data that is being padded.
3861         </t>
3862         <t>
3863           To mitigate attacks that rely on compression, disabling or limiting compression might be
3864           preferable to padding as a countermeasure.
3865         </t>
3866         <t>
3867           Padding can be used to obscure the exact size of frame content, and is provided to
3868           mitigate specific attacks within HTTP.  For example, attacks where compressed content
3869           includes both attacker-controlled plaintext and secret data (see for example, <xref
3870           target="BREACH"/>).
3871         </t>
3872         <t>
3873           Use of padding can result in less protection than might seem immediately obvious.  At
3874           best, padding only makes it more difficult for an attacker to infer length information by
3875           increasing the number of frames an attacker has to observe.  Incorrectly implemented
3876           padding schemes can be easily defeated.  In particular, randomized padding with a
3877           predictable distribution provides very little protection; similarly, padding payloads to a
3878           fixed size exposes information as payload sizes cross the fixed size boundary, which could
3879           be possible if an attacker can control plaintext.
3880         </t>
3881         <t>
3882           Intermediaries SHOULD retain padding for <x:ref>DATA</x:ref> frames, but MAY drop padding
3883           for <x:ref>HEADERS</x:ref> and <x:ref>PUSH_PROMISE</x:ref> frames.  A valid reason for an
3884           intermediary to change the amount of padding of frames is to improve the protections that
3885           padding provides.
3886         </t>
3887       </section>
3888
3889       <section title="Privacy Considerations">
3890         <t>
3891           Several characteristics of HTTP/2 provide an observer an opportunity to correlate actions
3892           of a single client or server over time.  This includes the value of settings, the manner
3893           in which flow control windows are managed, the way priorities are allocated to streams,
3894           timing of reactions to stimulus, and handling of any optional features.
3895         </t>
3896         <t>
3897           As far as this creates observable differences in behavior, they could be used as a basis
3898           for fingerprinting a specific client, as defined in <xref target="HTML5" x:fmt="of"
3899           x:sec="1.8" x:rel="introduction.html#fingerprint"/>.
3900         </t>
3901       </section>
3902     </section>
3903
3904     <section anchor="iana" title="IANA Considerations">
3905       <t>
3906         A string for identifying HTTP/2 is entered into the "Application Layer Protocol Negotiation
3907         (ALPN) Protocol IDs" registry established in <xref target="TLS-ALPN"/>.
3908       </t>
3909       <t>
3910         This document establishes a registry for frame types, settings, and error codes.  These new
3911         registries are entered into a new "Hypertext Transfer Protocol (HTTP) 2 Parameters" section.
3912       </t>
3913       <t>
3914         This document registers the <spanx style="verb">HTTP2-Settings</spanx> header field for
3915         use in HTTP; and the 421 (Misdirected Request) status code.
3916       </t>
3917       <t>
3918         This document registers the <spanx style="verb">PRI</spanx> method for use in HTTP, to avoid
3919         collisions with the <xref target="ConnectionHeader">connection preface</xref>.
3920       </t>
3921
3922       <section anchor="iana-alpn" title="Registration of HTTP/2 Identification Strings">
3923         <t>
3924           This document creates two registrations for the identification of HTTP/2 in the
3925           "Application Layer Protocol Negotiation (ALPN) Protocol IDs" registry established in <xref
3926           target="TLS-ALPN"/>.
3927         </t>
3928         <t>
3929           The "h2" string identifies HTTP/2 when used over TLS:
3930           <list style="hanging">
3931             <t hangText="Protocol:">HTTP/2 over TLS</t>
3932             <t hangText="Identification Sequence:">0x68 0x32 ("h2")</t>
3933             <t hangText="Specification:">This document</t>
3934           </list>
3935         </t>
3936         <t>
3937           The "h2c" string identifies HTTP/2 when used over cleartext TCP:
3938           <list style="hanging">
3939             <t hangText="Protocol:">HTTP/2 over TCP</t>
3940             <t hangText="Identification Sequence:">0x68 0x32 0x63 ("h2c")</t>
3941             <t hangText="Specification:">This document</t>
3942           </list>
3943         </t>
3944       </section>
3945
3946       <section anchor="iana-frames" title="Frame Type Registry">
3947         <t>
3948           This document establishes a registry for HTTP/2 frame type codes.  The "HTTP/2 Frame
3949           Type" registry manages an 8-bit space.  The "HTTP/2 Frame Type" registry operates under
3950           either of the <xref target="RFC5226">"IETF Review" or "IESG Approval" policies</xref> for
3951           values between 0x00 and 0xef, with values between 0xf0 and 0xff being reserved for
3952           experimental use.
3953         </t>
3954         <t>
3955           New entries in this registry require the following information:
3956           <list style="hanging">
3957             <t hangText="Frame Type:">
3958               A name or label for the frame type.
3959             </t>
3960             <t hangText="Code:">
3961               The 8-bit code assigned to the frame type.
3962             </t>
3963             <t hangText="Specification:">
3964               A reference to a specification that includes a description of the frame layout,
3965               it's semantics and flags that the frame type uses, including any parts of the frame
3966               that are conditionally present based on the value of flags.
3967             </t>
3968           </list>
3969         </t>
3970         <t>
3971           The entries in the following table are registered by this document.
3972         </t>
3973         <texttable align="left" suppress-title="true">
3974           <ttcol>Frame Type</ttcol>
3975           <ttcol>Code</ttcol>
3976           <ttcol>Section</ttcol>
3977           <c>DATA</c><c>0x0</c><c><xref target="DATA"/></c>
3978           <c>HEADERS</c><c>0x1</c><c><xref target="HEADERS"/></c>
3979           <c>PRIORITY</c><c>0x2</c><c><xref target="PRIORITY"/></c>
3980           <c>RST_STREAM</c><c>0x3</c><c><xref target="RST_STREAM"/></c>
3981           <c>SETTINGS</c><c>0x4</c><c><xref target="SETTINGS"/></c>
3982           <c>PUSH_PROMISE</c><c>0x5</c><c><xref target="PUSH_PROMISE"/></c>
3983           <c>PING</c><c>0x6</c><c><xref target="PING"/></c>
3984           <c>GOAWAY</c><c>0x7</c><c><xref target="GOAWAY"/></c>
3985           <c>WINDOW_UPDATE</c><c>0x8</c><c><xref target="WINDOW_UPDATE"/></c>
3986           <c>CONTINUATION</c><c>0x9</c><c><xref target="CONTINUATION"/></c>
3987         </texttable>
3988       </section>
3989
3990       <section anchor="iana-settings" title="Settings Registry">
3991         <t>
3992           This document establishes a registry for HTTP/2 settings.  The "HTTP/2 Settings" registry
3993           manages a 16-bit space.  The "HTTP/2 Settings" registry operates under the <xref
3994           target="RFC5226">"Expert Review" policy</xref> for values in the range from 0x0000 to
3995           0xefff, with values between and 0xf000 and 0xffff being reserved for experimental use.
3996         </t>
3997         <t>
3998           New registrations are advised to provide the following information:
3999           <list style="hanging">
4000             <t hangText="Name:">
4001               A symbolic name for the setting.  Specifying a setting name is optional.
4002             </t>
4003             <t hangText="Code:">
4004               The 16-bit code assigned to the setting.
4005             </t>
4006             <t hangText="Initial Value:">
4007               An initial value for the setting.
4008             </t>
4009             <t hangText="Specification:">
4010               An optional reference to a specification that describes the use of the setting.
4011             </t>
4012           </list>
4013         </t>
4014         <t>
4015           An initial set of setting registrations can be found in <xref target="SettingValues"/>.
4016         </t>
4017         <texttable align="left" suppress-title="true">
4018           <ttcol>Name</ttcol>
4019           <ttcol>Code</ttcol>
4020           <ttcol>Initial Value</ttcol>
4021           <ttcol>Specification</ttcol>
4022           <c>HEADER_TABLE_SIZE</c>
4023           <c>0x1</c><c>4096</c><c><xref target="SettingValues"/></c>
4024           <c>ENABLE_PUSH</c>
4025           <c>0x2</c><c>1</c><c><xref target="SettingValues"/></c>
4026           <c>MAX_CONCURRENT_STREAMS</c>
4027           <c>0x3</c><c>(infinite)</c><c><xref target="SettingValues"/></c>
4028           <c>INITIAL_WINDOW_SIZE</c>
4029           <c>0x4</c><c>65535</c><c><xref target="SettingValues"/></c>
4030           <c>MAX_FRAME_SIZE</c>
4031           <c>0x5</c><c>16384</c><c><xref target="SettingValues"/></c>
4032           <c>MAX_HEADER_LIST_SIZE</c>
4033           <c>0x6</c><c>(infinite)</c><c><xref target="SettingValues"/></c>
4034         </texttable>
4035
4036       </section>
4037
4038       <section anchor="iana-errors" title="Error Code Registry">
4039         <t>
4040           This document establishes a registry for HTTP/2 error codes.  The "HTTP/2 Error Code"
4041           registry manages a 32-bit space.  The "HTTP/2 Error Code" registry operates under the
4042           <xref target="RFC5226">"Expert Review" policy</xref>.
4043         </t>
4044         <t>
4045           Registrations for error codes are required to include a description of the error code.  An
4046           expert reviewer is advised to examine new registrations for possible duplication with
4047           existing error codes.  Use of existing registrations is to be encouraged, but not
4048           mandated.
4049         </t>
4050         <t>
4051           New registrations are advised to provide the following information:
4052           <list style="hanging">
4053             <t hangText="Name:">
4054               A name for the error code.  Specifying an error code name is optional.
4055             </t>
4056             <t hangText="Code:">
4057               The 32-bit error code value.
4058             </t>
4059             <t hangText="Description:">
4060               A brief description of the error code semantics, longer if no detailed specification
4061               is provided.
4062             </t>
4063             <t hangText="Specification:">
4064               An optional reference for a specification that defines the error code.
4065             </t>
4066           </list>
4067         </t>
4068         <t>
4069           The entries in the following table are registered by this document.
4070         </t>
4071         <texttable align="left" suppress-title="true">
4072           <ttcol>Name</ttcol>
4073           <ttcol>Code</ttcol>
4074           <ttcol>Description</ttcol>
4075           <ttcol>Specification</ttcol>
4076           <c>NO_ERROR</c><c>0x0</c>
4077           <c>Graceful shutdown</c>
4078           <c><xref target="ErrorCodes"/></c>
4079           <c>PROTOCOL_ERROR</c><c>0x1</c>
4080           <c>Protocol error detected</c>
4081           <c><xref target="ErrorCodes"/></c>
4082           <c>INTERNAL_ERROR</c><c>0x2</c>
4083           <c>Implementation fault</c>
4084           <c><xref target="ErrorCodes"/></c>
4085           <c>FLOW_CONTROL_ERROR</c><c>0x3</c>
4086           <c>Flow control limits exceeded</c>
4087           <c><xref target="ErrorCodes"/></c>
4088           <c>SETTINGS_TIMEOUT</c><c>0x4</c>
4089           <c>Settings not acknowledged</c>
4090           <c><xref target="ErrorCodes"/></c>
4091           <c>STREAM_CLOSED</c><c>0x5</c>
4092           <c>Frame received for closed stream</c>
4093           <c><xref target="ErrorCodes"/></c>
4094           <c>FRAME_SIZE_ERROR</c><c>0x6</c>
4095           <c>Frame size incorrect</c>
4096           <c><xref target="ErrorCodes"/></c>
4097           <c>REFUSED_STREAM</c><c>0x7</c>
4098           <c>Stream not processed</c>
4099           <c><xref target="ErrorCodes"/></c>
4100           <c>CANCEL</c><c>0x8</c>
4101           <c>Stream cancelled</c>
4102           <c><xref target="ErrorCodes"/></c>
4103           <c>COMPRESSION_ERROR</c><c>0x9</c>
4104           <c>Compression state not updated</c>
4105           <c><xref target="ErrorCodes"/></c>
4106           <c>CONNECT_ERROR</c><c>0xa</c>
4107           <c>TCP connection error for CONNECT method</c>
4108           <c><xref target="ErrorCodes"/></c>
4109           <c>ENHANCE_YOUR_CALM</c><c>0xb</c>
4110           <c>Processing capacity exceeded</c>
4111           <c><xref target="ErrorCodes"/></c>
4112           <c>INADEQUATE_SECURITY</c><c>0xc</c>
4113           <c>Negotiated TLS parameters not acceptable</c>
4114           <c><xref target="ErrorCodes"/></c>
4115         </texttable>
4116
4117       </section>
4118
4119       <section title="HTTP2-Settings Header Field Registration">
4120         <t>
4121           This section registers the <spanx style="verb">HTTP2-Settings</spanx> header field in the
4122           <xref target="BCP90">Permanent Message Header Field Registry</xref>.
4123           <list style="hanging">
4124             <t hangText="Header field name:">
4125               HTTP2-Settings
4126             </t>
4127             <t hangText="Applicable protocol:">
4128               http
4129             </t>
4130             <t hangText="Status:">
4131               standard
4132             </t>
4133             <t hangText="Author/Change controller:">
4134               IETF
4135             </t>
4136             <t hangText="Specification document(s):">
4137               <xref target="Http2SettingsHeader"/> of this document
4138             </t>
4139             <t hangText="Related information:">
4140               This header field is only used by an HTTP/2 client for Upgrade-based negotiation.
4141             </t>
4142           </list>
4143         </t>
4144       </section>
4145
4146       <section title="PRI Method Registration">
4147         <t>
4148           This section registers the <spanx style="verb">PRI</spanx> method in the HTTP Method
4149           Registry (<xref target="RFC7231" x:fmt="," x:rel="#method.registry"/>).
4150           <list style="hanging">
4151             <t hangText="Method Name:">
4152               PRI
4153             </t>
4154             <t hangText="Safe">
4155               No
4156             </t>
4157             <t hangText="Idempotent">
4158               No
4159             </t>
4160             <t hangText="Specification document(s)">
4161               <xref target="ConnectionHeader"/> of this document
4162             </t>
4163             <t hangText="Related information:">
4164               This method is never used by an actual client. This method will appear to be used
4165               when an HTTP/1.1 server or intermediary attempts to parse an HTTP/2 connection
4166               preface.
4167             </t>
4168           </list>
4169         </t>
4170       </section>
4171
4172       <section title="The 421 (Misdirected Request) HTTP Status Code"
4173                anchor="iana-MisdirectedRequest">
4174         <t>
4175           This document registers the 421 (Misdirected Request) HTTP Status code in the Hypertext
4176           Transfer Protocol (HTTP) Status Code Registry (<xref target="RFC7231" x:fmt=","
4177           x:rel="#status.code.registry"/>).
4178         </t>
4179         <t>
4180           <list style="hanging">
4181             <t hangText="Status Code:">
4182               421
4183             </t>
4184             <t hangText="Short Description:">
4185               Misdirected Request
4186             </t>
4187             <t hangText="Specification:">
4188               <xref target="MisdirectedRequest"/> of this document
4189             </t>
4190           </list>
4191         </t>
4192       </section>
4193
4194     </section>
4195
4196     <section title="Acknowledgements">
4197       <t>
4198         This document includes substantial input from the following individuals:
4199         <list style="symbols">
4200           <t>
4201             Adam Langley, Wan-Teh Chang, Jim Morrison, Mark Nottingham, Alyssa Wilk, Costin
4202             Manolache, William Chan, Vitaliy Lvin, Joe Chan, Adam Barth, Ryan Hamilton, Gavin
4203             Peters, Kent Alstad, Kevin Lindsay, Paul Amer, Fan Yang, Jonathan Leighton (SPDY
4204             contributors).
4205           </t>
4206           <t>
4207             Gabriel Montenegro and Willy Tarreau (Upgrade mechanism).
4208           </t>
4209           <t>
4210             William Chan, Salvatore Loreto, Osama Mazahir, Gabriel Montenegro, Jitu Padhye, Roberto
4211             Peon, Rob Trace (Flow control).
4212           </t>
4213           <t>
4214             Mike Bishop (Extensibility).
4215           </t>
4216           <t>
4217             Mark Nottingham, Julian Reschke, James Snell, Jeff Pinner, Mike Bishop, Herve Ruellan
4218             (Substantial editorial contributions).
4219           </t>
4220           <t>
4221             Kari Hurtta, Tatsuhiro Tsujikawa, Greg Wilkins, Poul-Henning Kamp.
4222           </t>
4223           <t>
4224             Alexey Melnikov was an editor of this document during 2013.
4225           </t>
4226           <t>
4227             A substantial proportion of Martin's contribution was supported by Microsoft during his
4228             employment there.
4229           </t>
4230         </list>
4231       </t>
4232     </section>
4233   </middle>
4234
4235   <back>
4236     <references title="Normative References">
4237       <reference anchor="COMPRESSION">
4238         <front>
4239           <title>HPACK - Header Compression for HTTP/2</title>
4240           <author initials="H." surname="Ruellan" fullname="Herve Ruellan"/>
4241           <author initials="R." surname="Peon" fullname="Roberto Peon"/>
4242           <date month="July" year="2014" />
4243         </front>
4244         <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-header-compression-09" />
4245         <x:source href="refs/draft-ietf-httpbis-header-compression-09.xml"/>
4246       </reference>
4247
4248       <reference anchor="TCP">
4249         <front>
4250           <title abbrev="Transmission Control Protocol">
4251             Transmission Control Protocol
4252           </title>
4253           <author initials="J." surname="Postel" fullname="Jon Postel">
4254             <organization>University of Southern California (USC)/Information Sciences
4255             Institute</organization>
4256           </author>
4257           <date year="1981" month="September" />
4258         </front>
4259         <seriesInfo name="STD" value="7" />
4260         <seriesInfo name="RFC" value="793" />
4261       </reference>
4262
4263       <reference anchor="RFC2119">
4264         <front>
4265           <title>
4266             Key words for use in RFCs to Indicate Requirement Levels
4267           </title>
4268           <author initials="S." surname="Bradner" fullname="Scott Bradner">
4269             <organization>Harvard University</organization>
4270             <address><email>sob@harvard.edu</email></address>
4271           </author>
4272           <date month="March" year="1997"/>
4273         </front>
4274         <seriesInfo name="BCP" value="14"/>
4275         <seriesInfo name="RFC" value="2119"/>
4276       </reference>
4277
4278      <reference anchor="RFC2818">
4279         <front>
4280           <title>
4281             HTTP Over TLS
4282           </title>
4283           <author initials="E." surname="Rescorla" fullname="Eric Rescorla"/>
4284           <date month="May" year="2000"/>
4285         </front>
4286         <seriesInfo name="RFC" value="2818"/>
4287       </reference>
4288
4289       <reference anchor="RFC3986">
4290         <front>
4291           <title abbrev="URI Generic Syntax">Uniform Resource Identifier (URI): Generic
4292           Syntax</title>
4293           <author initials="T." surname="Berners-Lee" fullname="Tim Berners-Lee"></author>
4294           <author initials="R." surname="Fielding" fullname="Roy T. Fielding"></author>
4295           <author initials="L." surname="Masinter" fullname="Larry Masinter"></author>
4296           <date year="2005" month="January" />
4297         </front>
4298         <seriesInfo name="STD" value="66" />
4299         <seriesInfo name="RFC" value="3986" />
4300       </reference>
4301
4302       <reference anchor="RFC4648">
4303         <front>
4304           <title>The Base16, Base32, and Base64 Data Encodings</title>
4305           <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
4306           <date year="2006" month="October"/>
4307         </front>
4308         <seriesInfo value="4648" name="RFC"/>
4309       </reference>
4310
4311       <reference anchor="RFC5226">
4312         <front>
4313           <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
4314           <author initials="T." surname="Narten" fullname="T. Narten"/>
4315           <author initials="H." surname="Alvestrand" fullname="H. Alvestrand"/>
4316           <date year="2008" month="May" />
4317         </front>
4318         <seriesInfo name="BCP" value="26" />
4319         <seriesInfo name="RFC" value="5226" />
4320       </reference>
4321
4322       <reference anchor="RFC5234">
4323         <front>
4324           <title>Augmented BNF for Syntax Specifications: ABNF</title>
4325           <author initials="D." surname="Crocker" fullname="D. Crocker"/>
4326           <author initials="P." surname="Overell" fullname="P. Overell"/>
4327           <date year="2008" month="January" />
4328         </front>
4329         <seriesInfo name="STD" value="68" />
4330         <seriesInfo name="RFC" value="5234" />
4331       </reference>
4332
4333       <reference anchor="TLS12">
4334         <front>
4335           <title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
4336           <author initials="T." surname="Dierks" fullname="Tim Dierks"/>
4337           <author initials="E." surname="Rescorla" fullname="Eric Rescorla"/>
4338           <date year="2008" month="August" />
4339         </front>
4340         <seriesInfo name="RFC" value="5246" />
4341       </reference>
4342
4343       <reference anchor="TLS-EXT">
4344         <front>
4345           <title>
4346             Transport Layer Security (TLS) Extensions: Extension Definitions
4347           </title>
4348           <author initials="D." surname="Eastlake" fullname="D. Eastlake"/>
4349           <date year="2011" month="January"/>
4350         </front>
4351         <seriesInfo name="RFC" value="6066"/>
4352       </reference>
4353
4354       <reference anchor="TLS-ALPN">
4355         <front>
4356           <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
4357           <author initials="S." surname="Friedl" fullname="Stephan Friedl"></author>
4358           <author initials="A." surname="Popov" fullname="Andrei Popov"></author>
4359           <author initials="A." surname="Langley" fullname="Adam Langley"></author>
4360           <author initials="E." surname="Stephan" fullname="Emile Stephan"></author>
4361           <date month="July" year="2014" />
4362         </front>
4363         <seriesInfo name="RFC" value="7301" />
4364       </reference>
4365
4366       <reference anchor="TLS-ECDHE">
4367         <front>
4368           <title>
4369             TLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois
4370             Counter Mode (GCM)
4371           </title>
4372           <author initials="E." surname="Rescorla" fullname="E. Rescorla"/>
4373           <date year="2008" month="August" />
4374         </front>
4375         <seriesInfo name="RFC" value="5289" />
4376       </reference>
4377
4378       <reference anchor="FIPS186">
4379         <front>
4380           <title>
4381             Digital Signature Standard (DSS)
4382           </title>
4383           <author><organization>NIST</organization></author>
4384           <date year="2013" month="July" />
4385         </front>
4386         <seriesInfo name="FIPS" value="PUB 186-4" />
4387       </reference>
4388
4389       <reference anchor="RFC7230">
4390         <front>
4391           <title>
4392           Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
4393           <author fullname="Roy T. Fielding" initials="R." role="editor" surname="Fielding">
4394             <organization abbrev="Adobe">Adobe Systems Incorporated</organization>
4395             <address><email>fielding@gbiv.com</email></address>
4396           </author>
4397           <author fullname="Julian F. Reschke" initials="J. F." role="editor" surname="Reschke">
4398             <organization abbrev="greenbytes">greenbytes GmbH</organization>
4399             <address><email>julian.reschke@greenbytes.de</email></address>
4400           </author>
4401           <date month="June" year="2014" />
4402         </front>
4403         <seriesInfo name="RFC" value="7230" />
4404         <x:source href="refs/rfc7230.xml"
4405                   basename="https://svn.tools.ietf.org/svn/wg/httpbis/specs/rfc7230"/>
4406       </reference>
4407       <reference anchor="RFC7231">
4408         <front>
4409           <title>
4410           Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
4411           <author fullname="Roy T. Fielding" initials="R." role="editor" surname="Fielding">
4412             <organization abbrev="Adobe">Adobe Systems Incorporated</organization>
4413             <address><email>fielding@gbiv.com</email></address>
4414           </author>
4415           <author fullname="Julian F. Reschke" initials="J. F." role="editor" surname="Reschke">
4416             <organization abbrev="greenbytes">greenbytes GmbH</organization>
4417             <address><email>julian.reschke@greenbytes.de</email></address>
4418           </author>
4419           <date month="June" year="2014" />
4420         </front>
4421         <seriesInfo name="RFC" value="7231" />
4422         <x:source href="refs/rfc7231.xml"
4423                   basename="https://svn.tools.ietf.org/svn/wg/httpbis/specs/rfc7231"/>
4424       </reference>
4425       <reference anchor="RFC7232">
4426         <front>
4427           <title>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</title>
4428           <author fullname="Roy T. Fielding" initials="R." role="editor" surname="Fielding">
4429             <organization abbrev="Adobe">Adobe Systems Incorporated</organization>
4430             <address><email>fielding@gbiv.com</email></address>
4431           </author>
4432           <author fullname="Julian F. Reschke" initials="J. F." role="editor" surname="Reschke">
4433             <organization abbrev="greenbytes">greenbytes GmbH</organization>
4434             <address><email>julian.reschke@greenbytes.de</email></address>
4435           </author>
4436           <date month="June" year="2014" />
4437         </front>
4438         <seriesInfo name="RFC" value="7232" />
4439       </reference>
4440       <reference anchor="RFC7233">
4441         <front>
4442           <title>Hypertext Transfer Protocol (HTTP/1.1): Range Requests</title>
4443           <author initials="R." surname="Fielding" fullname="Roy T. Fielding" role="editor">
4444             <organization abbrev="Adobe">Adobe Systems Incorporated</organization>
4445             <address><email>fielding@gbiv.com</email></address>
4446           </author>
4447           <author initials="Y." surname="Lafon" fullname="Yves Lafon" role="editor">
4448             <organization abbrev="W3C">World Wide Web Consortium</organization>
4449             <address><email>ylafon@w3.org</email></address>
4450           </author>
4451           <author initials="J. F." surname="Reschke" fullname="Julian F. Reschke" role="editor">
4452             <organization abbrev="greenbytes">greenbytes GmbH</organization>
4453             <address><email>julian.reschke@greenbytes.de</email></address>
4454           </author>
4455           <date month="June" year="2014" />
4456         </front>
4457         <seriesInfo name="RFC" value="7233" />
4458       </reference>
4459       <reference anchor="RFC7234">
4460         <front>
4461           <title>Hypertext Transfer Protocol (HTTP/1.1): Caching</title>
4462           <author initials="R." surname="Fielding" fullname="Roy T. Fielding" role="editor">
4463             <organization abbrev="Adobe">Adobe Systems Incorporated</organization>
4464             <address><email>fielding@gbiv.com</email></address>
4465           </author>
4466           <author fullname="Mark Nottingham" initials="M." role="editor" surname="Nottingham">
4467             <organization>Akamai</organization>
4468             <address><email>mnot@mnot.net</email></address>
4469           </author>
4470           <author initials="J. F." surname="Reschke" fullname="Julian F. Reschke" role="editor">
4471             <organization abbrev="greenbytes">greenbytes GmbH</organization>
4472             <address><email>julian.reschke@greenbytes.de</email></address>
4473           </author>
4474           <date month="June" year="2014" />
4475         </front>
4476         <seriesInfo name="RFC" value="7234"/>
4477         <x:source href="refs/rfc7234.xml"
4478                   basename="https://svn.tools.ietf.org/svn/wg/httpbis/specs/rfc7234"/>
4479       </reference>
4480       <reference anchor="RFC7235">
4481         <front>
4482           <title>Hypertext Transfer Protocol (HTTP/1.1): Authentication</title>
4483           <author initials="R." surname="Fielding" fullname="Roy T. Fielding" role="editor">
4484             <organization abbrev="Adobe">Adobe Systems Incorporated</organization>
4485             <address><email>fielding@gbiv.com</email></address>
4486           </author>
4487           <author initials="J. F." surname="Reschke" fullname="Julian F. Reschke" role="editor">
4488             <organization abbrev="greenbytes">greenbytes GmbH</organization>
4489             <address><email>julian.reschke@greenbytes.de</email></address>
4490           </author>
4491           <date month="June" year="2014" />
4492         </front>
4493         <seriesInfo name="RFC" value="7235"/>
4494         <x:source href="refs/rfc7235.xml"
4495                   basename="https://svn.tools.ietf.org/svn/wg/httpbis/specs/rfc7235"/>
4496       </reference>
4497
4498       <reference anchor="COOKIE">
4499         <front>
4500           <title>HTTP State Management Mechanism</title>
4501           <author initials="A." surname="Barth" fullname="A. Barth"/>
4502           <date year="2011" month="April" />
4503         </front>
4504         <seriesInfo name="RFC" value="6265" />
4505       </reference>
4506     </references>
4507
4508     <references title="Informative References">
4509       <reference anchor="RFC1323">
4510         <front>
4511           <title>
4512             TCP Extensions for High Performance
4513           </title>
4514           <author initials="V." surname="Jacobson" fullname="Van Jacobson"></author>
4515           <author initials="B." surname="Braden" fullname="Bob Braden"></author>
4516           <author initials="D." surname="Borman" fullname="Dave Borman"></author>
4517           <date year="1992" month="May" />
4518         </front>
4519         <seriesInfo name="RFC" value="1323" />
4520       </reference>
4521
4522       <reference anchor="RFC3749">
4523         <front>
4524           <title>Transport Layer Security Protocol Compression Methods</title>
4525           <author initials="S." surname="Hollenbeck" fullname="S. Hollenbeck"/>
4526           <date year="2004" month="May" />
4527         </front>
4528         <seriesInfo name="RFC" value="3749" />
4529       </reference>
4530
4531       <reference anchor="RFC6585">
4532         <front>
4533           <title>Additional HTTP Status Codes</title>
4534           <author initials="M." surname="Nottingham" fullname="Mark Nottingham"/>
4535           <author initials="R." surname="Fielding" fullname="Roy Fielding"/>
4536           <date year="2012" month="April" />
4537         </front>
4538         <seriesInfo name="RFC" value="6585" />
4539       </reference>
4540
4541       <reference anchor="RFC4492">
4542         <front>
4543           <title>
4544             Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)
4545           </title>
4546           <author initials="S." surname="Blake-Wilson" fullname="S. Blake-Wilson"/>
4547           <author initials="N." surname="Bolyard" fullname="N. Bolyard"/>
4548           <author initials="V." surname="Gupta" fullname="V. Gupta"/>
4549           <author initials="C." surname="Hawk" fullname="C. Hawk"/>
4550           <author initials="B." surname="Moeller" fullname="B. Moeller"/>
4551           <date year="2006" month="May" />
4552         </front>
4553         <seriesInfo name="RFC" value="4492" />
4554       </reference>
4555
4556       <reference anchor="RFC5288">
4557         <front>
4558           <title>
4559             AES Galois Counter Mode (GCM) Cipher Suites for TLS
4560           </title>
4561           <author initials="J." surname="Salowey" fullname="J. Salowey"/>
4562           <author initials="A." surname="Choudhury" fullname="A. Choudhury"/>
4563           <author initials="D." surname="McGrew" fullname="D. McGrew"/>
4564           <date year="2008" month="August" />
4565         </front>
4566         <seriesInfo name="RFC" value="5288" />
4567       </reference>
4568
4569       <reference anchor='HTML5'
4570            target='http://www.w3.org/TR/2014/CR-html5-20140731/'>
4571         <front>
4572           <title>HTML5</title>
4573           <author fullname='Robin Berjon' surname='Berjon' initials='R.'/>
4574           <author fullname='Steve Faulkner' surname='Faulkner' initials='S.'/>
4575           <author fullname='Travis Leithead' surname='Leithead' initials='T.'/>
4576           <author fullname='Erika Doyle Navara' surname='Doyle Navara' initials='E.'/>
4577           <author fullname='Edward O&apos;Connor' surname='O&apos;Connor' initials='E.'/>
4578           <author fullname='Silvia Pfeiffer' surname='Pfeiffer' initials='S.'/>
4579           <date year='2014' month='July' day='31'/>
4580         </front>
4581         <seriesInfo name='W3C Candidate Recommendation' value='CR-html5-20140731'/>
4582         <annotation>
4583           Latest version available at
4584           <eref target='http://www.w3.org/TR/html5/'/>.
4585         </annotation>
4586       </reference>
4587
4588       <reference anchor="TALKING" target="http://w2spconf.com/2011/papers/websocket.pdf">
4589         <front>
4590           <title>
4591             Talking to Yourself for Fun and Profit
4592           </title>
4593           <author initials="L-S." surname="Huang"/>
4594           <author initials="E." surname="Chen"/>
4595           <author initials="A." surname="Barth"/>
4596           <author initials="E." surname="Rescorla"/>
4597           <author initials="C." surname="Jackson"/>
4598           <date year="2011" />
4599         </front>
4600       </reference>
4601
4602       <reference anchor="BREACH"
4603                  target="http://breachattack.com/resources/BREACH%20-%20SSL,%20gone%20in%2030%20seconds.pdf">
4604         <front>
4605           <title>
4606             BREACH: Reviving the CRIME Attack
4607           </title>
4608           <author initials="Y." surname="Gluck"/>
4609           <author initials="N." surname="Harris"/>
4610           <author initials="A." surname="Prado"/>
4611           <date year="2013" month="July" day="12"/>
4612         </front>
4613       </reference>
4614
4615       <reference anchor="BCP90">
4616         <front>
4617           <title>Registration Procedures for Message Header Fields</title>
4618           <author initials="G." surname="Klyne" fullname="G. Klyne">
4619             <organization>Nine by Nine</organization>
4620             <address><email>GK-IETF@ninebynine.org</email></address>
4621           </author>
4622           <author initials="M." surname="Nottingham" fullname="M. Nottingham">
4623             <organization>BEA Systems</organization>
4624             <address><email>mnot@pobox.com</email></address>
4625           </author>
4626           <author initials="J." surname="Mogul" fullname="J. Mogul">
4627             <organization>HP Labs</organization>
4628             <address><email>JeffMogul@acm.org</email></address>
4629           </author>
4630           <date year="2004" month="September" />
4631         </front>
4632         <seriesInfo name="BCP" value="90" />
4633         <seriesInfo name="RFC" value="3864" />
4634       </reference>
4635
4636       <reference anchor="TLSBCP">
4637         <front>
4638           <title>Recommendations for Secure Use of TLS and DTLS</title>
4639           <author initials="Y" surname="Sheffer" fullname="Yaron Sheffer">
4640             <organization />
4641           </author>
4642           <author initials="R" surname="Holz" fullname="Ralph Holz">
4643             <organization />
4644           </author>
4645           <author initials="P" surname="Saint-Andre" fullname="Peter Saint-Andre">
4646             <organization />
4647           </author>
4648           <date month="June" day="23" year="2014" />
4649         </front>
4650         <seriesInfo name="Internet-Draft" value="draft-ietf-uta-tls-bcp-01" />
4651       </reference>
4652
4653       <reference anchor="ALT-SVC">
4654         <front>
4655           <title>
4656             HTTP Alternative Services
4657           </title>
4658           <author initials="M." surname="Nottingham" fullname="Mark Nottingham">
4659             <organization>Akamai</organization>
4660           </author>
4661           <author initials="P." surname="McManus" fullname="Patrick McManus">
4662             <organization>Mozilla</organization>
4663           </author>
4664           <author initials="J." surname="Reschke" fullname="Julian Reschke">
4665             <organization>greenbytes</organization>
4666           </author>
4667           <date year="2014" month="April"/>
4668         </front>
4669         <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-alt-svc-02"/>
4670         <x:source href="refs/draft-ietf-httpbis-alt-svc-02.xml"/>
4671       </reference>
4672     </references>
4673
4674     <section title="Change Log" anchor="change.log">
4675       <t>
4676         This section is to be removed by RFC Editor before publication.
4677       </t>
4678
4679       <section title="Since draft-ietf-httpbis-http2-14" anchor="changes.since.draft-ietf-httpbis-http2-14">
4680         <t>
4681           Renamed Not Authoritative status code to Misdirected Request.
4682         </t>
4683       </section>
4684
4685       <section title="Since draft-ietf-httpbis-http2-13" anchor="changes.since.draft-ietf-httpbis-http2-13">
4686         <t>
4687           Pseudo-header fields are now required to appear strictly before regular ones.
4688         </t>
4689         <t>
4690           Restored 1xx series status codes, except 101.
4691         </t>
4692         <t>
4693           Changed frame length field 24-bits.  Expanded frame header to 9 octets.  Added a setting
4694           to limit the damage.
4695         </t>
4696         <t>
4697           Added a setting to advise peers of header set size limits.
4698         </t>
4699         <t>
4700           Removed segments.
4701         </t>
4702         <t>
4703           Made non-semantic-bearing <x:ref>HEADERS</x:ref> frames illegal in the HTTP mapping.
4704         </t>
4705       </section>
4706
4707        <section title="Since draft-ietf-httpbis-http2-12" anchor="changes.since.draft-ietf-httpbis-http2-12">
4708          <t>
4709            Restored extensibility options.
4710          </t>
4711          <t>
4712            Restricting TLS cipher suites to AEAD only.
4713          </t>
4714          <t>
4715            Removing Content-Encoding requirements.
4716          </t>
4717          <t>
4718            Permitting the use of <x:ref>PRIORITY</x:ref> after stream close.
4719          </t>
4720          <t>
4721            Removed ALTSVC frame.
4722          </t>
4723          <t>
4724            Removed BLOCKED frame.
4725          </t>
4726          <t>
4727            Reducing the maximum padding size to 256 octets; removing padding from
4728            <x:ref>CONTINUATION</x:ref> frames.
4729          </t>
4730          <t>
4731            Removed per-frame GZIP compression.
4732          </t>
4733        </section>
4734
4735        <section title="Since draft-ietf-httpbis-http2-11" anchor="changes.since.draft-ietf-httpbis-http2-11">
4736          <t>
4737            Added BLOCKED frame (at risk).
4738          </t>
4739          <t>
4740            Simplified priority scheme.
4741          </t>
4742          <t>
4743            Added <x:ref>DATA</x:ref> per-frame GZIP compression.
4744          </t>
4745        </section>
4746
4747        <section title="Since draft-ietf-httpbis-http2-10" anchor="changes.since.draft-ietf-httpbis-http2-10">
4748         <t>
4749           Changed "connection header" to "connection preface" to avoid confusion.
4750         </t>
4751         <t>
4752           Added dependency-based stream prioritization.
4753         </t>
4754         <t>
4755           Added "h2c" identifier to distinguish between cleartext and secured HTTP/2.
4756         </t>
4757         <t>
4758           Adding missing padding to <x:ref>PUSH_PROMISE</x:ref>.
4759         </t>
4760         <t>
4761           Integrate ALTSVC frame and supporting text.
4762         </t>
4763         <t>
4764           Dropping requirement on "deflate" Content-Encoding.
4765         </t>
4766         <t>
4767           Improving security considerations around use of compression.
4768         </t>
4769       </section>
4770
4771       <section title="Since draft-ietf-httpbis-http2-09" anchor="changes.since.draft-ietf-httpbis-http2-09">
4772         <t>
4773           Adding padding for data frames.
4774         </t>
4775         <t>
4776           Renumbering frame types, error codes, and settings.
4777         </t>
4778         <t>
4779           Adding INADEQUATE_SECURITY error code.
4780         </t>
4781         <t>
4782           Updating TLS usage requirements to 1.2; forbidding TLS compression.
4783         </t>
4784         <t>
4785           Removing extensibility for frames and settings.
4786         </t>
4787         <t>
4788           Changing setting identifier size.
4789         </t>
4790         <t>
4791           Removing the ability to disable flow control.
4792         </t>
4793         <t>
4794           Changing the protocol identification token to "h2".
4795         </t>
4796         <t>
4797           Changing the use of :authority to make it optional and to allow userinfo in non-HTTP
4798           cases.
4799         </t>
4800         <t>
4801           Allowing split on 0x0 for Cookie.
4802         </t>
4803         <t>
4804           Reserved PRI method in HTTP/1.1 to avoid possible future collisions.
4805         </t>
4806       </section>
4807
4808       <section title="Since draft-ietf-httpbis-http2-08" anchor="changes.since.draft-ietf-httpbis-http2-08">
4809         <t>
4810           Added cookie crumbling for more efficient header compression.
4811         </t>
4812         <t>
4813           Added header field ordering with the value-concatenation mechanism.
4814         </t>
4815       </section>
4816
4817       <section title="Since draft-ietf-httpbis-http2-07" anchor="changes.since.draft-ietf-httpbis-http2-07">
4818         <t>
4819           Marked draft for implementation.
4820         </t>
4821       </section>
4822
4823       <section title="Since draft-ietf-httpbis-http2-06" anchor="changes.since.draft-ietf-httpbis-http2-06">
4824         <t>
4825           Adding definition for CONNECT method.
4826         </t>
4827         <t>
4828           Constraining the use of push to safe, cacheable methods with no request body.
4829         </t>
4830         <t>
4831           Changing from :host to :authority to remove any potential confusion.
4832         </t>
4833         <t>
4834           Adding setting for header compression table size.
4835         </t>
4836         <t>
4837           Adding settings acknowledgement.
4838         </t>
4839         <t>
4840           Removing unnecessary and potentially problematic flags from CONTINUATION.
4841         </t>
4842         <t>
4843           Added denial of service considerations.
4844         </t>
4845       </section>
4846       <section title="Since draft-ietf-httpbis-http2-05" anchor="changes.since.draft-ietf-httpbis-http2-05">
4847         <t>
4848           Marking the draft ready for implementation.
4849         </t>
4850         <t>
4851           Renumbering END_PUSH_PROMISE flag.
4852         </t>
4853         <t>
4854           Editorial clarifications and changes.
4855         </t>
4856       </section>
4857
4858       <section title="Since draft-ietf-httpbis-http2-04" anchor="changes.since.draft-ietf-httpbis-http2-04">
4859         <t>
4860           Added CONTINUATION frame for HEADERS and PUSH_PROMISE.
4861         </t>
4862         <t>
4863           PUSH_PROMISE is no longer implicitly prohibited if SETTINGS_MAX_CONCURRENT_STREAMS is
4864           zero.
4865         </t>
4866         <t>
4867           Push expanded to allow all safe methods without a request body.
4868         </t>
4869         <t>
4870           Clarified the use of HTTP header fields in requests and responses.  Prohibited HTTP/1.1
4871           hop-by-hop header fields.
4872         </t>
4873         <t>
4874           Requiring that intermediaries not forward requests with missing or illegal routing
4875           :-headers.
4876         </t>
4877         <t>
4878           Clarified requirements around handling different frames after stream close, stream reset
4879           and <x:ref>GOAWAY</x:ref>.
4880         </t>
4881         <t>
4882           Added more specific prohibitions for sending of different frame types in various stream
4883           states.
4884         </t>
4885         <t>
4886           Making the last received setting value the effective value.
4887         </t>
4888         <t>
4889           Clarified requirements on TLS version, extension and ciphers.
4890         </t>
4891       </section>
4892
4893       <section title="Since draft-ietf-httpbis-http2-03" anchor="changes.since.draft-ietf-httpbis-http2-03">
4894         <t>
4895           Committed major restructuring atrocities.
4896         </t>
4897         <t>
4898           Added reference to first header compression draft.
4899         </t>
4900         <t>
4901           Added more formal description of frame lifecycle.
4902         </t>
4903         <t>
4904           Moved END_STREAM (renamed from FINAL) back to <x:ref>HEADERS</x:ref>/<x:ref>DATA</x:ref>.
4905         </t>
4906         <t>
4907           Removed HEADERS+PRIORITY, added optional priority to <x:ref>HEADERS</x:ref> frame.
4908         </t>
4909         <t>
4910           Added <x:ref>PRIORITY</x:ref> frame.
4911         </t>
4912       </section>
4913
4914       <section title="Since draft-ietf-httpbis-http2-02" anchor="changes.since.draft-ietf-httpbis-http2-02">
4915         <t>
4916           Added continuations to frames carrying header blocks.
4917         </t>
4918         <t>
4919           Replaced use of "session" with "connection" to avoid confusion with other HTTP stateful
4920           concepts, like cookies.
4921         </t>
4922         <t>
4923           Removed "message".
4924         </t>
4925         <t>
4926           Switched to TLS ALPN from NPN.
4927         </t>
4928         <t>
4929           Editorial changes.
4930         </t>
4931       </section>
4932
4933       <section title="Since draft-ietf-httpbis-http2-01" anchor="changes.since.draft-ietf-httpbis-http2-01">
4934         <t>
4935           Added IANA considerations section for frame types, error codes and settings.
4936         </t>
4937         <t>
4938           Removed data frame compression.
4939         </t>
4940         <t>
4941           Added <x:ref>PUSH_PROMISE</x:ref>.
4942         </t>
4943         <t>
4944           Added globally applicable flags to framing.
4945         </t>
4946         <t>
4947           Removed zlib-based header compression mechanism.
4948         </t>
4949         <t>
4950           Updated references.
4951         </t>
4952         <t>
4953           Clarified stream identifier reuse.
4954         </t>
4955         <t>
4956           Removed CREDENTIALS frame and associated mechanisms.
4957         </t>
4958         <t>
4959           Added advice against naive implementation of flow control.
4960         </t>
4961         <t>
4962           Added session header section.
4963         </t>
4964         <t>
4965           Restructured frame header.  Removed distinction between data and control frames.
4966         </t>
4967         <t>
4968           Altered flow control properties to include session-level limits.
4969         </t>
4970         <t>
4971           Added note on cacheability of pushed resources and multiple tenant servers.
4972         </t>
4973         <t>
4974           Changed protocol label form based on discussions.
4975         </t>
4976       </section>
4977
4978       <section title="Since draft-ietf-httpbis-http2-00" anchor="changes.since.draft-ietf-httpbis-http2-00">
4979         <t>
4980           Changed title throughout.
4981         </t>
4982         <t>
4983           Removed section on Incompatibilities with SPDY draft#2.
4984         </t>
4985         <t>
4986           Changed <x:ref>INTERNAL_ERROR</x:ref> on <x:ref>GOAWAY</x:ref> to have a value of 2 <eref
4987           target="https://groups.google.com/forum/?fromgroups#!topic/spdy-dev/cfUef2gL3iU"/>.
4988         </t>
4989         <t>
4990           Replaced abstract and introduction.
4991         </t>
4992         <t>
4993           Added section on starting HTTP/2.0, including upgrade mechanism.
4994         </t>
4995         <t>
4996           Removed unused references.
4997         </t>
4998         <t>
4999           Added <xref target="fc-principles">flow control principles</xref> based on <eref
5000           target="https://tools.ietf.org/html/draft-montenegro-httpbis-http2-fc-principles-01"/>.
5001         </t>
5002       </section>
5003
5004       <section title="Since draft-mbelshe-httpbis-spdy-00" anchor="changes.since.draft-mbelshe-httpbis-spdy-00">
5005         <t>
5006           Adopted as base for draft-ietf-httpbis-http2.
5007         </t>
5008         <t>
5009           Updated authors/editors list.
5010         </t>
5011         <t>
5012           Added status note.
5013         </t>
5014       </section>
5015     </section>
5016
5017   </back>
5018 </rfc>
5019 <!--
5020   vim:et:tw=100:sw=2:
5021   -->