golang.org/x/net@v0.25.1-0.20240516223405-c87a5b62e243/http2/testdata/draft-ietf-httpbis-http2.xml (about)

     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 maintenance.
  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    -->