<?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.2 -->

<!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-09" 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>Akamai</organization>
      <address>
        <email>mbishop@evequefou.be</email>
      </address>
    </author>

    <date year="2018" month="January"/>

    <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 key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”,
“SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>

<t>Field definitions are given in Augmented Backus-Naur Form (ABNF), as defined in
<xref target="RFC5234"/>.</t>

<t>This document uses the variable-length integer encoding from
<xref target="QUIC-TRANSPORT"/>.</t>

<t>Protocol elements called “frames” exist in both this document and
<xref target="QUIC-TRANSPORT"/>. Where frames from <xref target="QUIC-TRANSPORT"/> are referenced, the
frame name will be prefaced with “QUIC.”  For example, “QUIC APPLICATION_CLOSE
frames.”  References without this preface refer to frames defined in <xref target="frames"/>.</t>

</section>
</section>
<section anchor="connection-setup-and-management" title="Connection Setup and Management">

<section anchor="discovering-an-httpquic-endpoint" title="Discovering an HTTP/QUIC Endpoint">

<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 relies on QUIC as the underlying transport.  The QUIC version being
used MUST use TLS version 1.3 or greater as its handshake protocol.  The Server
Name Indication (SNI) extension <xref target="RFC6066"/> MUST be included in the TLS
handshake.</t>

<t>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 TLS handshake.  Support for other application-layer protocols
MAY be offered in the same 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 by each endpoint as the initial frame
of their respective HTTP control stream (Stream ID 2 or 3, 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="connection-reuse" title="Connection Reuse">

<t>Once a connection exists to a server endpoint, this connection MAY be reused for
requests with multiple different URI authority components.  The client MAY send
any requests for which the client considers the server authoritative.</t>

<t>An authoritative HTTP/QUIC endpoint is typically discovered because the client
has received an Alt-Svc record from the request’s origin which nominates the
endpoint as a valid HTTP Alternative Service for that origin.  As required by
<xref target="RFC7838"/>, clients MUST check that the nominated server can present a valid
certificate for the origin before considering it authoritative. Clients MUST NOT
assume that an HTTP/QUIC endpoint is authoritative for other origins without an
explicit signal.</t>

<t>A server that does not wish clients to reuse connections for a particular origin
can indicate that it is not authoritative for a request by sending a 421
(Misdirected Request) status code in response to the request (see Section 9.1.2
of <xref target="RFC7540"/>).</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 the first client-initiated, bidirectional stream (Stream 0) for
cryptographic operations. HTTP over QUIC reserves the first unidirectional
stream sent by either peer (Streams 2 and 3) for sending and receiving HTTP
control frames.  This pair of unidirectional streams is analogous to HTTP/2’s
Stream 0.  The data sent on these streams is critical to the HTTP connection.
If either 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.</t>

<t>An HTTP request/response consumes a single client-initiated, bidirectional
stream.  A bidirectional stream ensures that the response can be readily
correlated with the request. This means that the client’s first request occurs
on QUIC stream 4, with subsequent requests on stream 8, 12, and so on.</t>

<t>Server push uses server-initiated, unidirectional streams.  Thus, the server’s
first push consumes stream 7 and subsequent pushes use stream 11, 15, and so on.</t>

<t>These streams carry frames related to the request/response (see <xref target="frames"/>).
When a stream terminates cleanly, if the last frame on the stream was truncated,
this MUST be treated as a connection error (see HTTP_MALFORMED_FRAME in
<xref target="http-error-codes"/>).  Streams which terminate abruptly may be reset at any
point in the frame.</t>

<t>Streams SHOULD be used sequentially, with no gaps.</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 stream is closed
in the appropriate direction.</t>

<section anchor="control-streams" title="Control Streams">

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

<t>A pair of unidirectional streams is used rather than a single bidirectional
stream.  This allows either peer to send data as soon they are able.  Depending
on whether 0-RTT is enabled on the connection, either client or server might be
able to send stream data first after the cryptographic handshake completes.</t>

</section>
<section anchor="request-response" title="HTTP Message Exchanges">

<t>A client sends an HTTP request on a client-initiated, bidirectional QUIC
stream. A server sends an HTTP response on the same stream 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"/>) containing the message headers (see
<xref target="RFC7230"/>, Section 3.2),</t>
  <t>the payload body (see <xref target="RFC7230"/>, Section 3.3), sent as a series of DATA
frames (see <xref target="frame-data"/>),</t>
  <t>optionally, one header block 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 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>PUSH_PROMISE frames MAY be interleaved with the frames of a response message
indicating a pushed resource related to the response. These PUSH_PROMISE frames
are not part of the response, but carry the headers of a separate HTTP request
message.  See <xref target="server-push"/> for more details.</t>

<t>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 following the
body. 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 discard any subsequent header blocks.</t>

<t>An HTTP request/response exchange fully consumes a QUIC stream. After sending a
request, a client closes the stream for sending; after sending a response, the
server closes the stream for sending and the QUIC stream is 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 triggering a QUIC
STOP_SENDING with error code HTTP_EARLY_RESPONSE, sending a complete response,
and cleanly closing its streams. Clients MUST NOT discard complete responses as
a result of having their request terminated abruptly, though clients can always
discard responses at their discretion for other reasons.  Servers MUST NOT
abort a response in progress as a result of receiving a solicited RST_STREAM.</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. QUIC anticipates
moving to a modified version of HPACK without this assumption.  In the meantime,
by fixing the size of the dynamic table at zero, HPACK can be used in an
unordered environment.</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 request
stream MUST NOT be half-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.</t>

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

<t>The TCP connection can be closed by either peer. When the client ends the
request stream (that is, the receive stream at the proxy enters the “Data Recvd”
state), 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 terminate the send
stream that it sends to client. TCP connections which remain half-closed in a
single direction are not invalid, but are often handled poorly by servers, so
clients SHOULD NOT cause send a STREAM frame with a FIN bit for 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="Request Prioritization">

<t>HTTP/QUIC uses the priority scheme described in <xref target="RFC7540"/>, Section 5.3. In
this priority scheme, a given request can be designated as dependent upon
another request, which expresses the preference that the latter stream (the
“parent” request) be allocated resources before the former stream (the
“dependent” request). Taken together, the dependencies across all requests 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 requests.</t>

<t>The PRIORITY frame <xref target="frame-priority"/> identifies a request
either by identifying the stream that carries a request or by using a Push ID
(<xref target="frame-push-promise"/>).</t>

<t>Only a client can send PRIORITY frames.  A server MUST NOT send a PRIORITY
frame.</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 enables server push by sending a MAX_PUSH_ID frame
(see <xref target="frame-max-push-id"/>).  A server cannot use server push until it receives
a MAX_PUSH_ID frame.</t>

<t>As with server push for HTTP/2, the server initiates a server push by sending a
PUSH_PROMISE frame that includes request header fields attributed to the
request. The PUSH_PROMISE frame is sent on the client-initiated, bidirectional
stream that carried the request that generated the push.  This allows the server
push to be associated with a request.  Ordering of a PUSH_PROMISE in relation to
certain parts of the response is important (see Section 8.2.1 of <xref target="RFC7540"/>).</t>

<t>Unlike HTTP/2, the PUSH_PROMISE does not reference a stream; it contains a Push
ID. The Push ID uniquely identifies a server push (see <xref target="frame-push-promise"/>).
This allows a server to fulfill promises in the order that best suits its needs.</t>

<t>When a server later fulfills a promise, the server push response is conveyed on
a push stream.  A push stream is a server-initiated, unidirectional stream.  A
push stream always begins with a header (see <xref target="fig-push-stream-header"/>) that
identifies the Push ID of the promise that it fulfills, encoded as a
variable-length integer.</t>

<figure title="Push Stream Header" anchor="fig-push-stream-header"><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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Push ID (i)                         ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>A server SHOULD use Push IDs sequentially, starting at 0.  A client uses the
MAX_PUSH_ID frame (<xref target="frame-max-push-id"/>) to limit the number of pushes that a
server can promise.  A client MUST treat receipt of a push stream with a Push ID
that is greater than the maximum Push ID as a connection error of type
HTTP_PUSH_LIMIT_EXCEEDED.</t>

<t>Each Push ID MUST only be used once in a push stream header.  If a push stream
header includes a Push ID that was used in another push stream header, the
client MUST treat this as a connection error of type HTTP_DUPLICATE_PUSH.  The
same Push ID can be used in multiple PUSH_PROMISE frames (see
<xref target="frame-push-promise"/>).</t>

<t>After the push stream header, a push contains a response (<xref target="request-response"/>),
with response headers, a response body (if any) carried by DATA frames, then
trailers (if any) carried by HEADERS frames.</t>

<t>If a promised server push is not needed by the client, the client SHOULD send a
CANCEL_PUSH frame; if the push stream is already open, a QUIC STOP_SENDING frame
with an appropriate error code can be used instead (e.g., HTTP_PUSH_REFUSED,
HTTP_PUSH_ALREADY_IN_CACHE; see <xref target="errors"/>).  This asks the server not to
transfer the data and indicates that it will be discarded upon receipt.</t>

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

<t>Frames are used on each stream.  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 (i)                        ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Type (8)   |   Flags (8)   |       Frame Payload (*)     ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>A frame includes the following fields:</t>

<t><list style="hanging">
  <t hangText='Length:'>
  A variable-length integer that describes the length of the Frame Payload.
This length does not include the frame header.</t>
  <t hangText='Type:'>
  An 8-bit type for the frame.</t>
  <t hangText='Flags:'>
  An 8-bit field containing flags.  The Type field determines the semantics of
flags.</t>
  <t hangText='Frame Payload:'>
  A payload, the semantics of which are determined by the Type field.</t>
</list></t>

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

<section anchor="frame-data" title="DATA">

<t>DATA frames (type=0x0) convey arbitrary, variable-length sequences of octets
associated with an HTTP request or response payload.</t>

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

<t>DATA frames MUST be associated with an HTTP request or response.  If a DATA
frame is received on either control stream, the recipient MUST respond with a
connection error (<xref target="errors"/>) of type HTTP_WRONG_STREAM.</t>

<t>DATA frames MUST contain a non-zero-length payload.  If a DATA frame is received
with a payload length of zero, the recipient MUST respond with a stream error
(<xref target="errors"/>) of type HTTP_MALFORMED_FRAME.</t>

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

<t>The HEADERS frame (type=0x1) is used to carry a header block, compressed using
HPACK <xref target="header-compression"/>.</t>

<t>No flags are defined for the HEADERS frame.</t>

<t>A HEADERS frame with any flags set MUST be treated as a connection error of type
HTTP_MALFORMED_FRAME.</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 in format from <xref target="RFC7540"/>.  In order to ensure
that prioritization is processed in a consistent order, PRIORITY frames MUST be
sent on the control stream.  A PRIORITY frame sent on any other stream MUST be
treated as a HTTP_WRONG_STREAM error.</t>

<t>The format has been modified to accommodate not being sent on a request stream,
to allow for identification of server pushes, and the larger stream ID space of
QUIC.  The semantics of the Stream Dependency, Weight, and E flag are otherwise
the same as in HTTP/2.</t>

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

<t><list style="hanging">
  <t hangText='PUSH_PRIORITIZED (0x04):'>
  Indicates that the Prioritized Stream is a server push rather than a
request.</t>
  <t hangText='PUSH_DEPENDENT (0x02):'>
  Indicates a dependency on a server push.</t>
  <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 Request ID (i)                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Stream Dependency ID (i)                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Weight (8)  |
+-+-+-+-+-+-+-+-+
]]></artwork></figure>

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

<t><list style="hanging">
  <t hangText='Prioritized Request ID:'>
  A variable-length integer that identifies a request.  This contains
the Stream ID of a request stream when the PUSH_PRIORITIZED flag is clear,
or a Push ID when the PUSH_PRIORITIZED flag is set.</t>
  <t hangText='Stream Dependency ID:'>
  A variable-length integer that identifies a dependent request.  This
contains the Stream ID of a request stream when the PUSH_DEPENDENT flag is
clear, or a Push ID when the PUSH_DEPENDENT flag is set.  A request Stream
ID of 0 indicates a dependency on the root stream. For details of
dependencies, see <xref target="priority"/> and <xref target="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 identifies a request to prioritize, and a request upon which
that request is dependent.  A Prioritized Request ID or Stream Dependency ID
identifies a client-initiated request using the corresponding stream ID when the
corresponding PUSH_PRIORITIZED or PUSH_DEPENDENT flag is not set.  Setting the
PUSH_PRIORITIZED or PUSH_DEPENDENT flag causes the Prioritized Request ID or
Stream Dependency ID (respectively) to identify a server push using a Push ID
(see <xref target="frame-push-promise"/> for details).</t>

<t>A PRIORITY frame MAY identify a Stream Dependency ID using a Stream ID of 0; as
in <xref target="RFC7540"/>, this makes the request dependent on the root of the dependency
tree.</t>

<t>A PRIORITY frame MUST identify a client-initiated, bidirectional stream.  A
server MUST treat receipt of PRIORITY frame with a Stream ID of any other type
as a connection error of type HTTP_MALFORMED_FRAME.</t>

<t>Stream ID 0 cannot be reprioritized. A Prioritized Request ID that identifies
Stream 0 MUST be treated as a connection error of type HTTP_MALFORMED_FRAME.</t>

<t>A PRIORITY frame that does not reference a request MUST be treated as a
HTTP_MALFORMED_FRAME error, unless it references Stream ID 0.  A PRIORITY
that sets a PUSH_PRIORITIZED or PUSH_DEPENDENT flag, but then references a
non-existent Push ID MUST be treated as a HTTP_MALFORMED_FRAME error.</t>

<t>A PRIORITY frame MUST contain only the identified fields.  A PRIORITY frame that
contains more or fewer fields, or a PRIORITY frame that includes a truncated
integer encoding MUST be treated as a connection error of type
HTTP_MALFORMED_FRAME.</t>

</section>
<section anchor="frame-cancel-push" title="CANCEL_PUSH">

<t>The CANCEL_PUSH frame (type=0x3) is used to request cancellation of server push
prior to the push stream being created.  The CANCEL_PUSH frame identifies a
server push request by Push ID (see <xref target="frame-push-promise"/>) using a
variable-length integer.</t>

<t>When a server receives this frame, it aborts sending the response for the
identified server push.  If the server has not yet started to send the server
push, it can use the receipt of a CANCEL_PUSH frame to avoid opening a
stream.  If the push stream has been opened by the server, the server SHOULD
sent a QUIC RST_STREAM frame on those streams and cease transmission of the
response.</t>

<t>A server can send this frame to indicate that it won’t be sending a response
prior to creation of a push stream.  Once the push stream has been created,
sending CANCEL_PUSH has no effect on the state of the push stream.  A QUIC
RST_STREAM frame SHOULD be used instead to cancel transmission of the server
push response.</t>

<t>A CANCEL_PUSH frame is sent on the control stream.  Sending a CANCEL_PUSH frame
on a stream other than the control stream MUST be treated as a stream error of
type HTTP_WRONG_STREAM.</t>

<t>The CANCEL_PUSH frame has no defined flags.</t>

<t>The CANCEL_PUSH frame carries a Push ID encoded as a variable-length integer.
The Push ID identifies the server push that is being cancelled (see
<xref target="frame-push-promise"/>).</t>

<t>If the client receives a CANCEL_PUSH frame, that frame might identify a Push ID
that has not yet been mentioned by a PUSH_PROMISE frame.</t>

<t>An endpoint MUST treat a CANCEL_PUSH frame which does not contain exactly one
properly-formatted variable-length integer as a connection error of type
HTTP_MALFORMED_FRAME.</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 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 be willing to consume very large response headers,
while servers are more cautious about request size.</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_FRAME.</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 (i)       ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          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_FRAME.</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 either 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_WRONG_STREAM.  If
an endpoint receives a second SETTINGS frame, the endpoint MUST respond with a
connection error of type HTTP_MALFORMED_FRAME.</t>

<t>The SETTINGS frame affects connection state. A badly formed or incomplete
SETTINGS frame MUST be treated as a connection error (<xref target="errors"/>) of type
HTTP_MALFORMED_FRAME.</t>

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

<t>Settings which are integers use the QUIC variable-length integer encoding.</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^30 - 1.  This value MUST be zero.</t>
  <t hangText='SETTINGS_MAX_HEADER_LIST_SIZE (0x6):'>
  An integer with a maximum value of 2^30 - 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.  The PUSH_PROMISE frame 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Push ID (i)                        ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Header Block (*)                      ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

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

<t><list style="hanging">
  <t hangText='Push ID:'>
  A variable-length integer that identifies the server push request.  A push ID
is used in push stream header (<xref target="server-push"/>), CANCEL_PUSH frames
(<xref target="frame-cancel-push"/>), and PRIORITY frames (<xref target="frame-priority"/>).</t>
  <t hangText='Header Block:'>
  HPACK-compressed request headers for the promised response.</t>
