rfc9114v5.xml | rfc9114.xml | |||
---|---|---|---|---|
skipping to change at line 20 ¶ | skipping to change at line 20 ¶ | |||
<link href='https://datatracker.ietf.org/doc/draft-ietf-quic-http-latest' rel='prev'/> | <link href='https://datatracker.ietf.org/doc/draft-ietf-quic-http-latest' rel='prev'/> | |||
<front> | <front> | |||
<title>HTTP/3</title> | <title>HTTP/3</title> | |||
<seriesInfo name='RFC' value='9114'/> | <seriesInfo name='RFC' value='9114'/> | |||
<author fullname='Mike Bishop' initials='M.' role='editor' surname='Bishop'> | <author fullname='Mike Bishop' initials='M.' role='editor' surname='Bishop'> | |||
<organization>Akamai</organization> | <organization>Akamai</organization> | |||
<address> | <address> | |||
<email>mbishop@evequefou.be</email> | <email>mbishop@evequefou.be</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month='May' year='2022'/> | <date month='June' year='2022'/> | |||
<area>Transport</area> | <area>Transport</area> | |||
<workgroup>QUIC</workgroup> | <workgroup>QUIC</workgroup> | |||
<keyword>HTTP/2</keyword> | <keyword>HTTP/2</keyword> | |||
<keyword>HPACK</keyword> | <keyword>HPACK</keyword> | |||
<keyword>QPACK</keyword> | <keyword>QPACK</keyword> | |||
<keyword>Web</keyword> | <keyword>Web</keyword> | |||
<abstract> | <abstract> | |||
<t>The QUIC transport protocol has several features that are desirable in a | <t>The QUIC transport protocol has several features that are desirable in a | |||
transport for HTTP, such as stream multiplexing, per-stream flow control, and | transport for HTTP, such as stream multiplexing, per-stream flow control, and | |||
low-latency connection establishment. This document describes a mapping of HTTP | low-latency connection establishment. This document describes a mapping of HTTP | |||
skipping to change at line 1497 ¶ | skipping to change at line 1497 ¶ | |||
} | } | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t>An implementation <bcp14>MUST</bcp14> | <t>An implementation <bcp14>MUST</bcp14> | |||
ignore any parameter with an identifier it does | ignore any parameter with an identifier it does | |||
not understand.</t> | not understand.</t> | |||
<section anchor='settings-parameters'> | <section anchor='settings-parameters'> | |||
<name>Defined SETTINGS Parameters</name> | <name>Defined SETTINGS Parameters</name> | |||
<t>The following settings are defined in HTTP/3:</t> | <t>The following settings are defined in HTTP/3:</t> | |||
<dl> | <dl> | |||
<dt><xref format='none' target='SETTINGS_MAX_FIELD_SECTION_SIZE'>SETTINGS_MAX_FIELD_SE CTION_SIZE</xref><iref item='SETTINGS_MAX_FIELD_SECTION_SIZE'/> (0x06):</dt> | <dt>SETTINGS_MAX_FIELD_SECTION_SIZE (0x06)<iref item='SETTINGS_MAX_FIELD_SECTION_SIZE' />:</dt> | |||
<dd> | <dd> | |||
<t anchor='SETTINGS_MAX_FIELD_SECTION_SIZE'>The default value is unlimited. See <xr ef target='header-size-constraints'/> for usage.</t> | <t anchor='SETTINGS_MAX_FIELD_SECTION_SIZE'>The default value is unlimited. See <xr ef target='header-size-constraints'/> for usage.</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>Setting identifiers of the format <tt>0x1f * N + 0x21</tt> for non-negative integer | <t>Setting identifiers of the format <tt>0x1f * N + 0x21</tt> for non-negative integer | |||
values of <tt>N</tt> are reserved to exercise the requirement that unknown identifiers | values of <tt>N</tt> are reserved to exercise the requirement that unknown identifiers | |||
be ignored. Such settings have no defined meaning. Endpoints <bcp14>SHOULD</bcp14> | be ignored. Such settings have no defined meaning. Endpoints <bcp14>SHOULD</bcp14> | |||
include at | include at | |||
least one such setting in their SETTINGS frame. Endpoints <bcp14>MUST NOT</bcp14> | least one such setting in their SETTINGS frame. Endpoints <bcp14>MUST NOT</bcp14> | |||
consider such | consider such | |||
skipping to change at line 1771 ¶ | skipping to change at line 1771 ¶ | |||
use of an error code in an unexpected context or receipt of an unknown error | use of an error code in an unexpected context or receipt of an unknown error | |||
code <bcp14>MUST</bcp14> | code <bcp14>MUST</bcp14> | |||
be treated as equivalent to <xref format='none' target='H3_NO_ERROR'>H3_NO_ERROR</xref><iref item=' H3_NO_ERROR'/>. However, closing a stream | be treated as equivalent to <xref format='none' target='H3_NO_ERROR'>H3_NO_ERROR</xref><iref item=' H3_NO_ERROR'/>. However, closing a stream | |||
can have other effects regardless of the error code; for example, see | can have other effects regardless of the error code; for example, see | |||
<xref target='request-response'/>.</t> | <xref target='request-response'/>.</t> | |||
<section anchor='http-error-codes'> | <section anchor='http-error-codes'> | |||
<name>HTTP/3 Error Codes</name> | <name>HTTP/3 Error Codes</name> | |||
<t>The following error codes are defined for use when abruptly terminating streams, | <t>The following error codes are defined for use when abruptly terminating streams, | |||
aborting reading of streams, or immediately closing HTTP/3 connections.</t> | aborting reading of streams, or immediately closing HTTP/3 connections.</t> | |||
<dl> | <dl> | |||
<dt><xref format='none' target='H3_NO_ERROR'>H3_NO_ERROR</xref><iref item='H3_NO_ERROR'/> (0x0100):</dt> | <dt>H3_NO_ERROR (0x0100)<iref item='H3_NO_ERROR'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_NO_ERROR'>No error. This is used when the connection or stream needs to b e closed, but | <t anchor='H3_NO_ERROR'>No error. This is used when the connection or stream needs to b e closed, but | |||
there is no error to signal.</t> | there is no error to signal.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_GENERAL_PROTOCOL_ERROR'>H3_GENERAL_PROTOCOL_ERROR</xref ><iref item='H3_GENERAL_PROTOCOL_ERROR'/> (0x0101):</dt> | <dt>H3_GENERAL_PROTOCOL_ERROR (0x0101)<iref item='H3_GENERAL_PROTOCOL_ERROR'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_GENERAL_PROTOCOL_ERROR'>Peer violated protocol requirements in a way that does not match a more | <t anchor='H3_GENERAL_PROTOCOL_ERROR'>Peer violated protocol requirements in a way that does not match a more | |||
specific error code or endpoint declines to use the more specific error code.</t> | specific error code or endpoint declines to use the more specific error code.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_INTERNAL_ERROR'>H3_INTERNAL_ERROR</xref><iref item='H3_ INTERNAL_ERROR'/> (0x0102):</dt> | <dt>H3_INTERNAL_ERROR (0x0102)<iref item='H3_INTERNAL_ERROR'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_INTERNAL_ERROR'>An internal error has occurred in the HTTP stack.</t> | <t anchor='H3_INTERNAL_ERROR'>An internal error has occurred in the HTTP stack.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_STREAM_CREATION_ERROR'>H3_STREAM_CREATION_ERROR</xref>< iref item='H3_STREAM_CREATION_ERROR'/> (0x0103):</dt> | <dt>H3_STREAM_CREATION_ERROR (0x0103)<iref item='H3_STREAM_CREATION_ERROR'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_STREAM_CREATION_ERROR'>The endpoint detected that its peer created a strea m that it will not accept.</t> | <t anchor='H3_STREAM_CREATION_ERROR'>The endpoint detected that its peer created a strea m that it will not accept.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_CLOSED_CRITICAL_STREAM'>H3_CLOSED_CRITICAL_STREAM</xref ><iref item='H3_CLOSED_CRITICAL_STREAM'/> (0x0104):</dt> | <dt>H3_CLOSED_CRITICAL_STREAM (0x0104)<iref item='H3_CLOSED_CRITICAL_STREAM'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_CLOSED_CRITICAL_STREAM'>A stream required by the HTTP/3 connection was clo sed or reset.</t> | <t anchor='H3_CLOSED_CRITICAL_STREAM'>A stream required by the HTTP/3 connection was clo sed or reset.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_FRAME_UNEXPECTED'>H3_FRAME_UNEXPECTED</xref><iref item= 'H3_FRAME_UNEXPECTED'/> (0x0105):</dt> | <dt>H3_FRAME_UNEXPECTED (0x0105)<iref item='H3_FRAME_UNEXPECTED'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_FRAME_UNEXPECTED'>A frame was received that was not permitted in the curre nt state or on the | <t anchor='H3_FRAME_UNEXPECTED'>A frame was received that was not permitted in the curre nt state or on the | |||
current stream.</t> | current stream.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_FRAME_ERROR'>H3_FRAME_ERROR</xref><iref item='H3_FRAME_ ERROR'/> (0x0106):</dt> | <dt>H3_FRAME_ERROR (0x0106)<iref item='H3_FRAME_ERROR'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_FRAME_ERROR'>A frame that fails to satisfy layout requirements or with an invalid size | <t anchor='H3_FRAME_ERROR'>A frame that fails to satisfy layout requirements or with an invalid size | |||
was received.</t> | was received.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_EXCESSIVE_LOAD'>H3_EXCESSIVE_LOAD</xref><iref item='H3_ EXCESSIVE_LOAD'/> (0x0107):</dt> | <dt>H3_EXCESSIVE_LOAD (0x0107)<iref item='H3_EXCESSIVE_LOAD'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_EXCESSIVE_LOAD'>The endpoint detected that its peer is exhibiting a behavi or that might be | <t anchor='H3_EXCESSIVE_LOAD'>The endpoint detected that its peer is exhibiting a behavi or that might be | |||
generating excessive load.</t> | generating excessive load.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_ID_ERROR'>H3_ID_ERROR</xref><iref item='H3_ID_ERROR'/> (0x0108):</dt> | <dt>H3_ID_ERROR (0x0108)<iref item='H3_ID_ERROR'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_ID_ERROR'>A stream ID or <xref format='none' target='server-push'>push ID< /xref><iref item='push ID'/> was used incorrectly, such as exceeding a limit, | <t anchor='H3_ID_ERROR'>A stream ID or <xref format='none' target='server-push'>push ID< /xref><iref item='push ID'/> was used incorrectly, such as exceeding a limit, | |||
reducing a limit, or being reused.</t> | reducing a limit, or being reused.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_SETTINGS_ERROR'>H3_SETTINGS_ERROR</xref><iref item='H3_ SETTINGS_ERROR'/> (0x0109):</dt> | <dt>H3_SETTINGS_ERROR (0x0109)<iref item='H3_SETTINGS_ERROR'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_SETTINGS_ERROR'>An endpoint detected an error in the payload of a <xref fo rmat='none' target='frame-settings'>SETTINGS</xref><iref item='SETTINGS'/> frame.</t> | <t anchor='H3_SETTINGS_ERROR'>An endpoint detected an error in the payload of a <xref fo rmat='none' target='frame-settings'>SETTINGS</xref><iref item='SETTINGS'/> frame.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_MISSING_SETTINGS'>H3_MISSING_SETTINGS</xref><iref item= 'H3_MISSING_SETTINGS'/> (0x010a):</dt> | <dt>H3_MISSING_SETTINGS (0x010a)<iref item='H3_MISSING_SETTINGS'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_MISSING_SETTINGS'>No <xref format='none' target='frame-settings'>SETTINGS< /xref><iref item='SETTINGS'/> frame was received at the beginning of the <xref format='none' target= 'control-streams'>control stream</xref><iref item='control stream'/>.</t> | <t anchor='H3_MISSING_SETTINGS'>No <xref format='none' target='frame-settings'>SETTINGS< /xref><iref item='SETTINGS'/> frame was received at the beginning of the <xref format='none' target= 'control-streams'>control stream</xref><iref item='control stream'/>.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_REQUEST_REJECTED'>H3_REQUEST_REJECTED</xref><iref item= 'H3_REQUEST_REJECTED'/> (0x010b):</dt> | <dt>H3_REQUEST_REJECTED (0x010b)<iref item='H3_REQUEST_REJECTED'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_REQUEST_REJECTED'>A server rejected a request without performing any appli cation processing.</t> | <t anchor='H3_REQUEST_REJECTED'>A server rejected a request without performing any appli cation processing.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_REQUEST_CANCELLED'>H3_REQUEST_CANCELLED</xref><iref ite m='H3_REQUEST_CANCELLED'/> (0x010c):</dt> | <dt>H3_REQUEST_CANCELLED (0x010c)<iref item='H3_REQUEST_CANCELLED'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_REQUEST_CANCELLED'>The request or its response (including pushed response) is cancelled.</t> | <t anchor='H3_REQUEST_CANCELLED'>The request or its response (including pushed response) is cancelled.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_REQUEST_INCOMPLETE'>H3_REQUEST_INCOMPLETE</xref><iref i tem='H3_REQUEST_INCOMPLETE'/> (0x010d):</dt> | <dt>H3_REQUEST_INCOMPLETE (0x010d)<iref item='H3_REQUEST_INCOMPLETE'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_REQUEST_INCOMPLETE'>The client's stream terminated without containing a fu lly formed request.</t> | <t anchor='H3_REQUEST_INCOMPLETE'>The client's stream terminated without containing a fu lly formed request.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_MESSAGE_ERROR'>H3_MESSAGE_ERROR</xref><iref item='H3_ME SSAGE_ERROR'/> (0x010e):</dt> | <dt>H3_MESSAGE_ERROR (0x010e)<iref item='H3_MESSAGE_ERROR'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_MESSAGE_ERROR'>An HTTP message was <xref format='none' target='malformed'> malformed</xref><iref item='malformed'/> and cannot be processed.</t> | <t anchor='H3_MESSAGE_ERROR'>An HTTP message was <xref format='none' target='malformed'> malformed</xref><iref item='malformed'/> and cannot be processed.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_CONNECT_ERROR'>H3_CONNECT_ERROR</xref><iref item='H3_CO NNECT_ERROR'/> (0x010f):</dt> | <dt>H3_CONNECT_ERROR (0x010f)<iref item='H3_CONNECT_ERROR'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_CONNECT_ERROR'>The TCP connection established in response to a CONNECT req uest was reset or | <t anchor='H3_CONNECT_ERROR'>The TCP connection established in response to a CONNECT req uest was reset or | |||
abnormally closed.</t> | abnormally closed.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='H3_VERSION_FALLBACK'>H3_VERSION_FALLBACK</xref><iref item= 'H3_VERSION_FALLBACK'/> (0x0110):</dt> | <dt>H3_VERSION_FALLBACK (0x0110)<iref item='H3_VERSION_FALLBACK'/>:</dt> | |||
<dd> | <dd> | |||
<t anchor='H3_VERSION_FALLBACK'>The requested operation cannot be served over HTTP/3. T he peer should | <t anchor='H3_VERSION_FALLBACK'>The requested operation cannot be served over HTTP/3. T he peer should | |||
retry over HTTP/1.1.</t> | retry over HTTP/1.1.</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>Error codes of the format <tt>0x1f * N + 0x21</tt> for non-negative integer values of | <t>Error codes of the format <tt>0x1f * N + 0x21</tt> for non-negative integer values of | |||
<tt>N</tt> are reserved to exercise the requirement that unknown error codes be treated | <tt>N</tt> are reserved to exercise the requirement that unknown error codes be treated | |||
as equivalent to <xref format='none' target='H3_NO_ERROR'>H3_NO_ERROR</xref><iref item='H3_NO_ERROR' /> (<xref target='extensions'/>). Implementations <bcp14>SHOULD</bcp14> | as equivalent to <xref format='none' target='H3_NO_ERROR'>H3_NO_ERROR</xref><iref item='H3_NO_ERROR' /> (<xref target='extensions'/>). Implementations <bcp14>SHOULD</bcp14> | |||
select an | select an | |||
error code from this space with some probability when they would have sent | error code from this space with some probability when they would have sent | |||
skipping to change at line 2574 ¶ | skipping to change at line 2574 ¶ | |||
<title>QPACK: Field Compression for HTTP/3</title> | <title>QPACK: Field Compression for HTTP/3</title> | |||
<author fullname='Charles 'Buck' Krasic' initials='C.' surname='Krasic'> | <author fullname='Charles 'Buck' Krasic' initials='C.' surname='Krasic'> | |||
<organization>Google, Inc</organization> | <organization>Google, Inc</organization> | |||
</author> | </author> | |||
<author fullname='Mike Bishop' initials='M.' surname='Bishop'> | <author fullname='Mike Bishop' initials='M.' surname='Bishop'> | |||
<organization>Akamai Technologies</organization> | <organization>Akamai Technologies</organization> | |||
</author> | </author> | |||
<author fullname='Alan Frindell' initials='A.' role='editor' surname='Frindell'> | <author fullname='Alan Frindell' initials='A.' role='editor' surname='Frindell'> | |||
<organization>Facebook</organization> | <organization>Facebook</organization> | |||
</author> | </author> | |||
<date month='May' year='2022'/> | <date month='June' year='2022'/> | |||
</front> | </front> | |||
<seriesInfo name='RFC' value='9204'/> | <seriesInfo name='RFC' value='9204'/> | |||
<seriesInfo name='DOI' value='10.17487/RFC9204'/> | <seriesInfo name='DOI' value='10.17487/RFC9204'/> | |||
</reference> | </reference> | |||
<reference anchor='RFC9110' target='https://www.rfc-editor.org/info/rfc9110'> | <reference anchor='RFC9110' target='https://www.rfc-editor.org/info/rfc9110'> | |||
<front> | <front> | |||
<title>HTTP Semantics</title> | <title>HTTP Semantics</title> | |||
<author fullname='Roy T. Fielding' initials='R.' role='editor' surname='Fielding'> | <author fullname='Roy T. Fielding' initials='R.' role='editor' surname='Fielding'> | |||
<organization>Adobe</organization> | <organization>Adobe</organization> | |||
</author> | </author> | |||
<author fullname='Mark Nottingham' initials='M.' role='editor' surname='Nottingham'> | <author fullname='Mark Nottingham' initials='M.' role='editor' surname='Nottingham'> | |||
<organization>Fastly</organization> | <organization>Fastly</organization> | |||
</author> | </author> | |||
<author fullname='Julian Reschke' initials='J.' role='editor' surname='Reschke'> | <author fullname='Julian Reschke' initials='J.' role='editor' surname='Reschke'> | |||
<organization>greenbytes</organization> | <organization>greenbytes</organization> | |||
</author> | </author> | |||
<date month='May' year='2022'/> | <date month='June' year='2022'/> | |||
</front> | </front> | |||
<seriesInfo name='STD' value='97'/> | <seriesInfo name='STD' value='97'/> | |||
<seriesInfo name='RFC' value='9110'/> | <seriesInfo name='RFC' value='9110'/> | |||
<seriesInfo name='DOI' value='10.17487/RFC9110'/> | <seriesInfo name='DOI' value='10.17487/RFC9110'/> | |||
</reference> | </reference> | |||
<reference anchor='RFC9111' target='https://www.rfc-editor.org/info/rfc9111'> | <reference anchor='RFC9111' target='https://www.rfc-editor.org/info/rfc9111'> | |||
<front> | <front> | |||
<title>HTTP Caching</title> | <title>HTTP Caching</title> | |||
<author fullname='Roy T. Fielding' initials='R.' role='editor' surname='Fielding'> | <author fullname='Roy T. Fielding' initials='R.' role='editor' surname='Fielding'> | |||
<organization>Adobe</organization> | <organization>Adobe</organization> | |||
</author> | </author> | |||
<author fullname='Mark Nottingham' initials='M.' role='editor' surname='Nottingham'> | <author fullname='Mark Nottingham' initials='M.' role='editor' surname='Nottingham'> | |||
<organization>Fastly</organization> | <organization>Fastly</organization> | |||
</author> | </author> | |||
<author fullname='Julian Reschke' initials='J.' role='editor' surname='Reschke'> | <author fullname='Julian Reschke' initials='J.' role='editor' surname='Reschke'> | |||
<organization>greenbytes</organization> | <organization>greenbytes</organization> | |||
</author> | </author> | |||
<date month='May' year='2022'/> | <date month='June' year='2022'/> | |||
</front> | </front> | |||
<seriesInfo name='STD' value='98'/> | <seriesInfo name='STD' value='98'/> | |||
<seriesInfo name='RFC' value='9111'/> | <seriesInfo name='RFC' value='9111'/> | |||
<seriesInfo name='DOI' value='10.17487/RFC9111'/> | <seriesInfo name='DOI' value='10.17487/RFC9111'/> | |||
</reference> | </reference> | |||
<reference anchor='URI' target='https://www.rfc-editor.org/info/rfc3986'> | <reference anchor='URI' target='https://www.rfc-editor.org/info/rfc3986'> | |||
<front> | <front> | |||
<title>Uniform Resource Identifier (URI): Generic Syntax</title> | <title>Uniform Resource Identifier (URI): Generic Syntax</title> | |||
<author fullname='T. Berners-Lee' initials='T.' surname='Berners-Lee'> | <author fullname='T. Berners-Lee' initials='T.' surname='Berners-Lee'> | |||
<organization/> | <organization/> | |||
skipping to change at line 2824 ¶ | skipping to change at line 2824 ¶ | |||
<title>HTTP/1.1</title> | <title>HTTP/1.1</title> | |||
<author fullname='Roy T. Fielding' initials='R.' role='editor' surname='Fielding'> | <author fullname='Roy T. Fielding' initials='R.' role='editor' surname='Fielding'> | |||
<organization>Adobe</organization> | <organization>Adobe</organization> | |||
</author> | </author> | |||
<author fullname='Mark Nottingham' initials='M.' role='editor' surname='Nottingham'> | <author fullname='Mark Nottingham' initials='M.' role='editor' surname='Nottingham'> | |||
<organization>Fastly</organization> | <organization>Fastly</organization> | |||
</author> | </author> | |||
<author fullname='Julian Reschke' initials='J.' role='editor' surname='Reschke'> | <author fullname='Julian Reschke' initials='J.' role='editor' surname='Reschke'> | |||
<organization>greenbytes</organization> | <organization>greenbytes</organization> | |||
</author> | </author> | |||
<date month='May' year='2022'/> | <date month='June' year='2022'/> | |||
</front> | </front> | |||
<seriesInfo name='STD' value='99'/> | <seriesInfo name='STD' value='99'/> | |||
<seriesInfo name='RFC' value='9112'/> | <seriesInfo name='RFC' value='9112'/> | |||
<seriesInfo name='DOI' value='10.17487/RFC9112'/> | <seriesInfo name='DOI' value='10.17487/RFC9112'/> | |||
</reference> | </reference> | |||
<reference anchor='RFC9113' target='https://www.rfc-editor.org/info/rfc9113'> | <reference anchor='RFC9113' target='https://www.rfc-editor.org/info/rfc9113'> | |||
<front> | <front> | |||
<title>HTTP/2</title> | <title>HTTP/2</title> | |||
<author fullname='Martin Thomson' initials='M.' role='editor' surname='Thomson'> | <author fullname='Martin Thomson' initials='M.' role='editor' surname='Thomson'> | |||
<organization>Mozilla</organization> | <organization>Mozilla</organization> | |||
</author> | </author> | |||
<author fullname='Cory Benfield' initials='C.' role='editor' surname='Benfield'> | <author fullname='Cory Benfield' initials='C.' role='editor' surname='Benfield'> | |||
<organization>Apple Inc.</organization> | <organization>Apple Inc.</organization> | |||
</author> | </author> | |||
<date month='May' year='2022'/> | <date month='June' year='2022'/> | |||
</front> | </front> | |||
<seriesInfo name='RFC' value='9113'/> | <seriesInfo name='RFC' value='9113'/> | |||
<seriesInfo name='DOI' value='10.17487/RFC9113'/> | <seriesInfo name='DOI' value='10.17487/RFC9113'/> | |||
</reference> | </reference> | |||
<reference anchor='BREACH' target='http://breachattack.com/resources/BREACH%20-%20SSL,%20gon e%20in%2030%20seconds.pdf'> | <reference anchor='BREACH' target='http://breachattack.com/resources/BREACH%20-%20SSL,%20gon e%20in%2030%20seconds.pdf'> | |||
<front> | <front> | |||
<title>BREACH: Reviving the CRIME Attack</title> | <title>BREACH: Reviving the CRIME Attack</title> | |||
<author initials='Y.' surname='Gluck'> | <author initials='Y.' surname='Gluck'> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
skipping to change at line 3080 ¶ | skipping to change at line 3080 ¶ | |||
that depend on the presence of flags need to allocate space for flags as part | that depend on the presence of flags need to allocate space for flags as part | |||
of their frame payload.</t> | of their frame payload.</t> | |||
<t>Other than these issues, frame type HTTP/2 extensions are typically portable to | <t>Other than these issues, frame type HTTP/2 extensions are typically portable to | |||
QUIC simply by replacing stream 0 in HTTP/2 with a <xref format='none' target='control-streams'>cont rol stream</xref><iref item='control stream'/> in HTTP/3. | QUIC simply by replacing stream 0 in HTTP/2 with a <xref format='none' target='control-streams'>cont rol stream</xref><iref item='control stream'/> in HTTP/3. | |||
HTTP/3 extensions will not assume ordering, but would not be harmed by ordering, | HTTP/3 extensions will not assume ordering, but would not be harmed by ordering, | |||
and are expected to be portable to HTTP/2.</t> | and are expected to be portable to HTTP/2.</t> | |||
</section> | </section> | |||
<section anchor='comparison-of-http2-and-http3-frame-types'> | <section anchor='comparison-of-http2-and-http3-frame-types'> | |||
<name>Comparison of HTTP/2 and HTTP/3 Frame Types</name> | <name>Comparison of HTTP/2 and HTTP/3 Frame Types</name> | |||
<dl> | <dl> | |||
<dt><xref format='none' target='frame-data'>DATA</xref><iref item='DATA'/> (0x00):</dt> | <dt><xref format='none' target='frame-data'>DATA</xref> (0x00)<iref item='DATA'/>:</dt> | |||
<dd> | <dd> | |||
<t>Padding is not defined in HTTP/3 frames. See <xref target='frame-data'/>.</t> | <t>Padding is not defined in HTTP/3 frames. See <xref target='frame-data'/>.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='frame-headers'>HEADERS</xref><iref item='HEADERS'/> (0x0 1):</dt> | <dt><xref format='none' target='frame-headers'>HEADERS</xref> (0x01)<iref item='HEADERS' />:</dt> | |||
<dd> | <dd> | |||
<t>The PRIORITY region of <xref format='none' target='frame-headers'>HEADERS</xref><ir ef item='HEADERS'/> is not defined in HTTP/3 frames. Padding is not | <t>The PRIORITY region of <xref format='none' target='frame-headers'>HEADERS</xref><ir ef item='HEADERS'/> is not defined in HTTP/3 frames. Padding is not | |||
defined in HTTP/3 frames. See <xref target='frame-headers'/>.</t> | defined in HTTP/3 frames. See <xref target='frame-headers'/>.</t> | |||
</dd> | </dd> | |||
<dt>PRIORITY (0x02):</dt> | <dt>PRIORITY (0x02):</dt> | |||
<dd> | <dd> | |||
<t>As described in <xref target='h2-diff-priority'/>, HTTP/3 does not provide a means of | <t>As described in <xref target='h2-diff-priority'/>, HTTP/3 does not provide a means of | |||
signaling priority.</t> | signaling priority.</t> | |||
</dd> | </dd> | |||
<dt>RST_STREAM (0x03):</dt> | <dt>RST_STREAM (0x03):</dt> | |||
<dd> | <dd> | |||
<t>RST_STREAM frames do not exist in HTTP/3, since QUIC provides stream lifecycle | <t>RST_STREAM frames do not exist in HTTP/3, since QUIC provides stream lifecycle | |||
management. The same code point is used for the <xref format='none' target='frame-cancel-push'>CANC EL_PUSH</xref><iref item='CANCEL_PUSH'/> frame | management. The same code point is used for the <xref format='none' target='frame-cancel-push'>CANC EL_PUSH</xref><iref item='CANCEL_PUSH'/> frame | |||
(<xref target='frame-cancel-push'/>).</t> | (<xref target='frame-cancel-push'/>).</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='frame-settings'>SETTINGS</xref><iref item='SETTINGS'/> ( 0x04):</dt> | <dt><xref format='none' target='frame-settings'>SETTINGS</xref> (0x04)<iref item='SETTIN GS'/>:</dt> | |||
<dd> | <dd> | |||
<t><xref format='none' target='frame-settings'>SETTINGS</xref><iref item='SETTINGS'/> frames are sent only at the beginning of the connection. See | <t><xref format='none' target='frame-settings'>SETTINGS</xref><iref item='SETTINGS'/> frames are sent only at the beginning of the connection. See | |||
<xref target='frame-settings'/> and <xref target='h2-settings'/>.</t> | <xref target='frame-settings'/> and <xref target='h2-settings'/>.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='frame-push-promise'>PUSH_PROMISE</xref><iref item='PUSH_ PROMISE'/> (0x05):</dt> | <dt><xref format='none' target='frame-push-promise'>PUSH_PROMISE</xref> (0x05)<iref ite m='PUSH_PROMISE'/>:</dt> | |||
<dd> | <dd> | |||
<t>The <xref format='none' target='frame-push-promise'>PUSH_PROMISE</xref><iref item=' PUSH_PROMISE'/> frame does not reference a stream; instead, the <xref format='none' target='push-str eams'>push stream</xref><iref item='push stream'/> | <t>The <xref format='none' target='frame-push-promise'>PUSH_PROMISE</xref><iref item=' PUSH_PROMISE'/> frame does not reference a stream; instead, the <xref format='none' target='push-str eams'>push stream</xref><iref item='push stream'/> | |||
references the <xref format='none' target='frame-push-promise'>PUSH_PROMISE</xref><iref item='PUSH_P ROMISE'/> frame using a <xref format='none' target='server-push'>push ID</xref><iref item='push ID'/ >. See | references the <xref format='none' target='frame-push-promise'>PUSH_PROMISE</xref><iref item='PUSH_P ROMISE'/> frame using a <xref format='none' target='server-push'>push ID</xref><iref item='push ID'/ >. See | |||
<xref target='frame-push-promise'/>.</t> | <xref target='frame-push-promise'/>.</t> | |||
</dd> | </dd> | |||
<dt>PING (0x06):</dt> | <dt>PING (0x06):</dt> | |||
<dd> | <dd> | |||
<t>PING frames do not exist in HTTP/3, as QUIC provides equivalent | <t>PING frames do not exist in HTTP/3, as QUIC provides equivalent | |||
functionality.</t> | functionality.</t> | |||
</dd> | </dd> | |||
<dt><xref format='none' target='frame-goaway'>GOAWAY</xref><iref item='GOAWAY'/> (0x07): </dt> | <dt><xref format='none' target='frame-goaway'>GOAWAY</xref> (0x07)<iref item='GOAWAY'/>: </dt> | |||
<dd> | <dd> | |||
<t><xref format='none' target='frame-goaway'>GOAWAY</xref><iref item='GOAWAY'/> does n ot contain an error code. In the client-to-server direction, | <t><xref format='none' target='frame-goaway'>GOAWAY</xref><iref item='GOAWAY'/> does n ot contain an error code. In the client-to-server direction, | |||
it carries a <xref format='none' target='server-push'>push ID</xref><iref item='push ID'/> instead o f a server-initiated stream ID. | it carries a <xref format='none' target='server-push'>push ID</xref><iref item='push ID'/> instead o f a server-initiated stream ID. | |||
See <xref target='frame-goaway'/>.</t> | See <xref target='frame-goaway'/>.</t> | |||
</dd> | </dd> | |||
<dt>WINDOW_UPDATE (0x08):</dt> | <dt>WINDOW_UPDATE (0x08):</dt> | |||
<dd> | <dd> | |||
<t>WINDOW_UPDATE frames do not exist in HTTP/3, since QUIC provides flow control.</t> | <t>WINDOW_UPDATE frames do not exist in HTTP/3, since QUIC provides flow control.</t> | |||
</dd> | </dd> | |||
<dt>CONTINUATION (0x09):</dt> | <dt>CONTINUATION (0x09):</dt> | |||
End of changes. 29 change blocks. | ||||
29 lines changed or deleted | 29 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |