rfc9297.original.xml | rfc9297.xml | |||
---|---|---|---|---|
<?xml version='1.0' encoding='utf-8'?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc [ | <!DOCTYPE rfc [ | |||
<!ENTITY nbsp " "> | <!ENTITY nbsp " "> | |||
<!ENTITY zwsp "​"> | <!ENTITY zwsp "​"> | |||
<!ENTITY nbhy "‑"> | <!ENTITY nbhy "‑"> | |||
<!ENTITY wj "⁠"> | <!ENTITY wj "⁠"> | |||
]> | ]> | |||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | |||
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.11 (Ruby 3.1. | ||||
2) --> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | |||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | -ietf-masque-h3-datagram-latest" category="std" consensus="true" submissionType= | |||
-ietf-masque-h3-datagram-11" category="std" consensus="true" submissionType="IET | "IETF" number="9297" tocInclude="true" sortRefs="true" symRefs="true" version="3 | |||
F" tocInclude="true" sortRefs="true" symRefs="true" version="3"> | "> | |||
<!-- xml2rfc v2v3 conversion 3.12.10 --> | ||||
<link href="https://datatracker.ietf.org/doc/draft-ietf-masque-h3-datagram-lat | ||||
est" rel="prev"/> | ||||
<front> | <front> | |||
<title abbrev="HTTP Datagrams">HTTP Datagrams and the Capsule Protocol</titl e> | <title abbrev="HTTP Datagrams">HTTP Datagrams and the Capsule Protocol</titl e> | |||
<seriesInfo name="Internet-Draft" value="draft-ietf-masque-h3-datagram-11"/> | <seriesInfo name="RFC" value="9297"/> | |||
<author initials="D." surname="Schinazi" fullname="David Schinazi"> | <author initials="D." surname="Schinazi" fullname="David Schinazi"> | |||
<organization>Google LLC</organization> | <organization>Google LLC</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>1600 Amphitheatre Parkway</street> | <street>1600 Amphitheatre Parkway</street> | |||
<city>Mountain View</city> | <city>Mountain View</city> | |||
<region>CA</region> | <region>CA</region> | |||
<code>94043</code> | <code>94043</code> | |||
<country>United States of America</country> | <country>United States of America</country> | |||
</postal> | </postal> | |||
<email>dschinazi.ietf@gmail.com</email> | <email>dschinazi.ietf@gmail.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials="L." surname="Pardue" fullname="Lucas Pardue"> | <author initials="L." surname="Pardue" fullname="Lucas Pardue"> | |||
<organization>Cloudflare</organization> | <organization>Cloudflare</organization> | |||
<address> | <address> | |||
<email>lucaspardue.24.7@gmail.com</email> | <email>lucaspardue.24.7@gmail.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date year="2022" month="June" day="17"/> | <date year="2022" month="August"/> | |||
<area>Transport</area> | <area>Transport</area> | |||
<workgroup>MASQUE</workgroup> | <workgroup>MASQUE</workgroup> | |||
<keyword>quic</keyword> | <keyword>quic</keyword> | |||
<keyword>http</keyword> | <keyword>http</keyword> | |||
<keyword>datagram</keyword> | <keyword>datagram</keyword> | |||
<keyword>fast</keyword> | <keyword>fast</keyword> | |||
<keyword>tunnels</keyword> | <keyword>tunnels</keyword> | |||
<keyword>turtles all the way down</keyword> | <keyword>turtles all the way down</keyword> | |||
<keyword>masque</keyword> | <keyword>masque</keyword> | |||
<keyword>http-ng</keyword> | <keyword>http-ng</keyword> | |||
<abstract> | <abstract> | |||
<t>This document describes HTTP Datagrams, a convention for conveying mult iplexed, | <t>This document describes HTTP Datagrams, a convention for conveying mult iplexed, | |||
potentially unreliable datagrams inside an HTTP connection.</t> | potentially unreliable datagrams inside an HTTP connection.</t> | |||
<t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRA M | <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRA M | |||
extension. When the QUIC DATAGRAM frame is unavailable or undesirable, they can | extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP | |||
be sent using the Capsule Protocol, a more general convention for conveying data | Datagrams can be sent using the Capsule Protocol, which is a more general | |||
in HTTP connections.</t> | convention for conveying data in HTTP connections.</t> | |||
<t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP ex tensions, | <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP ex tensions, | |||
not applications.</t> | not applications.</t> | |||
</abstract> | </abstract> | |||
<note removeInRFC="true"> | ||||
<name>About This Document</name> | ||||
<t> | ||||
The latest revision of this draft can be found at <eref target="https:// | ||||
ietf-wg-masque.github.io/draft-ietf-masque-h3-datagram/draft-ietf-masque-h3-data | ||||
gram.html"/>. | ||||
Status information for this document may be found at <eref target="https | ||||
://datatracker.ietf.org/doc/draft-ietf-masque-h3-datagram/"/>. | ||||
</t> | ||||
<t> | ||||
Discussion of this document takes place on the | ||||
MASQUE Working Group mailing list (<eref target="mailto:masque@ietf.org" | ||||
/>), | ||||
which is archived at <eref target="https://mailarchive.ietf.org/arch/bro | ||||
wse/masque/"/>. | ||||
</t> | ||||
<t>Source for this draft and an issue tracker can be found at | ||||
<eref target="https://github.com/ietf-wg-masque/draft-ietf-masque-h3-dat | ||||
agram"/>.</t> | ||||
</note> | ||||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="intro"> | <section anchor="intro"> | |||
<name>Introduction</name> | <name>Introduction</name> | |||
<t>HTTP extensions (as defined in <xref section="16" sectionFormat="of" ta rget="HTTP"/>) sometimes need | <t>HTTP extensions (as defined in <xref section="16" sectionFormat="of" ta rget="RFC9110"/>) sometimes need | |||
to access underlying transport protocol features such as unreliable delivery (as | to access underlying transport protocol features such as unreliable delivery (as | |||
offered by <xref target="DGRAM"/>) to enable desirable features. For example, th | offered by <xref target="RFC9221"/>) to enable desirable features. For example, | |||
is | this could allow for the introduction of an unreliable version of the CONNECT | |||
could allow introducing an unreliable version of the CONNECT method, or adding | method and the addition of unreliable delivery to WebSockets | |||
unreliable delivery to WebSockets <xref target="WEBSOCKET"/>.</t> | <xref target="RFC6455"/>.</t> | |||
<t>In <xref target="datagrams"/>, this document describes HTTP Datagrams, | <t>In <xref target="datagrams"/>, this document describes HTTP Datagrams, | |||
a convention that | a convention | |||
supports the bidirectional and optionally multiplexed exchange of data inside an | for conveying bidirectional and potentially unreliable datagrams inside | |||
HTTP connection. While HTTP Datagrams are associated with HTTP requests, they | an HTTP connection, with multiplexing when possible. While HTTP Datagrams are a | |||
are not part of message content; instead, they are intended for use by HTTP | ssociated with HTTP requests, they | |||
extensions (such as the CONNECT method), and are compatible with all versions of | are not a part of message content. Instead, they are intended for use by HTTP | |||
extensions (such as the CONNECT method) and are compatible with all versions of | ||||
HTTP.</t> | HTTP.</t> | |||
<t>When HTTP is running over a transport protocol that supports unreliable delivery | <t>When HTTP is running over a transport protocol that supports unreliable delivery | |||
(such as when the QUIC DATAGRAM extension <xref target="DGRAM"/> is available to | (such as when the QUIC DATAGRAM extension <xref target="RFC9221"/> is available | |||
HTTP/3 | to HTTP/3 | |||
<xref target="H3"/>), HTTP Datagrams can use that capability.</t> | <xref target="RFC9114"/>), HTTP Datagrams can use that capability.</t> | |||
<t>This document also describes the HTTP Capsule Protocol in <xref target= | <t>In <xref target="capsule"/>, this document describes the HTTP Capsule P | |||
"capsule"/>, to allow | rotocol, which allows the conveyance of HTTP Datagrams using reliable delivery. | |||
conveyance of HTTP Datagrams using reliable delivery. This addresses HTTP/3 | This addresses HTTP/3 cases where | |||
cases where use of the QUIC DATAGRAM frame is unavailable or undesirable, or | use of the QUIC DATAGRAM frame is unavailable or undesirable or where the | |||
where the transport protocol only provides reliable delivery, such as with | transport protocol only provides reliable delivery, such as with HTTP/1.1 <xref | |||
HTTP/1.1 <xref target="H1"/> or HTTP/2 <xref target="H2"/> over TCP <xref target | target="RFC9112"/> | |||
="TCP"/>.</t> | or HTTP/2 <xref target="RFC9113"/> over TCP <xref target="RFC0793"/>.</t> | |||
<section anchor="defs"> | <section anchor="defs"> | |||
<name>Conventions and Definitions</name> | <name>Conventions and Definitions</name> | |||
<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp 14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp 14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECO MMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECO MMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be i nterpreted as | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be i nterpreted as | |||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they | |||
appear in all capitals, as shown here.</t> | appear in all capitals, as shown here.</t> | |||
<t>This document uses terminology from <xref target="QUIC"/>.</t> | <t>This document uses terminology from <xref target="RFC9000"/>.</t> | |||
<t>Where this document defines protocol types, the definition format use s the | <t>Where this document defines protocol types, the definition format use s the | |||
notation from <xref section="1.3" sectionFormat="of" target="QUIC"/>. Where fiel | notation from <xref section="1.3" sectionFormat="of" target="RFC9000"/>. Where f | |||
ds within types are integers, | ields within types are integers, | |||
they are encoded using the variable-length integer encoding from <xref section=" | they are encoded using the variable-length integer encoding from <xref section=" | |||
16" sectionFormat="of" target="QUIC"/>. Integer values do not need to be encoded | 16" sectionFormat="of" target="RFC9000"/>. Integer values do not need to be enco | |||
on the minimum number of bytes | ded on the minimum number of bytes | |||
necessary.</t> | necessary.</t> | |||
<t>In this document, the term "intermediary" refers to an HTTP intermedi ary as | <t>In this document, the term "intermediary" refers to an HTTP intermedi ary as | |||
defined in <xref section="3.7" sectionFormat="of" target="HTTP"/>.</t> | defined in <xref section="3.7" sectionFormat="of" target="RFC9110"/>.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="datagrams"> | <section anchor="datagrams"> | |||
<name>HTTP Datagrams</name> | <name>HTTP Datagrams</name> | |||
<t>HTTP Datagrams are a convention for conveying bidirectional and potenti ally | <t>HTTP Datagrams are a convention for conveying bidirectional and potenti ally | |||
unreliable datagrams inside an HTTP connection, with multiplexing when | unreliable datagrams inside an HTTP connection with multiplexing when | |||
possible. All HTTP Datagrams are associated with an HTTP request.</t> | possible. All HTTP Datagrams are associated with an HTTP request.</t> | |||
<t>When HTTP Datagrams are conveyed on an HTTP/3 connection, the QUIC DATA GRAM | <t>When HTTP Datagrams are conveyed on an HTTP/3 connection, the QUIC DATA GRAM | |||
frame can be used to achieve these goals, including unreliable delivery; see | frame can be used to provide demultiplexing and unreliable delivery; see | |||
<xref target="format"/>. Negotiating the use of QUIC DATAGRAM frames for HTTP Da tagrams is | <xref target="format"/>. Negotiating the use of QUIC DATAGRAM frames for HTTP Da tagrams is | |||
achieved via the exchange of HTTP/3 settings; see <xref target="setting"/>.</t> | achieved via the exchange of HTTP/3 settings; see <xref target="setting"/>.</t> | |||
<t>When running over HTTP/2, demultiplexing is provided by the HTTP/2 fram ing | <t>When running over HTTP/2, demultiplexing is provided by the HTTP/2 fram ing | |||
layer, but unreliable delivery is unavailable. HTTP Datagrams are negotiated | layer, but unreliable delivery is unavailable. HTTP Datagrams are negotiated | |||
and conveyed using the Capsule Protocol; see <xref target="datagram-capsule"/>.< /t> | and conveyed using the Capsule Protocol; see <xref target="datagram-capsule"/>.< /t> | |||
<t>When running over HTTP/1.x, requests are strictly serialized in the con | <t>When running over HTTP/1.x, requests are strictly serialized in the con | |||
nection, | nection; | |||
and therefore demultiplexing is not available. Unreliable delivery is likewise | therefore, demultiplexing is not available. Unreliable delivery is likewise not | |||
not available. HTTP Datagrams are negotiated and conveyed using the Capsule | available. HTTP Datagrams are negotiated and conveyed using the Capsule | |||
Protocol; see <xref target="datagram-capsule"/>.</t> | Protocol; see <xref target="datagram-capsule"/>.</t> | |||
<t>HTTP Datagrams <bcp14>MUST</bcp14> only be sent with an association to an HTTP request that | <t>HTTP Datagrams <bcp14>MUST</bcp14> only be sent with an association to an HTTP request that | |||
explicitly supports them. For example, existing HTTP methods GET and POST do not | explicitly supports them. For example, existing HTTP methods GET and POST do not | |||
define semantics for associated HTTP Datagrams; therefore, HTTP Datagrams cannot | define semantics for associated HTTP Datagrams; therefore, HTTP Datagrams | |||
be sent associated with GET or POST request streams.</t> | associated with GET or POST request streams cannot be sent.</t> | |||
<t>If an HTTP Datagram is received and it is associated with a request tha t has no | <t>If an HTTP Datagram is received and it is associated with a request tha t has no | |||
known semantics for HTTP Datagrams, the receiver <bcp14>MUST</bcp14> terminate t he request; if | known semantics for HTTP Datagrams, the receiver <bcp14>MUST</bcp14> terminate t he request. If | |||
HTTP/3 is in use, the request stream <bcp14>MUST</bcp14> be aborted with H3_DATA GRAM_ERROR | HTTP/3 is in use, the request stream <bcp14>MUST</bcp14> be aborted with H3_DATA GRAM_ERROR | |||
(0x33). HTTP extensions <bcp14>MAY</bcp14> override these requirements by defini ng a | (0x33). HTTP extensions <bcp14>MAY</bcp14> override these requirements by defini ng a | |||
negotiation mechanism and semantics for HTTP Datagrams.</t> | negotiation mechanism and semantics for HTTP Datagrams.</t> | |||
<section anchor="format"> | <section anchor="format"> | |||
<name>HTTP/3 Datagrams</name> | <name>HTTP/3 Datagrams</name> | |||
<t>When used with HTTP/3, the Datagram Data field of QUIC DATAGRAM frame s uses the | <t>When used with HTTP/3, the Datagram Data field of QUIC DATAGRAM frame s uses the | |||
following format:</t> | following format:</t> | |||
<figure anchor="h3-datagram-format"> | <figure anchor="h3-datagram-format"> | |||
<name>HTTP/3 Datagram Format</name> | <name>HTTP/3 Datagram Format</name> | |||
<artwork type="ascii-art"><![CDATA[ | <artwork><![CDATA[ | |||
HTTP/3 Datagram { | HTTP/3 Datagram { | |||
Quarter Stream ID (i), | Quarter Stream ID (i), | |||
HTTP Datagram Payload (..), | HTTP Datagram Payload (..), | |||
} | } | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<dl> | <dl> | |||
<dt>Quarter Stream ID:</dt> | <dt>Quarter Stream ID:</dt> | |||
<dd> | <dd> | |||
<t>A variable-length integer that contains the value of the client-i nitiated | <t>A variable-length integer that contains the value of the client-i nitiated | |||
bidirectional stream that this datagram is associated with, divided by four (the | bidirectional stream that this datagram is associated with divided by four (the | |||
division by four stems from the fact that HTTP requests are sent on | division by four stems from the fact that HTTP requests are sent on | |||
client-initiated bidirectional streams, and those have stream IDs that are | client-initiated bidirectional streams, which have stream IDs that are divisible | |||
divisible by four). The largest legal QUIC stream ID value is 2<sup>62</sup>-1, | by four). The largest legal QUIC stream ID value is 2<sup>62</sup>-1, so the | |||
so the largest legal value of Quarter Stream ID is 2<sup>60</sup>-1. Receipt of | largest legal value of the Quarter Stream ID field is 2<sup>60</sup>-1. Receipt | |||
an HTTP/3 Datagram that includes a larger value <bcp14>MUST</bcp14> be treated a | of an HTTP/3 Datagram that includes a larger value <bcp14>MUST</bcp14> be treate | |||
s an HTTP/3 | d as an HTTP/3 | |||
connection error of type H3_DATAGRAM_ERROR (0x33).</t> | connection error of type H3_DATAGRAM_ERROR (0x33).</t> | |||
</dd> | </dd> | |||
<dt>HTTP Datagram Payload:</dt> | <dt>HTTP Datagram Payload:</dt> | |||
<dd> | <dd> | |||
<t>The payload of the datagram, whose semantics are defined by the e xtension that | <t>The payload of the datagram, whose semantics are defined by the e xtension that | |||
is using HTTP Datagrams. Note that this field can be empty.</t> | is using HTTP Datagrams. Note that this field can be empty.</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>Receipt of a QUIC DATAGRAM frame whose payload is too short to allow parsing the | <t>Receipt of a QUIC DATAGRAM frame whose payload is too short to allow parsing the | |||
Quarter Stream ID field <bcp14>MUST</bcp14> be treated as an HTTP/3 connection e rror of type | Quarter Stream ID field <bcp14>MUST</bcp14> be treated as an HTTP/3 connection e rror of type | |||
H3_DATAGRAM_ERROR (0x33).</t> | H3_DATAGRAM_ERROR (0x33).</t> | |||
<t>HTTP/3 Datagrams <bcp14>MUST NOT</bcp14> be sent unless the correspon ding stream's send side is | <t>HTTP/3 Datagrams <bcp14>MUST NOT</bcp14> be sent unless the correspon ding stream's send side is | |||
open. If a datagram is received after the corresponding stream's receive side is | open. If a datagram is received after the corresponding stream's receive side is | |||
closed, the received datagrams <bcp14>MUST</bcp14> be silently dropped.</t> | closed, the received datagrams <bcp14>MUST</bcp14> be silently dropped.</t> | |||
<t>If an HTTP/3 Datagram is received and its Quarter Stream ID maps to a | <t>If an HTTP/3 Datagram is received and its Quarter Stream ID field map | |||
stream | s to a | |||
that has not yet been created, the receiver <bcp14>SHALL</bcp14> either drop tha | stream that has not yet been created, the receiver <bcp14>SHALL</bcp14> either d | |||
t datagram | rop that | |||
silently or buffer it temporarily (on the order of a round trip) while awaiting | datagram silently or buffer it temporarily (on the order of a round trip) while | |||
the creation of the corresponding stream.</t> | awaiting the creation of the corresponding stream.</t> | |||
<t>If an HTTP/3 Datagram is received and its Quarter Stream ID maps to a | <t>If an HTTP/3 Datagram is received and its Quarter Stream ID field map | |||
stream | s to a | |||
that cannot be created due to client-initiated bidirectional stream limits, it | stream that cannot be created due to client-initiated bidirectional stream | |||
<bcp14>SHOULD</bcp14> be treated as an HTTP/3 connection error of type H3_ID_ERR | limits, it <bcp14>SHOULD</bcp14> be treated as an HTTP/3 connection error of typ | |||
OR. Generating | e H3_ID_ERROR. | |||
an error is not mandatory in this case because HTTP/3 implementations might have | Generating an error is not mandatory because the QUIC stream limit might be | |||
practical barriers to determining the active stream concurrency limit that is | unknown to the HTTP/3 layer.</t> | |||
applied by the QUIC layer.</t> | ||||
<t>Prioritization of HTTP/3 Datagrams is not defined in this document. F uture | <t>Prioritization of HTTP/3 Datagrams is not defined in this document. F uture | |||
extensions <bcp14>MAY</bcp14> define how to prioritize datagrams, and <bcp14>MAY </bcp14> define signaling to | extensions <bcp14>MAY</bcp14> define how to prioritize datagrams and <bcp14>MAY< /bcp14> define signaling to | |||
allow communicating prioritization preferences.</t> | allow communicating prioritization preferences.</t> | |||
<section anchor="setting"> | <section anchor="setting"> | |||
<name>The SETTINGS_H3_DATAGRAM HTTP/3 Setting</name> | <name>The SETTINGS_H3_DATAGRAM HTTP/3 Setting</name> | |||
<t>Endpoints can indicate to their peer that they are willing to recei | <t>An endpoint can indicate to its peer that it is willing to receive | |||
ve HTTP/3 | HTTP/3 | |||
Datagrams by sending the SETTINGS_H3_DATAGRAM (0x33) setting with a | Datagrams by sending the SETTINGS_H3_DATAGRAM (0x33) setting with a value of 1.< | |||
value of 1.</t> | /t> | |||
<t>The value of the SETTINGS_H3_DATAGRAM setting <bcp14>MUST</bcp14> b e either 0 or 1. A value | <t>The value of the SETTINGS_H3_DATAGRAM setting <bcp14>MUST</bcp14> b e either 0 or 1. A value | |||
of 0 indicates that the implementation is not willing to receive HTTP Datagrams. | of 0 indicates that the implementation is not willing to receive HTTP Datagrams. | |||
If the SETTINGS_H3_DATAGRAM setting is received with a value that is neither 0 | If the SETTINGS_H3_DATAGRAM setting is received with a value that is neither 0 | |||
nor 1, the receiver <bcp14>MUST</bcp14> terminate the connection with error H3_S ETTINGS_ERROR.</t> | nor 1, the receiver <bcp14>MUST</bcp14> terminate the connection with error H3_S ETTINGS_ERROR.</t> | |||
<t>QUIC DATAGRAM frames <bcp14>MUST NOT</bcp14> be sent until the SETT INGS_H3_DATAGRAM setting | <t>QUIC DATAGRAM frames <bcp14>MUST NOT</bcp14> be sent until the SETT INGS_H3_DATAGRAM setting | |||
has been both sent and received with a value of 1.</t> | has been both sent and received with a value of 1.</t> | |||
<t>When clients use 0-RTT, they <bcp14>MAY</bcp14> store the value of the server's | <t>When clients use 0-RTT, they <bcp14>MAY</bcp14> store the value of the server's | |||
SETTINGS_H3_DATAGRAM setting. Doing so allows the client to send QUIC DATAGRAM | SETTINGS_H3_DATAGRAM setting. Doing so allows the client to send QUIC DATAGRAM | |||
frames in 0-RTT packets. When servers decide to accept 0-RTT data, they <bcp14>M UST</bcp14> | frames in 0-RTT packets. When servers decide to accept 0-RTT data, they <bcp14>M UST</bcp14> | |||
send a SETTINGS_H3_DATAGRAM setting greater than or equal to the value they sent | send a SETTINGS_H3_DATAGRAM setting greater than or equal to the value they sent | |||
skipping to change at line 209 ¶ | skipping to change at line 194 ¶ | |||
message. If a client stores the value of the SETTINGS_H3_DATAGRAM setting with | message. If a client stores the value of the SETTINGS_H3_DATAGRAM setting with | |||
their 0-RTT state, they <bcp14>MUST</bcp14> validate that the new value of the | their 0-RTT state, they <bcp14>MUST</bcp14> validate that the new value of the | |||
SETTINGS_H3_DATAGRAM setting sent by the server in the handshake is greater than | SETTINGS_H3_DATAGRAM setting sent by the server in the handshake is greater than | |||
or equal to the stored value; if not, the client <bcp14>MUST</bcp14> terminate t he connection | or equal to the stored value; if not, the client <bcp14>MUST</bcp14> terminate t he connection | |||
with error H3_SETTINGS_ERROR. In all cases, the maximum permitted value of the | with error H3_SETTINGS_ERROR. In all cases, the maximum permitted value of the | |||
SETTINGS_H3_DATAGRAM setting parameter is 1.</t> | SETTINGS_H3_DATAGRAM setting parameter is 1.</t> | |||
<t>It is <bcp14>RECOMMENDED</bcp14> that implementations that support receiving HTTP/3 Datagrams | <t>It is <bcp14>RECOMMENDED</bcp14> that implementations that support receiving HTTP/3 Datagrams | |||
always send the SETTINGS_H3_DATAGRAM setting with a value of 1, | always send the SETTINGS_H3_DATAGRAM setting with a value of 1, | |||
even if the application does not intend to use HTTP/3 Datagrams. This helps to | even if the application does not intend to use HTTP/3 Datagrams. This helps to | |||
avoid "sticking out"; see <xref target="security"/>.</t> | avoid "sticking out"; see <xref target="security"/>.</t> | |||
<section anchor="note-about-draft-versions"> | ||||
<name>Note About Draft Versions</name> | ||||
<t>[[RFC editor: please remove this section before publication.]]</t | ||||
> | ||||
<t>Some revisions of this draft specification use a different value | ||||
(the Identifier | ||||
field of a Setting in the HTTP/3 SETTINGS frame) for the SETTINGS_H3_DATAGRAM | ||||
setting. This allows new draft revisions to make incompatible changes. Multiple | ||||
draft versions <bcp14>MAY</bcp14> be supported by sending multiple values for | ||||
SETTINGS_H3_DATAGRAM. Once SETTINGS have been sent and received, an | ||||
implementation that supports multiple drafts <bcp14>MUST</bcp14> compute the int | ||||
ersection of | ||||
the values it has sent and received, and then it <bcp14>MUST</bcp14> select and | ||||
use the most | ||||
recent draft version from the intersection set. This ensures that both peers | ||||
negotiate the same draft version.</t> | ||||
</section> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="http-datagrams-using-capsules"> | <section anchor="http-datagrams-using-capsules"> | |||
<name>HTTP Datagrams using Capsules</name> | <name>HTTP Datagrams Using Capsules</name> | |||
<t>When HTTP/3 Datagrams are unavailable or undesirable, HTTP Datagrams can be sent | <t>When HTTP/3 Datagrams are unavailable or undesirable, HTTP Datagrams can be sent | |||
using the Capsule Protocol, see <xref target="datagram-capsule"/>.</t> | using the Capsule Protocol; see <xref target="datagram-capsule"/>.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="capsule"> | <section anchor="capsule"> | |||
<name>Capsules</name> | <name>Capsules</name> | |||
<t>One mechanism to extend HTTP is to introduce new HTTP Upgrade Tokens (s | <t>One mechanism to extend HTTP is to introduce new HTTP upgrade tokens; s | |||
ee | ee | |||
<xref section="16.7" sectionFormat="of" target="HTTP"/>). In HTTP/1.x, these tok | <xref section="16.7" sectionFormat="of" target="RFC9110"/>. In HTTP/1.x, these t | |||
ens are used via the Upgrade | okens are used via the Upgrade | |||
mechanism (see <xref section="7.8" sectionFormat="of" target="HTTP"/>). In HTTP/ | mechanism; see <xref section="7.8" sectionFormat="of" target="RFC9110"/>. In HTT | |||
2 and HTTP/3, these tokens are | P/2 and HTTP/3, these tokens are | |||
used via the Extended CONNECT mechanism (see <xref target="EXT-CONNECT2"/> and | used via the Extended CONNECT mechanism; see <xref target="RFC8441"/> and | |||
<xref target="EXT-CONNECT3"/>).</t> | <xref target="RFC9220"/>.</t> | |||
<t>This specification introduces the Capsule Protocol. The Capsule Protoco l is a | <t>This specification introduces the Capsule Protocol. The Capsule Protoco l is a | |||
sequence of type-length-value tuples that definitions of new HTTP Upgrade Tokens | sequence of type-length-value tuples that definitions of new HTTP upgrade tokens | |||
can choose to use. It allows endpoints to reliably communicate request-related | can choose to use. It allows endpoints to reliably communicate request-related | |||
information end-to-end on HTTP request streams, even in the presence of HTTP | information end-to-end on HTTP request streams, even in the presence of HTTP | |||
intermediaries. The Capsule Protocol can be used to exchange HTTP Datagrams, | intermediaries. The Capsule Protocol can be used to exchange HTTP Datagrams, | |||
which is necessary when HTTP is running over a transport that does not support | which is necessary when HTTP is running over a transport that does not support | |||
the QUIC DATAGRAM frame. The Capsule Protocol can also be used to communicate | the QUIC DATAGRAM frame. The Capsule Protocol can also be used to communicate | |||
reliable and bidirectional control messages associated with a datagram-based | reliable and bidirectional control messages associated with a datagram-based | |||
protocol even when HTTP/3 Datagrams are in use.</t> | protocol even when HTTP/3 Datagrams are in use.</t> | |||
<section anchor="data-stream"> | <section anchor="data-stream"> | |||
<name>HTTP Data Streams</name> | <name>HTTP Data Streams</name> | |||
<t>This specification defines the "data stream" of an HTTP request as th e | <t>This specification defines the "data stream" of an HTTP request as th e | |||
bidirectional stream of bytes that follows the header section of the request | bidirectional stream of bytes that follows the header section of the request | |||
message and the final response message that is either successful (i.e., 2xx) or | message and the final response message that is either successful (i.e., 2xx) or | |||
upgraded (i.e., 101).</t> | upgraded (i.e., 101).</t> | |||
<t>In HTTP/1.x, the data stream consists of all bytes on the connection that follow | <t>In HTTP/1.x, the data stream consists of all bytes on the connection that follow | |||
the blank line that concludes either the request header section, or the final | the blank line that concludes either the request header section or the final | |||
response header section. As a result, only the last HTTP request on an HTTP/1.x | response header section. As a result, only the last HTTP request on an HTTP/1.x | |||
connection can start the capsule protocol.</t> | connection can start the Capsule Protocol.</t> | |||
<t>In HTTP/2 and HTTP/3, the data stream of a given HTTP request consist s of all | <t>In HTTP/2 and HTTP/3, the data stream of a given HTTP request consist s of all | |||
bytes sent in DATA frames with the corresponding stream ID.</t> | bytes sent in DATA frames with the corresponding stream ID.</t> | |||
<t>The concept of a data stream is particularly relevant for methods suc h as | <t>The concept of a data stream is particularly relevant for methods suc h as | |||
CONNECT where there is no HTTP message content after the headers.</t> | CONNECT, where there is no HTTP message content after the headers.</t> | |||
<t>Data streams can be prioritized using any means suited to stream or r equest | <t>Data streams can be prioritized using any means suited to stream or r equest | |||
prioritization. For example, see <xref section="11" sectionFormat="of" target="P | prioritization. For example, see <xref section="11" sectionFormat="of" target="R | |||
RIORITY"/>.</t> | FC9218"/>.</t> | |||
<t>Data streams are subject to the flow control mechanisms of the underl | <t>Data streams are subject to the flow control mechanisms of the underl | |||
ying layers | ying | |||
(for example, HTTP/2 stream flow control, HTTP/2 connection flow control, and | layers; examples include HTTP/2 stream flow control, HTTP/2 connection flow | |||
TCP flow control).</t> | control, and TCP flow control.</t> | |||
</section> | </section> | |||
<section anchor="capsule-protocol"> | <section anchor="capsule-protocol"> | |||
<name>The Capsule Protocol</name> | <name>The Capsule Protocol</name> | |||
<t>Definitions of new HTTP Upgrade Tokens can state that their associate | <t>Definitions of new HTTP upgrade tokens can state that their associate | |||
d request's | d request's | |||
data stream uses the Capsule Protocol. If they do so, that means that the | data stream uses the Capsule Protocol. If they do so, the contents of the | |||
contents of the associated request's data stream uses the following format:</t> | associated request's data stream uses the following format:</t> | |||
<figure anchor="capsule-stream-format"> | <figure anchor="capsule-stream-format"> | |||
<name>Capsule Protocol Stream Format</name> | <name>Capsule Protocol Stream Format</name> | |||
<artwork type="ascii-art"><![CDATA[ | <artwork><![CDATA[ | |||
Capsule Protocol { | Capsule Protocol { | |||
Capsule (..) ..., | Capsule (..) ..., | |||
} | } | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<figure anchor="capsule-format"> | <figure anchor="capsule-format"> | |||
<name>Capsule Format</name> | <name>Capsule Format</name> | |||
<artwork type="ascii-art"><![CDATA[ | <artwork><![CDATA[ | |||
Capsule { | Capsule { | |||
Capsule Type (i), | Capsule Type (i), | |||
Capsule Length (i), | Capsule Length (i), | |||
Capsule Value (..), | Capsule Value (..), | |||
} | } | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<dl> | <dl> | |||
<dt>Capsule Type:</dt> | <dt>Capsule Type:</dt> | |||
<dd> | <dd> | |||
<t>A variable-length integer indicating the Type of the capsule. An IANA registry | <t>A variable-length integer indicating the type of the capsule. An IANA registry | |||
is used to manage the assignment of Capsule Types; see <xref target="iana-types" />.</t> | is used to manage the assignment of Capsule Types; see <xref target="iana-types" />.</t> | |||
</dd> | </dd> | |||
<dt>Capsule Length:</dt> | <dt>Capsule Length:</dt> | |||
<dd> | <dd> | |||
<t>The length in bytes of the Capsule Value field following this fie | <t>The length, in bytes, of the Capsule Value field, which follows t | |||
ld, encoded | his field, | |||
as a variable-length integer. Note that this field can have a value of zero.</t> | encoded as a variable-length integer. Note that this field can have a value of | |||
zero.</t> | ||||
</dd> | </dd> | |||
<dt>Capsule Value:</dt> | <dt>Capsule Value:</dt> | |||
<dd> | <dd> | |||
<t>The payload of this capsule. Its semantics are determined by the value of the | <t>The payload of this Capsule. Its semantics are determined by the value of the | |||
Capsule Type field.</t> | Capsule Type field.</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>An intermediary can identify the use of the capsule protocol either t hrough the | <t>An intermediary can identify the use of the Capsule Protocol either t hrough the | |||
presence of the Capsule-Protocol header field (<xref target="hdr"/>) or by under standing the | presence of the Capsule-Protocol header field (<xref target="hdr"/>) or by under standing the | |||
chosen HTTP Upgrade token.</t> | chosen HTTP Upgrade token.</t> | |||
<t>Because new protocols or extensions might define new capsule types, | <t>Because new protocols or extensions might define new Capsule Types, | |||
intermediaries that wish to allow for future extensibility <bcp14>SHOULD</bcp14> forward | intermediaries that wish to allow for future extensibility <bcp14>SHOULD</bcp14> forward | |||
capsules without modification, unless the definition of the Capsule Type in use | Capsules without modification unless the definition of the Capsule Type in use | |||
specifies additional intermediary processing. One such Capsule Type is the | specifies additional intermediary processing. One such Capsule Type is the | |||
DATAGRAM capsule; see <xref target="datagram-capsule"/>. In particular, intermed iaries <bcp14>SHOULD</bcp14> | DATAGRAM Capsule; see <xref target="datagram-capsule"/>. In particular, intermed iaries <bcp14>SHOULD</bcp14> | |||
forward Capsules with an unknown Capsule Type without modification.</t> | forward Capsules with an unknown Capsule Type without modification.</t> | |||
<t>Endpoints which receive a Capsule with an unknown Capsule Type <bcp14 >MUST</bcp14> silently | <t>Endpoints that receive a Capsule with an unknown Capsule Type <bcp14> MUST</bcp14> silently | |||
drop that Capsule and skip over it to parse the next Capsule.</t> | drop that Capsule and skip over it to parse the next Capsule.</t> | |||
<t>By virtue of the definition of the data stream:</t> | <t>By virtue of the definition of the data stream:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>The Capsule Protocol is not in use unless the response includes a 2xx | <li>The Capsule Protocol is not in use unless the response includes a 2xx | |||
(Successful) or 101 (Switching Protocols) status code.</li> | (Successful) or 101 (Switching Protocols) status code.</li> | |||
<li>When the Capsule Protocol is in use, the associated HTTP request a nd response | <li>When the Capsule Protocol is in use, the associated HTTP request a nd response | |||
do not carry HTTP content. A future extension <bcp14>MAY</bcp14> define a new ca psule type to | do not carry HTTP content. A future extension <bcp14>MAY</bcp14> define a new Ca psule Type to | |||
carry HTTP content.</li> | carry HTTP content.</li> | |||
</ul> | </ul> | |||
<t>Since the Capsule Protocol only applies to definitions of new HTTP Up | <t>The Capsule Protocol only applies to definitions of new HTTP upgrade | |||
grade | tokens; | |||
Tokens, in HTTP/2 and HTTP/3 it can only be used with the CONNECT method. | thus, in HTTP/2 and HTTP/3, it can only be used with the CONNECT method. | |||
Therefore, once both endpoints agree to use the Capsule Protocol, the frame | Therefore, once both endpoints agree to use the Capsule Protocol, the frame | |||
usage requirements of the stream change as specified in <xref section="8.5" sect | usage requirements of the stream change as specified in <xref section="8.5" sect | |||
ionFormat="of" target="H2"/> | ionFormat="of" target="RFC9113"/> | |||
and <xref section="4.2" sectionFormat="of" target="H3"/>.</t> | and <xref section="4.4" sectionFormat="of" target="RFC9114"/>.</t> | |||
<t>The Capsule Protocol <bcp14>MUST NOT</bcp14> be used with messages th at contain Content-Length, | <t>The Capsule Protocol <bcp14>MUST NOT</bcp14> be used with messages th at contain Content-Length, | |||
Content-Type, or Transfer-Encoding header fields. Additionally, HTTP status | Content-Type, or Transfer-Encoding header fields. Additionally, HTTP status | |||
codes 204 (No Content), 205 (Reset Content), and 206 (Partial Content) <bcp14>MU ST NOT</bcp14> | codes 204 (No Content), 205 (Reset Content), and 206 (Partial Content) <bcp14>MU ST NOT</bcp14> | |||
be sent on responses that use the Capsule Protocol. A receiver that observes a | be sent on responses that use the Capsule Protocol. A receiver that observes a | |||
violation of these requirements <bcp14>MUST</bcp14> treat the HTTP message as ma lformed.</t> | violation of these requirements <bcp14>MUST</bcp14> treat the HTTP message as ma lformed.</t> | |||
<t>When processing capsules, a receiver might be tempted to accumulate t | <t>When processing Capsules, a receiver might be tempted to accumulate t | |||
he full | he full | |||
length of the capsule value in the data stream before handling it. This approach | length of the Capsule Value field in the data stream before handling it. This | |||
<bcp14>SHOULD</bcp14> be avoided, because it can consume flow control in underly | approach <bcp14>SHOULD</bcp14> be avoided because it can consume flow control in | |||
ing layers, and | underlying | |||
that might lead to deadlocks if the capsule data exhausts the flow control | layers, and that might lead to deadlocks if the Capsule data exhausts the flow | |||
window.</t> | control window.</t> | |||
</section> | </section> | |||
<section anchor="error-handling"> | <section anchor="error-handling"> | |||
<name>Error Handling</name> | <name>Error Handling</name> | |||
<t>When a receiver encounters an error processing the Capsule Protocol, the | <t>When a receiver encounters an error processing the Capsule Protocol, the | |||
receiver <bcp14>MUST</bcp14> treat it as if it had received a malformed or incom plete HTTP | receiver <bcp14>MUST</bcp14> treat it as if it had received a malformed or incom plete HTTP | |||
message. For HTTP/3, the handling of malformed messages is described in | message. For HTTP/3, the handling of malformed messages is described in | |||
<xref section="4.1.3" sectionFormat="of" target="H3"/>. For HTTP/2, the handling | <xref section="4.1.2" sectionFormat="of" target="RFC9114"/>. For HTTP/2, the han | |||
of malformed messages is | dling of malformed messages is | |||
described in <xref section="8.1.1" sectionFormat="of" target="H2"/>. For HTTP/1. | described in <xref section="8.1.1" sectionFormat="of" target="RFC9113"/>. For HT | |||
x, the handling of incomplete | TP/1.x, the handling of incomplete | |||
messages is described in <xref section="8" sectionFormat="of" target="H1"/>.</t> | messages is described in <xref section="8" sectionFormat="of" target="RFC9112"/> | |||
<t>Each capsule's payload <bcp14>MUST</bcp14> contain exactly the fields | .</t> | |||
identified in its | <t>Each Capsule's payload <bcp14>MUST</bcp14> contain exactly the fields | |||
description. A capsule payload that contains additional bytes after the | identified in its | |||
identified fields or a capsule payload that terminates before the end of the | description. A Capsule payload that contains additional bytes after the | |||
identified fields or a Capsule payload that terminates before the end of the | ||||
identified fields <bcp14>MUST</bcp14> be treated as it if were a malformed or in complete | identified fields <bcp14>MUST</bcp14> be treated as it if were a malformed or in complete | |||
message. In particular, redundant length encodings <bcp14>MUST</bcp14> be verifi ed to be | message. In particular, redundant length encodings <bcp14>MUST</bcp14> be verifi ed to be | |||
self-consistent.</t> | self-consistent.</t> | |||
<t>If the receive side of a stream carrying capsules is terminated clean ly (for | <t>If the receive side of a stream carrying Capsules is terminated clean ly (for | |||
example, in HTTP/3 this is defined as receiving a QUIC STREAM frame with the FIN | example, in HTTP/3 this is defined as receiving a QUIC STREAM frame with the FIN | |||
bit set) and the last capsule on the stream was truncated, this <bcp14>MUST</bcp 14> be treated | bit set) and the last Capsule on the stream was truncated, this <bcp14>MUST</bcp 14> be treated | |||
as if it were a malformed or incomplete message.</t> | as if it were a malformed or incomplete message.</t> | |||
</section> | </section> | |||
<section anchor="hdr"> | <section anchor="hdr"> | |||
<name>The Capsule-Protocol Header Field</name> | <name>The Capsule-Protocol Header Field</name> | |||
<t>The "Capsule-Protocol" header field is an Item Structured Field, see | <t>The "Capsule-Protocol" header field is an Item Structured Field; see | |||
<xref section="3.3" sectionFormat="of" target="STRUCT-FIELD"/>; its value <bcp14 | <xref section="3.3" sectionFormat="of" target="RFC8941"/>. Its value <bcp14>MUST | |||
>MUST</bcp14> be a Boolean; any other value | </bcp14> be a Boolean; any other | |||
type <bcp14>MUST</bcp14> be handled as if the field were not present by recipien | value type <bcp14>MUST</bcp14> be handled as if the field were not present by re | |||
ts (for | cipients (for | |||
example, if this field is included multiple times, its type will become a List | example, if this field is included multiple times, its type will become a List | |||
and the field will therefore be ignored). This document does not define any | and the field will be ignored). This document does not define any parameters for | |||
parameters for the Capsule-Protocol header field value, but future documents | the Capsule-Protocol header field value, but future documents might define | |||
might define parameters. Receivers <bcp14>MUST</bcp14> ignore unknown parameters | parameters. Receivers <bcp14>MUST</bcp14> ignore unknown parameters.</t> | |||
.</t> | ||||
<t>Endpoints indicate that the Capsule Protocol is in use on a data stre am by | <t>Endpoints indicate that the Capsule Protocol is in use on a data stre am by | |||
sending a Capsule-Protocol header field with a true value. A Capsule-Protocol | sending a Capsule-Protocol header field with a true value. A Capsule-Protocol | |||
header field with a false value has the same semantics as when the header is not | header field with a false value has the same semantics as when the header is not | |||
present.</t> | present.</t> | |||
<t>Intermediaries <bcp14>MAY</bcp14> use this header field to allow proc essing of HTTP Datagrams | <t>Intermediaries <bcp14>MAY</bcp14> use this header field to allow proc essing of HTTP Datagrams | |||
for unknown HTTP Upgrade Tokens; note that this is only possible for HTTP | for unknown HTTP upgrade tokens. Note that this is only possible for HTTP | |||
Upgrade or Extended CONNECT.</t> | Upgrade or Extended CONNECT.</t> | |||
<t>The Capsule-Protocol header field <bcp14>MUST NOT</bcp14> be used on HTTP responses with a | <t>The Capsule-Protocol header field <bcp14>MUST NOT</bcp14> be used on HTTP responses with a | |||
status code that is both different from 101 and outside the 2xx range.</t> | status code that is both different from 101 (Switching Protocols) and outside | |||
the 2xx (Successful) range.</t> | ||||
<t>When using the Capsule Protocol, HTTP endpoints <bcp14>SHOULD</bcp14> send the Capsule-Protocol | <t>When using the Capsule Protocol, HTTP endpoints <bcp14>SHOULD</bcp14> send the Capsule-Protocol | |||
header field to simplify intermediary processing. Definitions of new HTTP | header field to simplify intermediary processing. Definitions of new HTTP | |||
Upgrade Tokens that use the Capsule Protocol <bcp14>MAY</bcp14> alter this recom mendation.</t> | upgrade tokens that use the Capsule Protocol <bcp14>MAY</bcp14> alter this recom mendation.</t> | |||
</section> | </section> | |||
<section anchor="datagram-capsule"> | <section anchor="datagram-capsule"> | |||
<name>The DATAGRAM Capsule</name> | <name>The DATAGRAM Capsule</name> | |||
<t>This document defines the DATAGRAM (0x00) capsule type. This capsule allows HTTP | <t>This document defines the DATAGRAM (0x00) Capsule Type. This Capsule allows HTTP | |||
Datagrams to be sent on a stream using the Capsule Protocol. This is | Datagrams to be sent on a stream using the Capsule Protocol. This is | |||
particularly useful when HTTP is running over a transport that does not support | particularly useful when HTTP is running over a transport that does not support | |||
the QUIC DATAGRAM frame.</t> | the QUIC DATAGRAM frame.</t> | |||
<figure anchor="datagram-capsule-format"> | <figure anchor="datagram-capsule-format"> | |||
<name>DATAGRAM Capsule Format</name> | <name>DATAGRAM Capsule Format</name> | |||
<artwork type="ascii-art"><![CDATA[ | <artwork type="ascii-art"><![CDATA[ | |||
Datagram Capsule { | Datagram Capsule { | |||
Type (i) = 0x00, | Type (i) = 0x00, | |||
Length (i), | Length (i), | |||
HTTP Datagram Payload (..), | HTTP Datagram Payload (..), | |||
} | } | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<dl> | <dl> | |||
<dt>HTTP Datagram Payload:</dt> | <dt>HTTP Datagram Payload:</dt> | |||
<dd> | <dd> | |||
<t>The payload of the datagram, whose semantics are defined by the e xtension that | <t>The payload of the datagram, whose semantics are defined by the e xtension that | |||
is using HTTP Datagrams. Note that this field can be empty.</t> | is using HTTP Datagrams. Note that this field can be empty.</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>HTTP Datagrams sent using the DATAGRAM capsule have the same semantic | <t>HTTP Datagrams sent using the DATAGRAM Capsule have the same semantic | |||
s as | s as those | |||
those sent in QUIC DATAGRAM frames. In particular, the restrictions on when | sent in QUIC DATAGRAM frames. In particular, the restrictions on when it is | |||
it is allowed to send an HTTP Datagram and how to process them from <xref target | allowed to send an HTTP Datagram and how to process them (from <xref target="for | |||
="format"/> | mat"/>) also | |||
also apply to HTTP Datagrams sent and received using the DATAGRAM capsule.</t> | apply to HTTP Datagrams sent and received using the DATAGRAM Capsule.</t> | |||
<t>An intermediary can reencode HTTP Datagrams as it forwards them. In o | <t>An intermediary can re-encode HTTP Datagrams as it forwards them. In | |||
ther words, | other | |||
an intermediary <bcp14>MAY</bcp14> send a DATAGRAM capsule to forward an HTTP Da | words, an intermediary <bcp14>MAY</bcp14> send a DATAGRAM Capsule to forward an | |||
tagram that | HTTP Datagram | |||
was received in a QUIC DATAGRAM frame, and vice versa. Intermediaries <bcp14>MUS | that was received in a QUIC DATAGRAM frame and vice versa. Intermediaries <bcp14 | |||
T NOT</bcp14> | >MUST | |||
perform this reencoding unless they have identified the use of the Capsule | NOT</bcp14> perform this re-encoding unless they have identified the use of the | |||
Capsule | ||||
Protocol on the corresponding request stream; see <xref target="capsule-protocol "/>.</t> | Protocol on the corresponding request stream; see <xref target="capsule-protocol "/>.</t> | |||
<t>Note that while DATAGRAM capsules that are sent on a stream are relia | <t>Note that while DATAGRAM Capsules, which are sent on a stream, are re | |||
bly | liably | |||
delivered in order, intermediaries can reencode DATAGRAM capsules into QUIC | delivered in order, intermediaries can re-encode DATAGRAM Capsules into QUIC | |||
DATAGRAM frames when forwarding messages, which could result in loss or | DATAGRAM frames when forwarding messages, which could result in loss or | |||
reordering.</t> | reordering.</t> | |||
<t>If an intermediary receives an HTTP Datagram in a QUIC DATAGRAM frame and is | <t>If an intermediary receives an HTTP Datagram in a QUIC DATAGRAM frame and is | |||
forwarding it on a connection that supports QUIC DATAGRAM frames, the | forwarding it on a connection that supports QUIC DATAGRAM frames, the | |||
intermediary <bcp14>SHOULD NOT</bcp14> convert that HTTP Datagram to a DATAGRAM | intermediary <bcp14>SHOULD NOT</bcp14> convert that HTTP Datagram to a DATAGRAM | |||
capsule. If the | Capsule. If the | |||
HTTP Datagram is too large to fit in a DATAGRAM frame (for example because the | HTTP Datagram is too large to fit in a DATAGRAM frame (for example, because the | |||
path MTU of that QUIC connection is too low or if the maximum UDP payload size | Path MTU (PMTU) of that QUIC connection is too low or if the maximum UDP payload | |||
advertised on that connection is too low), the intermediary <bcp14>SHOULD</bcp14 | size advertised on that connection is too low), the intermediary <bcp14>SHOULD</ | |||
> drop the HTTP | bcp14> drop the | |||
Datagram instead of converting it to a DATAGRAM capsule. This preserves the | HTTP Datagram instead of converting it to a DATAGRAM Capsule. This preserves the | |||
end-to-end unreliability characteristic that methods such as Datagram | end-to-end unreliability characteristic that methods such as Datagram | |||
Packetization Layer Path MTU Discovery (DPLPMTUD) depend on | Packetization Layer PMTU Discovery (DPLPMTUD) depend on <xref target="RFC8899"/> | |||
<xref target="DPLPMTUD"/>. An intermediary that converts QUIC DATAGRAM frames to | . | |||
DATAGRAM capsules allows HTTP Datagrams to be arbitrarily large without | An intermediary that converts QUIC DATAGRAM frames to DATAGRAM Capsules allows | |||
suffering any loss; this can misrepresent the true path properties, defeating | HTTP Datagrams to be arbitrarily large without suffering any loss. This can | |||
methods such as DPLPMTUD.</t> | misrepresent the true path properties, defeating methods such as DPLPMTUD.</t> | |||
<t>While DATAGRAM capsules can theoretically carry a payload of length | <t>While DATAGRAM Capsules can theoretically carry a payload of length | |||
2<sup>62</sup>-1, most HTTP extensions that use HTTP Datagrams will have their | 2<sup>62</sup>-1, most HTTP extensions that use HTTP Datagrams will have their | |||
own limits on what datagram payload sizes are practical. Implementations <bcp14> SHOULD</bcp14> | own limits on what datagram payload sizes are practical. Implementations <bcp14> SHOULD</bcp14> | |||
take those limits into account when parsing DATAGRAM capsules: if an incoming | take those limits into account when parsing DATAGRAM Capsules. If an incoming | |||
DATAGRAM capsule has a length that is known to be so large as to not be usable, | DATAGRAM Capsule has a length that is known to be so large as to not be usable, | |||
the implementation <bcp14>SHOULD</bcp14> discard the capsule without buffering i | the implementation <bcp14>SHOULD</bcp14> discard the Capsule without buffering i | |||
ts contents | ts contents | |||
into memory.</t> | into memory.</t> | |||
<t>Since QUIC DATAGRAM frames are required to fit within a QUIC packet, | <t>Since QUIC DATAGRAM frames are required to fit within a QUIC packet, | |||
implementations that reencode DATAGRAM capsules into QUIC DATAGRAM frames might | implementations that re-encode DATAGRAM Capsules into QUIC DATAGRAM frames might | |||
be tempted to accumulate the entire capsule in the stream before reencoding it. | be tempted to accumulate the entire Capsule in the stream before re-encoding it. | |||
This <bcp14>SHOULD</bcp14> be avoided, because it can cause flow control problem s; see | This <bcp14>SHOULD</bcp14> be avoided, because it can cause flow control problem s; see | |||
<xref target="capsule-protocol"/>.</t> | <xref target="capsule-protocol"/>.</t> | |||
<t>Note that it is possible for an HTTP extension to use HTTP Datagrams without | <t>Note that it is possible for an HTTP extension to use HTTP Datagrams without | |||
using the Capsule Protocol. For example, if an HTTP extension that uses HTTP | using the Capsule Protocol. For example, if an HTTP extension that uses HTTP | |||
Datagrams is only defined over transports that support QUIC DATAGRAM frames, it | Datagrams is only defined over transports that support QUIC DATAGRAM frames, it | |||
might not need a stream encoding. Additionally, HTTP extensions can use HTTP | might not need a stream encoding. Additionally, HTTP extensions can use HTTP | |||
Datagrams with their own data stream protocol. However, new HTTP extensions that | Datagrams with their own data stream protocol. However, new HTTP extensions that | |||
wish to use HTTP Datagrams <bcp14>SHOULD</bcp14> use the Capsule Protocol as fai ling to do so | wish to use HTTP Datagrams <bcp14>SHOULD</bcp14> use the Capsule Protocol, as fa iling to do so | |||
will make it harder for the HTTP extension to support versions of HTTP other | will make it harder for the HTTP extension to support versions of HTTP other | |||
than HTTP/3 and will prevent interoperability with intermediaries that only | than HTTP/3 and will prevent interoperability with intermediaries that only | |||
support the Capsule Protocol.</t> | support the Capsule Protocol.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="security"> | <section anchor="security"> | |||
<name>Security Considerations</name> | <name>Security Considerations</name> | |||
<t>Since transmitting HTTP Datagrams using QUIC DATAGRAM frames requires s ending | <t>Since transmitting HTTP Datagrams using QUIC DATAGRAM frames requires s ending | |||
the HTTP/3 SETTINGS_H3_DATAGRAM setting, it "sticks out". In other words, | the HTTP/3 SETTINGS_H3_DATAGRAM setting, it "sticks out". In other words, | |||
probing clients can learn whether a server supports HTTP Datagrams over QUIC | probing clients can learn whether a server supports HTTP Datagrams over QUIC | |||
DATAGRAM frames. As some servers might wish to obfuscate the fact that they | DATAGRAM frames. As some servers might wish to obfuscate the fact that they | |||
offer application services that use HTTP Datagrams, it's best for all | offer application services that use HTTP Datagrams, it's best for all | |||
implementations that support this feature to always send this setting, see | implementations that support this feature to always send this setting; see | |||
<xref target="setting"/>.</t> | <xref target="setting"/>.</t> | |||
<t>Since use of the Capsule Protocol is restricted to new HTTP Upgrade Tok | <t>Since use of the Capsule Protocol is restricted to new HTTP upgrade tok | |||
ens, it | ens, it | |||
is not accessible from Web Platform APIs (such as those commonly accessed via | is not directly accessible from Web Platform APIs (such as those commonly access | |||
ed via | ||||
JavaScript in web browsers).</t> | JavaScript in web browsers).</t> | |||
<t>Definitions of new HTTP Upgrade Tokens that use the Capsule Protocol ne | <t>Definitions of new HTTP upgrade tokens that use the Capsule Protocol ne | |||
ed to | ed to | |||
perform a security analysis that considers the impact of HTTP Datagrams and | include a security analysis that considers the impact of HTTP Datagrams and | |||
Capsules in the context of their protocol.</t> | Capsules in the context of their protocol.</t> | |||
</section> | </section> | |||
<section anchor="iana"> | <section anchor="iana"> | |||
<name>IANA Considerations</name> | <name>IANA Considerations</name> | |||
<section anchor="iana-setting"> | <section anchor="iana-setting"> | |||
<name>HTTP/3 Setting</name> | <name>HTTP/3 Setting</name> | |||
<t>This document will request IANA to register the following entry in th | <t>IANA has registered the following entry in the "HTTP/3 Settings" regi | |||
e | stry | |||
"HTTP/3 Settings" registry maintained at | maintained at <<eref target="https://www.iana.org/assignments/http3-parameter | |||
<<eref target="https://www.iana.org/assignments/http3-parameters"/>>:</t> | s"/>>:</t> | |||
<dl spacing="compact"> | <dl spacing="compact"> | |||
<dt>Value:</dt> | <dt>Value:</dt> | |||
<dd> | <dd> | |||
<t>0x33</t> | <t>0x33</t> | |||
</dd> | </dd> | |||
<dt>Setting Name:</dt> | <dt>Setting Name:</dt> | |||
<dd> | <dd> | |||
<t>SETTINGS_H3_DATAGRAM</t> | <t>SETTINGS_H3_DATAGRAM</t> | |||
</dd> | </dd> | |||
<dt>Default:</dt> | <dt>Default:</dt> | |||
<dd> | <dd> | |||
<t>0</t> | <t>0</t> | |||
</dd> | </dd> | |||
<dt>Status:</dt> | <dt>Status:</dt> | |||
<dd> | <dd> | |||
<t>provisional (permanent if this document is approved)</t> | <t>permanent</t> | |||
</dd> | </dd> | |||
<dt>Specification:</dt> | <dt>Reference:</dt> | |||
<dd> | <dd> | |||
<t>This Document</t> | <t>RFC 9297</t> | |||
</dd> | </dd> | |||
<dt>Change Controller:</dt> | <dt>Change Controller:</dt> | |||
<dd> | <dd> | |||
<t>IETF</t> | <t>IETF</t> | |||
</dd> | </dd> | |||
<dt>Contact:</dt> | <dt>Contact:</dt> | |||
<dd> | <dd> | |||
<t>HTTP_WG; HTTP working group; ietf-http-wg@w3.org</t> | <t>HTTP_WG; HTTP working group; ietf-http-wg@w3.org</t> | |||
</dd> | </dd> | |||
<dt>Notes:</dt> | ||||
<dd> | ||||
<t>None</t> | ||||
</dd> | ||||
</dl> | </dl> | |||
</section> | </section> | |||
<section anchor="iana-error"> | <section anchor="iana-error"> | |||
<name>HTTP/3 Error Code</name> | <name>HTTP/3 Error Code</name> | |||
<t>This document will request IANA to register the following entry in th | <t>IANA has registered the following entry in the "HTTP/3 Error Codes" r | |||
e | egistry | |||
"HTTP/3 Error Codes" registry maintained at | maintained at <<eref target="https://www.iana.org/assignments/http3-parameter | |||
<<eref target="https://www.iana.org/assignments/http3-parameters"/>>:</t> | s"/>>:</t> | |||
<dl spacing="compact"> | <dl spacing="compact"> | |||
<dt>Value:</dt> | <dt>Value:</dt> | |||
<dd> | <dd> | |||
<t>0x33</t> | <t>0x33</t> | |||
</dd> | </dd> | |||
<dt>Name:</dt> | <dt>Name:</dt> | |||
<dd> | <dd> | |||
<t>H3_DATAGRAM_ERROR</t> | <t>H3_DATAGRAM_ERROR</t> | |||
</dd> | </dd> | |||
<dt>Description:</dt> | <dt>Description:</dt> | |||
<dd> | <dd> | |||
<t>Datagram or capsule protocol parse error</t> | <t>Datagram or Capsule Protocol parse error</t> | |||
</dd> | </dd> | |||
<dt>Status:</dt> | <dt>Status:</dt> | |||
<dd> | <dd> | |||
<t>provisional (permanent if this document is approved)</t> | <t>permanent</t> | |||
</dd> | </dd> | |||
<dt>Specification:</dt> | <dt>Reference:</dt> | |||
<dd> | <dd> | |||
<t>This Document</t> | <t>RFC 9297</t> | |||
</dd> | </dd> | |||
<dt>Change Controller:</dt> | <dt>Change Controller:</dt> | |||
<dd> | <dd> | |||
<t>IETF</t> | <t>IETF</t> | |||
</dd> | </dd> | |||
<dt>Contact:</dt> | <dt>Contact:</dt> | |||
<dd> | <dd> | |||
<t>HTTP_WG; HTTP working group; ietf-http-wg@w3.org</t> | <t>HTTP_WG; HTTP working group; ietf-http-wg@w3.org</t> | |||
</dd> | </dd> | |||
<dt>Notes:</dt> | ||||
<dd> | ||||
<t>None</t> | ||||
</dd> | ||||
</dl> | </dl> | |||
</section> | </section> | |||
<section anchor="iana-hdr"> | <section anchor="iana-hdr"> | |||
<name>HTTP Header Field Name</name> | <name>HTTP Header Field Name</name> | |||
<t>This document will request IANA to register the following entry in th | <t>IANA has registered the following entry in the "Hypertext Transfer Pr | |||
e "HTTP | otocol | |||
Field Name" registry maintained at | (HTTP) Field Name Registry" maintained at | |||
<<eref target="https://www.iana.org/assignments/http-fields"/>>:</t> | <<eref target="https://www.iana.org/assignments/http-fields"/>>:</t> | |||
<dl spacing="compact"> | <dl spacing="compact"> | |||
<dt>Field Name:</dt> | <dt>Field Name:</dt> | |||
<dd> | <dd> | |||
<t>Capsule-Protocol</t> | <t>Capsule-Protocol</t> | |||
</dd> | </dd> | |||
<dt>Template:</dt> | <dt>Template:</dt> | |||
<dd> | <dd> | |||
<t>None</t> | <t>None</t> | |||
</dd> | </dd> | |||
<dt>Status:</dt> | <dt>Status:</dt> | |||
<dd> | <dd> | |||
<t>provisional (permanent if this document is approved)</t> | <t>permanent</t> | |||
</dd> | </dd> | |||
<dt>Reference:</dt> | <dt>Reference:</dt> | |||
<dd> | <dd> | |||
<t>This document</t> | <t>RFC 9297</t> | |||
</dd> | </dd> | |||
<dt>Comments:</dt> | <dt>Comments:</dt> | |||
<dd> | <dd> | |||
<t>None</t> | <t>None</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
</section> | </section> | |||
<section anchor="iana-types"> | <section anchor="iana-types"> | |||
<name>Capsule Types</name> | <name>Capsule Types</name> | |||
<t>This document establishes a registry for HTTP capsule type codes. The | <t>This document establishes a registry for HTTP Capsule Type codes. The | |||
"HTTP | "HTTP | |||
Capsule Types" registry governs a 62-bit space, and operates under the QUIC | Capsule Types" registry governs a 62-bit space and operates under the QUIC | |||
registration policy documented in <xref section="22.1" sectionFormat="of" target | registration policy documented in <xref section="22.1" sectionFormat="of" target | |||
="QUIC"/>. This new registry | ="RFC9000"/>. This new registry | |||
includes the common set of fields listed in <xref section="22.1.1" sectionFormat | includes the common set of fields listed in <xref section="22.1.1" sectionFormat | |||
="of" target="QUIC"/>. In | ="of" target="RFC9000"/>. In | |||
addition to those common fields, all registrations in this registry <bcp14>MUST< /bcp14> include | addition to those common fields, all registrations in this registry <bcp14>MUST< /bcp14> include | |||
a "Capsule Type" field which contains a short name or label for the capsule type .</t> | a "Capsule Type" field that contains a short name or label for the Capsule Type. </t> | |||
<t>Permanent registrations in this registry are assigned using the Speci fication | <t>Permanent registrations in this registry are assigned using the Speci fication | |||
Required policy (<xref section="4.6" sectionFormat="of" target="IANA-POLICY"/>), except for values | Required policy (<xref section="4.6" sectionFormat="of" target="RFC8126"/>), exc ept for values | |||
between 0x00 and 0x3f (in hexadecimal; inclusive), which are assigned using | between 0x00 and 0x3f (in hexadecimal; inclusive), which are assigned using | |||
Standards Action or IESG Approval as defined in Sections <xref target="IANA-POLI | Standards Action or IESG Approval as defined in Sections <xref target="RFC8126" | |||
CY" section="4.9" sectionFormat="bare"/> and <xref target="IANA-POLICY" section= | section="4.9" sectionFormat="bare"/> and <xref target="RFC8126" section="4.10" s | |||
"4.10" sectionFormat="bare"/> of <xref target="IANA-POLICY"/>.</t> | ectionFormat="bare"/> of <xref target="RFC8126"/>.</t> | |||
<t>Capsule types with a value of the form 0x29 * N + 0x17 for integer va | <t>Capsule Types with a value of the form 0x29 * N + 0x17 for integer va | |||
lues of N | lues of N | |||
are reserved to exercise the requirement that unknown capsule types be ignored. | are reserved to exercise the requirement that unknown Capsule Types be ignored. | |||
These capsules have no semantics and can carry arbitrary values. These values | These Capsules have no semantics and can carry arbitrary values. These values | |||
<bcp14>MUST NOT</bcp14> be assigned by IANA and <bcp14>MUST NOT</bcp14> appear i n the listing of assigned | <bcp14>MUST NOT</bcp14> be assigned by IANA and <bcp14>MUST NOT</bcp14> appear i n the listing of assigned | |||
values.</t> | values.</t> | |||
<t>This registry initially contains the following entry:</t> | <t>This registry initially contains the following entry:</t> | |||
<dl spacing="compact"> | <dl spacing="compact"> | |||
<dt>Value:</dt> | <dt>Value:</dt> | |||
<dd> | <dd> | |||
<t>0x00</t> | <t>0x00</t> | |||
</dd> | </dd> | |||
<dt>Capsule Type:</dt> | <dt>Capsule Type:</dt> | |||
<dd> | <dd> | |||
<t>DATAGRAM</t> | <t>DATAGRAM</t> | |||
</dd> | </dd> | |||
<dt>Status:</dt> | <dt>Status:</dt> | |||
<dd> | <dd> | |||
<t>permanent</t> | <t>permanent</t> | |||
</dd> | </dd> | |||
<dt>Specification:</dt> | <dt>Reference:</dt> | |||
<dd> | <dd> | |||
<t>This document</t> | <t>RFC 9297</t> | |||
</dd> | </dd> | |||
<dt>Change Controller:</dt> | <dt>Change Controller:</dt> | |||
<dd> | <dd> | |||
<t>IETF</t> | <t>IETF</t> | |||
</dd> | </dd> | |||
<dt>Contact:</dt> | <dt>Contact:</dt> | |||
<dd> | <dd> | |||
<t>MASQUE Working Group <eref target="mailto:masque@ietf.org">masque @ietf.org</eref></t> | <t>MASQUE Working Group <eref target="mailto:masque@ietf.org">masque @ietf.org</eref></t> | |||
</dd> | </dd> | |||
<dt>Notes:</dt> | <dt>Notes:</dt> | |||
<dd> | <dd> | |||
<t>None</t> | <t>None</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
</section> | </section> | |||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<displayreference target="H1" to="HTTP/1.1"/> | ||||
<displayreference target="H2" to="HTTP/2"/> | <displayreference target="RFC9221" to="QUIC-DGRAM"/> | |||
<displayreference target="H3" to="HTTP/3"/> | <displayreference target="RFC9110" to="HTTP"/> | |||
<references> | <displayreference target="RFC9112" to="HTTP/1.1"/> | |||
<displayreference target="RFC9113" to="HTTP/2"/> | ||||
<displayreference target="RFC9114" to="HTTP/3"/> | ||||
<displayreference target="RFC8126" to="IANA-POLICY"/> | ||||
<displayreference target="RFC9000" to="QUIC"/> | ||||
<displayreference target="RFC8941" to="STRUCTURED-FIELDS"/> | ||||
<displayreference target="RFC0793" to="TCP"/> | ||||
<displayreference target="RFC8899" to="DPLPMTUD"/> | ||||
<displayreference target="RFC8441" to="EXT-CONNECT2"/> | ||||
<displayreference target="RFC9220" to="EXT-CONNECT3"/> | ||||
<displayreference target="RFC9218" to="PRIORITY"/> | ||||
<displayreference target="RFC6455" to="WEBSOCKET"/> | ||||
<references> | ||||
<name>References</name> | <name>References</name> | |||
<references> | <references> | |||
<name>Normative References</name> | <name>Normative References</name> | |||
<reference anchor="H1"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9221. | |||
<front> | xml"/> | |||
<title>HTTP/1.1</title> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9110. | |||
<author fullname="R. Fielding" initials="R." role="editor" surname=" | xml"/> | |||
Fielding"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9112. | |||
<organization/> | xml"/> | |||
</author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9113. | |||
<author fullname="M. Nottingham" initials="M." role="editor" surname | xml"/> | |||
="Nottingham"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9114. | |||
<organization/> | xml"/> | |||
</author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8126. | |||
<author fullname="J. Reschke" initials="J." role="editor" surname="R | xml"/> | |||
eschke"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9000. | |||
<organization/> | xml"/> | |||
</author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119. | |||
<date month="June" year="2022"/> | xml"/> | |||
<abstract> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174. | |||
<t>The Hypertext Transfer Protocol (HTTP) is a stateless applicati | xml"/> | |||
on-level protocol for distributed, collaborative, hypertext information systems. | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8941. | |||
This document specifies the HTTP/1.1 message syntax, message parsing, connectio | xml"/> | |||
n management, and related security concerns. </t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.0793. | |||
<t>This document obsoletes portions of RFC 7230.</t> | xml"/> | |||
</abstract> | ||||
</front> | ||||
<seriesInfo name="STD" value="99"/> | ||||
<seriesInfo name="RFC" value="9112"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9112"/> | ||||
</reference> | ||||
<reference anchor="H2"> | ||||
<front> | ||||
<title>HTTP/2</title> | ||||
<author fullname="M. Thomson" initials="M." role="editor" surname="T | ||||
homson"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="C. Benfield" initials="C." role="editor" surname=" | ||||
Benfield"> | ||||
<organization/> | ||||
</author> | ||||
<date month="June" year="2022"/> | ||||
<abstract> | ||||
<t>This specification describes an optimized expression of the sem | ||||
antics 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 excha | ||||
nges on the same connection.</t> | ||||
<t>This document obsoletes RFCs 7540 and 8740.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="9113"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9113"/> | ||||
</reference> | ||||
<reference anchor="H3"> | ||||
<front> | ||||
<title>HTTP/3</title> | ||||
<author fullname="M. Bishop" initials="M." role="editor" surname="Bi | ||||
shop"> | ||||
<organization/> | ||||
</author> | ||||
<date month="June" year="2022"/> | ||||
<abstract> | ||||
<t>The QUIC transport protocol has several features that are desir | ||||
able in a transport for HTTP, such as stream multiplexing, per-stream flow contr | ||||
ol, and low-latency connection establishment. This document describes a mapping | ||||
of HTTP semantics over QUIC. This document also identifies HTTP/2 features tha | ||||
t are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP | ||||
/3.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="9114"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9114"/> | ||||
</reference> | ||||
<reference anchor="HTTP"> | ||||
<front> | ||||
<title>HTTP Semantics</title> | ||||
<author fullname="R. Fielding" initials="R." role="editor" surname=" | ||||
Fielding"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="M. Nottingham" initials="M." role="editor" surname | ||||
="Nottingham"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="J. Reschke" initials="J." role="editor" surname="R | ||||
eschke"> | ||||
<organization/> | ||||
</author> | ||||
<date month="June" year="2022"/> | ||||
<abstract> | ||||
<t>The Hypertext Transfer Protocol (HTTP) is a stateless applicati | ||||
on-level protocol for distributed, collaborative, hypertext information systems. | ||||
This document describes the overall architecture of HTTP, establishes common te | ||||
rminology, 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. </t> | ||||
<t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7 | ||||
232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="STD" value="97"/> | ||||
<seriesInfo name="RFC" value="9110"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9110"/> | ||||
</reference> | ||||
<reference anchor="DGRAM"> | ||||
<front> | ||||
<title>An Unreliable Datagram Extension to QUIC</title> | ||||
<author fullname="T. Pauly" initials="T." surname="Pauly"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="E. Kinnear" initials="E." surname="Kinnear"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="D. Schinazi" initials="D." surname="Schinazi"> | ||||
<organization/> | ||||
</author> | ||||
<date month="March" year="2022"/> | ||||
<abstract> | ||||
<t>This document defines an extension to the QUIC transport protoc | ||||
ol to add support for sending and receiving unreliable datagrams over a QUIC con | ||||
nection.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="9221"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9221"/> | ||||
</reference> | ||||
<reference anchor="TCP"> | ||||
<front> | ||||
<title>Transmission Control Protocol</title> | ||||
<author fullname="J. Postel" initials="J." surname="Postel"> | ||||
<organization/> | ||||
</author> | ||||
<date month="September" year="1981"/> | ||||
</front> | ||||
<seriesInfo name="STD" value="7"/> | ||||
<seriesInfo name="RFC" value="793"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC0793"/> | ||||
</reference> | ||||
<reference anchor="RFC2119"> | ||||
<front> | ||||
<title>Key words for use in RFCs to Indicate Requirement Levels</tit | ||||
le> | ||||
<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 sig | ||||
nify the requirements in the specification. These words are often capitalized. | ||||
This document defines these words as they should be interpreted in IETF document | ||||
s. 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</ti | ||||
tle> | ||||
<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 protoco | ||||
l specifications. This document aims to reduce the ambiguity by clarifying tha | ||||
t only UPPERCASE usage of the key words have the defined special meanings.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="8174"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
</reference> | ||||
<reference anchor="QUIC"> | ||||
<front> | ||||
<title>QUIC: A UDP-Based Multiplexed and Secure Transport</title> | ||||
<author fullname="J. Iyengar" initials="J." role="editor" surname="I | ||||
yengar"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="M. Thomson" initials="M." role="editor" surname="T | ||||
homson"> | ||||
<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 communic | ||||
ation, low-latency connection establishment, and network path migration. QUIC in | ||||
cludes security measures that ensure confidentiality, integrity, and availabilit | ||||
y in a range of deployment circumstances. Accompanying documents describe the i | ||||
ntegration of TLS for key negotiation, loss detection, and an exemplary congesti | ||||
on control algorithm.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="9000"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9000"/> | ||||
</reference> | ||||
<reference anchor="STRUCT-FIELD"> | ||||
<front> | ||||
<title>Structured Field Values for HTTP</title> | ||||
<author fullname="M. Nottingham" initials="M." surname="Nottingham"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="P-H. Kamp" initials="P-H." surname="Kamp"> | ||||
<organization/> | ||||
</author> | ||||
<date month="February" year="2021"/> | ||||
<abstract> | ||||
<t>This document describes a set of data types and associated algo | ||||
rithms that are intended to make it easier and safer to define and handle HTTP h | ||||
eader and trailer fields, known as "Structured Fields", "Structured Headers", or | ||||
"Structured Trailers". It is intended for use by specifications of new HTTP fie | ||||
lds that wish to use a common syntax that is more restrictive than traditional H | ||||
TTP field values.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8941"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8941"/> | ||||
</reference> | ||||
<reference anchor="IANA-POLICY"> | ||||
<front> | ||||
<title>Guidelines for Writing an IANA Considerations Section in RFCs | ||||
</title> | ||||
<author fullname="M. Cotton" initials="M." surname="Cotton"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="B. Leiba" initials="B." surname="Leiba"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="T. Narten" initials="T." surname="Narten"> | ||||
<organization/> | ||||
</author> | ||||
<date month="June" year="2017"/> | ||||
<abstract> | ||||
<t>Many protocols make use of points of extensibility that use con | ||||
stants to identify various protocol parameters. To ensure that the values in th | ||||
ese fields do not have conflicting uses and to promote interoperability, their a | ||||
llocations are often coordinated by a central record keeper. For IETF protocols | ||||
, that role is filled by the Internet Assigned Numbers Authority (IANA).</t> | ||||
<t>To make assignments in a given registry prudently, guidance des | ||||
cribing the conditions under which new values should be assigned, as well as whe | ||||
n and how modifications to existing values can be made, is needed. This documen | ||||
t defines a framework for the documentation of these guidelines by specification | ||||
authors, in order to assure that the provided guidance for the IANA Considerati | ||||
ons is clear and addresses the various issues that are likely in the operation o | ||||
f a registry.</t> | ||||
<t>This is the third edition of this document; it obsoletes RFC 52 | ||||
26.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="26"/> | ||||
<seriesInfo name="RFC" value="8126"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8126"/> | ||||
</reference> | ||||
</references> | </references> | |||
<references> | <references> | |||
<name>Informative References</name> | <name>Informative References</name> | |||
<reference anchor="WEBSOCKET"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8899. | |||
<front> | xml"/> | |||
<title>The WebSocket Protocol</title> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8441. | |||
<author fullname="I. Fette" initials="I." surname="Fette"> | xml"/> | |||
<organization/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9220. | |||
</author> | xml"/> | |||
<author fullname="A. Melnikov" initials="A." surname="Melnikov"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9218. | |||
<organization/> | xml"/> | |||
</author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6455. | |||
<date month="December" year="2011"/> | xml"/> | |||
<abstract> | ||||
<t>The WebSocket Protocol enables two-way communication between a | ||||
client running untrusted code in a controlled environment to a remote host that | ||||
has opted-in to communications from that code. The security model used for this | ||||
is the origin-based security model commonly used by web browsers. The protocol | ||||
consists of an opening handshake followed by basic message framing, layered ove | ||||
r TCP. The goal of this technology is to provide a mechanism for browser-based | ||||
applications that need two-way communication with servers that does not rely on | ||||
opening multiple HTTP connections (e.g., using XMLHttpRequest or <iframe>s | ||||
and long polling). [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6455"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6455"/> | ||||
</reference> | ||||
<reference anchor="EXT-CONNECT2"> | ||||
<front> | ||||
<title>Bootstrapping WebSockets with HTTP/2</title> | ||||
<author fullname="P. McManus" initials="P." surname="McManus"> | ||||
<organization/> | ||||
</author> | ||||
<date month="September" year="2018"/> | ||||
<abstract> | ||||
<t>This document defines a mechanism for running the WebSocket Pro | ||||
tocol (RFC 6455) over a single stream of an HTTP/2 connection.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8441"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8441"/> | ||||
</reference> | ||||
<reference anchor="EXT-CONNECT3"> | ||||
<front> | ||||
<title>Bootstrapping WebSockets with HTTP/3</title> | ||||
<author fullname="R. Hamilton" initials="R." surname="Hamilton"> | ||||
<organization/> | ||||
</author> | ||||
<date month="June" year="2022"/> | ||||
<abstract> | ||||
<t>The mechanism for running the WebSocket Protocol over a single | ||||
stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-ver | ||||
sion-specific details need to be specified. This document describes how the mech | ||||
anism is adapted for HTTP/3.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="9220"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9220"/> | ||||
</reference> | ||||
<reference anchor="PRIORITY"> | ||||
<front> | ||||
<title>Extensible Prioritization Scheme for HTTP</title> | ||||
<author fullname="K. Oku" initials="K." surname="Oku"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="L. Pardue" initials="L." surname="Pardue"> | ||||
<organization/> | ||||
</author> | ||||
<date month="June" year="2022"/> | ||||
<abstract> | ||||
<t>This document describes a scheme that allows an HTTP client to | ||||
communicate its preferences for how the upstream server prioritizes responses to | ||||
its requests, and also allows a server to hint to a downstream intermediary how | ||||
its responses should be prioritized when they are forwarded. This document def | ||||
ines the Priority header field for communicating the initial priority in an HTTP | ||||
version-independent manner, as well as HTTP/2 and HTTP/3 frames for reprioritiz | ||||
ing responses. These share a common format structure that is designed to provide | ||||
future extensibility.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="9218"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9218"/> | ||||
</reference> | ||||
<reference anchor="DPLPMTUD"> | ||||
<front> | ||||
<title>Packetization Layer Path MTU Discovery for Datagram Transport | ||||
s</title> | ||||
<author fullname="G. Fairhurst" initials="G." surname="Fairhurst"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="T. Jones" initials="T." surname="Jones"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="M. Tüxen" initials="M." surname="Tüxen"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="I. Rüngeler" initials="I." surname="Rüngeler"> | ||||
<organization/> | ||||
</author> | ||||
<author fullname="T. Völker" initials="T." surname="Völker"> | ||||
<organization/> | ||||
</author> | ||||
<date month="September" year="2020"/> | ||||
<abstract> | ||||
<t>This document specifies Datagram Packetization Layer Path MTU D | ||||
iscovery (DPLPMTUD). This is a robust method for Path MTU Discovery (PMTUD) for | ||||
datagram Packetization Layers (PLs). It allows a PL, or a datagram application t | ||||
hat uses a PL, to discover whether a network path can support the current size o | ||||
f datagram. This can be used to detect and reduce the message size when a sende | ||||
r encounters a packet black hole. It can also probe a network path to discover w | ||||
hether the maximum packet size can be increased. This provides functionality fo | ||||
r datagram transports that is equivalent to the PLPMTUD specification for TCP, s | ||||
pecified in RFC 4821, which it updates. It also updates the UDP Usage Guidelines | ||||
to refer to this method for use with UDP datagrams and updates SCTP.</t> | ||||
<t>The document provides implementation notes for incorporating Da | ||||
tagram PMTUD into IETF datagram transports or applications that use datagram tra | ||||
nsports.</t> | ||||
<t>This specification updates RFC 4960, RFC 4821, RFC 6951, RFC 80 | ||||
85, and RFC 8261.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8899"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8899"/> | ||||
</reference> | ||||
</references> | </references> | |||
</references> | </references> | |||
<section numbered="false" anchor="acks"> | <section numbered="false" anchor="acks"> | |||
<name>Acknowledgments</name> | <name>Acknowledgments</name> | |||
<t>Portions of this document were previously part of the QUIC DATAGRAM fra me | <t>Portions of this document were previously part of the QUIC DATAGRAM fra me | |||
definition itself, the authors would like to acknowledge the authors of that | definition itself; the authors would like to acknowledge the authors of that | |||
document and the members of the IETF MASQUE working group for their suggestions. | document and the members of the IETF MASQUE working group for their suggestions. | |||
Additionally, the authors would like to thank Martin Thomson for suggesting the | Additionally, the authors would like to thank <contact fullname="Martin Thomson" /> for suggesting the | |||
use of an HTTP/3 setting. Furthermore, the authors would like to | use of an HTTP/3 setting. Furthermore, the authors would like to | |||
thank Ben Schwartz for writing the first proposal that used two layers of | thank <contact fullname="Ben Schwartz"/> for substantive input. The final design | |||
indirection. The final design in this document came out of the HTTP Datagrams | in this document came out of the HTTP Datagrams | |||
Design Team, whose members were Alan Frindell, Alex Chernyakhovsky, Ben | Design Team, whose members were <contact fullname="Alan Frindell"/>, | |||
Schwartz, Eric Rescorla, Marcus Ihlar, Martin Thomson, Mike Bishop, Tommy Pauly, | <contact fullname="Alex Chernyakhovsky"/>, <contact fullname="Ben | |||
Victor Vasiliev, and the authors of this document. The authors thank Mark | Schwartz"/>, <contact fullname="Eric Rescorla"/>, <contact fullname="Marcus Ihla | |||
Nottingham and Philipp Tiesel for their helpful comments.</t> | r"/>, | |||
<contact fullname="Martin Thomson"/>, <contact fullname="Mike Bishop"/>, <contac | ||||
t fullname="Tommy Pauly"/>, | ||||
<contact fullname="Victor Vasiliev"/>, and the authors of this document. The aut | ||||
hors thank | ||||
<contact fullname="Mark Nottingham"/> and <contact fullname="Philipp Tiesel"/> f | ||||
or their helpful comments.</t> | ||||
</section> | </section> | |||
</back> | </back> | |||
<!-- ##markdown-source: | ||||
H4sIAAAAAAAAA90963Ybt5n/8RSo/CNSl6R1cZNYTtoqkhxr17FVS062p+3p | ||||
Gc6AJNbDGXYwFMXouM+yz7JPtt8NGMyFsrtt95zdHzkRZzDAh+9+Azwej1Vt | ||||
69yc6le3t9f6IqmTeZUsnU6KTNcLo8+TlVvnRl9XZV2mZa6S6bQyd93xKivT | ||||
IlnCPFmVzOqxNfVsvEzcX9ZmvDgZZzJufHSk4NsT5dbTpXXOlkW9XcFXV5e3 | ||||
L1Wa1GZeVttT7epMJZVJTvVtlRRuVVa12sxP9Q9nN797f6mK9XJqqlMF05pT | ||||
lZaFM4Vbu1NdV2uj7kyxhsdaz6tyvTrVe/zVHjzhxfZ+KqsPtpjr73EAPl8m | ||||
NofnDPBvEfhJWc3xTVKlC3izqOuVO336FAfiI3tnJn7YU3zwdFqVG2ee8hRP | ||||
8dO5rRfrKXxMyNjMBR9PH8UQfpjDtlwdrdqeYMITT2z5+FSPv50s6mW+pz6Y | ||||
7aasMkTXWP9lbVP6AxemP/xo+jFLXE1/1OuiMLmTvyvgH2CYPCeG2SRbnZWb | ||||
gl7ysmHKcTFXybpelBWtB/9pbQug28VE3wBSi+RnSw+ZlS6SO5u1XwC6T/X3 | ||||
ZTkHlnz9+pyeuboyBtB19OXhoT5brhaAHpPAQ32dVB8AHhqV2hoY64dyXdSJ | ||||
LfSP1mzoeWXmwIWn+vyMh5UZrPz82eGzE/kNHyBLvi9sbQCaGomjyxmsZCqb | ||||
JjTKMANlTmAl3vjtHJ9O0nLZ3uzrCQKWEV78Vl+v08TFj2GjSWF/TmoGLi/X | ||||
2Qw4z8TL5fjRir6ZHD+bfBUtqIqyWsLHdyQIr45O6btvT/W7l+fPj46O6Wdm | ||||
3SpPtizLT48mRzj0uDP0ZGAofv7qpDPw2cDAE6XUeDzWyRSIlKS1UrcL64A/ | ||||
0vXSFLXOjEsrOwWEttXJSCeA+QIkGfevZ2XFP7cotct1XttVbu5NNlKrssZB | ||||
wH1bvS4qk9tkCryRBUUGKLeZAX3GS8A0hUlx1olSV4WAOeqqvxTGT412CGSY | ||||
FlZwCACy+e/eX53ri7Pbs+/fnf2gzD1Agdpson9amKI/Qs9gWqNh7+siuUMl | ||||
glDCttYF4MBW+HOEn21xaRWWDut19TBiaFkCj89NYaok340uRIWyve072P9n | ||||
6nxQggB6AVvMQAJw9rUzerrlKcPe3Qi4rtbJapWDXPg1iP5Lm2W5UeqJvgJp | ||||
KrM1gaAfnlj8+VEgaWbS+yANmZnZAhYE2B8ebhhqEHKUvV/g+G+Z7w4/fjzQ | ||||
rlya2i6BkQpjMlWXOklT4xzht8oJEbU3JXrlNzYDPbGu4Cu3Thc6cS0Wgj/u | ||||
TLVFWFQ5m5kKYIFNPzz84gJJSssfHx/h8rCeKeQroWaYe6JfAsbMfbJcMY2t | ||||
A5O1zjNUmeVGW8EIgghcF0EAqyM2cMNElrdv3lye32rY6aLMRsg9SZbBZ2oI | ||||
agDpJzO9KdMPpnYA9G9+uvzu5u35v13eIuBfPvvVrz5+ZBF4eAjS8vEjA/g3 | ||||
S2i9SGow6itEryNopzazFRMNuBNZq1zxD5CjSIQBM+kiKeYGt4mANBKruhIL | ||||
wmVhj122Be5MnCtTm6CG3oD65yGVAePjaseChQ6FRgYFjVnjYsAtLoF1YQHU | ||||
IS9w4dokmcjhY0yvYlb1vNOn0cGINo4zgVJegUwgiQhANJdCX7QmtFUgB2kP | ||||
Ah6IUIGZRa4oYSCge4B/Ee06oH2ADVSAbjOsl8JGgA2IrT9+xKUbHQV8JKr8 | ||||
4eHVCTD7oK5E3BAwabJKpjYHYzvpKvskd2XETwgLzdRTNyTwKT8ljixZVBQr | ||||
taRIiVk6YLCu7GFgogkKkBSQRSd8DLsB02kIK0AchF6E7H+gtctK8TT4/QCR | ||||
ygI4Hn6BMwMr9gAcBeWDjKG8LQYUvALdgquxzcUHx/gAueH2/BoVEfwPpfnw | ||||
q+cnJM3qyRN9HqSSNfoFqlHLvx+egFJ1H5EyRoPrp9H3c+Ahv7+53Rvx//Wb | ||||
t/T3u0vAxbvLC/z75tXZ69fhDyUjbl69ff/6ovmr+fL87Q8/XL654I/hqW49 | ||||
UuCR/36PZWPv7fXt1ds3Z6/3kOxt3YNyA7SfshxWq8qgfIM29kxEtuG78+v/ | ||||
+s+jZ4gOQMXx0dFzQBL/+Proq2fwA1mfVyNS8E9WCauVSSqcBeURWM7WwKUj | ||||
JIZbgBOrka6A11/+ATHzp1P9zTRdHT37tTzADbceepy1HhLO+k96HzMSBx4N | ||||
LBOw2XrewXQb3rPft357vEcPuwK7RgkBxC9tUeblfAviUC4RtSgkZP4ODw+J | ||||
734S/m9bDjTfLlJWEHyxLuZ31jsr4KjKWguDLkTCL3ixYPgnJyijuDQsqXnF | ||||
mTV5xoKD3IMLBL09B+06UkGVmwJd+yxyqe6SiiRxnJtiDipZPuKROKgLAboe | ||||
ygNwJaPvkhyMDGybbAt6H8KzfsGS1S4g0S7XS82xK25luoVIQoFtQztUbdkY | ||||
t3DIyEIKQBCJIrA0mYWhe6BFwB9xpBm9vYjes4wMeE8nk6+85hR90dWioCGC | ||||
M9B3ENHS7vY0+yY/8s7V3+adj9hMBkcB50fBBYffOTSjE30GIvsZroCfW7yB | ||||
lpFtf8k7YZIlPjRowdT3/NlCSLgATEzUTyAMNHdkEMCyzEvSKbZI8zXx1YCd | ||||
fgH+vgELy9KA/PXGzEvAXO25VWzUgH1yRIbOfsDJFCgyfWcTmiL2tGRzztS4 | ||||
gqP1gVHktxfqou2DsCEaAdQtuljnzRs5yN6wg8lC+NBBhYjQVCM9XdeDHnbb | ||||
wE6GaFMIOsC5R8YKpNodIfkthdxT8Ch27+1ocj8KbiOtC3GrTWuwGg6i/SS3 | ||||
P7NI4YIRYygJnUAsMSbr44cCo2aD74eRkNsPZmOdUZ3hj+JDP44P9Vn46KxA | ||||
xo2MpY9EvSh56SKnv+wKF8cB5h4jQEtYi0KCZScSAuQ4Ym+agT1mp7+/vKUd | ||||
Xb8FEFirii4DQJYJaJOUGT6S8zb0LxpKDPmqOKHfVVdX4OIwNa3tt4TpJfgU | ||||
1fMs7NfPSG46aHB7J4SwNbnPXR3UQpBeJMgR6kOBLkZ7V90oCykpC1RMFjbI | ||||
MLe8o3kheOEYAmTaolpFfTGKR8g+eA7YfzIFuoRw6eTPXqf8+fLdu7fv1P7h | ||||
/cnJwaQb4mtwI0heKlTbrN9wAdD7aLAcyj8bd4xmledS5JalQe1j3ZLw9Niu | ||||
xZGV7cS2SdSjyC+p2xDuYRYH9xtIg3+wh7BTcQavY1ZigEFGn5Y4Veqvf/0r | ||||
0DG1dgzxouoAox+U1r9bwxsgyw1j9upC79uDEebGWixynWzzMsn0/mQCbz/i | ||||
xOrhVD+J8+LiBVEu/tu97mIv6e0e7Lu3JAB6qs92+jIck5WU83Ti9YC/4qOd | ||||
NLdAtTH5YqRb2yZcWIYmYcckYvsOj4NVsMEEzMp1pfcRsfiQwkv/FEJsICW5 | ||||
VgjBLElFKFohO+teFNGyUF0o9RCUbiT5qxJYcpHcGQ/91YXjBTB7yuCg3hV4 | ||||
DjA+NDpPqjkKSW7mMCPxSvhcUAZbPv4G9Nmvvzz+5in+f3w0UhDR1r3PA4r7 | ||||
DNJMcugnmeh3KN8rzEmoxu0IxCfY2XlA75bXEr8zSDMuwMFR47moxkBpENiS | ||||
nE70kfvirkXcO4bAsy4xGaJpJaws7OPZAZw1Qnsj1EllQv5OXIIm00BGwvqI | ||||
vSP7+k1Zm4jlWIDFwTLLFSUWGowBQoZCdobHg2vRUy4xpIO43GcTMA/kjWVf | ||||
rmTdx/Crd+FXfQK/LaXm48go3Zxj4pI9jKoyblUW5DYyQ37hcBgoUFTA4OWV | ||||
K1NANIKIyAaN0qwmPbBzNhkZJkxzQF3WsjxZ5LF7jDgLqgZNfFaVEEVnLfsY | ||||
82/fQroBwViCM0KkEcBUZChrvTU1rAkqP2U6dOwix9MG6z4VwcP8E4pXAVag | ||||
0XSNqVy006CIwDcBxQkv9iVKK6uMgzOw2OUa9UllVwfATph3TDaJRYdFETYR | ||||
kig7O4TdfwpO2IVBEggydLamPMlnqUnwMZcWU6K2VpJd+FvZG9XH1QUz9kR/ | ||||
T/UHQkviB4rDC8oASFCibyuBLSbdYL00wWjGuyvoDaLzwCUDCJTni5o0uFph | ||||
zcimAPw0AY9DIt7MsAvkHV0c06h7gDpdAymKdMt7FQXqFBUmGn1EaoMCEyDT | ||||
dWXLCvD2c6BpT1BlU1Fc3YrVwbldY75fdZwl8V0XoHAA9pVfJwqC2XBFY52d | ||||
A8Foe6ViXZWWy+W6oLIKPF61oV1RNgB2bMR1ekLK+uby9vbqzfc3f47Ukd/W | ||||
Dcd54FL5iE+pyyJblRadONS2Fhg5JS+TTJyt9Mp4hyIkVTY2FziDGhHb0+Bt | ||||
uiWF5ak1CBWrRx+Nis+sgh09mnDGsuW7DE7kZ/BaSnTCIUo+WNoznkLBFIdh | ||||
hy5sqsOLnuQ7dhk7rFefAVMs9BIV8IaEQSGmE2ixequPPu38RxJKE7L0wdoB | ||||
DhZSpQa93wHTU9v8kxtRqJVJG09LWJQDKeDg4c0J+chhZw1Fbrc+HL+7vZVS | ||||
C/K+q0tJobeoDGE3bP4Lpx6DaKIvStK6Ytpd5Nwi1chgDuRtKFAiQMAZoEKZ | ||||
1G95VSxBphTncDkRHA4ejKLrQQccKpo/eZz6c1KxJEAFciM4uqDXWLgCHxiS | ||||
lVrJY9lBL9+gQ72Bx1N0TWPemM2Nob6aW4sbUlLkEg9BJiRcD4QDj26AqhOs | ||||
CRgLDlshIjTgXDZLGu8NsxSb1gqPUpG3ItqZKeC3DjjL3CL5QF54jEnVxSRt | ||||
LeNFMShGAR7FyHxUjNSjYqSvfJ3A+UT2MrmnrO4KJ6xrv/JnbRf8T+BB3Als | ||||
CmXkirRAlMAXzdAxkHHRT4TO+9GxwQLLsUm24i1+FnVbMjtS5g4kwTJnREV9 | ||||
sHiG9SJXRxHzkTmPPHmqJixMTl6MSu5Km+k9Bwadmq/Kdb3XpB3BZtt664tY | ||||
YMEoDDibwih9gX1M+keplir1xz/88Q/vXp5rk1mg9qkG9CSUh1iWd1KFcCIo | ||||
U07IrdZTD/7kT39S6qZc4ngOTR1TC205LeRWIPUzv1vcGrjWlhoAgH8YQxjb | ||||
6qsMk9sQKFQqpBmSYFqFdb3BFeSz7j2grMcuoqig1rh0ySoNZYkBbAAH1C9J | ||||
KoqovsxJXsD/D5KEVPxZKDejukWVzyzEHpE30T5x6esaAOcgF0/0WyzDhm1R | ||||
xE1GoWcP0L9RHcvaLlyHRQlQMUy4o7VIKBU3PE0hTA6ay6Ejj/ZocFXi+wKH | ||||
0IzO5DAFPed6Nchv6WqFn2DBKsZSk6ForQ2UEapgx2HlfQcyhOgfuZDy4vkd | ||||
BqOtiaPkVq94LSlbF5UoWi4oulyPVaJ3NzGpxzqJHskLqycBKPAV/Rul3oKb | ||||
2iT0sP3lnnSBb12AJ76vha0AvXi/ggXAnt6WHwx1TlDNo6mvxdWpA1K3TVae | ||||
c401f5lUUmzxpQ2ZWTUw7fOu/ORfTb4enPuY2CHKH7YWUa1FLu+lG6Tp8uis | ||||
9pvLf78dy9tjrJB+/ewZFvFhDdV+eyLtQ9i95Dsl2oon4M8Nko3zVv3eCYAb | ||||
9Mdf1ka6JDBik6zgWNyM9Sr3jJtFzQEweAelFHJSuihLQg5iHhBYe8VkQtxA | ||||
DrK0yjURS0hBj+ElZRltwflOCi2LbFyXY0PV+XYxIST22BKxPoVgx5moA0RF | ||||
hU9r3A60dAp0oRLWSbcrCPTTBfviUpblxplPtuQwNr1lFM2mdnSUPAIkNclE | ||||
kEZoVKFmhCzbDu4xxVvBFOLuDVUggnxPwVhmKpTlCbmbnfqGSwldrSVZCl8v | ||||
HjOpPg4ysm8EQGTsUYcXj94je9mhOfdRDeehfc2ckc0pe552YRLM2zQWIq58 | ||||
eB849DcCODApZ2ucCX1gPgyTKMytqYNwts71vp2YyUgf398fYLfPmoUj88+P | ||||
Do8Oom5Sr650tFckkLOY2MY9gw/JGyl7nn20NeKeaZ4UH3SOaQGfy5dMsIAZ | ||||
l3jaaKAOwbBfFfbbHgVBsaP6FPAieMpU9OOUtmvn5OOqOGwxzi4j40I0ULHT | ||||
L1YiNH5EqOlp2xaOyH2a2zvT4YkO7hTjzklohKLlI1pi9V3ZOH11IXkERKLx | ||||
6eMYAqxkwzZsus6TChABEmfukqImd81XKKVdS3krEIKxynDGwBc0W+2FUSKW | ||||
CYC5motm7WCumxSRr+YmxRZmA00DS1MTOoa0grIqcHk7KdSptbaN4dERbv03 | ||||
1++u3r67uv09m6Kjr8nit0CiKsx6+h/oNkmANeN0lFc3YgCdl7mo35Zya07t | ||||
z2JAhA0E/Hiy8C5irPZ7tKLY+BY/PRDNNKhQg8cy9rwIGuris0ye5+komrWt | ||||
mrOg/QunYgbyBcUBc80pIjwcoV054lmZqn4BJawSkDm0nB5c7pP1yz5ulA5A | ||||
YmVSTyaTuDrpMccrdQqUvdkkad0UKodXjxe9xVSyFEz9s9dcvew8/ZFDrk75 | ||||
1AM4DFkDSbzeJ6qlkhH0njJB6NP7PAtoy0Jfnb05o3MjgJstF7JYKJdJwYaE | ||||
SGfnBTXCwQwxDKHXxsLoMfWskeC1cRBKbgFEbzJmLf5i3HD42TBBUzkb+T40 | ||||
hbn9XTt/pOpGgV2UGPjZVGUELa0/XB+kfL9g7ap2veogJ2GahHwrc9LiEoIG | ||||
Fj0r2m1ulKfmIJyniBp5u1aosZdVuZ6TlVCxLxkhdRzYWkwlY2P/4WGRVdju | ||||
j2WkLas6UBEht61SrDoWbXVCwQTA/p1UPVDfeJgcJQKbegGXPqQKgAP9Jrh1 | ||||
suPqMrk21i2amibq2hnVIfy83IytpdYD7zdJlanUB3VoMTHHsiyz4LGN4hpk | ||||
1KrZYT0iDbuHSjw+Q43WVty2Fq1gz+hOUVoDo0eyou2p2PULrrLA+EjfEkZx | ||||
jb0e6Q5+eM9K9twEsr6XaV1wB04LiiGETOLiCIcIvhCQhK8fnZXzD1KGVE2J | ||||
0g+ilpgPdsWBhSVri/VpI2nU+zAUWWkLIWlVN3nbPo0iIwHC+cudsSKn8Uhu | ||||
IpoHVzFqOwDnF1Ty/k3wikkMwPWFZ7B1PPg2D1O7A7Kda0fn6bCBujkXNQRG | ||||
3K/U7esKkQEldxgwgEQabtOkqrahebSmQtxZRwQALVF1LelJFmYn9dBMSt1Y | ||||
VA+DYJOnzDVFKUs+6lco9iuQSfu+MFIclZlvuWs6m+reoZIJurC+vQ0dWc4+ | ||||
NVE4SInxcfqOjA+5DOgyqzX5qK0WLl95kcCFA+UkRHXdnuKvJ7+iWPz440dq | ||||
g2zePJsc0xs+mzDIgnEJqtl0iGLj9iU82IBUGbOBHCn/GwWMYh06Kzwz1fjS | ||||
d3DH+tsBYwTdlG8lW8ZsqpBNnT4+fKb335R+pQMI+Q5/pfffgZWoo4e4y+PD | ||||
L/X+NeoeUHT+VdhOaDAELHield3sIgqybaj10chySkUQTOjc2TKPuw26XXdc | ||||
1MC6SMg5h/gDKLdMcvSSqEmD5LBRxl4Q6EBXWJ8NETYGYMeNb2pO18t17jOb | ||||
oAFyJV5Ex+RKv1TRC/AkG4/VHCqoWp9MBTGqyiRdRC0JVC7ANK5vFxARwWBw | ||||
vezEIag/uoEHxwvsZtN2cmAGFtQky8v0g/PFDQ83gWruF7CcHGKLF1HgWWXl | ||||
RuKNS64RyU4ErREG0etaU+ZYh7aICOs7xVJ16r1EU0t5EYCWkt1RpTVpSIsC | ||||
wGWAHDwrTo2F4t9Lf4pIou5AATwGF2YIYoelkOiIjYpFWs5hkFA38x5/5rzt | ||||
ozuxEsEjT6JGonlDLiWeudmm2gVyPDVNe0Q66BJ4zJP7CxfcVak3sJqBUJUa | ||||
vjlzQudLrC/00NS29ttYSQKlcTZlwnbbZeQSsQ8fUgEqmlnWws7m4flC0dJ5 | ||||
QUIQKXE62zHZQPsaNijP9MbQUY4d3BNVjdsOVmUykDNMiIjk+7MyzVLAugwC | ||||
nYJRzuSzsSRw2KRe+eRc1HZGiRhvcNAOx5qJHEO/dwhKQI7RTGJeQYW8gg3p | ||||
Swo8bHN8OPFtF5RK4XTsze27y6ZX0NvZl1dv1BTwA9r+ICQLKQ/m6SH5OoF0 | ||||
g8nKal2kviXN9jCugtw+jnEvI/1sRhOMvGJj9pKCkYcnGIuwVd3rDt1rBy6W | ||||
dNAV6HKM09cp+kYZz9PJDKkTlu5fAILen9+OX15dvr6gOsZzrGO8oEa1dudp | ||||
or8rSyTJC8pTlRRkcZdNHTzfqQiwsOCsES7GCx3LpWCMGgCAXnbFrSIdKs/i | ||||
8JQcR3JQs6aESKfARwRozf48ZltNihXfRL8GNlRNHpgAsHxzhZzdwNOG8wKb | ||||
CA7EODUn2nx633uSxVaFIr4LJd3Ho0hCDR+FES/Vz+9UK/5rZpYOYepIIXQy | ||||
gCHSiEbGgUrTweXbMXa73pTcbdvqrfI14eQTW5ICA16+wttDldj9RA19Mkty | ||||
5/2FhRyhppJplCuIji7LFBy3SPROKqUd96Gzz24W9R9Eyza9v40p7p0kVnTY | ||||
W3A7kBp8gavHyRLr5IyvHE0LRxqU/xB+d4uHbY94B2Z77nFTIvNOpfTKReFW | ||||
KGRQXNB0LlBFGwM2Ogm7rp0c4cDQTlfo5U/CwYrdPgofCAlMJg5baDJ5nOyY | ||||
uMZOAMzX7MwO7EjQqk6C9lFvmnggydnMcuNduQQhy3w877VsyDaEFOWTXqKh | ||||
f2tJU9CKWxgPDw9acaXoD/9IyqW0l6bGxodFfbAQZXZ3kUBmBV+qVaoATGCp | ||||
6p9Rrexmc0Mbc5zW9elc/a1GTGD+tp3N/bxDMV3kd9K7PXI1ed7/GycXOi0a | ||||
nVteurkvzr4OakVVC+BcBRtq8Oy5b5LboSONLF5c+VVyag0ZVMpL1NHYPeyG | ||||
iiM0MpPA4pRLf1DaH15VVMTG1MjWXx/R3XKrX3T3/nfkfCvDSe3ewUhybyXf | ||||
588cAg7YKaG7DvCoZntCaj7lBs4e+gF6nz3sIYN4YZNETb14jcAQIThjcGdT | ||||
vtIl4cPjscHyaYOVqRCJXmeFk+hNbm7LLBG5+p28d/fYZ1Njjiui7RYLn2Lt | ||||
VcswZmq4mk9BdJHUnK7qazF86DtClJx0ZUTRQYtexrZF3P5CMLokBKsOp7Pa | ||||
E1JRG5vEhSNJ1/KFO1zkxuVzMNVYyq8MAYJ2x5/VaDGH0Nb1yb+L2Hyew6kI | ||||
GCtI6Zb5Q//bkPByNqAFTHMbBJ/3reKTcw1flgOc7MuPHS0pB6PoSBkxu615 | ||||
Y509xTXckJChCkoCCv6H2/fMfQALbSXaqF8BtAYGPMyjvmv2/cV1UMzO/mxU | ||||
kuGurPPXJnAU3Z/rgHXZEHYkt27adtbf7YNwCu6EMjvQRTaWPExKweFeo04l | ||||
f4idayvpIsGDKsBG2NzqK7utZoGAcnVNjeb+6MZrTFWBsRIsXliXlnzp1MX1 | ||||
62t4dHEA1mjF3VHYQuYfU1D29fPnmC3pqkiPN9zlMHNhxrsvXpGDorsOSlJB | ||||
ZCyHpZhdpFCiHB2o8n0KKFgvfPGv0EvrKuMjO6QKBQnENaBkVkgGZHUwuIbP | ||||
EPXwJvsl13RY/eA6MDVERHRWCHvPKJWfxEaf8xWqd4KTOkB7p5yDb9nBBcWK | ||||
3ibbSmGEwAeq2JRGh85ajM1uRTjOBNLY6emWUlWNzbxs2GVaUnlJSslE1nL+ | ||||
2GIPEacoXqTAwNdFXA54E3SAlN0yHyVwnCNuqNcFCdFdzpmtHbWXkn/Y6eP1 | ||||
Qgd8i0Yyzqb6Qto08Afux7c4KNrY0ixLuvmE6yyDrMo2hJLdmddRcuGLKGA+ | ||||
uzFSg43yn2NOemtSIK4ezX+j/a2a3dpWZkjyc5EFt/WEo4jPyHDTj1Z+G2QF | ||||
KLB0/pqQTxhqduda4ai3X5EvWw5zOEv1Y/FHq7PIzobmXvgrfTrRjg+VvYdN | ||||
kUmISzpnG4bNoq0lTxLu2wnuhsf2YKUnEm9/Y1kHOJ8ItJVGkYizIaGXTb8C | ||||
F/kOXZdQ4OvoDeUr8gPYFeLvjFpB7GaJ9YfNqFNIkc7hLn/M/tMBVZ9q6pPU | ||||
4y66W45HkQ+s6PSRJErRUaHJQT/fcRgBRgSVsjdshJChpgOkob/ub5hJqHX8 | ||||
Ro51YIEMsw1V4q8hCwc+QokVeQCP0PQDK4kPBgVVFIPz5xeUx0p05GLovAuy | ||||
kZxFcXQSpR8noMxRGloOrSHT5CapKGSigYk/pRQcuQ7gxN1D/io1XeKdleGk | ||||
GbO0Z51yOlu7NJTawh0JGADwXZStEzk4iU3NTruFu/0CqwaOOxmxifLRU0Uc | ||||
v/IFlpw0i48S0fkaQSPro/jaIKZnPyJpZR19FMqqdUcPHsm6vzyH2g5YnWG0 | ||||
+ZOZ6mtQxhQunV1fte5hRPuJ+R4u0dOX3Mav/jW5S26ocoMaewOT8L3NlcNG | ||||
ws9sDXw88yRXgIVYDrlExCABfbR1tqlrk1BwIgnogWTu32uIVczzxmRJMAdC | ||||
eV8Lhm0V99riJavYoNaTOew3+xjfrNIcAqZWtOYkcDvdRTrCB4w0NfX5Y/ub | ||||
NLQ2jWcGL0sWKNVeex23F5rm8MJtKo6h9q7VN3/4076/63qz2UwQHL5ZO3TR | ||||
uac44GTc5LoPfn2qlLSfnWo8QAy8Jzt6g5cqw9PB01VI5gTiQPoMvqHMKSWK | ||||
6BYrx5W6fTzSlxSkF/3xMI8RX7GGoP8AJoi73U8p3wQDLmSwUufcQXHOtjzH | ||||
i8vlwnNqYQCq4wPE1Z9/+v4Fk38jN5TTFeYvNN3hTTdob+a/3ZwgbjBb5oBl | ||||
YNS3e3T6K6U0WERfrlGfo/MjJKY69D+ewM1C/ws09rTt31kEhA1VWRwRgj+8 | ||||
pa7bDsjdVYSQhgf+f7FAu2KIePN84GuH/wgu0MQFqlnk72eBMZevifrNvIii | ||||
XnlB3YKHntO/A3Cq35SF+fuJ+c7fphAImTWEpCpCzeqClnuEBq2uX496bvjt | ||||
Ih9wDjEWWH/DhzEEf+FurFa7GjUr8Rkixn1roQj9c3RAsAFBf3k8pso2gCfp | ||||
SPLzsJeAGme0z/0r+VhulijBx9gGMLutFcfH3LTh78SkPaHVbJqjfQMhWy00 | ||||
yeg74EfSopAjfw3M2575qlC+i4IPIjQmXiYa0bGaGHoX7ugICOHqKcOkklA4 | ||||
J8Tt+dKkJAx984ZcG4T39KMiyZOpyYMD3ir3KHUdeOwTgMhFlcD1rfx3S48A | ||||
I0rUK2TYj/tw+B50lNPx9dvXV+d0iuPro+Mv6Ypmc08HXBBMPicLwWy9weO5 | ||||
WJwhBgBtOtP7Fu+4vU/wooNlkr9g5Dh7Zw586rQPKkpYkVGK/UwOXFWgzW6+ | ||||
12ckRQkFMkMXkDoA/Dmt/mxydIgneaMNtLrg+S7X7ql01kLgVB3eHz/Xv9Rv | ||||
9L/An0df0UZ9F78cDIbhbxQnD8jJloN/pkqta+7OkxY68emk6Ntqu446Aqj1 | ||||
0pkmg0CpoKKMCzNFJkE8paAka7YVoEhofcXbqbi8G1A83bL2pUth/IDmomLq | ||||
SZGLE7FtRj5TsoAolsBofBsQJcXiW+A6qrxtZQ8Pu6cmTpuLM2L16rl9lwHM | ||||
/kYDyP9Qi2798yz6m86/yvJrznS4009pYPyHB6ZJ+gE94rMUKZubbM4Nkw9P | ||||
4AWo4YdTvo/XZN/uUTMCfnkN8t6+FyDYSENpPHNny7XDir9cJb+jcqqixmxb | ||||
YyuUtDjTv4EC7E1VCbz1kxNMHkbTGiWpddXciy219qVB0EPDLqLTo7DlPHht | ||||
ZTFSneNFdZb+bYZ2kmQ3YJg0+KB/wEJiAYQtl06u/vWzyfEHifmaDEO4x+Dl | ||||
usKIeUk9yzsXUrzQd6ClbtLFBtb7mZbZVDacyZnZytHd6qvSJXkIxQAhm1Ia | ||||
P1GtYO9L5Q843oYzn3hWfl70bxpPSbmvAy07DSEX/NmtaQrGHvfEEWc57Pll | ||||
BYuaPB/BT3Ovz2G/xTb5sCjv3AdAL+xK+V2NwGO2qX4H7mpZ5ckIcZuunb5a | ||||
UJm2jWn4jej5DpyDcjWCGHS53OprCGC2I/UjhNCAoB8TZ3Nr7sKdB23ead1S | ||||
dRu9DYT9gCKFOF5Ilfd6AROuVvrWgrrKIwbC6zywzyAVR2ii/htmQL1hRGoA | ||||
AA== | ||||
</rfc> | </rfc> | |||
End of changes. 93 change blocks. | ||||
860 lines changed or deleted | 308 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |