<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.1.1 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-quic-http-04" category="std">

  <front>
    <title abbrev="HTTP over QUIC">Hypertext Transfer Protocol (HTTP) over QUIC</title>

    <author initials="M." surname="Bishop" fullname="Mike Bishop" role="editor">
      <organization>Microsoft</organization>
      <address>
        <email>Michael.Bishop@microsoft.com</email>
      </address>
    </author>

    <date year="2017" month="June"/>

    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    

    <abstract>


<t>The QUIC transport protocol has several features that are desirable in a
transport for HTTP, such as stream multiplexing, per-stream flow control, and
low-latency connection establishment.  This document describes a mapping of HTTP
semantics over QUIC.  This document also identifies HTTP/2 features that are
subsumed by QUIC, and describes how HTTP/2 extensions can be ported to QUIC.</t>



    </abstract>


    <note title="Note to Readers">


<t>Discussion of this draft takes place on the QUIC working group mailing list
(quic@ietf.org), which is archived at
<eref target="https://mailarchive.ietf.org/arch/search/?email_list=quic">https://mailarchive.ietf.org/arch/search/?email_list=quic</eref>.</t>

<t>Working Group information can be found at <eref target="https://github.com/quicwg">https://github.com/quicwg</eref>; source
code and issues list for this draft can be found at
<eref target="https://github.com/quicwg/base-drafts/labels/http">https://github.com/quicwg/base-drafts/labels/http</eref>.</t>


    </note>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>The QUIC transport protocol has several features that are desirable in a
transport for HTTP, such as stream multiplexing, per-stream flow control, and
low-latency connection establishment. This document describes a mapping of HTTP
semantics over QUIC, drawing heavily on the existing TCP mapping, HTTP/2.
Specifically, this document identifies HTTP/2 features that are subsumed by
QUIC, and describes how the other features can be implemented atop QUIC.</t>

<t>QUIC is described in <xref target="QUIC-TRANSPORT"/>.  For a full description of HTTP/2, see
<xref target="RFC7540"/>.</t>

<section anchor="notational-conventions" title="Notational Conventions">

<t>The words “MUST”, “MUST NOT”, “SHOULD”, and “MAY” are used in this document.
It’s not shouting; when they are capitalized, they have the special meaning
defined in <xref target="RFC2119"/>.</t>

</section>
</section>
<section anchor="quic-advertisement" title="QUIC Advertisement">

<t>An HTTP origin advertises the availability of an equivalent HTTP/QUIC endpoint
via the Alt-Svc HTTP response header or the HTTP/2 ALTSVC frame (<xref target="RFC7838"/>),
using the ALPN token defined in <xref target="connection-establishment"/>.</t>

<t>For example, an origin could indicate in an HTTP/1.1 or HTTP/2 response that
HTTP/QUIC was available on UDP port 50781 at the same hostname by including the
following header in any response:</t>

<figure><artwork type="example"><![CDATA[
Alt-Svc: hq=":50781"
]]></artwork></figure>

<t>On receipt of an Alt-Svc header indicating HTTP/QUIC support, a client MAY
attempt to establish a QUIC connection to the indicated host and port and, if
successful, send HTTP requests using the mapping described in this document.</t>

<t>Connectivity problems (e.g. firewall blocking UDP) can result in QUIC connection
establishment failure, in which case the client SHOULD continue using the
existing connection or try another alternative endpoint offered by the origin.</t>

<t>Servers MAY serve HTTP/QUIC on any UDP port.  Servers MUST use the same port
across all IP addresses that serve a single domain, and SHOULD NOT change this
port.</t>

<section anchor="alt-svc-version-hint" title="QUIC Version Hints">

<t>This document defines the “quic” parameter for Alt-Svc, which MAY be used to
provide version-negotiation hints to HTTP/QUIC clients. QUIC versions are
four-octet sequences with no additional constraints on format. Syntax:</t>

<figure><artwork type="abnf"><![CDATA[
quic = version-number
version-number = 1*8HEXDIG; hex-encoded QUIC version
]]></artwork></figure>

<t>Leading zeros SHOULD be omitted for brevity.  When multiple versions are
supported, the “quic” parameter MAY be repeated multiple times in a single
Alt-Svc entry.  For example, if a server supported both version 0x00000001 and
the version rendered in ASCII as “Q034”, it could specify the following header:</t>

<figure><artwork type="example"><![CDATA[
Alt-Svc: hq=":49288";quic=1;quic=51303334
]]></artwork></figure>

<t>Where multiple versions are listed, the order of the values reflects the
server’s preference (with the first value being the most preferred version).
Origins SHOULD list only versions which are supported by the alternative, but
MAY omit supported versions for any reason.</t>

</section>
</section>
<section anchor="connection-establishment" title="Connection Establishment">

<t>HTTP/QUIC connections are established as described in <xref target="QUIC-TRANSPORT"/>. During
connection establishment, HTTP/QUIC support is indicated by selecting the ALPN
token “hq” in the crypto handshake.</t>

<t>While connection-level options pertaining to the core QUIC protocol are set in
the initial crypto handshake, HTTP-specific settings are conveyed
in the SETTINGS frame. After the QUIC connection is established, a SETTINGS
frame (<xref target="frame-settings"/>) MUST be sent as the initial frame of the HTTP control
stream (Stream ID 1, see <xref target="stream-mapping"/>).  The server MUST NOT send data on
any other stream until the client’s SETTINGS frame has been received.</t>

<section anchor="draft-version-identification" title="Draft Version Identification">

<t><list style='empty'>
  <t><spanx style="strong">RFC Editor’s Note:</spanx>  Please remove this section prior to publication of a
final version of this document.</t>
</list></t>

<t>Only implementations of the final, published RFC can identify themselves as
“hq”. Until such an RFC exists, implementations MUST NOT identify themselves
using this string.</t>

<t>Implementations of draft versions of the protocol MUST add the string “-“ and
the corresponding draft number to the identifier. For example,
draft-ietf-quic-http-01 is identified using the string “hq-01”.</t>

<t>Non-compatible experiments that are based on these draft versions MUST append
the string “-“ and an experiment name to the identifier. For example, an
experimental implementation based on draft-ietf-quic-http-09 which reserves an
extra stream for unsolicited transmission of 1980s pop music might identify
itself as “hq-09-rickroll”. Note that any label MUST conform to the “token”
syntax defined in Section 3.2.6 of <xref target="RFC7230"></xref>. Experimenters are encouraged to
coordinate their experiments on the quic@ietf.org mailing list.</t>

</section>
</section>
<section anchor="stream-mapping" title="Stream Mapping and Usage">

<t>A QUIC stream provides reliable in-order delivery of bytes, but makes no
guarantees about order of delivery with regard to bytes on other streams. On the
wire, data is framed into QUIC STREAM frames, but this framing is invisible to
the HTTP framing layer. A QUIC receiver buffers and orders received STREAM
frames, exposing the data contained within as a reliable byte stream to the
application.</t>

