<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.8 (Ruby 3.0.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-binary-message-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.5 -->
  <front>
    <title abbrev="Binary HTTP Messages">Binary Representation of HTTP Messages</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-binary-message-03"/>
    <author initials="M." surname="Thomson" fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2022" month="May" day="10"/>
    <area>ART</area>
    <workgroup>HTTP</workgroup>
    <abstract>
      <t>This document defines a binary format for representing HTTP messages.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpbis-binary-message/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTP Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
        Working Group information can be found at <eref target="https://httpwg.org/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/httpwg/http-extensions/labels/binary-messages"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines a simple format for representing an HTTP message
(<xref target="HTTP"/>), either request or response. This allows for the encoding of HTTP
messages that can be conveyed outside of an HTTP protocol. This enables the
transformation of entire messages, including the application of authenticated
encryption.</t>
      <t>The design of this format is informed by the framing structure of HTTP/2
(<xref target="H2"/>) and HTTP/3 (<xref target="H3"/>).  Rules for constructing messages rely on the rules
defined in HTTP/2, but the format itself is distinct; see <xref target="differences"/>.</t>
      <t>This format defines <tt>message/bhttp</tt>, a binary alternative to the <tt>message/http</tt>
content type defined in <xref target="MESSAGING"/>. A binary format permits more efficient
encoding and processing of messages. A binary format also reduces exposure to
security problems related to processing of HTTP messages.</t>
      <t>Two modes for encoding are described:</t>
      <ul spacing="normal">
        <li>a known-length encoding includes length prefixes for all major message
components; and</li>
        <li>an indefinite-length encoding enables efficient generation of messages where
lengths are not known when encoding starts.</li>
      </ul>
      <t>This format is designed to convey the semantics of valid HTTP messages as simply
and efficiently as possible.  It is not designed to capture all of the details
of the encoding of messages from specific HTTP versions (<xref target="MESSAGING"/>, <xref target="H2"/>,
<xref target="H3"/>).  As such, this format is unlikely to be suitable for applications that
depend on an exact recording of the encoding of messages.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>This document uses terminology from HTTP (<xref target="HTTP"/>) and notation from QUIC
(<xref section="1.3" sectionFormat="of" target="QUIC"/>).</t>
    </section>
    <section anchor="format">
      <name>Format</name>
      <t><xref section="6" sectionFormat="of" target="HTTP"/> defines five distinct parts to HTTP messages.  A framing
indicator is added to signal how these parts are composed:</t>
      <ol spacing="normal" type="1"><li>Framing indicator. This format uses a single integer to describe framing, which describes
whether the message is a request or response and how subsequent sections are
formatted; see <xref target="framing"/>.</li>
        <li>For a response, any number of interim responses, each consisting of an
informational status code and header section.</li>
        <li>Control data. For a request, this contains the request method and target.
For a response, this contains the status code.</li>
        <li>Header section.  This contains zero or more header fields.</li>
        <li>Content.  This is a sequence of zero or more bytes.</li>
        <li>Trailer section.  This contains zero or more trailer fields.</li>
        <li>Optional padding. Any amount of zero-valued bytes.</li>
      </ol>
      <t>All lengths and numeric values are encoded using the variable-length integer
encoding from <xref section="16" sectionFormat="of" target="QUIC"/>.  Integer values do not need to be encoded
on the minimum number of bytes necessary.</t>
      <section anchor="known-length-messages">
        <name>Known Length Messages</name>
        <t>A message that has a known length at the time of construction uses the
format shown in <xref target="format-known-length"/>.</t>
        <figure anchor="format-known-length">
          <name>Known-Length Message</name>
          <sourcecode type="quic-format"><![CDATA[
Message with Known-Length {
  Framing Indicator (i) = 0..1,
  Known-Length Informational Response (..) ...,
  Control Data (..),
  Known-Length Field Section (..),
  Known-Length Content (..),
  Known-Length Field Section (..),
  Padding (..),
}

Known-Length Field Section {
  Length (i),
  Field Line (..) ...,
}

Known-Length Content {
  Content Length (i),
  Content (..)
}

Known-Length Informational Response {
  Informational Response Control Data (..),
  Known-Length Field Section (..),
}
]]></sourcecode>
        </figure>
        <t>That is, a known-length message consists of a framing indicator, a block of
control data that is formatted according to the value of the framing indicator,
a header section with a length prefix, binary content with a length prefix, and
a trailer section with a length prefix.</t>
        <t>For a known-length encoding, the length prefix on field sections and content is
a variable-length encoding of an integer.  This integer is the number of bytes
in the field section or content.</t>
        <t>Response messages that contain informational status codes result in a different
structure; see <xref target="informational"/>.  Note that while the Known-Length
Informational Response field is shown in <xref target="format-known-length"/>, it can only
appear in response messages.</t>
        <t>Fields in the header and trailer sections consist of a length-prefixed name and
length-prefixed value; see <xref target="fields"/>.</t>
        <t>The format allows for the message to be truncated before any of the length
prefixes that precede the field sections or content; see <xref target="padding"/>.</t>
        <t>The variable-length integer encoding means that there is a limit of 2^62-1
bytes for each field section and the message content.</t>
      </section>
      <section anchor="indeterminate-length-messages">
        <name>Indeterminate Length Messages</name>
        <t>A message that is constructed without encoding a known length for each section
uses the format shown in <xref target="format-indeterminate-length"/>:</t>
        <figure anchor="format-indeterminate-length">
          <name>Indeterminate-Length Message</name>
          <sourcecode type="quic-format"><![CDATA[
Indeterminate-Length Message  {
  Framing Indicator (i) = 2..3,
  Indeterminate-Length Informational Response (..) ...,
  Control Data (..),
  Indeterminate-Length Field Section (..),
  Indeterminate-Length Content (..) ...,
  Indeterminate-Length Field Section (..),
  Padding (..),
}

Indeterminate-Length Content {
  Indeterminate-Length Content Chunk (..) ...,
  Content Terminator (i) = 0,
}

Indeterminate-Length Content Chunk {
  Chunk Length (i) = 1..,
  Chunk (..)
}

Indeterminate-Length Field Section {
  Field Line (..) ...,
  Content Terminator (i) = 0,
}

Indeterminate-Length Informational Response {
  Informational Response Control Data (..),
  Indeterminate-Length Field Section (..),
}
]]></sourcecode>
        </figure>
        <t>That is, an indeterminate length consists of a framing indicator, a block of
control data that is formatted according to the value of the framing indicator,
a header section that is terminated by a zero value, any number of
non-zero-length chunks of binary content, a zero value, and a trailer section
that is terminated by a zero value.</t>
        <t>The indeterminate-length encoding only uses length prefixes for content blocks.
Multiple length-prefixed portions of content can be included, each prefixed by a
non-zero Chunk Length integer describing the number of bytes in the block.  The
Chunk Length is encoded as a variable-length integer.</t>
        <t>Each Field Line in an Indeterminate-Length Field Section starts with a Name
Length field.  An Indeterminate-Length Field Section ends with a Content
Terminator field.  The zero value of the Content Terminator distinguishes it
from the Name Length field, which cannot contain a value of 0.</t>
        <t>Response messages that contain informational status codes result in a different
structure; see <xref target="informational"/>.  Note that while the Indeterminate-Length
Informational Response field is shown in <xref target="format-indeterminate-length"/>, it can only
appear in response messages.</t>
        <t>Indeterminate-length messages can be truncated in a similar way as known-length
messages; see <xref target="padding"/>.</t>
        <t>Indeterminate-length messages use the same encoding for field lines as
known-length messages; see <xref target="fields"/>.</t>
      </section>
      <section anchor="framing">
        <name>Framing Indicator</name>
        <t>The start of each binary message is a framing indicator that is a single integer that
describes the structure of the subsequent sections. The framing indicator can
take just four values:</t>
        <ul spacing="normal">
          <li>A value of 0 describes a request of known length.</li>
          <li>A value of 1 describes a response of known length.</li>
          <li>A value of 2 describes a request of indeterminate length.</li>
          <li>A value of 3 describes a response of indeterminate length.</li>
        </ul>
        <t>Other values cause the message to be invalid; see <xref target="invalid"/>.</t>
      </section>
      <section anchor="request-control-data">
        <name>Request Control Data</name>
        <t>The control data for a request message contains the method and request target.
That information is encoded as an ordered sequence of fields: Method, Scheme,
Authority, Path. Each of these fields is prefixed with a length.</t>
        <t>The values of these fields follow the rules in HTTP/2 (<xref section="8.3.1" sectionFormat="of" target="H2"/>)
that apply to the <tt>:method</tt>, <tt>:scheme</tt>, <tt>:authority</tt>, and <tt>:path</tt> pseudo-header
fields respectively. However, where the <tt>:authority</tt> pseudo-header field might
be omitted in HTTP/2, a zero-length value is encoded instead.</t>
        <t>The format of request control data is shown in <xref target="format-request-control-data"/>.</t>
        <figure anchor="format-request-control-data">
          <name>Format of Request Control Data</name>
          <sourcecode type="quic-format"><![CDATA[
Request Control Data {
  Method Length (i),
  Method (..),
  Scheme Length (i),
  Scheme (..),
  Authority Length (i),
  Authority (..),
  Path Length (i),
  Path (..),
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="response-control-data">
        <name>Response Control Data</name>
        <t>The control data for a response message consists of the status code. The status
code is encoded as a variable length integer, not a length-prefixed decimal
string.</t>
        <t>The format of final response control data is shown in
<xref target="format-response-control-data"/>.</t>
        <figure anchor="format-response-control-data">
          <name>Format of Final Response Control Data</name>
          <sourcecode type="quic-format"><![CDATA[
Final Response Control Data {
  Status Code (i) = 200..599,
}
]]></sourcecode>
        </figure>
        <section anchor="informational">
          <name>Informational Status Codes</name>
          <t>Responses that include information status codes (see <xref section="15.2" sectionFormat="of" target="HTTP"/>)
are encoded by repeating the response control data and associated header section
until the final status code is encoded.</t>
          <t>The format of the informational response control data is shown in
<xref target="format-informational"/>.</t>
          <figure anchor="format-informational">
            <name>Format of Informational Response Control Data</name>
            <sourcecode type="quic-format"><![CDATA[
Informational Response Control Data {
  Status Code (i) = 100..199,
}
]]></sourcecode>
          </figure>
          <t>A response message can include any number of informational responses that
precede a final status code.  These convey an information status code and a
header block.</t>
          <t>If the response control data includes an informational status code (that is, a
value between 100 and 199 inclusive), the control data is followed by a header
section (encoded with known- or indeterminate- length according to the framing
indicator) and another block of control data.  This pattern repeats until the
control data contains a final status code (200 to 599 inclusive).</t>
        </section>
      </section>
      <section anchor="fields">
        <name>Header and Trailer Field Lines</name>
        <t>Header and trailer sections consist of zero or more field lines; see <xref section="5" sectionFormat="of" target="HTTP"/>. The format of a field section depends on whether the message is
known- or intermediate-length.</t>
        <t>Each field line includes a name and a value. Both the name and value are
length-prefixed sequences of bytes.  The field name length is at least one
byte. The format of a field line is shown in <xref target="format-field-line"/>.</t>
        <figure anchor="format-field-line">
          <name>Format of a Field Line</name>
          <sourcecode type="quic-format"><![CDATA[
Field Line {
  Name Length (i) = 1..,
  Name (..),
  Value Length (i),
  Value (..),
}
]]></sourcecode>
        </figure>
        <t>For field names, byte values that are not permitted in an HTTP field name cause
the message to be invalid; see <xref section="5.1" sectionFormat="of" target="HTTP"/> for a definition of what
is valid and <xref target="invalid"/> for handling of invalid messages.  A recipient <bcp14>MUST</bcp14>
treat a message that contains field values that would cause an HTTP/2 message to
be malformed according to <xref section="8.2.1" sectionFormat="of" target="H2"/> as invalid; see <xref target="invalid"/>.</t>
        <t>The same field name can be repeated in multiple field lines; see <xref section="5.2" sectionFormat="of" target="HTTP"/> for the semantics of repeated field names and rules for combining
values.</t>
        <t>Fields that relate to connections (<xref section="7.6.1" sectionFormat="of" target="HTTP"/>) cannot be used to
produce the effect on a connection in this context.  These fields <bcp14>SHOULD</bcp14> be
removed when constructing a binary message.  However, they do not cause a
message to be invalid (<xref target="invalid"/>); permitting these fields allows a binary
message to capture the content of a messages that are exchanged in a protocol
context.</t>
        <t>Like HTTP/2, this format has an exception for the combination of multiple
instances of the <tt>Cookie</tt> field. Instances of fields with the ASCII-encoded
value of <tt>cookie</tt> are combined using a semicolon octet (0x3b) rather than a
comma; see <xref section="8.2.3" sectionFormat="of" target="H2"/>.</t>
      </section>
      <section anchor="content">
        <name>Content</name>
        <t>The content of messages is a sequence of bytes of any length. Though a
known-length message has a limit, this limit is large enough that it is
unlikely to be a practical limitation. There is no limit to the size of content
in an indeterminate length message.</t>
      </section>
      <section anchor="padding">
        <name>Padding and Truncation</name>
        <t>Messages can be padded with any number of zero-valued bytes.  Non-zero padding
bytes cause a message to be invalid (see <xref target="invalid"/>). Unlike other parts of a
message, a processor <bcp14>MAY</bcp14> decide not to validate the value of padding bytes.</t>
        <t>Truncation can be used to reduce the size of messages that have no data in
trailing field sections or content.  If the trailers of a message is empty, it
<bcp14>MAY</bcp14> be omitted by the encoder in place of adding a length field equal to
zero. An encoder <bcp14>MAY</bcp14> omit empty content in the same way if the trailers are also
empty.  A message that is truncated at any other point is invalid; see
<xref target="invalid"/>.</t>
        <t>Decoders <bcp14>MUST</bcp14> treat missing truncated fields as equivalent to having been sent
with the length field sent to zero.</t>
        <t>Padding is compatible with truncation of empty parts of the messages.
Zero-valued bytes will be interpreted as zero-length part, which is semantically
equivalent to the part being absent.</t>
      </section>
    </section>
    <section anchor="invalid">
      <name>Invalid Messages</name>
      <t>This document describes a number of ways that a message can be invalid. Invalid
messages <bcp14>MUST NOT</bcp14> be processed except to log an error and produce an error
response.</t>
      <t>The format is designed to allow incremental processing. Implementations need to
be aware of the possibility that an error might be detected after performing
incremental processing.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This section includes example requests and responses encoded in both
known-length and indefinite-length forms.</t>
      <section anchor="request-example">
        <name>Request Example</name>
        <t>The example HTTP/1.1 message in <xref target="ex-request"/> shows the content in the
<tt>message/http</tt> format.</t>
        <t>Valid HTTP/1.1 messages require lines terminated with CRLF (the two bytes 0x0a
and 0x0d). For simplicity and consistency, the content of these examples is
limited to text, which also uses CRLF for line endings.</t>
        <figure anchor="ex-request">
          <name>Sample HTTP Request</name>
          <sourcecode type="http-message"><![CDATA[
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi

]]></sourcecode>
        </figure>
        <t>This can be expressed as a binary message (type <tt>message/bhttp</tt>) using a
known-length encoding as shown in hexadecimal in <xref target="ex-bink-request"/>.
<xref target="ex-bink-request"/> view includes some of the text alongside to show that most
of the content is not modified.</t>
        <figure anchor="ex-bink-request">
          <name>Known-Length Binary Encoding of Request</name>
          <artwork type="hex-dump"><![CDATA[
00034745 54056874 74707300 0a2f6865  ..GET.https../he
6c6c6f2e 74787440 6c0a7573 65722d61  llo.txt@l.user-a
67656e74 34637572 6c2f372e 31362e33  gent4curl/7.16.3
206c6962 6375726c 2f372e31 362e3320   libcurl/7.16.3
4f70656e 53534c2f 302e392e 376c207a  OpenSSL/0.9.7l z
6c69622f 312e322e 3304686f 73740f77  lib/1.2.3.host.w
77772e65 78616d70 6c652e63 6f6d0f61  ww.example.com.a
63636570 742d6c61 6e677561 67650665  ccept-language.e
6e2c206d 690000                      n, mi..
]]></artwork>
        </figure>
        <t>This example shows that the Host header field is not replicated in the
:authority field, as is required for ensuring that the request is reproduced
accurately; see <xref section="8.3.1" sectionFormat="of" target="H2"/>.</t>
        <t>The same message can be truncated with no effect on interpretation. In this
case, the last two bytes - corresponding to content and a trailer section - can
each be removed without altering the semantics of the message.</t>
        <t>The same message, encoded using an indefinite-length encoding is shown in
<xref target="ex-bini-request"/>. As the content of this message is empty, the difference in
formats is negligible.</t>
        <figure anchor="ex-bini-request">
          <name>Indefinite-Length Binary Encoding of Request</name>
          <artwork type="hex-dump"><![CDATA[
02034745 54056874 74707300 0a2f6865  ..GET.https../he
6c6c6f2e 7478740a 75736572 2d616765  llo.txt.user-age
6e743463 75726c2f 372e3136 2e33206c  nt4curl/7.16.3 l
69626375 726c2f37 2e31362e 33204f70  ibcurl/7.16.3 Op
656e5353 4c2f302e 392e376c 207a6c69  enSSL/0.9.7l zli
622f312e 322e3304 686f7374 0f777777  b/1.2.3.host.www
2e657861 6d706c65 2e636f6d 0f616363  .example.com.acc
6570742d 6c616e67 75616765 06656e2c  ept-language.en,
206d6900 00000000 00000000 00000000   mi.............
]]></artwork>
        </figure>
        <t>This indefinite-length encoding contains 10 bytes of padding.  As two additional
bytes can be truncated in the same way as the known-length example, anything up
to 12 bytes can be removed from this message without affecting its meaning.</t>
      </section>
      <section anchor="response-example">
        <name>Response Example</name>
        <t>Response messages can contain interim (1xx) status codes as the message in
<xref target="ex-response"/> shows. <xref target="ex-response"/> includes examples of informational
status codes defined in <xref target="RFC2518"/> and <xref target="RFC8297"/>.</t>
        <figure anchor="ex-response">
          <name>Sample HTTP Response</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 102 Processing
Running: "sleep 15"

HTTP/1.1 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: </script.js>; rel=preload; as=script

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

Hello World! My content includes a trailing CRLF.

]]></sourcecode>
        </figure>
        <t>As this is a longer example, only the indefinite-length encoding is shown in
<xref target="ex-bini-response"/>. Note here that the specific text used in the reason
phrase is not retained by this encoding.</t>
        <figure anchor="ex-bini-response">
          <name>Binary Response including Interim Responses</name>
          <artwork type="hex-dump"><![CDATA[
03406607 72756e6e 696e670a 22736c65  .@f.running."sle
65702031 35220040 67046c69 6e6b233c  ep 15".@g.link#<
2f737479 6c652e63 73733e3b 2072656c  /style.css>; rel
3d707265 6c6f6164 3b206173 3d737479  =preload; as=sty
6c65046c 696e6b24 3c2f7363 72697074  le.link$</script
2e6a733e 3b207265 6c3d7072 656c6f61  .js>; rel=preloa
643b2061 733d7363 72697074 0040c804  d; as=script.@..
64617465 1d4d6f6e 2c203237 204a756c  date.Mon, 27 Jul
20323030 39203132 3a32383a 35332047   2009 12:28:53 G
4d540673 65727665 72064170 61636865  MT.server.Apache
0d6c6173 742d6d6f 64696669 65641d57  .last-modified.W
65642c20 3232204a 756c2032 30303920  ed, 22 Jul 2009
31393a31 353a3536 20474d54 04657461  19:15:56 GMT.eta
67142233 34616133 38372d64 2d313536  g."34aa387-d-156
38656230 30220d61 63636570 742d7261  8eb00".accept-ra
6e676573 05627974 65730e63 6f6e7465  nges.bytes.conte
6e742d6c 656e6774 68023531 04766172  nt-length.51.var
790f4163 63657074 2d456e63 6f64696e  y.Accept-Encodin
670c636f 6e74656e 742d7479 70650a74  g.content-type.t
6578742f 706c6169 6e003348 656c6c6f  ext/plain.3Hello
20576f72 6c642120 4d792063 6f6e7465   World! My conte
6e742069 6e636c75 64657320 61207472  nt includes a tr
61696c69 6e672043 524c462e 0d0a0000  ailing CRLF.....
]]></artwork>
        </figure>
        <t>A response that uses the chunked encoding (see <xref section="7.1" sectionFormat="of" target="MESSAGING"/>) as
shown for <xref target="ex-chunked"/> can be encoded using indefinite-length encoding, which
minimizes buffering needed to translate into the binary format. However, chunk
boundaries do not need to be retained and any chunk extensions cannot be
conveyed using the binary format; see <xref target="differences"/>.</t>
        <figure anchor="ex-chunked">
          <name>Chunked Encoding Example</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Transfer-Encoding: chunked

4
This
6
 conte
13;chunk-extension=foo
nt contains CRLF.

0
Trailer: text

]]></sourcecode>
        </figure>
        <t><xref target="ex-bink-chunked"/> shows this message using the known-length coding. Note that
