<?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.10 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-binary-message-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.10 -->
  <front>
    <title abbrev="Binary HTTP Messages">Binary Representation of HTTP Messages</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-binary-message-05"/>
    <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="June" day="09"/>
    <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 indeterminate-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 informational 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 request or response 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[
Request with Known-Length {
  Framing Indicator (i) = 0,
  Request Control Data (..),
  Known-Length Field Section (..),
  Known-Length Content (..),
  Known-Length Field Section (..),
  Padding (..),
}

Response with Known-Length {
  Framing Indicator (i) = 1,
  Known-Length Informational Response (..) ...,
  Final 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>A known-length request consists of a framing indicator (<xref target="framing"/>), request
control data (<xref target="request-control"/>), a header section with a length prefix,
binary content with a length prefix, a trailer section with a length prefix, and
padding.</t>
        <t>A known-length response contains the same fields, with the exception that
request control data is replaced by zero or more informational responses
(<xref target="informational"/>) followed by response control data (<xref target="response-control"/>).</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, not including the length field itself.</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 request or response 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 Request  {
  Framing Indicator (i) = 2,
  Request Control Data (..),
  Indeterminate-Length Field Section (..),
  Indeterminate-Length Content (..),
  Indeterminate-Length Field Section (..),
  Padding (..),
}

Indeterminate-Length Response  {
  Framing Indicator (i) = 3,
  Indeterminate-Length Informational Response (..) ...,
  Final 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>An indeterminate-length request consists of a framing indicator (<xref target="framing"/>),
request control data (<xref target="request-control"/>), a header section that is terminated
by a zero value, any number of non-zero-length chunks of binary content, a zero
value, a trailer section that is terminated by a zero value, and padding.</t>
        <t>An indeterminate-length response contains the same fields, with the exception
that request control data is replaced by zero or more informational responses
(<xref target="informational"/>) and response control data (<xref target="response-control"/>).</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>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">
        <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">
        <name>Response Control Data</name>
        <t>The control data for a response message consists of the status code. The status
code (<xref section="15" sectionFormat="of" target="HTTP"/>) 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 informational status codes (see <xref section="15.2" sectionFormat="of" target="HTTP"/>)
are encoded by repeating the response control data and associated header section
until a final response control data is encoded.  The status code distinguishes
between informational and final responses.</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 informational 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 indeterminate-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>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>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 messages that are exchanged in a protocol context.</t>
        <t>Like HTTP/2 or HTTP/3, 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 further 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"/> includes 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
<tt>:authority</tt> 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 Informational 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 fixed format for control data
rather than using pseudo-fields.</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="H2" to="HTTP/2"/>
    <displayreference target="MESSAGING" to="HTTP/1.1"/>
    <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 RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 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="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 RFCs 7540 and 8740.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-http2bis-07"/>
        </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="H3">
          <front>
            <title>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.
              </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: Field 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 that is 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:
H4sIAAAAAAAAA81963LcOJLufzwFVt6ItSdUVN3LVl+2NbLc1o5le231TszZ
2BNmFVESx6xiDcmyrHZ4nmWf5TzZyS8TAAFWlcY9MRux7uiwRBJAIpGXLxMJ
uNfrqSZvCnOqj36fr9PqXr8zm8rUZt2kTV6udbnUL6+v3+orU9fpjamPVDqf
V+bTqbbfR29VVi7W6Yq6y6p02fRy0yx7t02zmed1b84Neiv5ttefqEXamJuy
uj/VdZOptDLpqT57d63uyurjTVVuN6fcvfpk1ltzqrQOH2rd3G9opD/Sx/n6
Rv+Md/T0tsT4GLQ+PTnB33c3SVndnNC7VZoXp9pT1bu7+eluhJf0Lq0Wt227
Iq+bOpGXJ2f0Kv9k6pO323mRL07CDtBtZTZl2/Qmb26382RRruzo/FfPfG7M
uiae1idFOjdFfRIzpFbSsJfX9db0+JtT3f2m3s5X9AF1c82zv7y4fqFoNUZK
pdvmtqzAph79r3W+rk/1VaKviSN1ueZnsjhXadXk6+gFTZOel7/mRZHyAyO8
WjU/FeUdiUNVbu6TtWni7s+Ts4RWoMyC3s9vK2Jeubk1lQ7f8hDnRbnNlgWt
dTjKIr376dakG1rHeU58xzhqXVYrEsJPvPJYcppt73kSyVRNHaybfFHTJ//+
y+X5qX734vxZv99Hk+Epj/HDnnb4e0g/8AdZXm+K9F7k6mSoVL5ehmNfXbx/
f/bz5eufD/cn60Pk7+lwkAxAzWi39V+2+YK72NOKFlT1ej2dzuumShfEj+vb
vNakYNsVLYfOzDJfm1qnVkS0kIy/II+iw9ALVlAnP4ntdZVnWWGUeqQvsbTZ
dgFtPzxGna82hTk4RrqOhlGPv3zB71+/PjnWhqTa4Pu/bE3daG5ab0gNDEST
hksLkrCaO6UvtVkvygydWtOjHO30lsZe0Fhzoxfl+pO5N5kut02dZwZfOyo2
VdmUi7Kw/Zt1Oi+4uVHEynVtF1esG2ZQGc+gY5LrRbFlAkBNutmQxvuvoWNo
AcuVKSK1ut/gXQLWGWJYnd/whw1Gtuyin0SiiNz5PXe7rNIVhqC1JdZvK+Nm
S+IH5g2JdTSfzMqCxrMRPUu0frfFZMAt4oG0R0+eS5Up7jVRi2EqfKtkGTMi
wg5xrOfbRuiwFDa1KZYglISQuls03+naGP3lS5Yvl6aiiZr669fECoht5cTj
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

-->

</rfc>