<t>QUIC reserves Stream 0 for crypto operations (the handshake, crypto config
updates). Stream 1 is reserved for sending and receiving HTTP control frames,
and is analogous to HTTP/2’s Stream 0.  This connection control stream is
considered critical to the HTTP connection.  If the connection control stream is
closed for any reason, this MUST be treated as a connection error of type
QUIC_CLOSED_CRITICAL_STREAM.</t>

<t>When HTTP headers and data are sent over QUIC, the QUIC layer handles most of
the stream management. An HTTP request/response consumes a pair of streams: This
means that the client’s first request occurs on QUIC streams 3 and 5, the second
on stream 7 and 9, and so on. The server’s first push consumes streams 2 and 4.
This amounts to the second least-significant bit differentiating the two streams
in a request.</t>

<t>The lower-numbered stream is called the message control stream and carries
frames related to the request/response, including HEADERS. The higher-numbered
stream is the data stream and carries the request/response body with no
additional framing. Note that a request or response without a body will cause
this stream to be half-closed in the corresponding direction without
transferring data.</t>

<t>Because the message control stream contains HPACK data which manipulates
connection-level state, the message control stream MUST NOT be closed with a
stream-level error.  If an implementation chooses to reject a request with a
QUIC error code, it MUST trigger a QUIC RST_STREAM on the data stream only.  An
implementation MAY close (FIN) a message control stream without completing a
full HTTP message if the data stream has been abruptly closed.  Data on message
control streams MUST be fully consumed, or the connection terminated.</t>

<t>All message control streams are considered critical to the HTTP connection.  If
a message control stream is terminated abruptly for any reason, this MUST be
treated as a connection error of type HTTP_RST_CONTROL_STREAM.  When a message
control stream terminates cleanly, if the last frame on the stream was
truncated, this MUST be treated as a connection error (see HTTP_MALFORMED_* in
<xref target="http-error-codes"/>).</t>

<t>Pairs of streams must be utilized sequentially, with no gaps.  The data stream
is opened at the same time as the message control stream is opened and is closed
after transferring the body.  The data stream is closed immediately after
sending the request headers if there is no body.</t>

<t>HTTP does not need to do any separate multiplexing when using QUIC - data sent
over a QUIC stream always maps to a particular HTTP transaction. Requests and
responses are considered complete when the corresponding QUIC streams are closed
in the appropriate direction.</t>

<section anchor="stream-1-connection-control-stream" title="Stream 1: Connection Control Stream">

<t>Since most connection-level concerns will be managed by QUIC, the primary use of
Stream 1 will be for the SETTINGS frame when the connection opens and for
PRIORITY frames subsequently.</t>

</section>
<section anchor="http-message-exchanges" title="HTTP Message Exchanges">

<t>A client sends an HTTP request on a new pair of QUIC streams. A server sends an
HTTP response on the same streams as the request.</t>

<t>An HTTP message (request or response) consists of:</t>

<t><list style="numbers">
  <t>one header block (see <xref target="frame-headers"/>) on the control stream containing the
message headers (see <xref target="RFC7230"/>, Section 3.2),</t>
  <t>the payload body (see <xref target="RFC7230"/>, Section 3.3), sent on the data stream,</t>
  <t>optionally, one header block on the control stream containing the
trailer-part, if present (see <xref target="RFC7230"/>, Section 4.1.2).</t>
</list></t>

<t>In addition, prior to sending the message header block indicated above, a
response may contain zero or more header blocks on the control stream containing
the message headers of informational (1xx) HTTP responses (see <xref target="RFC7230"/>,
Section 3.2 and <xref target="RFC7231"/>, Section 6.2).</t>

<t>The data stream MUST be half-closed immediately after the transfer of the body.
If the message does not contain a body, the corresponding data stream MUST still
be half-closed without transferring any data. The “chunked” transfer encoding
defined in Section 4.1 of <xref target="RFC7230"/> MUST NOT be used.</t>

<t>Trailing header fields are carried in an additional header block on the message
control stream. Such a header block is a sequence of HEADERS frames with End
Header Block set on the last frame. Senders MUST send only one header block in
the trailers section; receivers MUST decode any subsequent header blocks in
order to maintain HPACK decoder state, but the resulting output MUST be
discarded.</t>

<t>An HTTP request/response exchange fully consumes a pair of streams. After
sending a request, a client closes the streams for sending; after sending a
response, the server closes its streams for sending and the QUIC streams are
fully closed.</t>

<t>A server can send a complete response prior to the client sending an entire
request if the response does not depend on any portion of the request that has
not been sent and received. When this is true, a server MAY request that the
client abort transmission of a request without error by sending a RST_STREAM
with an error code of NO_ERROR after sending a complete response and closing its
stream. Clients MUST NOT discard responses as a result of receiving such a
RST_STREAM, though clients can always discard responses at their discretion for
other reasons.</t>

<section anchor="header-compression" title="Header Compression">

<t>HTTP/QUIC uses HPACK header compression as described in <xref target="RFC7541"/>. HPACK was
designed for HTTP/2 with the assumption of in-order delivery such as that
provided by TCP. A sequence of encoded header blocks must arrive (and be
decoded) at an endpoint in the same order in which they were encoded. This
ensures that the dynamic state at the two endpoints remains in sync.</t>

<t>QUIC streams provide in-order delivery of data sent on those streams, but there
are no guarantees about order of delivery between streams. To achieve in-order
delivery of HEADERS frames in QUIC, the HPACK-bearing frames contain a counter
which can be used to ensure in-order processing. Data (request/response bodies)
which arrive out of order are buffered until the corresponding HEADERS arrive.</t>

<t>This does introduce head-of-line blocking: if the packet containing HEADERS for
stream N is lost or reordered then the HEADERS for stream N+4 cannot be
processed until it has been retransmitted successfully, even though the HEADERS
for stream N+4 may have arrived.</t>

<t><list style="hanging">
  <t hangText='DISCUSS:'>
  Keep HPACK with HOLB? Redesign HPACK to be order-invariant? How much
do we need to retain compatibility with HTTP/2’s HPACK?</t>
</list></t>

</section>
<section anchor="the-connect-method" title="The CONNECT Method">

<t>The pseudo-method CONNECT (<xref target="RFC7231"/>, Section 4.3.6) is primarily used with
HTTP proxies to establish a TLS session with an origin server for the purposes
of interacting with “https” resources. In HTTP/1.x, CONNECT is used to convert
an entire HTTP connection into a tunnel to a remote host. In HTTP/2, the CONNECT
method is used to establish a tunnel over a single HTTP/2 stream to a remote
host for similar purposes.</t>

<t>A CONNECT request in HTTP/QUIC functions in the same manner as in HTTP/2. The
request MUST be formatted as described in <xref target="RFC7540"/>, Section 8.3. A CONNECT
request that does not conform to these restrictions is malformed. The message
data stream MUST NOT be closed at the end of the request.</t>

<t>A proxy that supports CONNECT establishes a TCP connection (<xref target="RFC0793"/>) to the
server identified in the “:authority” pseudo-header field. Once this connection
is successfully established, the proxy sends a HEADERS frame containing a 2xx
series status code to the client, as defined in <xref target="RFC7231"/>, Section 4.3.6, on
the message control stream.</t>

<t>All QUIC STREAM frames on the message data stream correspond to data sent on the
TCP connection. Any QUIC STREAM frame sent by the client is transmitted by the
proxy to the TCP server; data received from the TCP server is written to the
data stream by the proxy. Note that the size and number of TCP segments is not
guaranteed to map predictably to the size and number of QUIC STREAM frames.</t>

<t>The TCP connection can be closed by either peer. When the client half-closes the
data stream, the proxy will set the FIN bit on its connection to the TCP server.
When the proxy receives a packet with the FIN bit set, it will half-close the
corresponding data stream. TCP connections which remain half-closed in a single
direction are not invalid, but are often handled poorly by servers, so clients
SHOULD NOT half-close connections on which they are still expecting data.</t>

<t>A TCP connection error is signaled with RST_STREAM. A proxy treats any error in
the TCP connection, which includes receiving a TCP segment with the RST bit set,
as a stream error of type HTTP_CONNECT_ERROR (<xref target="http-error-codes"/>).
Correspondingly, a proxy MUST send a TCP segment with the RST bit set if it
detects an error with the stream or the QUIC connection.</t>

</section>
</section>
<section anchor="priority" title="Stream Priorities">

<t>HTTP/QUIC uses the priority scheme described in <xref target="RFC7540"/> Section 5.3. In
this priority scheme, a given stream can be designated as dependent upon another
stream, which expresses the preference that the latter stream (the “parent”
stream) be allocated resources before the former stream (the “dependent”
stream). Taken together, the dependencies across all streams in a connection
form a dependency tree. The structure of the dependency tree changes as PRIORITY
frames add, remove, or change the dependency links between streams.</t>

<t>For consistency’s sake, all PRIORITY frames MUST refer to the message control
stream of the dependent request, not the data stream.</t>

</section>
<section anchor="server-push" title="Server Push">

<t>HTTP/QUIC supports server push as described in <xref target="RFC7540"/>. During connection
establishment, the client indicates whether it is willing to receive server
pushes via the SETTINGS_DISABLE_PUSH setting in the SETTINGS frame (see
<xref target="connection-establishment"/>), which defaults to 1 (true).</t>

<t>As with server push for HTTP/2, the server initiates a server push by sending a
PUSH_PROMISE frame containing the Stream ID of the stream to be pushed, as well
as request header fields attributed to the request. The PUSH_PROMISE frame is
sent on the control stream of the associated (client-initiated) request, while
the Promised Stream ID field specifies the Stream ID of the control stream for
the server-initiated request.</t>

<t>The server push response is conveyed in the same way as a non-server-push
response, with response headers and (if present) trailers carried by HEADERS
frames sent on the control stream, and response body (if any) sent via the
corresponding data stream.</t>

</section>
</section>
<section anchor="http-framing-layer" title="HTTP Framing Layer">

<t>Frames are used only on the connection (stream 1) and message (streams 3, 7,
etc.) control streams. Other streams carry data payload and are not framed at
the HTTP layer.</t>

<t>This section describes HTTP framing in QUIC and highlights some differences from
HTTP/2 framing.  For more detail on differences from HTTP/2, see <xref target="h2-frames"/>.</t>

<section anchor="frame-layout" title="Frame Layout">

<t>All frames have the following format:</t>

<figure title="HTTP/QUIC frame format" anchor="fig-frame"><artwork type="drawing"><![CDATA[
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Length (16)         |     Type (8)  |   Flags (8)   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Frame Payload (*)                     ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

</section>
<section anchor="frames" title="Frame Definitions">

<section anchor="frame-headers" title="HEADERS">

<t>The HEADERS frame (type=0x1) is used to carry part of a header set, compressed
using HPACK <xref target="RFC7541"/>.</t>

<t>One flag is defined:</t>

<t><list style="hanging">
  <t hangText='End Header Block (0x4):'>
  This frame concludes a header block.</t>
</list></t>

<t>A HEADERS frame with any other flags set MUST be treated as a connection error
of type HTTP_MALFORMED_HEADERS.</t>

<figure title="HEADERS frame payload" anchor="fig-headers"><artwork type="drawing"><![CDATA[
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Sequence? (16)          |    Header Block Fragment (*)...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>The HEADERS frame payload has the following fields:</t>

<t><list style="hanging">
  <t hangText='Sequence Number:'>
  Present only on the first frame of a header block sequence. This MUST
  be set to zero on the first header block sequence, and incremented on
  each header block.</t>
</list></t>

<t>The next frame on the same stream after a HEADERS frame without the EHB flag set
MUST be another HEADERS frame. A receiver MUST treat the receipt of any other
type of frame as a stream error of type HTTP_INTERRUPTED_HEADERS. (Note that
QUIC can intersperse data from other streams between frames, or even during
transmission of frames, so multiplexing is not blocked by this requirement.)</t>

<t>A full header block is contained in a sequence of zero or more HEADERS frames
without EHB set, followed by a HEADERS frame with EHB set.</t>

<t>On receipt, header blocks (HEADERS, PUSH_PROMISE) MUST be processed by the HPACK
decoder in sequence. If a block is missing, all subsequent HPACK frames MUST be
held until it arrives, or the connection terminated.</t>

<t>When the Sequence counter reaches its maximum value (0xFFFF), the next increment
returns it to zero.  An endpoint MUST NOT wrap the Sequence counter to zero
until the previous zero-value header block has been confirmed received.</t>

</section>
<section anchor="frame-priority" title="PRIORITY">

<t>The PRIORITY (type=0x02) frame specifies the sender-advised priority of a stream
and is substantially different from <xref target="RFC7540"/>. In order to support ordering,
it MUST be sent only on the connection control stream. The format has been
modified to accommodate not being sent on-stream and the larger stream ID space
of QUIC.</t>

<t>The semantics of the Stream Dependency, Weight, and E flag are the same as in
HTTP/2.</t>

<t>The flags defined are:</t>

<t><list style="hanging">
  <t hangText='E (0x01):'>
  Indicates that the stream dependency is exclusive (see <xref target="RFC7540"/> Section
5.3).</t>
</list></t>

<figure title="PRIORITY frame payload" anchor="fig-priority"><artwork type="drawing"><![CDATA[
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Prioritized Stream (32)                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Dependent Stream (32)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Weight (8)  |
   +-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>The HEADERS frame payload has the following fields:</t>

<t><list style="hanging">
  <t hangText='Prioritized Stream:'>
  A 32-bit stream identifier for the message control stream whose priority is
being updated.</t>
  <t hangText='Stream Dependency:'>
  A 32-bit stream identifier for the stream that this stream depends on (see
<xref target="priority"/> and {!RFC7540}} Section 5.3).</t>
  <t hangText='Weight:'>
  An unsigned 8-bit integer representing a priority weight for the stream (see
<xref target="RFC7540"/> Section 5.3). Add one to the value to obtain a weight between 1
and 256.</t>
</list></t>

<t>A PRIORITY frame MUST have a payload length of nine octets.  A PRIORITY frame
of any other length MUST be treated as a connection error of type
HTTP_MALFORMED_PRIORITY.</t>

</section>
<section anchor="frame-settings" title="SETTINGS">

<t>The SETTINGS frame (type=0x4) conveys configuration parameters that affect how
endpoints communicate, such as preferences and constraints on peer behavior, and
is substantially different from <xref target="RFC7540"/>. Individually, a SETTINGS parameter
can also be referred to as a “setting”.</t>

<t>SETTINGS parameters are not negotiated; they describe characteristics of the
sending peer, which can be used by the receiving peer. However, a negotiation
can be implied by the use of SETTINGS – a peer uses SETTINGS to advertise a set
of supported values. The recipient can then choose which entries from this list
are also acceptable and proceed with the value it has chosen. (This choice could
be announced in a field of an extension frame, or in its own value in SETTINGS.)</t>

<t>Different values for the same parameter can be advertised by each peer. For
example, a client might permit a very large HPACK state table while a server
chooses to use a small one to conserve memory.</t>

<t>Parameters MUST NOT occur more than once.  A receiver MAY treat the presence of
the same parameter more than once as a connection error of type
HTTP_MALFORMED_SETTINGS.</t>

<t>The SETTINGS frame defines no flags.</t>

<t>The payload of a SETTINGS frame consists of zero or more parameters, each
consisting of an unsigned 16-bit setting identifier and a length-prefixed binary
value.</t>

<figure title="SETTINGS value format" anchor="fig-ext-settings"><artwork type="drawing"><![CDATA[
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Identifier (16)        |         Length (16)           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Contents (?)                       ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>A zero-length content indicates that the setting value is a Boolean and true.
False is indicated by the absence of the setting.</t>

<t>Non-zero-length values MUST be compared against the remaining length of the
SETTINGS frame.  Any value which purports to cross the end of the frame MUST
cause the SETTINGS frame to be considered malformed and trigger a connection
error of type HTTP_MALFORMED_SETTINGS.</t>

<t>An implementation MUST ignore the contents for any SETTINGS identifier it does
not understand.</t>

<t>SETTINGS frames always apply to a connection, never a single stream.  A SETTINGS
frame MUST be sent as the first frame of the connection control stream (see
<xref target="stream-mapping"/>) by each peer, and MUST NOT be sent subsequently or on any
other stream. If an endpoint receives an SETTINGS frame on a different stream,
the endpoint MUST respond with a connection error of type
HTTP_SETTINGS_ON_WRONG_STREAM.  If an endpoint receives a second SETTINGS frame,
the endpoint MUST respond with a connection error of type
HTTP_MULTIPLE_SETTINGS.</t>

<t>The SETTINGS frame affects connection state. A badly formed or incomplete
SETTINGS frame MUST be treated as a connection error (Section 5.4.1) of type
HTTP_MALFORMED_SETTINGS.</t>

<section anchor="integer-encoding" title="Integer encoding">

<t>Settings which are integers are transmitted in network byte order.  Leading
zero octets are permitted, but implementations SHOULD use only as many bytes as
are needed to represent the value.  An integer MUST NOT be represented in more
bytes than would be used to transfer the maximum permitted value.</t>

</section>
<section anchor="settings-parameters" title="Defined SETTINGS Parameters">

<t>The following settings are defined in HTTP/QUIC:</t>

<t><list style="hanging">
  <t hangText='SETTINGS_HEADER_TABLE_SIZE (0x1):'>
  An integer with a maximum value of 2^32 - 1.</t>
  <t hangText='SETTINGS_DISABLE_PUSH (0x2):'>
  Transmitted as a Boolean; replaces SETTINGS_ENABLE_PUSH</t>
  <t hangText='SETTINGS_MAX_HEADER_LIST_SIZE (0x6):'>
  An integer with a maximum value of 2^32 - 1.</t>
</list></t>

</section>
<section anchor="usage-in-0-rtt" title="Usage in 0-RTT">

<t>When a 0-RTT QUIC connection is being used, the client’s initial requests will
be sent before the arrival of the server’s SETTINGS frame.  Clients SHOULD
cache at least the following settings about servers:</t>

<t><list style="symbols">
  <t>SETTINGS_HEADER_TABLE_SIZE</t>
  <t>SETTINGS_MAX_HEADER_LIST_SIZE</t>
</list></t>

<t>Clients MUST comply with cached settings until the server’s current settings are
received.  If a client does not have cached values, it SHOULD assume the
following values:</t>

<t><list style="symbols">
  <t>SETTINGS_HEADER_TABLE_SIZE:  0 octets</t>
  <t>SETTINGS_MAX_HEADER_LIST_SIZE:  16,384 octets</t>
</list></t>

<t>Servers MAY continue processing data from clients which exceed its current
configuration during the initial flight.  In this case, the client MUST apply
the new settings immediately upon receipt.</t>

<t>If the connection is closed because these or other constraints were violated
during the 0-RTT flight (e.g. with HTTP_HPACK_DECOMPRESSION_FAILED), clients MAY
establish a new connection and retry any 0-RTT requests using the settings sent
by the server on the closed connection. (This assumes that only requests that
are safe to retry are sent in 0-RTT.) If the connection was closed before the
SETTINGS frame was received, clients SHOULD discard any cached values and use
the defaults above on the next connection.</t>

</section>
</section>
<section anchor="frame-push-promise" title="PUSH_PROMISE">

<t>The PUSH_PROMISE frame (type=0x05) is used to carry a request header set from
server to client, as in HTTP/2.  It defines no flags.</t>

<figure title="PUSH_PROMISE frame payload" anchor="fig-push-promise"><artwork type="drawing"><![CDATA[
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Promised Stream ID (32)                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Sequence? (16)          |         Header Block (*)    ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>The payload consists of:</t>

<t><list style="hanging">
  <t hangText='Promised Stream ID:'>
  A 32-bit Stream ID indicating the QUIC stream on which the response headers
will be sent.  (The response body stream is implied by the headers stream,
as defined in <xref target="stream-mapping"/>.)</t>
  <t hangText='HPACK Sequence:'>
  A sixteen-bit counter, equivalent to the Sequence field in HEADERS</t>
  <t hangText='Payload:'>
  HPACK-compressed request headers for the promised response.</t>
</list></t>

</section>
</section>
</section>
<section anchor="errors" title="Error Handling">

<t>QUIC allows the application to abruptly terminate individual streams or the
entire connection when an error is encountered.  These are referred to as
“stream errors” or “connection errors” and are described in more detail in
<xref target="QUIC-TRANSPORT"></xref>.</t>

<t>HTTP/QUIC requires that only data streams be terminated abruptly.  Terminating a
message control stream will result in an error of type HTTP_RST_CONTROL_STREAM.</t>

<t>This section describes HTTP-specific error codes which can be used to express
the cause of a connection or stream error.</t>

<section anchor="http-error-codes" title="HTTP-Defined QUIC Error Codes">

<t>QUIC allocates error codes 0x0000-0x3FFF to application protocol definition.
The following error codes are defined by HTTP for use in QUIC RST_STREAM,
GOAWAY, and CONNECTION_CLOSE frames.</t>

<t><list style="hanging">
  <t hangText='HTTP_PUSH_REFUSED (0x01):'>
  The server has attempted to push content which the client will not accept
on this connection.</t>
  <t hangText='HTTP_INTERNAL_ERROR (0x02):'>
  An internal error has occurred in the HTTP stack.</t>
  <t hangText='HTTP_PUSH_ALREADY_IN_CACHE (0x03):'>
  The server has attempted to push content which the client has cached.</t>
  <t hangText='HTTP_REQUEST_CANCELLED (0x04):'>
  The client no longer needs the requested data.</t>
  <t hangText='HTTP_HPACK_DECOMPRESSION_FAILED (0x05):'>
  HPACK failed to decompress a frame and cannot continue.</t>
  <t hangText='HTTP_CONNECT_ERROR (0x06):'>
  The connection established in response to a CONNECT request was reset or
abnormally closed.</t>
  <t hangText='HTTP_EXCESSIVE_LOAD (0x07):'>
  The endpoint detected that its peer is exhibiting a behavior that might be
generating excessive load.</t>
  <t hangText='HTTP_VERSION_FALLBACK (0x08):'>
  The requested operation cannot be served over HTTP/QUIC.  The peer should
retry over HTTP/2.</t>
  <t hangText='HTTP_MALFORMED_HEADERS (0x09):'>
  A HEADERS frame has been received with an invalid format.</t>
  <t hangText='HTTP_MALFORMED_PRIORITY (0x0A):'>
  A PRIORITY frame has been received with an invalid format.</t>
  <t hangText='HTTP_MALFORMED_SETTINGS (0x0B):'>
  A SETTINGS frame has been received with an invalid format.</t>
  <t hangText='HTTP_MALFORMED_PUSH_PROMISE (0x0C):'>
  A PUSH_PROMISE frame has been received with an invalid format.</t>
  <t hangText='HTTP_INTERRUPTED_HEADERS (0x0E):'>
  A HEADERS frame without the End Header Block flag was followed by a frame
other than HEADERS.</t>
  <t hangText='HTTP_SETTINGS_ON_WRONG_STREAM (0x0F):'>
  A SETTINGS frame was received on a request control stream.</t>
  <t hangText='HTTP_MULTIPLE_SETTINGS (0x10):'>
  More than one SETTINGS frame was received.</t>
  <t hangText='HTTP_RST_CONTROL_STREAM (0x11):'>
  A message control stream closed abruptly.</t>
</list></t>

</section>
</section>
<section anchor="considerations-for-transitioning-from-http2" title="Considerations for Transitioning from HTTP/2">

<t>HTTP/QUIC is strongly informed by HTTP/2, and bears many similarities.  This
section points out important differences from HTTP/2 and describes how to map
HTTP/2 extensions into HTTP/QUIC.</t>

<section anchor="h2-frames" title="HTTP Frame Types">

<t>Many framing concepts from HTTP/2 can be elided away on QUIC, because the
transport deals with them. Because frames are already on a stream, they can omit
the stream number. Because frames do not block multiplexing (QUIC’s multiplexing
occurs below this layer), the support for variable-maximum-length packets can be
removed. Because stream termination is handled by QUIC, an END_STREAM flag is
not required.</t>

<t>Frame payloads are largely drawn from <xref target="RFC7540"/>. However, QUIC includes many
features (e.g. flow control) which are also present in HTTP/2. In these cases,
the HTTP mapping does not re-implement them. As a result, several HTTP/2 frame
types are not required in HTTP/QUIC. Where an HTTP/2-defined frame is no longer
used, the frame ID has been reserved in order to maximize portability between
HTTP/2 and HTTP/QUIC implementations. However, even equivalent frames between
the two mappings are not identical.</t>

<t>Many of the differences arise from the fact that HTTP/2 provides an absolute
ordering between frames across all streams, while QUIC provides this guarantee
on each stream only.  As a result, if a frame type makes assumptions that frames
from different streams will still be received in the order sent, HTTP/QUIC will
break them.</t>

<t>For example, implicit in the HTTP/2 prioritization scheme is the notion of
in-order delivery of priority changes (i.e., dependency tree mutations): since
operations on the dependency tree such as reparenting a subtree are not
commutative, both sender and receiver must apply them in the same order to
ensure that both sides have a consistent view of the stream dependency tree.
HTTP/2 specifies priority assignments in PRIORITY frames and (optionally) in
HEADERS frames. To achieve in-order delivery of priority changes in HTTP/QUIC,
PRIORITY frames are sent on the connection control stream and the PRIORITY
section is removed from the HEADERS frame.</t>

<t>Other than this issue, frame type HTTP/2 extensions are typically portable to
QUIC simply by replacing Stream 0 in HTTP/2 with Stream 1 in HTTP/QUIC.</t>

<t>Below is a listing of how each HTTP/2 frame type is mapped:</t>

<t><list style="hanging">
  <t hangText='DATA (0x0):'>
  Instead of DATA frames, HTTP/QUIC uses a separate data stream.  See
<xref target="stream-mapping"/>.</t>
  <t hangText='HEADERS (0x1):'>
  As described above, the PRIORITY region of HEADERS is not supported. A
separate PRIORITY frame MUST be used. Padding is not defined in HTTP/QUIC
frames.  See <xref target="frame-headers"/>.</t>
  <t hangText='PRIORITY (0x2):'>
  As described above, the PRIORITY frame is sent on the connection control
stream.  See <xref target="frame-priority"/>.</t>
  <t hangText='RST_STREAM (0x3):'>
  RST_STREAM frames do not exist, since QUIC provides stream lifecycle
management.</t>
  <t hangText='SETTINGS (0x4):'>
  SETTINGS frames are sent only at the beginning of the connection.  See
<xref target="frame-settings"/> and <xref target="h2-settings"/>.</t>
  <t hangText='PUSH_PROMISE (0x5):'>
  See <xref target="frame-push-promise"/>.</t>
  <t hangText='PING (0x6):'>
  PING frames do not exist, since QUIC provides equivalent functionality.</t>
  <t hangText='GOAWAY (0x7):'>
  GOAWAY frames do not exist, since QUIC provides equivalent functionality.</t>
  <t hangText='WINDOW_UPDATE (0x8):'>
  WINDOW_UPDATE frames do not exist, since QUIC provides flow control.</t>
  <t hangText='CONTINUATION (0x9):'>
  CONTINUATION frames do not exist; instead, larger HEADERS/PUSH_PROMISE
frames than HTTP/2 are permitted, and HEADERS frames can be used in series.</t>
</list></t>

<t>The IANA registry of frame types has been updated in <xref target="iana-frames"/> to include
references to the definition for each frame type in HTTP/2 and in HTTP/QUIC.
Frames not defined as available in HTTP/QUIC SHOULD NOT be sent and SHOULD be
ignored as unknown on receipt.</t>

</section>
<section anchor="h2-settings" title="HTTP/2 SETTINGS Parameters">

<t>An important difference from HTTP/2 is that settings are sent once, at the
beginning of the connection, and thereafter cannot change.  This eliminates
many corner cases around synchronization of changes.</t>

<t>Some transport-level options that HTTP/2 specifies via the SETTINGS frame are
superseded by QUIC transport parameters in HTTP/QUIC. The HTTP-level options
that are retained in HTTP/QUIC have the same value as in HTTP/2.</t>

<t>Below is a listing of how each HTTP/2 SETTINGS parameter is mapped:</t>

<t><list style="hanging">
  <t hangText='SETTINGS_HEADER_TABLE_SIZE:'>
  See <xref target="settings-parameters"/>.</t>
  <t hangText='SETTINGS_ENABLE_PUSH:'>
  See SETTINGS_DISABLE_PUSH in <xref target="settings-parameters"/>.</t>
  <t hangText='SETTINGS_MAX_CONCURRENT_STREAMS:'>
  QUIC requires the maximum number of incoming streams per connection to be
specified in the initial transport handshake.  Specifying
SETTINGS_MAX_CONCURRENT_STREAMS in the SETTINGS frame is an error.</t>
  <t hangText='SETTINGS_INITIAL_WINDOW_SIZE:'>
  QUIC requires both stream and connection flow control window sizes to be
specified in the initial transport handshake.  Specifying
SETTINGS_INITIAL_WINDOW_SIZE in the SETTINGS frame is an error.</t>
  <t hangText='SETTINGS_MAX_FRAME_SIZE:'>
  This setting has no equivalent in HTTP/QUIC.  Specifying it in the SETTINGS
frame is an error.</t>
  <t hangText='SETTINGS_MAX_HEADER_LIST_SIZE:'>
  See <xref target="settings-parameters"/>.</t>
</list></t>

<t>Settings defined by extensions to HTTP/2 MAY be expressed as integers with a
maximum value of 2^32-1, if they are applicable to HTTP/QUIC, but SHOULD have a
specification describing their usage.  Fields for this purpose have been added
to the IANA registry in <xref target="iana-settings"/>.</t>

</section>
<section anchor="http2-error-codes" title="HTTP/2 Error Codes">

<t>QUIC has the same concepts of “stream” and “connection” errors that HTTP/2
provides. However, because the error code space is shared between multiple
components, there is no direct portability of HTTP/2 error codes.</t>

<t>The HTTP/2 error codes defined in Section 7 of <xref target="RFC7540"/> map to QUIC error
codes as follows:</t>

<t><list style="hanging">
  <t hangText='NO_ERROR (0x0):'>
  QUIC_NO_ERROR</t>
  <t hangText='PROTOCOL_ERROR (0x1):'>
  No single mapping.  See new HTTP_MALFORMED_* error codes defined in
<xref target="http-error-codes"/>.</t>
  <t hangText='INTERNAL_ERROR (0x2)'>
  HTTP_INTERNAL_ERROR in <xref target="http-error-codes"/>.</t>
  <t hangText='FLOW_CONTROL_ERROR (0x3):'>
  Not applicable, since QUIC handles flow control.  Would provoke a
QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA from the QUIC layer.</t>
  <t hangText='SETTINGS_TIMEOUT (0x4):'>
  Not applicable, since no acknowledgement of SETTINGS is defined.</t>
  <t hangText='STREAM_CLOSED (0x5):'>
  Not applicable, since QUIC handles stream management.  Would provoke a
QUIC_STREAM_DATA_AFTER_TERMINATION from the QUIC layer.</t>
  <t hangText='FRAME_SIZE_ERROR (0x6)'>
  No single mapping.  See new error codes defined in <xref target="http-error-codes"/>.</t>
  <t hangText='REFUSED_STREAM (0x7):'>
  Not applicable, since QUIC handles stream management.  Would provoke a
QUIC_TOO_MANY_OPEN_STREAMS from the QUIC layer.</t>
  <t hangText='CANCEL (0x8):'>
  HTTP_REQUEST_CANCELLED in <xref target="http-error-codes"/>.</t>
  <t hangText='COMPRESSION_ERROR (0x9):'>
  HTTP_HPACK_DECOMPRESSION_FAILED in <xref target="http-error-codes"/>.</t>
  <t hangText='CONNECT_ERROR (0xa):'>
  HTTP_CONNECT_ERROR in <xref target="http-error-codes"/>.</t>
  <t hangText='ENHANCE_YOUR_CALM (0xb):'>
  HTTP_EXCESSIVE_LOAD in <xref target="http-error-codes"/>.</t>
  <t hangText='INADEQUATE_SECURITY (0xc):'>
  Not applicable, since QUIC is assumed to provide sufficient security on all
connections.</t>
  <t hangText='HTTP_1_1_REQUIRED (0xd):'>
  HTTP_VERSION_FALLBACK in <xref target="http-error-codes"/>.</t>
</list></t>

<t>Error codes defined by HTTP/2 extensions need to be re-registered for HTTP/QUIC
if still applicable.  See <xref target="iana-error-codes"/>.</t>

</section>
</section>
<section anchor="security-considerations" title="Security Considerations">

<t>The security considerations of HTTP over QUIC should be comparable to those of
HTTP/2.</t>

<t>The modified SETTINGS format contains nested length elements, which could pose
a security risk to an uncautious implementer.  A SETTINGS frame parser MUST
ensure that the length of the frame exactly matches the length of the settings
it contains.</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<section anchor="registration-of-httpquic-identification-string" title="Registration of HTTP/QUIC Identification String">

<t>This document creates a new registration for the identification of HTTP/QUIC in
the “Application Layer Protocol Negotiation (ALPN) Protocol IDs” registry
established in <xref target="RFC7301"/>.</t>

<t>The “hq” string identifies HTTP/QUIC:</t>

<t><list style="hanging">
  <t hangText='Protocol:'>
  HTTP over QUIC</t>
  <t hangText='Identification Sequence:'>
  0x68 0x71 (“hq”)</t>
  <t hangText='Specification:'>
  This document</t>
</list></t>

</section>
<section anchor="registration-of-quic-version-hint-alt-svc-parameter" title="Registration of QUIC Version Hint Alt-Svc Parameter">

<t>This document creates a new registration for version-negotiation hints in the
“Hypertext Transfer Protocol (HTTP) Alt-Svc Parameter” registry established in
<xref target="RFC7838"/>.</t>

<t><list style="hanging">
  <t hangText='Parameter:'>
  “quic”</t>
  <t hangText='Specification:'>
  This document, <xref target="alt-svc-version-hint"/></t>
</list></t>

</section>
<section anchor="iana-frames" title="Existing Frame Types">

<t>This document adds two new columns to the “HTTP/2 Frame Type” registry defined
in <xref target="RFC7540"/>:</t>

<t><list style="hanging">
  <t hangText='Supported Protocols:'>
  Indicates which associated protocols use the frame type.  Values MUST be one
of:

      <list style="symbols">
        <t>“HTTP/2 only”</t>
        <t>“HTTP/QUIC only”</t>
        <t>“Both”</t>
      </list>
  </t>
  <t hangText='HTTP/QUIC Specification:'>
  Indicates where this frame’s behavior over QUIC is defined; required
if the frame is supported over QUIC.</t>
</list></t>

<t>Values for existing registrations are assigned by this document:</t>

<texttable>
      <ttcol align='left'>Frame Type</ttcol>
      <ttcol align='center'>Supported Protocols</ttcol>
      <ttcol align='left'>HTTP/QUIC Specification</ttcol>
      <c>DATA</c>
      <c>HTTP/2 only</c>
      <c>N/A</c>
      <c>HEADERS</c>
      <c>Both</c>
      <c><xref target="frame-headers"/></c>
      <c>PRIORITY</c>
      <c>Both</c>
      <c><xref target="frame-priority"/></c>
      <c>RST_STREAM</c>
      <c>HTTP/2 only</c>
      <c>N/A</c>
      <c>SETTINGS</c>
      <c>Both</c>
      <c><xref target="frame-settings"/></c>
      <c>PUSH_PROMISE</c>
      <c>Both</c>
      <c><xref target="frame-push-promise"/></c>
      <c>PING</c>
      <c>HTTP/2 only</c>
      <c>N/A</c>
      <c>GOAWAY</c>
      <c>HTTP/2 only</c>
      <c>N/A</c>
      <c>WINDOW_UPDATE</c>
      <c>HTTP/2 only</c>
      <c>N/A</c>
      <c>CONTINUATION</c>
      <c>HTTP/2 only</c>
      <c>N/A</c>
</texttable>

<t>The “Specification” column is renamed to “HTTP/2 specification” and is only
required if the frame is supported over HTTP/2.</t>

</section>
<section anchor="iana-settings" title="Settings Parameters">

<t>This document adds two new columns to the “HTTP/2 Settings” registry defined
in <xref target="RFC7540"/>:</t>

<t><list style="hanging">
  <t hangText='Supported Protocols:'>
  Indicates which associated protocols use the setting.  Values MUST be one
of:

      <list style="symbols">
        <t>“HTTP/2 only”</t>
        <t>“HTTP/QUIC only”</t>
        <t>“Both”</t>
      </list>
  </t>
  <t hangText='HTTP/QUIC Specification:'>
  Indicates where this setting’s behavior over QUIC is defined; required
if the frame is supported over QUIC.</t>
</list></t>

<t>Values for existing registrations are assigned by this document:</t>

<texttable>
      <ttcol align='left'>Setting Name</ttcol>
      <ttcol align='center'>Supported Protocols</ttcol>
      <ttcol align='left'>HTTP/QUIC Specification</ttcol>
      <c>HEADER_TABLE_SIZE</c>
      <c>Both</c>
      <c><xref target="settings-parameters"/></c>
      <c>ENABLE_PUSH / DISABLE_PUSH</c>
      <c>Both</c>
      <c><xref target="settings-parameters"/></c>
      <c>MAX_CONCURRENT_STREAMS</c>
      <c>HTTP/2 Only</c>
      <c>N/A</c>
      <c>INITIAL_WINDOW_SIZE</c>
      <c>HTTP/2 Only</c>
      <c>N/A</c>
      <c>MAX_FRAME_SIZE</c>
      <c>HTTP/2 Only</c>
      <c>N/A</c>
      <c>MAX_HEADER_LIST_SIZE</c>
      <c>Both</c>
      <c><xref target="settings-parameters"/></c>
</texttable>

<t>The “Specification” column is renamed to “HTTP/2 Specification” and is only
required if the setting is supported over HTTP/2.</t>

</section>
<section anchor="iana-error-codes" title="Error Codes">

<t>This document establishes a registry for HTTP/QUIC error codes.  The
“HTTP/QUIC Error Code” registry manages a 30-bit space.  The “HTTP/QUIC
Error Code” registry operates under the “Expert Review” policy
<xref target="RFC5226"/>.</t>

<t>Registrations for error codes are required to include a description
of the error code.  An expert reviewer is advised to examine new
registrations for possible duplication with existing error codes.
Use of existing registrations is to be encouraged, but not mandated.</t>

<t>New registrations are advised to provide the following information:</t>

<t><list style="hanging">
  <t hangText='Name:'>
  A name for the error code.  Specifying an error code name is optional.</t>
  <t hangText='Code:'>
  The 30-bit error code value.</t>
  <t hangText='Description:'>
  A brief description of the error code semantics, longer if no detailed
specification is provided.</t>
  <t hangText='Specification:'>
  An optional reference for a specification that defines the error code.</t>
</list></t>

<t>The entries in the following table are registered by this document.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Specification</ttcol>
      <c>HTTP_PUSH_REFUSED</c>
      <c>0x01</c>
      <c>Client refused pushed content</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_INTERNAL_ERROR</c>
      <c>0x02</c>
      <c>Internal error</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_PUSH_ALREADY_IN_CACHE</c>
      <c>0x03</c>
      <c>Pushed content already cached</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_REQUEST_CANCELLED</c>
      <c>0x04</c>
      <c>Data no longer needed</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_HPACK_DECOMPRESSION_FAILED</c>
      <c>0x05</c>
      <c>HPACK cannot continue</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_CONNECT_ERROR</c>
      <c>0x06</c>
      <c>TCP reset or error on CONNECT request</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_EXCESSIVE_LOAD</c>
      <c>0x07</c>
      <c>Peer generating excessive load</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_VERSION_FALLBACK</c>
      <c>0x08</c>
      <c>Retry over HTTP/2</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_MALFORMED_HEADERS</c>
      <c>0x09</c>
      <c>Invalid HEADERS frame</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_MALFORMED_PRIORITY</c>
      <c>0x0A</c>
      <c>Invalid PRIORITY frame</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_MALFORMED_SETTINGS</c>
      <c>0x0B</c>
      <c>Invalid SETTINGS frame</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_MALFORMED_PUSH_PROMISE</c>
      <c>0x0C</c>
      <c>Invalid PUSH_PROMISE frame</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_INTERRUPTED_HEADERS</c>
      <c>0x0E</c>
      <c>Incomplete HEADERS block</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_SETTINGS_ON_WRONG_STREAM</c>
      <c>0x0F</c>
      <c>SETTINGS frame on a request control stream</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_MULTIPLE_SETTINGS</c>
      <c>0x10</c>
      <c>Multiple SETTINGS frames</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_RST_CONTROL_STREAM</c>
      <c>0x11</c>
      <c>Message control stream was RST</c>
      <c><xref target="http-error-codes"/></c>
</texttable>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>

<reference anchor="QUIC-TRANSPORT" >
  <front>
    <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
    <author initials="J." surname="Iyengar" fullname="Jana Iyengar" role="editor">
      <organization>Google</organization>
    </author>
    <author initials="M." surname="Thomson" fullname="Martin Thomson" role="editor">
      <organization>Mozilla</organization>
    </author>
    <date year="2017" month="June"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-quic-transport"/>
</reference>




<reference  anchor="RFC7540" target='http://www.rfc-editor.org/info/rfc7540'>
<front>
<title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
<author initials='M.' surname='Belshe' fullname='M. Belshe'><organization /></author>
<author initials='R.' surname='Peon' fullname='R. Peon'><organization /></author>
<author initials='M.' surname='Thomson' fullname='M. Thomson' role='editor'><organization /></author>
<date year='2015' month='May' />
<abstract><t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t><t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t></abstract>
</front>
<seriesInfo name='RFC' value='7540'/>
<seriesInfo name='DOI' value='10.17487/RFC7540'/>
</reference>



<reference  anchor="RFC2119" target='http://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference  anchor="RFC7838" target='http://www.rfc-editor.org/info/rfc7838'>
<front>
<title>HTTP Alternative Services</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<author initials='P.' surname='McManus' fullname='P. McManus'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke'><organization /></author>
<date year='2016' month='April' />
<abstract><t>This document specifies &quot;Alternative Services&quot; for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t></abstract>
</front>
<seriesInfo name='RFC' value='7838'/>
<seriesInfo name='DOI' value='10.17487/RFC7838'/>
</reference>



<reference  anchor="RFC7230" target='http://www.rfc-editor.org/info/rfc7230'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the &quot;http&quot; and &quot;https&quot; Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t></abstract>
</front>
<seriesInfo name='RFC' value='7230'/>
<seriesInfo name='DOI' value='10.17487/RFC7230'/>
</reference>



<reference  anchor="RFC7231" target='http://www.rfc-editor.org/info/rfc7231'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t></abstract>
</front>
<seriesInfo name='RFC' value='7231'/>
<seriesInfo name='DOI' value='10.17487/RFC7231'/>
</reference>



<reference  anchor="RFC7541" target='http://www.rfc-editor.org/info/rfc7541'>
<front>
<title>HPACK: Header Compression for HTTP/2</title>
<author initials='R.' surname='Peon' fullname='R. Peon'><organization /></author>
<author initials='H.' surname='Ruellan' fullname='H. Ruellan'><organization /></author>
<date year='2015' month='May' />
<abstract><t>This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2.</t></abstract>
</front>
<seriesInfo name='RFC' value='7541'/>
<seriesInfo name='DOI' value='10.17487/RFC7541'/>
</reference>



<reference  anchor="RFC0793" target='http://www.rfc-editor.org/info/rfc793'>
<front>
<title>Transmission Control Protocol</title>
<author initials='J.' surname='Postel' fullname='J. Postel'><organization /></author>
<date year='1981' month='September' />
</front>
<seriesInfo name='STD' value='7'/>
<seriesInfo name='RFC' value='793'/>
<seriesInfo name='DOI' value='10.17487/RFC0793'/>
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor="RFC7301" target='http://www.rfc-editor.org/info/rfc7301'>
<front>
<title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
<author initials='S.' surname='Friedl' fullname='S. Friedl'><organization /></author>
<author initials='A.' surname='Popov' fullname='A. Popov'><organization /></author>
<author initials='A.' surname='Langley' fullname='A. Langley'><organization /></author>
<author initials='E.' surname='Stephan' fullname='E. Stephan'><organization /></author>
<date year='2014' month='July' />
<abstract><t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t></abstract>
</front>
<seriesInfo name='RFC' value='7301'/>
<seriesInfo name='DOI' value='10.17487/RFC7301'/>
</reference>



<reference  anchor="RFC5226" target='http://www.rfc-editor.org/info/rfc5226'>
<front>
<title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
<author initials='T.' surname='Narten' fullname='T. Narten'><organization /></author>
<author initials='H.' surname='Alvestrand' fullname='H. Alvestrand'><organization /></author>
<date year='2008' month='May' />
<abstract><t>Many protocols make use of identifiers consisting of constants and other well-known values.  Even after a protocol has been defined and deployment has begun, new values may need to be assigned (e.g., for a new option type in DHCP, or a new encryption or authentication transform for IPsec).  To ensure that such quantities have consistent values and interpretations across all implementations, their assignment must be administered by a central authority.  For IETF protocols, that role is provided by the Internet Assigned Numbers Authority (IANA).</t><t>In order for IANA to manage a given namespace prudently, it needs guidelines describing the conditions under which new values can be assigned or when modifications to existing values can be made.  If IANA is expected to play a role in the management of a namespace, IANA must be given clear and concise instructions describing that role.  This document discusses issues that should be considered in formulating a policy for assigning values to a namespace and provides guidelines for authors on the specific text that must be included in documents that place demands on IANA.</t><t>This document obsoletes RFC 2434.  This document specifies an Internet Best  Current Practices for the Internet Community, and requests discussion and  suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='26'/>
<seriesInfo name='RFC' value='5226'/>
<seriesInfo name='DOI' value='10.17487/RFC5226'/>
</reference>




    </references>


<section anchor="contributors" title="Contributors">

<t>The original authors of this specification were Robbie Shade and Mike Warres.</t>

</section>
<section anchor="change-log" title="Change Log">

<t><list style='empty'>
  <t><spanx style="strong">RFC Editor’s Note:</spanx>  Please remove this section prior to publication of a
final version of this document.</t>
</list></t>

<section anchor="since-draft-ietf-quic-http-02" title="Since draft-ietf-quic-http-02">

<t><list style="symbols">
  <t>Track changes in transport draft</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-http-01" title="Since draft-ietf-quic-http-01">

<t><list style="symbols">
  <t>SETTINGS changes (#181):
  <list style="symbols">
      <t>SETTINGS can be sent only once at the start of a connection;
no changes thereafter</t>
      <t>SETTINGS_ACK removed</t>
      <t>Settings can only occur in the SETTINGS frame a single time</t>
      <t>Boolean format updated</t>
    </list></t>
  <t>Alt-Svc parameter changed from “v” to “quic”; format updated (#229)</t>
  <t>Closing the connection control stream or any message control stream is a
fatal error (#176)</t>
  <t>HPACK Sequence counter can wrap (#173)</t>
  <t>0-RTT guidance added</t>
  <t>Guide to differences from HTTP/2 and porting HTTP/2 extensions added
(#127,#242)</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-http-00" title="Since draft-ietf-quic-http-00">

<t><list style="symbols">
  <t>Changed “HTTP/2-over-QUIC” to “HTTP/QUIC” throughout (#11,#29)</t>
  <t>Changed from using HTTP/2 framing within Stream 3 to new framing format and
two-stream-per-request model (#71,#72,#73)</t>
  <t>Adopted SETTINGS format from draft-bishop-httpbis-extended-settings-01</t>
  <t>Reworked SETTINGS_ACK to account for indeterminate inter-stream order (#75)</t>
  <t>Described CONNECT pseudo-method (#95)</t>
  <t>Updated ALPN token and Alt-Svc guidance (#13,#87)</t>
  <t>Application-layer-defined error codes (#19,#74)</t>
</list></t>

</section>
<section anchor="since-draft-shade-quic-http2-mapping-00" title="Since draft-shade-quic-http2-mapping-00">

<t><list style="symbols">
  <t>Adopted as base for draft-ietf-quic-http</t>
  <t>Updated authors/editors list</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