</list></t>

<t>A server MUST NOT use a Push ID that is larger than the client has provided in a
MAX_PUSH_ID frame (<xref target="frame-max-push-id"/>).  A client MUST treat receipt of a
PUSH_PROMISE that contains a larger Push ID than the client has advertised as a
connection error of type HTTP_MALFORMED_FRAME.</t>

<t>A server MAY use the same Push ID in multiple PUSH_PROMISE frames.  This allows
the server to use the same server push in response to multiple concurrent
requests.  Referencing the same server push ensures that a PUSH_PROMISE can be
made in relation to every response in which server push might be needed without
duplicating pushes.</t>

<t>A server that uses the same Push ID in multiple PUSH_PROMISE frames MUST include
the same header fields each time.  The octets of the header block MAY be
different due to differing encoding, but the header fields and their values MUST
be identical.  Note that ordering of header fields is significant.  A client
MUST treat receipt of a PUSH_PROMISE with conflicting header field values for
the same Push ID as a connection error of type HTTP_MALFORMED_FRAME.</t>

<t>Allowing duplicate references to the same Push ID is primarily to reduce
duplication caused by concurrent requests.  A server SHOULD avoid reusing a Push
ID over a long period.  Clients are likely to consume server push responses and
not retain them for reuse over time.  Clients that see a PUSH_PROMISE that uses
a Push ID that they have since consumed and discarded are forced to ignore the
PUSH_PROMISE.</t>

</section>
<section anchor="frame-goaway" title="GOAWAY">

<t>The GOAWAY frame (type=0x7) is used to initiate graceful shutdown of a
connection by a server.  GOAWAY allows a server to stop accepting new requests
while still finishing processing of previously received requests.  This enables
administrative actions, like server maintenance.  GOAWAY by itself does not
close a connection.</t>

<t>The GOAWAY frame does not define any flags, and the payload is a QUIC Stream ID
for a client-initiated, bidirectional stream encoded as a variable-length
integer.</t>

<t>Clients do not need to send GOAWAY to initiate a graceful shutdown; they simply
stop making new requests.  A server MUST treat receipt of a GOAWAY frame as a
connection error (<xref target="errors"/>) of type HTTP_UNEXPECTED_GOAWAY.</t>

<t>A client MUST treat receipt of a GOAWAY frame containing a Stream ID of any
other type as a connection error of type HTTP_MALFORMED_FRAME.</t>

<t>The GOAWAY frame applies to the connection, not a specific stream.  An endpoint
MUST treat a GOAWAY frame on a stream other than the control stream as a
connection error (<xref target="errors"/>) of type HTTP_WRONG_STREAM.</t>

<t>New client requests might already have been sent before the client receives the
server’s GOAWAY frame.  The GOAWAY frame contains the Stream ID of the last
client-initiated request that was or might be processed in this connection,
which enables client and server to agree on which requests were accepted prior
to the connection shutdown.  This identifier MAY be lower than the stream limit
identified by a QUIC MAX_STREAM_ID frame, and MAY be zero if no requests were
processed.  Servers SHOULD NOT increase the MAX_STREAM_ID limit after sending a
GOAWAY frame.</t>

<t><list style="hanging">
  <t hangText='Note:'>
  In this context, “processed” means that some data from the stream was
passed to some higher layer of software that might have taken some action as
a result.</t>
</list></t>

<t>Once sent, the server will refuse requests sent on streams with an identifier
higher than the included last Stream ID.  Clients MUST NOT send new requests on
the connection after receiving GOAWAY, although requests might already be in
transit. A new connection can be established for new requests.</t>

<t>If the client has sent requests on streams with a higher Stream ID than
indicated in the GOAWAY frame, those requests were not and will not be
processed.  Endpoints SHOULD reset any streams above this ID with the error code
HTTP_REQUEST_CANCELLED.  Servers MAY also reset streams below the indicated ID
with HTTP_REQUEST_CANCELLED if the associated requests were not processed.
Servers MUST NOT use the HTTP_REQUEST_CANCELLED status for requests which were
partially or fully processed.</t>

<t>The client can treat requests cancelled by the server as though they had never
been sent at all, thereby allowing them to be retried later on a new connection.
If a stream is cancelled after receiving a complete response, the client MAY
ignore the cancellation and use the response.  However, if a stream is cancelled
after receiving a partial response, the response SHOULD NOT be used.
Automatically retrying such requests is not possible, unless this is otherwise
permitted (e.g., idempotent actions like GET, PUT, or DELETE).  Requests on
Stream IDs less than or equal to the Stream ID in the GOAWAY frame might have
been processed; their status cannot be known until they are completed
successfully, reset individually, or the connection terminates.</t>

<t>Servers SHOULD send a GOAWAY frame when the closing of a connection is known
in advance, even if the advance notice is small, so that the remote peer can
know whether a stream has been partially processed or not.  For example, if an
HTTP client sends a POST at the same time that a server closes a QUIC
connection, the client cannot know if the server started to process that POST
request if the server does not send a GOAWAY frame to indicate what streams it
might have acted on.</t>

<t>For unexpected closures caused by error conditions, a QUIC CONNECTION_CLOSE or
APPLICATION_CLOSE frame MUST be used.  However, a GOAWAY MAY be sent first to
provide additional detail to clients and to allow the client to retry requests.
Including the GOAWAY frame in the same packet as the QUIC CONNECTION_CLOSE or
APPLICATION_CLOSE frame improves the chances of the frame being received by
clients.</t>

<t>If a connection terminates without a GOAWAY frame, the last Stream ID is
effectively the highest possible Stream ID (as determined by QUIC’s
MAX_STREAM_ID).</t>

<t>An endpoint MAY send multiple GOAWAY frames if circumstances change. For
instance, an endpoint that sends GOAWAY without an error code during graceful
shutdown could subsequently encounter an error condition.  The last stream
identifier from the last GOAWAY frame received indicates which streams could
have been acted upon.  A server MUST NOT increase the value they send in the
last Stream ID, since clients might already have retried unprocessed requests on
another connection.</t>

<t>A client that is unable to retry requests loses all requests that are in flight
when the server closes the connection.  A server that is attempting to
gracefully shut down a connection SHOULD send an initial GOAWAY frame with the
last Stream ID set to the current value of QUIC’s MAX_STREAM_ID and SHOULD NOT
increase the MAX_STREAM_ID thereafter.  This signals to the client that a
shutdown is imminent and that initiating further requests is prohibited.  After
allowing time for any in-flight requests (at least one round-trip time), the
server MAY send another GOAWAY frame with an updated last Stream ID.  This
ensures that a connection can be cleanly shut down without losing requests.</t>

<t>Once all requests on streams at or below the identified stream number have been
completed or cancelled, and all promised server push responses associated with
those requests have been completed or cancelled, the connection can be closed
using an Immediate Close (see <xref target="QUIC-TRANSPORT"/>).  An endpoint that completes a
graceful shutdown SHOULD use the QUIC APPLICATION_CLOSE frame with the
HTTP_NO_ERROR code.</t>

</section>
<section anchor="frame-max-push-id" title="MAX_PUSH_ID">

<t>The MAX_PUSH_ID frame (type=0xD) is used by clients to control the number of
server pushes that the server can initiate.  This sets the maximum value for a
Push ID that the server can use in a PUSH_PROMISE frame.  Consequently, this
also limits the number of push streams that the server can initiate in addition
to the limit set by the QUIC MAX_STREAM_ID frame.</t>

<t>The MAX_PUSH_ID frame is always sent on a control stream.  Receipt of a
MAX_PUSH_ID frame on any other stream MUST be treated as a connection error of
type HTTP_WRONG_STREAM.</t>

<t>A server MUST NOT send a MAX_PUSH_ID frame.  A client MUST treat the receipt of
a MAX_PUSH_ID frame as a connection error of type HTTP_MALFORMED_FRAME.</t>

<t>The maximum Push ID is unset when a connection is created, meaning that a server
cannot push until it receives a MAX_PUSH_ID frame.  A client that wishes to
manage the number of promised server pushes can increase the maximum Push ID by
sending a MAX_PUSH_ID frame as the server fulfills or cancels server pushes.</t>

<t>The MAX_PUSH_ID frame has no defined flags.</t>

<t>The MAX_PUSH_ID frame carries a single variable-length integer that identifies
the maximum value for a Push ID that the server can use (see
<xref target="frame-push-promise"/>).  A MAX_PUSH_ID frame cannot reduce the maximum Push ID;
receipt of a MAX_PUSH_ID that contains a smaller value than previously received
MUST be treated as a connection error of type HTTP_MALFORMED_FRAME.</t>

<t>A server MUST treat a MAX_PUSH_ID frame payload that does not contain a single
variable-length integer as a connection error of type
HTTP_MALFORMED_FRAME.</t>

</section>
</section>
</section>
<section anchor="connection-management" title="Connection Management">

<t>QUIC connections are persistent.  All of the considerations in Section 9.1 of
<xref target="RFC7540"/> apply to the management of QUIC connections.</t>

<t>HTTP clients are expected to use QUIC PING frames to keep connections open.
Servers SHOULD NOT use PING frames to keep a connection open.  A client SHOULD
NOT use PING frames for this purpose unless there are responses outstanding for
requests or server pushes.  If the client is not expecting a response from the
server, allowing an idle connection to time out (based on the idle_timeout
transport parameter) is preferred over expending effort maintaining a connection
that might not be needed.  A gateway MAY use PING to maintain connections in
anticipation of need rather than incur the latency cost of connection
establishment to servers.</t>

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

<t>QUIC allows the application to abruptly terminate (reset) 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"/>.</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/QUIC Error Codes">

<t>The following error codes are defined for use in QUIC RST_STREAM, STOP_SENDING,
and CONNECTION_CLOSE frames when using HTTP/QUIC.</t>

<t><list style="hanging">
  <t hangText='STOPPING (0x00):'>
  This value is reserved by the transport to be used in response to QUIC
STOP_SENDING frames.</t>
  <t hangText='HTTP_NO_ERROR (0x01):'>
  No error.  This is used when the connection or stream needs to be closed, but
there is no error to signal.</t>
  <t hangText='HTTP_PUSH_REFUSED (0x02):'>
  The server has attempted to push content which the client will not accept
on this connection.</t>
  <t hangText='HTTP_INTERNAL_ERROR (0x03):'>
  An internal error has occurred in the HTTP stack.</t>
  <t hangText='HTTP_PUSH_ALREADY_IN_CACHE (0x04):'>
  The server has attempted to push content which the client has cached.</t>
  <t hangText='HTTP_REQUEST_CANCELLED (0x05):'>
  The client no longer needs the requested data.</t>
  <t hangText='HTTP_HPACK_DECOMPRESSION_FAILED (0x06):'>
  HPACK failed to decompress a frame and cannot continue.</t>
  <t hangText='HTTP_CONNECT_ERROR (0x07):'>
  The connection established in response to a CONNECT request was reset or
abnormally closed.</t>
  <t hangText='HTTP_EXCESSIVE_LOAD (0x08):'>
  The endpoint detected that its peer is exhibiting a behavior that might be
generating excessive load.</t>
  <t hangText='HTTP_VERSION_FALLBACK (0x09):'>
  The requested operation cannot be served over HTTP/QUIC.  The peer should
retry over HTTP/2.</t>
  <t hangText='HTTP_WRONG_STREAM (0x0A):'>
  A frame was received on stream where it is not permitted.</t>
  <t hangText='HTTP_PUSH_LIMIT_EXCEEDED (0x0B):'>
  A Push ID greater than the current maximum Push ID was referenced.</t>
  <t hangText='HTTP_DUPLICATE_PUSH (0x0C):'>
  A Push ID was referenced in two different stream headers.</t>
  <t hangText='HTTP_MALFORMED_FRAME (0x01XX):'>
  An error in a specific frame type.  The frame type is included as the last
octet of the error code.  For example, an error in a MAX_PUSH_ID frame would
be indicated with the code (0x10D).</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 describes the approach taken to design HTTP/QUIC, points out important
differences from HTTP/2, and describes how to map HTTP/2 extensions into
HTTP/QUIC.</t>

<t>HTTP/QUIC begins from the premise that HTTP/2 code reuse is a useful feature,
but not a hard requirement.  HTTP/QUIC departs from HTTP/2 primarily where
necessary to accommodate the differences in behavior between QUIC and TCP (lack
of ordering, support for streams).  We intend to avoid gratuitous changes which
make it difficult or impossible to build extensions with the same semantics
applicable to both protocols at once.</t>

<t>These departures are noted in this section.</t>

<section anchor="h2-streams" title="Streams">

<t>HTTP/QUIC permits use of a larger number of streams (2^62-1) than HTTP/2.  The
considerations about exhaustion of stream identifier space apply, though the
space is significantly larger such that it is likely that other limits in QUIC
are reached first, such as the limit on the connection flow control window.</t>

</section>
<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 control stream and the PRIORITY section is
removed from the HEADERS frame.</t>

<t>Frame type definitions in HTTP/QUIC often use the QUIC variable-length integer
encoding.  In particular, Stream IDs use this encoding, which allow for a larger
range of possible values than the encoding used in HTTP/2.  Some frames in
HTTP/QUIC use an identifier rather than a Stream ID (e.g. Push IDs in PRIORITY
frames). Redefinition of the encoding of extension frame types might be
necessary if the encoding includes a Stream ID.</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 2 or 3 in HTTP/QUIC.
HTTP/QUIC extensions will not assume ordering, but would not be harmed by
ordering, and would be portable to HTTP/2 in the same manner.</t>

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

<t><list style="hanging">
  <t hangText='DATA (0x0):'>
  Padding is not defined in HTTP/QUIC frames.  See <xref target="frame-data"/>.</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 control stream and can
reference either a Stream ID or a Push ID.  See <xref target="frame-priority"/>.</t>
  <t hangText='RST_STREAM (0x3):'>
  RST_STREAM frames do not exist, since QUIC provides stream lifecycle
management.  The same code point is used for the CANCEL_PUSH frame
(<xref target="frame-cancel-push"/>).</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):'>
  The PUSH_PROMISE does not reference a stream; instead the push stream
references the PUSH_PROMISE frame using a Push ID.  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 is sent only from server to client and does not contain an error code.
See <xref target="frame-goaway"/>.</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>Frame types defined by extensions to HTTP/2 need to be separately registered for
HTTP/QUIC if still applicable.  The IDs of frames defined in <xref target="RFC7540"/> have
been reserved for simplicity.  See <xref target="iana-frames"/>.</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:'>
  This is removed in favor of the MAX_PUSH_ID which provides a more granular
control over server push.</t>
  <t hangText='SETTINGS_MAX_CONCURRENT_STREAMS:'>
  QUIC controls the largest open Stream ID as part of its flow control logic.
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 need to be defined separately for HTTP/2 and HTTP/QUIC.  The IDs of
settings defined in <xref target="RFC7540"/> have been reserved for simplicity.  See
<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 the HTTP over
QUIC error codes as follows:</t>

<t><list style="hanging">
  <t hangText='NO_ERROR (0x0):'>
  HTTP_NO_ERROR in <xref target="http-error-codes"/>.</t>
  <t hangText='PROTOCOL_ERROR (0x1):'>
  No single mapping.  See new HTTP_MALFORMED_FRAME 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 need to be defined for HTTP/2 and HTTP/QUIC separately.  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="Frame Types">

<t>This document establishes a registry for HTTP/QUIC frame type codes. The
“HTTP/QUIC Frame Type” registry manages an 8-bit space.  The “HTTP/QUIC Frame
Type” registry operates under either of the “IETF Review” or “IESG Approval”
policies <xref target="RFC8126"/> for values between 0x00 and 0xef, with values between 0xf0
and 0xff being reserved for Experimental Use.</t>

<t>While this registry is separate from the “HTTP/2 Frame Type” registry defined in
<xref target="RFC7540"/>, it is preferable that the assignments parallel each other.  If an
entry is present in only one registry, every effort SHOULD be made to avoid
assigning the corresponding value to an unrelated operation.</t>

<t>New entries in this registry require the following information:</t>

<t><list style="hanging">
  <t hangText='Frame Type:'>
  A name or label for the frame type.</t>
  <t hangText='Code:'>
  The 8-bit code assigned to the frame type.</t>
  <t hangText='Specification:'>
  A reference to a specification that includes a description of the frame
layout, its semantics, and flags that the frame type uses, including any parts
of the frame that are conditionally present based on the value of flags.</t>
</list></t>

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