the transfer-encoding header field is removed.</t>
        <figure anchor="ex-bink-chunked">
          <name>Known-Length Encoding of Response</name>
          <artwork type="hex-dump"><![CDATA[
0140c800 1d546869 7320636f 6e74656e  .@...This conten
7420636f 6e746169 6e732043 524c462e  t contains CRLF.
0d0a0d07 74726169 6c657204 74657874  ....trailer.text
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="differences">
      <name>Notable Differences with HTTP Protocol Messages</name>
      <t>This format is designed to carry HTTP semantics just like HTTP/1.1, HTTP/2, or
HTTP/3 (<xref target="MESSAGING"/>, <xref target="H2"/>, <xref target="H3"/>).  However, there are some notable
differences between this format and the format used in an interactive protocol
version.</t>
      <t>In particular, as a standalone representation, this format lacks the following
features of the formats used in those protocols:</t>
      <ul spacing="normal">
        <li>chunk extensions (<xref section="7.1.1" sectionFormat="of" target="MESSAGING"/>) and transfer encoding
(<xref section="6.1" sectionFormat="of" target="MESSAGING"/>) from HTTP/1.1</li>
        <li>generic framing and extensibility capabilities</li>
        <li>field blocks other than a single header and trailer field block</li>
        <li>carrying reason phrases in responses (<xref section="4" sectionFormat="of" target="MESSAGING"/>)</li>
        <li>header compression (<xref target="HPACK"/>, <xref target="QPACK"/>)</li>
        <li>framing of responses that depends on the corresponding request (such as HEAD)
or the value of the status code (such as 204 or 304); these responses use the
same framing as all other messages</li>
      </ul>
      <t>Some of these features are also absent in HTTP/2 and HTTP/3.</t>
      <t>Unlike HTTP/2 and HTTP/3, this format uses a a fixed format for control data
rather than using pseudo-fields.  Messages are invalid (<xref target="invalid"/>) if they
contain fields named <tt>:method</tt>, <tt>:scheme</tt>, <tt>:authority</tt>, <tt>:path</tt>, or <tt>:status</tt>.
Other pseudo-fields that are defined by protocol extensions <bcp14>MAY</bcp14> be included;
pseudo-fields cannot be included in trailers (see <xref section="8.1" sectionFormat="of" target="H2"/>).  Field
lines containing pseudo-fields <bcp14>MUST</bcp14> precede other field lines.  A message that
contains a pseudo-field after any other field is invalid; see <xref target="invalid"/>.</t>
      <t>Note that while some messages - CONNECT or upgrade requests in particular - can
be represented using this format, doing so serves no purpose as these requests
are used to affect protocol behavior, which this format cannot do without
additional mechanisms.</t>
    </section>
    <section anchor="media-type">
      <name>"message/bhttp" Media Type</name>
      <t>The <tt>message/bhttp</tt> media type can be used to enclose a single HTTP request or
response message, provided that it obeys the MIME restrictions for all
"message" types regarding line length and encodings.</t>
      <dl>
        <dt>Type name:</dt>
        <dd>
          <t>message</t>
        </dd>
        <dt>Subtype name:</dt>
        <dd>
          <t>bhttp</t>
        </dd>
        <dt>Required parameters:</dt>
        <dd>
          <t>N/A</t>
        </dd>
        <dt>Optional parameters:</dt>
        <dd>
          <t>None</t>
        </dd>
        <dt>Encoding considerations:</dt>
        <dd>
          <t>only "8bit" or "binary" is permitted</t>
        </dd>
        <dt>Security considerations:</dt>
        <dd>
          <t>see <xref target="security"/></t>
        </dd>
        <dt>Interoperability considerations:</dt>
        <dd>
          <t>N/A</t>
        </dd>
        <dt>Published specification:</dt>
        <dd>
          <t>this specification</t>
        </dd>
        <dt>Applications that use this media type:</dt>
        <dd>
          <t>N/A</t>
        </dd>
        <dt>Fragment identifier considerations:</dt>
        <dd>
          <t>N/A</t>
        </dd>
        <dt>Additional information:</dt>
        <dd>
          <dl>
            <dt>Magic number(s):</dt>
            <dd>N/A</dd>
            <dt>Deprecated alias names for this type:</dt>
            <dd>N/A</dd>
            <dt>File extension(s):</dt>
            <dd>N/A</dd>
            <dt>Macintosh file type code(s):</dt>
            <dd>N/A</dd>
          </dl>
        </dd>
        <dt>Person and email address to contact for further information:</dt>
        <dd>
          <t>see Authors' Addresses section</t>
        </dd>
        <dt>Intended usage:</dt>
        <dd>
          <t>COMMON</t>
        </dd>
        <dt>Restrictions on usage:</dt>
        <dd>
          <t>N/A</t>
        </dd>
        <dt>Author:</dt>
        <dd>
          <t>see Authors' Addresses section</t>
        </dd>
        <dt>Change controller:</dt>
        <dd>
          <t>IESG</t>
        </dd>
      </dl>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Many of the considerations that apply to HTTP message handling apply to this
format; see <xref section="17" sectionFormat="of" target="HTTP"/> and <xref section="11" sectionFormat="of" target="MESSAGING"/> for common
issues in handling HTTP messages.</t>
      <t>Strict parsing of the format with no tolerance for errors can help avoid a
number of attacks. However, implementations still need to be aware of the
possibility of resource exhaustion attacks that might arise from receiving
large messages, particularly those with large numbers of fields.</t>
      <t>Implementations need to ensure that they aren't subject to resource exhaustion
attack from a maliciously crafted message.  Overall, the format is designed to
allow for minimal state when processing messages.  However, producing a combined
field value (<xref section="5.2" sectionFormat="of" target="HTTP"/>) for fields might require the commitment of
resources.  In particular, combining might be necessary for the <tt>Cookie</tt> field
when translating this format for use in other contexts, such as use in an API or
translation to HTTP/1.1 <xref target="MESSAGING"/>, where the recipient of the field might
not expect multiple values.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to add the "Media Types" registry at
<eref target="https://www.iana.org/assignments/media-types"/> with the registration
information in <xref target="media-type"/> for the media type "message/bhttp".</t>
    </section>
  </middle>
  <back>
    <displayreference target="MESSAGING" to="HTTP/1.1"/>
    <displayreference target="H2" to="HTTP/2"/>
    <displayreference target="H3" to="HTTP/3"/>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="Roy T. Fielding">
              <organization>Adobe</organization>
            </author>
            <author fullname="Mark Nottingham">
              <organization>Fastly</organization>
            </author>
            <author fullname="Julian Reschke">
              <organization>greenbytes GmbH</organization>
            </author>
            <date day="12" month="September" year="2021"/>
            <abstract>
              <t>   The Hypertext Transfer Protocol (HTTP) is a stateless application-
   level protocol for distributed, collaborative, hypertext information
   systems.  This document describes the overall architecture of HTTP,
   establishes common terminology, and defines aspects of the protocol
   that are shared by all versions.  In this definition are core
   protocol elements, extensibility mechanisms, and the "http" and
   "https" Uniform Resource Identifier (URI) schemes.

   This document updates RFC 3864 and obsoletes RFC 2818, RFC 7231, RFC
   7232, RFC 7233, RFC 7235, RFC 7538, RFC 7615, RFC 7694, and portions
   of RFC 7230.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-semantics-19"/>
        </reference>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol.  QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances.  Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <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">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="MESSAGING">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="Roy T. Fielding">
              <organization>Adobe</organization>
            </author>
            <author fullname="Mark Nottingham">
              <organization>Fastly</organization>
            </author>
            <author fullname="Julian Reschke">
              <organization>greenbytes GmbH</organization>
            </author>
            <date day="12" month="September" year="2021"/>
            <abstract>
              <t>   The Hypertext Transfer Protocol (HTTP) is a stateless application-
   level protocol for distributed, collaborative, hypertext information
   systems.  This document specifies the HTTP/1.1 message syntax,
   message parsing, connection management, and related security
   concerns.

   This document obsoletes portions of RFC 7230.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-messaging-19"/>
        </reference>
        <reference anchor="H2">
          <front>
            <title>HTTP/2</title>
            <author fullname="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Cory Benfield">
              <organization>Apple Inc.</organization>
            </author>
            <date day="24" month="January" year="2022"/>
            <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 latency by introducing field compression and
   allowing multiple concurrent exchanges on the same connection.

   This document obsoletes RFC 7540 and RFC 8740.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-http2bis-07"/>
        </reference>
        <reference anchor="H3">
          <front>
            <title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title>
            <author fullname="Mike Bishop">
              <organization>Akamai</organization>
            </author>
            <date day="2" month="February" year="2021"/>
            <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 HTTP/3.

DO NOT DEPLOY THIS VERSION OF HTTP

   DO NOT DEPLOY THIS VERSION OF HTTP/3 UNTIL IT IS IN AN RFC.  This
   version is still a work in progress.  For trial deployments, please
   use earlier versions.

Note to Readers

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

   Working Group information can be found at https://github.com/quicwg;
   source code and issues list for this draft can be found at
   https://github.com/quicwg/base-drafts/labels/-http.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-http-34"/>
        </reference>
        <reference anchor="RFC2518">
          <front>
            <title>HTTP Extensions for Distributed Authoring -- WEBDAV</title>
            <author fullname="Y. Goland" initials="Y." surname="Goland">
              <organization/>
            </author>
            <author fullname="E. Whitehead" initials="E." surname="Whitehead">
              <organization/>
            </author>
            <author fullname="A. Faizi" initials="A." surname="Faizi">
              <organization/>
            </author>
            <author fullname="S. Carter" initials="S." surname="Carter">
              <organization/>
            </author>
            <author fullname="D. Jensen" initials="D." surname="Jensen">
              <organization/>
            </author>
            <date month="February" year="1999"/>
            <abstract>
              <t>This document specifies a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, namespace manipulation, and resource locking (collision avoidance).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2518"/>
          <seriesInfo name="DOI" value="10.17487/RFC2518"/>
        </reference>
        <reference anchor="RFC8297">
          <front>
            <title>An HTTP Status Code for Indicating Hints</title>
            <author fullname="K. Oku" initials="K." surname="Oku">
              <organization/>
            </author>
            <date month="December" year="2017"/>
            <abstract>
              <t>This memo introduces an informational HTTP status code that can be used to convey hints that help a client make preparations for processing the final response.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8297"/>
          <seriesInfo name="DOI" value="10.17487/RFC8297"/>
        </reference>
        <reference anchor="HPACK">
          <front>
            <title>HPACK: Header Compression for HTTP/2</title>
            <author fullname="R. Peon" initials="R." surname="Peon">
              <organization/>
            </author>
            <author fullname="H. Ruellan" initials="H." surname="Ruellan">
              <organization/>
            </author>
            <date month="May" year="2015"/>
            <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="QPACK">
          <front>
            <title>QPACK: Header Compression for HTTP/3</title>
            <author fullname="Charles 'Buck' Krasic">
              <organization>Netflix</organization>
            </author>
            <author fullname="Mike Bishop">
              <organization>Akamai Technologies</organization>
            </author>
            <author fullname="Alan Frindell">
              <organization>Facebook</organization>
            </author>
            <date day="2" month="February" year="2021"/>
            <abstract>
              <t>   This specification defines QPACK, a compression format for
   efficiently representing HTTP fields, to be used in HTTP/3.  This is
   a variation of HPACK compression that seeks to reduce head-of-line
   blocking.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qpack-21"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t><contact fullname="Julian Reschke"/>, <contact fullname="David Schinazi"/>, <contact fullname="Lucas Pardue"/> and <contact fullname="Tommy Pauly"/> provided
excellent feedback on both the design and its documentation.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA81d63LbypH+P08xkbdq7ZQI8SbS5rnkKLJ9rI1lO5ZOUtnU
bhkkhhJikGAAULKOy3mWfZZ9su2ve2YwA1I6Pqn9kZPaMgXMpaenL1/39GB7
vZ5q8qYwM33w+3ydVnf6vdlUpjbrJm3ycq3LpX51eflOn5u6Tq9MfaDS+bwy
NzNt20dvVVYu1umKhsuqdNn0ctMse9dNs5nndW/OHXoradvrj9QibcxVWd3N
dN1kKq1MOtMn7y/VbVl9vKrK7WbGw6sbs96amdI6fKh1c7ehmf5MjfP1lf4R
7+jpdYn5MWk9OzrCv7dXSVldHdG7VZoXM+2p6t1e/XA7wkt6l1aL67ZfkddN
ncjLoxN6ld+Y+ujddl7ki6NwAAxbmU3Zdr3Km+vtPFmUKzs7/9Mznxqzromn
9VGRzk1RH8UMqZV07OV1vTU9bjPT3Tb1dr6iBjTMJa/+7MXlS0W7MVIq3TbX
ZQU29ej/tM7X9UyfJ/qSOFKXa34mm3OeVk2+jl7QMul5+XNeFCk/MMKrVfND
Ud6SOFTl5i5ZmyYe/jQ5SWgHyiwY/fS6IuaVm2tT6fAtT3FalNtsWdBeh7Ms
0tsfrk26oX2c58R3zKPWZbUiIbzhnceW02p7z5NIpmoaYN3ki5qa/PGns9OZ
fv/y9Fm/31cqXy/DAc5fXFyc/Hj25scZT/zdnsGEyUQDt8jyelOkdyJtR4Nk
ACqG9/fGv0P6safzEF1Hu13/vs0X3G9PH9pQ1ev1dDqvmypdED8ur/Nak4Jt
V7QdOjPLfG1qnVoR0bJa/AN5FB2GXrCCOvlJ7KirPMsKo9QjfYatzbYLaPv9
c9T5alOYe+dI19E06vHnz/j7y5cnh9qQVBu0//vW1I3mrvWG1MBANGm6tCAJ
q3lQaqnNelFmGNSaHuVop7c094Lmmhu9KNc35s5kutw2dZ4ZtHZUbKqyKRdl
Ycc363RecHejiJXr2sqFWDesoDKeQYck14tiywSAmnSzIY33raFj6AHLlSki
tbrb4F0C1hliWJ1fccMGM1t20S8RRiJ3fsfDLqt0hSlob4n128q41ZKsgHlD
Yh2tJ7OyoPFsRM8Srd9vsRhwi3gg/TGS51JlijtN1GKaCm2VbGNGRNgpDvV8
2wgdlsKmNsUShJIQ0nCL5htdG6M/f87y5dJUtFBTf/mSWAGxvZx4fLBzH80h
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
ubyxaYtTpSJF/R8LTcJTP2MAAA==

-->

</rfc>