<texttable>
      <ttcol align='left'>Frame Type</ttcol>
      <ttcol align='center'>Code</ttcol>
      <ttcol align='left'>Specification</ttcol>
      <c>DATA</c>
      <c>0x0</c>
      <c><xref target="frame-data"/></c>
      <c>HEADERS</c>
      <c>0x1</c>
      <c><xref target="frame-headers"/></c>
      <c>PRIORITY</c>
      <c>0x2</c>
      <c><xref target="frame-priority"/></c>
      <c>CANCEL_PUSH</c>
      <c>0x3</c>
      <c><xref target="frame-cancel-push"/></c>
      <c>SETTINGS</c>
      <c>0x4</c>
      <c><xref target="frame-settings"/></c>
      <c>PUSH_PROMISE</c>
      <c>0x5</c>
      <c><xref target="frame-push-promise"/></c>
      <c>Reserved</c>
      <c>0x6</c>
      <c>N/A</c>
      <c>GOAWAY</c>
      <c>0x7</c>
      <c><xref target="frame-goaway"/></c>
      <c>Reserved</c>
      <c>0x8</c>
      <c>N/A</c>
      <c>Reserved</c>
      <c>0x9</c>
      <c>N/A</c>
      <c>MAX_PUSH_ID</c>
      <c>0xD</c>
      <c><xref target="frame-max-push-id"/></c>
</texttable>

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

<t>This document establishes a registry for HTTP/QUIC settings.  The “HTTP/QUIC
Settings” registry manages a 16-bit space.  The “HTTP/QUIC Settings” registry
operates under the “Expert Review” policy <xref target="RFC8126"/> for values in the range
from 0x0000 to 0xefff, with values between and 0xf000 and 0xffff being reserved
for Experimental Use.  The designated experts are the same as those for the
“HTTP/2 Settings” registry defined in <xref target="RFC7540"/>.</t>

<t>While this registry is separate from the “HTTP/2 Settings” registry defined in
<xref target="RFC7540"/>, it is preferable that the assignments parallel each other.  If an
entry is present in only one registry, every effort SHOULD be made to avoid
assigning the corresponding value to an unrelated operation.</t>

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

<t><list style="hanging">
  <t hangText='Name:'>
  A symbolic name for the setting.  Specifying a setting name is optional.</t>
  <t hangText='Code:'>
  The 16-bit code assigned to the setting.</t>
  <t hangText='Specification:'>
  An optional reference to a specification that describes the use of the
setting.</t>
</list></t>

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

<texttable>
      <ttcol align='left'>Setting Name</ttcol>
      <ttcol align='center'>Code</ttcol>
      <ttcol align='left'>Specification</ttcol>
      <c>HEADER_TABLE_SIZE</c>
      <c>0x1</c>
      <c><xref target="settings-parameters"/></c>
      <c>Reserved</c>
      <c>0x2</c>
      <c>N/A</c>
      <c>Reserved</c>
      <c>0x3</c>
      <c>N/A</c>
      <c>Reserved</c>
      <c>0x4</c>
      <c>N/A</c>
      <c>Reserved</c>
      <c>0x5</c>
      <c>N/A</c>
      <c>MAX_HEADER_LIST_SIZE</c>
      <c>0x6</c>
      <c><xref target="settings-parameters"/></c>
</texttable>

</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 16-bit space.  The “HTTP/QUIC
Error Code” registry operates under the “Expert Review” policy
<xref target="RFC8126"/>.</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 16-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>STOPPING</c>
      <c>0x0000</c>
      <c>Reserved by QUIC</c>
      <c><xref target="QUIC-TRANSPORT"/></c>
      <c>HTTP_NO_ERROR</c>
      <c>0x0001</c>
      <c>No error</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_PUSH_REFUSED</c>
      <c>0x0002</c>
      <c>Client refused pushed content</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_INTERNAL_ERROR</c>
      <c>0x0003</c>
      <c>Internal error</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_PUSH_ALREADY_IN_CACHE</c>
      <c>0x0004</c>
      <c>Pushed content already cached</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_REQUEST_CANCELLED</c>
      <c>0x0005</c>
      <c>Data no longer needed</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_HPACK_DECOMPRESSION_FAILED</c>
      <c>0x0006</c>
      <c>HPACK cannot continue</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_CONNECT_ERROR</c>
      <c>0x0007</c>
      <c>TCP reset or error on CONNECT request</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_EXCESSIVE_LOAD</c>
      <c>0x0008</c>
      <c>Peer generating excessive load</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_VERSION_FALLBACK</c>
      <c>0x0009</c>
      <c>Retry over HTTP/2</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_WRONG_STREAM</c>
      <c>0x000A</c>
      <c>A frame was sent on the wrong stream</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_PUSH_LIMIT_EXCEEDED</c>
      <c>0x000B</c>
      <c>Maximum Push ID exceeded</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_DUPLICATE_PUSH</c>
      <c>0x000C</c>
      <c>Push ID was fulfilled multiple times</c>
      <c><xref target="http-error-codes"/></c>
      <c>HTTP_MALFORMED_FRAME</c>
      <c>0x01XX</c>
      <c>Error in frame formatting or use</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="2018" month="January"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-quic-transport-09"/>
</reference>




<reference  anchor="RFC7540" target='https://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='https://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="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<abstract><t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='8174'/>
<seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>



<reference  anchor="RFC5234" target='https://www.rfc-editor.org/info/rfc5234'>
<front>
<title>Augmented BNF for Syntax Specifications: ABNF</title>
<author initials='D.' surname='Crocker' fullname='D. Crocker' role='editor'><organization /></author>
<author initials='P.' surname='Overell' fullname='P. Overell'><organization /></author>
<date year='2008' month='January' />
<abstract><t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='68'/>
<seriesInfo name='RFC' value='5234'/>
<seriesInfo name='DOI' value='10.17487/RFC5234'/>
</reference>



<reference  anchor="RFC7838" target='https://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="RFC6066" target='https://www.rfc-editor.org/info/rfc6066'>
<front>
<title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
<author initials='D.' surname='Eastlake 3rd' fullname='D. Eastlake 3rd'><organization /></author>
<date year='2011' month='January' />
<abstract><t>This document provides specifications for existing TLS extensions.  It is a companion document for RFC 5246, &quot;The Transport Layer Security (TLS) Protocol Version 1.2&quot;.  The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6066'/>
<seriesInfo name='DOI' value='10.17487/RFC6066'/>
</reference>



<reference  anchor="RFC7230" target='https://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='https://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='https://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='https://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='https://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="RFC8126" target='https://www.rfc-editor.org/info/rfc8126'>
<front>
<title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
<author initials='M.' surname='Cotton' fullname='M. Cotton'><organization /></author>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<author initials='T.' surname='Narten' fullname='T. Narten'><organization /></author>
<date year='2017' month='June' />
<abstract><t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t><t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t><t>This is the third edition of this document; it obsoletes RFC 5226.</t></abstract>
</front>
<seriesInfo name='BCP' value='26'/>
<seriesInfo name='RFC' value='8126'/>
<seriesInfo name='DOI' value='10.17487/RFC8126'/>
</reference>




    </references>


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

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

<t>A substantial portion of Mike’s contribution was supported by Microsoft during
his employment there.</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-08" title="Since draft-ietf-quic-http-08">

<t><list style="symbols">
  <t>Clarified connection coalescing rules (#940, #1024)</t>
</list></t>

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

<t><list style="symbols">
  <t>Changes for integer encodings in QUIC (#595,#905)</t>
  <t>Use unidirectional streams as appropriate (#515, #240, #281, #886)</t>
  <t>Improvement to the description of GOAWAY (#604, #898)</t>
  <t>Improve description of server push usage (#947, #950, #957)</t>
</list></t>

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

<t><list style="symbols">
  <t>Track changes in QUIC error code usage (#485)</t>
</list></t>

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

<t><list style="symbols">
  <t>Made push ID sequential, add MAX_PUSH_ID, remove SETTINGS_ENABLE_PUSH (#709)</t>
  <t>Guidance about keep-alive and QUIC PINGs (#729)</t>
  <t>Expanded text on GOAWAY and cancellation (#757)</t>
</list></t>

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

<t><list style="symbols">
  <t>Cite RFC 5234 (#404)</t>
  <t>Return to a single stream per request (#245,#557)</t>
  <t>Use separate frame type and settings registries from HTTP/2 (#81)</t>
  <t>SETTINGS_ENABLE_PUSH instead of SETTINGS_DISABLE_PUSH (#477)</t>
  <t>Restored GOAWAY (#696)</t>
  <t>Identify server push using Push ID rather than a stream ID (#702,#281)</t>
  <t>DATA frames cannot be empty (#700)</t>
</list></t>

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

<t>None.</t>

</section>
<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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
hnMaIdAv+akdIFxpvcJbNSYTWDB2FRaFkm0QLjwBeTfYG+yjpGJt9zt4yROR
Sj6KKQep9KcKiAgoCQ3BBEHF4iu/Itp8RXqCOHv6rGCN4RMAKRkfb9eAuKTB
AIX5TNB1dyvQX4FyIUG+xZPxepl/k+hBmd2lJfkMaRSkW1bqASJwTpTMPeRo
AiLpKK9Y4EEKKs7G5Or6cnj4UcyzvBYiTfgBISIK4vd5RWwPiKfaOf0DJEaD
uJmIYkRXGTT4FZKpiq3+JREVf815TqdzAuIVnvPSQlE+TInU415RUa8IGwSY
uGMFNZ+tM4K9ai2esQX1lJG2z1Iqab63OaMR20Qa8ujuDhFiFsvvynQJJAcE
/axkkWbQCADpmnG1sBM4mcDL0Dkd2TKDv2TSCkRghNkBzR3QHj5i+KnR06kQ
LcZ4cV0v05ywJZ5YsYJIAvxe3BWrYFLa/13ldMvCPOgYaJlenjFDgLpXI3XX
m6VCvRCAgTuZ6N4aoj6+PCuExRm9XBiiKhl1ySYbPPdIbyzLgo0U6yUrNuyR
OL45ujy5Pjk6PL1h5CJFLRNXAJtRGBdpY6x/4eaCW9NrSqwXohI2g6MkC0Yx
UZGNHLLeJzEI7gYhLt96ooPUfDUnt6qYIp/APkEO5EPdaAl6fHCKMkHTudjN
WaJlbbZ2JCjPCIDePiPrE+/vPANZLgzkFSNGWiWUxWi0KiunVg5Zxssej4ou
WTIw1kGsgEflqbe9ZG+fza5VkRTBBgwqCrAP8rExd7EA6cZawslV1TNiCWAs
r5VG87CWyd/wvGGB+FRWkaFFHtnbgwW+ihd4HeH5KC2B2IrfSuEZs5Jw2sRT
gkcLGAihnxemQfxQQWUE2uECveA56z+zFIMYSBEV4VPeQadMXa4WZATpuY0X
JGldEFoNouXNx8PTD+eXH+GCfLg8/Dhk3ycpAPRkH3klrTdJlP6IWKgLBjZU
rpY1CHLzdM1YhqYLlt2dCBq8brY8OKcjBdsuCbVyGDnHAKhJ+i5dVgO2rQUR
Y5ExrMcF0YgqQ6tunUWxEORHFp2N8LMfqJaji51GeJvOHtJ1hZ4ZkcmNfEKz
k4KTMgVToYKIhtNj9pYXktNgiSh0zzJYGK2lraTa+T3pU4sN8KyyWJaI+onH
ejFQooJBdFNgCUDNUcEgctQyPsEHIF6SOMfOXSZRJhqJFe18ngJK4y0Aitbg
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

-->

</rfc>

