1. 序論
~HTTP3 `HTTP3$r は、 ~QUIC `RFC9000$r の上層に定義され, ~QUIC接続~越しに~HTTP要請を多重化できる~protocolである。 この文書は、 ~WebTransport~protocolの要件と意味論 `OVERVIEW$r に適合する方式 で,非-~HTTP~dataを~HTTP3で多重化するための仕組みを定義する。 ここに述べられる仕組みを利用すれば、 複数の~WebTransport~instanceを同じ`~HTTP3接続$上の定例の~HTTP流通と同時に多重化できる。 ◎ HTTP/3 [HTTP3] is a protocol defined on top of QUIC [RFC9000] that can multiplex HTTP requests over a QUIC connection. This document defines a mechanism for multiplexing non-HTTP data with HTTP/3 in a manner that conforms with the WebTransport protocol requirements and semantics[OVERVIEW]. Using the mechanism described here, multiple WebTransport instances can be multiplexed simultaneously with regular HTTP traffic on the same HTTP/3 connection.
1.1. 各種用語
この文書~内の~keyword "MUST" … 【以下、この段落の内容は`~IETF日本語訳~共通~page@~IETFcommon#requirements-notation$に移譲。】 ◎ The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
この文書は、 `OVERVIEW$r `規約と定義@~WT-OVERVIEW#conventions-and-definitions§ にて定義された各種用語に従う。 この文書は、 `~WebTransport~server$と`~HTTP3~server$を判別することに注意。 ~HTTP3~serverが,`~HTTP3接続$を終了する~serverである。 ~WebTransport~serverは、 `~WebTransport~session$を受容する応用であり, ~HTTP3~serverを介して~accessされ得るものである。 ◎ This document follows terminology defined in Section 1.2 of [OVERVIEW]. Note that this document distinguishes between a WebTransport server and an HTTP/3 server. An HTTP/3 server is the server that terminates HTTP/3 connections; a WebTransport server is an application that accepts WebTransport sessions, which can be accessed via an HTTP/3 server.
【 単に[ ~server/~client/~UA ]と記される箇所も多々あるが、 ほとんどは[ `~WebTransport~server$/`~WebTransport~client$/`~WebTransport~UA$ ]を意味するであろう。 】
2. 概観
2.1. ~QUIC, ~WebTransport, ~HTTP3
~QUIC ~version 1 `RFC9000$r は、[ ~flow制御, 輻輳~制御 ]を伴う~secureな~transport~protocolである。 ~QUICは、 ~stream — 多重化し得る, 依拠-可能な, 有順序~byte~stream — を介する応用~dataの交換を~supportする。 ~streamの独立性により、 渋滞( `head-of-line blocking^en )は軽減され得る。 ~QUICは,~transport~serviceとして~streamを供するが、 その用法については,何かを意見するものではない。 ~streamの適用能は、 `RFC9308$r `~streamの利用@~RFCx/rfc9308#section-4§にて述べられる。 ◎ QUIC version 1 [RFC9000] is a secure transport protocol with flow control and congestion control. QUIC supports application data exchange via streams; reliable and ordered byte streams that can be multiplexed. Stream independence can mitigate head-of-line blocking. While QUIC provides streams as a transport service, it is unopinionated about their usage. The applicability of streams is described by section 4 of [RFC9308].
~HTTPは、 `~HTTP意味論^cite `RFC9110$r により定義される応用~層の~protocolである。 ~HTTP3は、 ~QUIC用の応用への対応付けであり, `RFC9114$r にて定義される — それは: ◎ HTTP is an application-layer protocol, defined by "HTTP Semantics" [RFC9110]. HTTP/3 is the application mapping for QUIC, defined in [RFC9114].\
- `制御~data$/ ~HTTP`要請~message$連列/ ~HTTP`応答~message$連列 ]を~frameの形で運ぶために~QUIC~streamがどう利用されるかを述べる。 ◎ It describes how QUIC streams are used to carry control data or HTTP request and response message sequences in the form of frames and describes details of stream and connection lifecycle management.\
- `~HTTP意味論^cite に加えて,次に挙げる特能を提供する ⇒# ~QPACK~header圧縮 `RFC9208$r, `~server~push$ `RFC9114$r ◎ HTTP/3 offers two features in addition to HTTP Semantics: QPACK header compression [RFC9208] and Server Push Section 4.6 of [RFC9114].
~WebTransport~sessionの確立は、 ~HTTP層において,ある資源とヤリトリすることを孕む。 ~Web~UA用には、 このヤリトリは,~securityの理由から重要になる — とりわけ、[ 当の資源が~WebTransportを利用する用意がある ]ことを確保するために。 ◎ WebTransport session establishment involves interacting at the HTTP layer with a resource. For Web user agents, this interaction is important for security reasons, especially to ensure that the resource is willing to use WebTransport.
~WebTransportは,その~handshake用に~HTTPを要求するが、 ~HTTP3が利用-中にあるときは,[ 確立された~sessionに関係する他のもの ]用には~HTTPは利用されない。 代わりに,[ 確立された~sessionへ それらを~linkする ]ための[ ~header連列を成す~byte列 ]を伴う~QUIC~streamで始まる。 ~streamを成す残りは、 本体であり, ~WebTransportを利用している応用により給された~payloadを運ぶ。 この処理nは、 ~HTTP11越しの~WebSockets `RFC6455$r【!ORIGIN】 に類似する — そこでは、 下層の~byte~streamへの~accessは, どちら側も~handshakeを完了した後に可能化される。 ◎ Although WebTransport requires HTTP for its handshake, when HTTP/3 is in use, HTTP is not used for anything else related to an established session. Instead, QUIC streams begin with a header sequence of bytes that links them to the established session. The remainder of the stream is the body, which carries the payload supplied by the application using WebTransport. This process is similar to WebSockets over HTTP/1.1 [ORIGIN], where access to the underlying byte stream is enabled after both sides have completed the handshake.
[ ~QUIC, ~HTTP3, ~WebTransport ]は、 `図 1@#fig-webtransport-layers$ にて示されるように層を成す。 ~WebTransport~sessionが確立されたなら、 応用は,~QUICへのおよそ直な~accessを有するようになる。 ◎ The layering of QUIC, HTTP/3, and WebTransport is shown in Figure 1. Once a WebTransport session is established, applications have nearly direct access to QUIC.
2.1.1. 実装の複階性の最小~化-法
~WebTransportと[ ~HTTP, ~HTTP3 ]とのヤリトリは必要最小限である。 [ ~client/~server ]は、[ ~HTTP, ~HTTP3 ]の特能の利用を[ 次に挙げる,~WebTransport~handshakeを完了するために要求されるもの ]に限るよう拘束できる: ◎ WebTransport has minimal interaction with HTTP and HTTP/3. Clients or servers can constrain their use of features to only those required to complete a WebTransport handshake:
- 要請を成す次に挙げるものを[ 生成する/構文解析する ] ⇒# ~method, ~host, ~path, ~protocol, 省略可能な `Origin$h ~header, たぶん,何らかの~~追加の~header ◎ Generating/parsing the request method, host, path, protocol, optional Origin header, and perhaps some extra headers.
- 応答を成す次に挙げるものを[ 生成する/構文解析する ] ⇒# 状態s~code, 場合によっては,何らかの~~追加の~header ◎ Generating/parsing the response status code, and possibly some extra headers.
`受信器$は、 自身に課される~HTTP~levelの要件のうちいくつかを~byte列【!~bytestring】の比較を利用して遂行する見込みが高いこともある。 ◎ The receiver can likely perform several of its HTTP-level requirements using bytestring comparisons.
~HTTP3は,~QPACKを利用して~HTTP`~message$を符号化するが、 【~WebTransportにおいては,】その複階性を最小~化できる。 `受信器$は、 動的な解凍を まるごと不能化できるが,[ 静的な解凍, ~Huffman復号 ]を常に~supportしなければならない。 `送信器$は、[ 動的な圧縮, 静的な圧縮, ~Huffman符号化法 ]それぞれに対し,それを決して利用しないことを~~任意で~~選べる。 ◎ While HTTP/3 encodes HTTP messages using QPACK, the complexity can be minimized. Receivers can disable dynamic decompression entirely but must always support static decompression and Huffman decoding. Senders can opt to never use dynamic compression, static compression, or Huffman encoding.
2.2. ~protocolの概観
`~WebTransport~server$は、 一般に[ `authority$p 値, `path$p 値 ]( `RFC3986$r )が成す~pairにより識別される。 ◎ WebTransport servers in general are identified by a pair of authority value and path value (defined in [RFC3986] Sections 3.2 and 3.3 correspondingly).
`~HTTP3接続$が確立されるときには、 ~serverは,[ ~HTTP3越しの~WebTransport用の~supportを指示する ]ために `SETTINGS_WEBTRANSPORT_MAX_SESSIONS$sp `設定$を送信する。 この処理nは、 追加的な~HTTP3拡張の利用も折衝する。 ◎ When an HTTP/3 connection is established, the server sends a SETTINGS_WEBTRANSPORT_MAX_SESSIONS setting in order to indicate support for WebTransport over HTTP/3. This process also negotiates the use of additional HTTP/3 extensions.
`~WebTransport~session$は、 所与の`~HTTP3接続$の内側で[ 拡張d `CONNECT$m 要請 `RFC8441$r を送信する~client ]により起動される。 ~serverが当の要請を受容する場合,`~WebTransport~session$が確立される。 結果の~streamは, `~CONNECT~stream@ と称され、 その`~stream~ID$は `~session~ID@ と称される。 `~session~ID$は、[ 当の接続の中で所与の`~WebTransport~session$を一意に識別する ]ために【他の~streamにより】利用される。 ◎ WebTransport sessions are initiated inside a given HTTP/3 connection by the client, who sends an extended CONNECT request [RFC8441]. If the server accepts the request, a WebTransport session is established. The resulting stream will be further referred to as a CONNECT stream, and its stream ID is used to uniquely identify a given WebTransport session within the connection. The ID of the CONNECT stream that established a given WebTransport session will be further referred to as a Session ID.
~sessionが確立されたなら、 双方の端点は,次に挙げる仕組みを利用して~dataを交換できるようになる: ◎ After the session is established, the peers can exchange data using the following mechanisms:
- ~clientは、 `双方向~stream$を作成でき, その所有者であることを[ 最初の~byte列~内に特別な通達を供する ]ことにより~WebTransportへ転送する。 ◎ A client can create a bidirectional stream and transfer its ownership to WebTransport by providing a special signal in the first bytes.
- ~serverは、 `双方向~stream$を作成でき, その所有者であることを[ 最初の~byte列~内に特別な通達を供する ]ことにより~WebTransportへ転送する。 ◎ A server can create a bidirectional stream and transfer its ownership to WebTransport by providing a special signal in the first bytes.
- ~client, ~serverどちらも、 ある特別な~stream種別を利用して,`一方向~stream$を作成できる。 ◎ Both client and server can create a unidirectional stream using a special stream type.
- ~datagramは、 `~HTTP~datagram$ `HTTP-DATAGRAM$r を利用して送信できる。 ◎ A datagram can be sent using HTTP Datagrams [HTTP-DATAGRAM].
`~WebTransport~session$が終了されるのは、 それを作成した`~CONNECT~stream$が~closeされたときである。 ◎ A WebTransport session is terminated when the CONNECT stream that created it is closed.
3. ~sessionの確立
3.1. ~transport能力がある~HTTP3接続の確立-法
~WebTransport用の~supportを指示するためには、 ~serverは,自身の `SETTINGS$ft ~frame内に[ 1 以上の値を伴う `SETTINGS_WEBTRANSPORT_MAX_SESSIONS$sp ]を送信しなければ`ナラナイ^2119。 `SETTINGS_WEBTRANSPORT_MAX_SESSIONS$sp ~parameter用の既定の値は 0 であり,[ 端点は`~WebTransport~session$を受信する用意はない ]ことを意味する。 ~clientは、 `~WebTransport~session$を確立している `CONNECT$m 要請~内に~Upgrade~tokenとして `webtransport^c を利用することにより ( `~Upgrade~tokenの登録@#upgrade-token§を見よ), ~WebTransport用の~supportを指示する。 ◎ In order to indicate support for WebTransport, the server MUST send a SETTINGS_WEBTRANSPORT_MAX_SESSIONS value greater than "0" in its SETTINGS frame. The default value for the SETTINGS_WEBTRANSPORT_MAX_SESSIONS parameter is "0", meaning that the endpoint is not willing to receive any WebTransport sessions. Note that the client does not need to send any value to indicate support for WebTransport; clients indicate support for WebTransport by using the "webtransport" upgrade token in CONNECT requests establishing WebTransport sessions (see Section 8.1).
~clientは、 ~serverから~WebTransport用の~supportを指示している`設定$を受信するまでは, ~WebTransport要請を送信しては`ナラナイ^2119。 ◎ The client MUST NOT send a WebTransport request until it has received the setting indicating WebTransport support from the server.
注記: 次の段落は、 ~RFCとして公表する前に除去されることになる。 ◎ [[RFC editor: please remove the following paragraph before publication.]]
~WebTransportの草案~version用に限り ⇒ ~serverは、 ~clientから設定~群を受信するまでは, どの流入~WebTransport要請も処理しては`ナラナイ^2119 — ~clientは、 ~WebTransport拡張として[ ~serverが利用するものとは異なる~version ]を利用していることもあるので。 ◎ For draft verisons of WebTransport only, the server MUST NOT process any incoming WebTransport requests until the client settings have been received, as the client may be using a version of the WebTransport extension that is different from the one used by the server.
~HTTP3越しの~WebTransportは、 `~HTTP3~datagram$と`~capsule~protocol$ `HTTP-DATAGRAM$r 用の~supportを要求するので、 ~client, ~serverどちらも、 各自の `SETTINGS$ft ~frame内に[ 値 1 に設定された `SETTINGS_H3_DATAGRAM$sp `HTTP-DATAGRAM$r ]を送信することにより, ~HTTP3~datagram用の~supportを指示しなければ`ナラナイ^2119。 ~serverは、 この `SETTINGS$ft を受信する前に[ 新たな~WebTransport~sessionを確立するための `CONNECT$m 要請 ]が — 他の~messageに加えて — 到着し得ることに注意するべきである ( `流入~stream/~datagramの~buffer法@#buffering-incoming§を見よ)。 ◎ Because WebTransport over HTTP/3 requires support for HTTP/3 datagrams and the Capsule Protocol, both the client and the server MUST indicate support for HTTP/3 datagrams by sending a SETTINGS_H3_DATAGRAM value set to 1 in their SETTINGS frame (see Section 2.1.1 of [HTTP-DATAGRAM]). Servers should also note that CONNECT requests to establish new WebTransport sessions, in addition to other messages, may arrive before this SETTING is received (see Section 4.5).
~HTTP3越しの~WebTransportには、 ~QUIC~datagram用の~supportも要求される。 ~supportを指示するためには、 ~client, ~serverどちらも,[ 1 以上の値を伴う `max_datagram_frame_size@~RFCx/rfc9221#section-3$c ~transport~parameter `QUIC-DATAGRAM$r ]を送信しなければ`ナラナイ^2119。 ◎ WebTransport over HTTP/3 also requires support for QUIC datagrams. To indicate support, both the client and the server MUST send a max_datagram_frame_size transport parameter with a value greater than 0 (see Section 3 of [QUIC-DATAGRAM]).
~serverは、 ~clientが[ ~QUIC~datagram, ~HTTP~datagram ]を可能化することなく送信した~WebTransport要請に対しては,それを — `HTTP3$r `不正形な~message@~HTTPv3#malformed§ にて述べられるとおり — 不正形として扱わなければナラナイ。 ◎ Any WebTransport requests sent by the client without enabling QUIC and HTTP datagrams MUST be treated as malformed by the server, as described in Section 4.1.2 of [HTTP3].
~HTTP3越しの~WebTransportは、 `RESET-STREAM-AT$r にて定義される `RESET_STREAM_AT$ft ~frameに依拠する。 ~supportを指示するためには、[ ~client, ~server ]どちらも,この拡張を — `RESET-STREAM-AT$r `拡張~利用の折衝-法@https://datatracker.ietf.org/doc/html/draft-ietf-quic-reliable-stream-reset#section-3§ にて述べられるとおり — 可能化しなければナラナイ。 ◎ WebTransport over HTTP/3 relies on the RESET_STREAM_AT frame defined in [RESET-STREAM-AT]. To indicate support, both the client and the server MUST enable the extension as described in Section 3 of [RESET-STREAM-AT].
3.2. ~HTTP3における拡張d~CONNECT
`RFC8441$r `4@~RFCx/rfc8441#section-4§は、 拡張d `CONNECT$m ~methodを定義する — それは、 `SETTINGS_ENABLE_CONNECT_PROTOCOL^sp 設定により可能化される。 この`設定$は、 ~HTTP3用には `RFC9220$r により定義される。 ~HTTP3越しの~WebTransportを~supportしている~serverは、[ 1 以上の値を伴う `SETTINGS_WEBTRANSPORT_MAX_SESSIONS$sp 設定, 値 1 を伴う `SETTINGS_ENABLE_CONNECT_PROTOCOL^sp 設定 ]を送信しなければ`ナラナイ^2119。 ◎ [RFC8441] defines an extended CONNECT method in Section 4, enabled by the SETTINGS_ENABLE_CONNECT_PROTOCOL setting. That setting is defined for HTTP/3 by [RFC9220]. A server supporting WebTransport over HTTP/3 MUST send both the SETTINGS_WEBTRANSPORT_MAX_SESSIONS setting with a value greater than "0" and the SETTINGS_ENABLE_CONNECT_PROTOCOL setting with a value of "1".
3.3. 新たな~sessionの作成-法
`~WebTransport~session$は,~HTTP3越しに確立されるので、 `https$c ~URI~scheme `HTTP$r を利用して識別される。 ◎ As WebTransport sessions are established over HTTP/3, they are identified using the https URI scheme ([HTTP], Section 4.2.2).
~clientは、 ~HTTP `CONNECT$m 要請を送信して, 新たな`~WebTransport~session$を作成できる — この要請は、 次を満たさなければ`ナラナイ^2119: ◎ In order to create a new WebTransport session, a client can send an HTTP CONNECT request.\
- `protocol^ph 疑似-~header `RFC8441$r を伴い, その値は `webtransport^c をとる。 ◎ The :protocol pseudo-header field ([RFC8441]) MUST be set to webtransport.\
- `scheme$ph 疑似-~headerを伴い, その値は `https^c をとる。 ◎ The :scheme field MUST be https.\
- [ `authority$ph, `path$ph ]両~疑似-~headerを伴う — これらは、 欲される`~WebTransport~server$を指示する。 ◎ Both the :authority and the :path value MUST be set; those fields indicate the desired WebTransport server.\
- ~clientは~browser~clientである場合、 `Origin$h ~header `RFC6454$r を伴う — 他の場合、 この~headerは`任意選択^2119である。 ◎ If the WebTransport session is coming from a browser client, an Origin header [RFC6454] MUST be provided within the request; otherwise, the header is OPTIONAL.
`~HTTP3~server$は、 `webtransport^c に設定された `protocol^ph ~fieldを伴う拡張d `CONNECT$m 要請を受信した際には,当の要請にて指定された ( `authority$ph 値, `path$ph 値 ) に結付けられた`~WebTransport~server$を有するか否か検査できる。 有さない場合、 状態s~code `404$st `HTTP$r で返信する`ベキ^2119である。 `~WebTransport~server$は: ◎ Upon receiving an extended CONNECT request with a :protocol field set to webtransport, the HTTP/3 server can check if it has a WebTransport server associated with the specified :authority and :path values. If it does not, it SHOULD reply with status code 404 (Section 15.5.5 of [HTTP]).\
- 当の要請が `Origin$h ~headerを包含するときは、 この~headerを検証yして,[ この~headerに指定された生成元が当の~serverへ~accessすることは許容される ]ことを確保しなければ`ナラナイ^2119 — 検証yに失敗した場合、 状態s~code `403$st `HTTP$r で返信する`ベキ^2119である。 ◎ When the request contains the Origin header, the WebTransport server MUST verify the Origin header to ensure that the specified origin is allowed to access the server in question.\ If the verification fails, the WebTransport server SHOULD reply with status code 403 (Section 15.5.4 of [HTTP]).\
- すべての検査に合格したなら、 状態s~code `2xx$st `HTTP$r を返信することにより, `~WebTransport~session$を受容しても`ヨイ^2119。 ◎ If all checks pass, the WebTransport server MAY accept the session by replying with a 2xx series status code, as defined in Section 15.3 of [HTTP].
`~WebTransport~session$が確立されたことになる時点は、 ~clientの視点からは,自身が `2xx$st 応答を受信したときであり、 ~serverの視点からは,自身が `2xx$st 応答を送信したときである。 ◎ From the client's perspective, a WebTransport session is established when the client receives a 2xx response. From the server's perspective, a session is established once it sends a 2xx response.
~serverは、 `3xx$st 応答 `HTTP$r を返信して,~redirectionを指示してもよい。 ~UAは、 そのような~redirectに対し,自動的に追従しては`ナラナイ^2119 — ~clientは、 当の`~WebTransport~session$用の~dataをすでに送信した場合もあるので。 ~UA【!it】は、 ~redirectについて~clientに通知しても`ヨイ^2119。 ◎ The server may reply with a 3xx response, indicating a redirection (Section 15.4 of [HTTP]). The user agent MUST NOT automatically follow such redirects, as the client could potentially already have sent data for the WebTransport session in question; it MAY notify the client about the redirect.
`CONNECT$m ~methodは`安全$とは見なされないので、 ~clientは,~WebTransportを~0-RTT~packet内では起動し得ない ( `HTTP3$r `早期~data@~HTTPv3#early-data§を見よ)。 しかしながら, ~WebTransportに関係する `SETTINGS$ft ~parameterは、 `HTTP3$r `初期化@~HTTPv3#settings-initialization§にて述べられるとおり, 前回の~sessionから維持してもよい。 ~serverは、 ~0-RTTを受容する場合には,[ ~openな`~WebTransport~session$の最大な個数 ]に対する上限を[ 前回の~sessionの間に折衝した上限 ]から抑制しては`ナラナイ^2119 — そのような変更は、 互換でないものと判断され,その結果は `接続~error$( `H3_SETTINGS_ERROR$er ) にならなければ`ナラナイ^2119。 ◎ Clients cannot initiate WebTransport in 0-RTT packets, as the CONNECT method is not considered safe (see Section 10.9 of [HTTP3]). However, WebTransport-related SETTINGS parameters may be retained from the previous session as described in Section 7.2.4.2 of [HTTP3]. If the server accepts 0-RTT, the server MUST NOT reduce the limit of maximum open WebTransport sessions from the one negotiated during the previous session; such change would be deemed incompatible, and MUST result in a H3_SETTINGS_ERROR connection error.
~HTTP~Upgrade~token `webtransport^c は、 `HTTP-DATAGRAM$r にて定義されるとおり,`~capsule~protocol$を利用する。 `~capsule~protocol$は、 ~serverが `2xx$st 応答を送信するときに折衝される。 `Capsule-Protocol$h ~header `HTTP-DATAGRAM$r は, ~WebTransportには要求されないので、 ~WebTransport端点は,それを安全に無視できる。 ◎ The webtransport HTTP Upgrade Token uses the Capsule Protocol as defined in [HTTP-DATAGRAM]. The Capsule Protocol is negotiated when the server sends a 2xx response. The capsule-protocol header field Section 3.4 of [HTTP-DATAGRAM] is not required by WebTransport and can safely be ignored by WebTransport endpoints.
3.4. 応用~protocolの折衝
~HTTP3越しの~WebTransportは、 ~ALPN `RFC7301$r に類似な~protocol折衝の仕組みを提供する — その意図は、 これまで既存の~protocolのうち[ ~QUICを利用していて,この機能性に依拠するもの ]の~port法を単純~化することにある。 ◎ WebTransport over HTTP/3 offers a protocol negotiation mechanism, similar to TLS Application-Layer Protocol Negotiation Extension (ALPN) [RFC7301]; the intent is to simplify porting pre-existing protocols that use QUIC and rely on this functionality.
~UAは、 `CONNECT$m 要請~内に `WT-Available-Protocols$h ~headerを内包しても`ヨイ^2119。 この~headerは、 アリな~protocolたちを選好~順序で列挙する。 この~headerを受信した~serverは、 対する成功裡な応答( `2xx$st )内に `WT-Protocol$h ~fieldを内包しても`ヨイ^2119。 そうする場合、 ~serverは,その~fieldに[ ~clientからの~listから選んだ いずれか 1 つ ]を内包しなければ`ナラナイ^2119【!SHALL】。 ~serverは、 ~clientが相応しい~protocolを内包しなかった場合には, 当の要請を却下しても`ヨイ^2119。 ◎ The user agent MAY include a WT-Available-Protocols header field in the CONNECT request. The WT-Available-Protocols enumerates the possible protocols in preference order. If the server receives such a header, it MAY include a WT-Protocol field in a successful (2xx) response. If it does, the server SHALL include a single choice from the client's list in that field. Servers MAY reject the request if the client did not include a suitable protocol.
[ `WT-Available-Protocols@h / `WT-Protocol@h ]は、 `有構造~field$ `RFC8941$r である。 `WT-Available-Protocols$h は、 `~sf~token$たちが成す`~sf~list$をとる。 `WT-Protocol$h は、 `~sf~token$をとる。 `WT-Protocol$h 応答~header内の~tokenは、 それが応対した要請の `WT-Available-Protocols$h 内に挙げられた,いずれかの~tokenでなければ`ナラナイ^2119。 個々の~token値の意味論は、 当の~WebTransport資源により決定される — ~IANAの `~ALPN~protocol~ID~registry@~IANA-a/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids$cite には登録されない。 ◎ Both WT-Available-Protocols and WT-Protocol are Structured Fields [RFC8941]. WT-Available-Protocols is a List of Tokens, and WT-Protocol is a Token. The token in the WT-Protocol response header field MUST be one of the tokens listed in WT-Available-Protocols of the request. The semantics of individual token values is determined by the WebTransport resource in question and are not registered in IANA's "ALPN Protocol IDs" registry.
3.5. 同時な~sessionの個数の制限-法
この文書は、 `SETTINGS_WEBTRANSPORT_MAX_SESSIONS$sp ~parameterを定義する — それは、 単独の`~HTTP3接続$上で同時並行な`~WebTransport~session$の最大~個数を制限することを ~serverに許容する。 ~clientは、 ~serverからの `SETTINGS$ft ~parameter内に指示された個数より多い~sessionを~openしては`ナラナイ^2119。 ~serverは、 ~clientがこの上限を超過している~sessionを~openした場合でも, 当の接続を~closeしては`ナラナイ^2119 — ~WebTransport~protocolの非同期的な資質に因り、 ~openな~sessionの個数についての~viewは,~clientと~serverとで整合でない【ときもある】ので。 代わりに,[ `~CONNECT~stream$のうち,自身が処理する用意がないもの ]すべてを `HTTP3$r にて定義される `H3_REQUEST_REJECTED$er 【!HTTP_REQUEST_REJECTED】状態sで`~reset$しなければ`ナラナイ^2119。 ◎ This document defines a SETTINGS_WEBTRANSPORT_MAX_SESSIONS parameter that allows the server to limit the maximum number of concurrent WebTransport sessions on a single HTTP/3 connection. The client MUST NOT open more sessions than indicated in the server SETTINGS parameters. The server MUST NOT close the connection if the client opens sessions exceeding this limit, as the client and the server do not have a consistent view of how many sessions are open due to the asynchronous nature of the protocol; instead, it MUST reset all of the CONNECT streams it is not willing to process with the HTTP_REQUEST_REJECTED status defined in [HTTP3].
他の~HTTP要請と同じく, `~WebTransport~session$たち, それらに対し送信される~dataは、 ~flow制御の上限に向かって数えられる。 この文書は、[ 各`~WebTransport~session$により消費される~flow制御~creditの量 ]を[ 異なる~sessionどうしで相対的に制限する ]ための[ 端点~用の追加的な仕組み ]を導入しない。 しかしながら、 ~serverが[ 特定0の~session上の流入~要請たちの~rateを制限する ]よう望む場合, 代替な仕組みがある: ◎ Just like other HTTP requests, WebTransport sessions, and data sent on those sessions, are counted against flow control limits. This document does not introduce additional mechanisms for endpoints to limit the relative amount of flow control credit consumed by different WebTransport sessions, however servers that wish to limit the rate of incoming requests on any particular session have alternative mechanisms:
- `HTTP3$r にて定義される~error~code `H3_REQUEST_REJECTED$er【!HTTP_REQUEST_REJECTED】 は、[ 当の要請は,どの仕方でも処理されなかった ]ことを受信している~HTTP3~stackに対し指示する。 ◎ The HTTP_REQUEST_REJECTED error code defined in [HTTP3] indicates to the receiving HTTP/3 stack that the request was not processed in any way.
- ~HTTP状態s~code `429$st `RFC6585$r は、[ 当の要請は,~rate制限-法に因り却下された ]ことを指示する。 前項と違って、 この通達は,応用へ直に伝播される。 ◎ HTTP status code 429 indicates that the request was rejected due to rate limiting [RFC6585]. Unlike the previous method, this signal is directly propagated to the application.
3.6. 優先度化
各`~WebTransport~session$は、 拡張d `CONNECT$m を利用して起動される。 `RFC9218$r `11@~HTTPpriority#connect-scheduling§は,[ 拡張-可能な優先度が`~CONNECT~stream$上に送信された~dataに どう適用できるか ]を述べるが、 ~WebTransportは,[ 要請と応答の関係において交換される~dataの種別 ]を拡張する — それには、 追加的な考慮点が要求される。 ◎ WebTransport sessions are initiated using extended CONNECT. While Section 11 of [RFC9218] describes how extensible priorities can be applied to data sent on a CONNECT stream, WebTransport extends the types of data that are exchanged in relation to the request and response, which requires additional considerations.
~WebTransport `CONNECT$m 要請, それに対する応答は、 `Priority$h ~header `RFC9218$r を包含しても`ヨイ^2119。 ~clientは、 `PRIORITY_UPDATE$ft ~frame `RFC9218$r を送信することにより, 優先度化し直しても`ヨイ^2119。 `RFC9218$r に対する拡張においては、[ ~client, ~server ]は, 当の封入している【?】`~WebTransport~session$内に自身が送信するすべての~data — `~capsule$, `~WebTransport~stream$, ~WebTransport~datagram を含む — に[ `RFC9218$r `9@~HTTPpriority#client-scheduling§, `RFC9218$r `10@~HTTPpriority#server-scheduling§ ]による~schedule法の指導をどちらも適用することが`推奨される^2119。 ~WebTransportは、 `~WebTransport~session$の中の[ ~streamたち, ~datagramたち ]用に優先度を通達するための仕組みを何も供さない — そのような仕組みは、 ~WebTransportを利用している応用~protocolが定義し得る。 そのような仕組みは、 ある~sessionの中での~schedule法に限り影響し, 同じ`~HTTP3接続$上の他の~dataの~schedule法には影響しないことが`推奨される^2119。 ◎ WebTransport CONNECT requests and responses MAY contain the Priority header field (Section 5 of [RFC9218]); clients MAY reprioritize by sending PRIORITY_UPDATE frames (Section 7 of [RFC9218]). In extension to [RFC9218], it is RECOMMENDED that clients and servers apply the scheduling guidance in both Section 9 of [RFC9218] and Section 10 of [RFC9218] for all data that they send in the enclosing WebTransport session, including Capsules, WebTransport streams and datagrams. WebTransport does not provide any priority signaling mechanism for streams and datagrams within a WebTransport session; such mechanisms can be defined by application protocols using WebTransport. It is RECOMMENDED that such mechanisms only affect scheduling within a session and not scheduling of other data on the same HTTP/3 connection.
`RFC9218$r `8@~HTTPpriority#merging§にて与えられる[ ~clientの優先度, ~serverの優先度 ]を併合するための指導は、 `~WebTransport~session$にも適用される。 例えば,ある応答にて `Priority$h ~headerを受信した~clientは、 ある`~WebTransport~session$の優先度に関する自身の~viewを改めることもでき, その結果として流出~dataの~schedule法を改めることもできる。 ◎ The client/server priority merging guidance given in Section 8 of [RFC9218] also applies to WebTransport session. For example, a client that receives a response Priority header field could alter its view of a WebTransport session priority and alter the scheduling of outgoing data as a result.
端点は、 `~WebTransport~session$たちを優先度化する際に,[ それらが同じ`~HTTP3接続$上の他の~sessionや要請と どう相互作用するか ]について考慮する必要がある。 ◎ Endpoints that prioritize WebTransport sessions need to consider how they interact with other sessions or requests on the same HTTP/3 connection.
4. ~WebTransport特能
~HTTP3越しの~WebTransportは、 `OVERVIEW$r にて述べられた特能として,いずれかの端点により起動される[ `一方向~stream$, `双方向~stream$, ~datagram ]を供する。 [ ~HTTP3越しの~WebTransportと伴に利用するよう設計された~protocol ]の特能は、 これらに拘束される。 `~capsule~protocol$は、 ~HTTP3越しの~WebTransportの実装の詳細であり, ~WebTransport特能ではない。 ◎ WebTransport over HTTP/3 provides the following features described in [OVERVIEW]: unidirectional streams, bidirectional streams and datagrams, initiated by either endpoint. Protocols designed for use with WebTransport over HTTP/3 are constrained to these features. The Capsule Protocol is an implementation detail of WebTransport over HTTP/3 and is not a WebTransport feature.
`~session~ID$は、[ ~stream, ~datagram ]たちを それらが属する`~WebTransport~session$ごとに逆多重化するために利用される。 伝送路~上では、 `~session~ID$は[ ~QUIC `RFC9000$r にて述べられる`可変長な整数$用の~scheme ]を利用して符号化される。 ◎ Session IDs are used to demultiplex streams and datagrams belonging to different WebTransport sessions. On the wire, session IDs are encoded using the QUIC variable length integer scheme described in [RFC9000].
~clientは、 `CONNECT$m 要請に対する応答を まだ受信してないときでも,楽観的に、 当の要請を送信した~session用に[ `一方向~stream$/`双方向~stream$ ]を~openしても,~datagramを送信しても`ヨイ^2119。 ~server側は、 `CONNECT$m 要請を受信したなら,[ ~streamを~openする/~datagramを送信する ]ことがアリになる。 ◎ The client MAY optimistically open unidirectional and bidirectional streams, as well as send datagrams, for a session that it has sent the CONNECT request for, even if it has not yet received the server's response to the request. On the server side, opening streams and sending datagrams is possible as soon as the CONNECT request has been received.
受信者は、 いつでも[ ~clientが起動した`双方向~stream$用の妥当な~ID ]になり得ない`~session~ID$を受信したときは, ~error~code `H3_ID_ERROR$er で当の接続を~closeしなければ`ナラナイ^2119。 ◎ If at any point a session ID is received that cannot be a valid ID for a client-initiated bidirectional stream, the recipient MUST close the connection with an H3_ID_ERROR error code.
4.1. 一方向~stream
~WebTransport端点は、 `一方向~stream$を起動できる。 ~HTTP3の`一方向~stream$の種別は、 `0x54^hex でなければ`ナラナイ^2119【!SHALL】。 ~streamの本体は、 順に,次に挙げるものからなっていなければ`ナラナイ^2119【!SHALL】( `図 2@#fig-unidi$ ) ⇒# `可変長な整数$として符号化された~stream種別, `可変長な整数$として符号化された`~session~ID$, ~streamの利用者が指定した~stream~data ◎ WebTransport endpoints can initiate unidirectional streams. The HTTP/3 unidirectional stream type SHALL be 0x54. The body of the stream SHALL be the stream type, followed by the session ID, encoded as a variable-length integer, followed by the user-specified stream data (Figure 2).
4.2. 双方向~stream
~clientが起動した`双方向~stream$は、 ~HTTP3により,すべて要請~streamとして予約される — それは、 各種~規則を伴う~HTTP3~frameたちが成す連列である ( `HTTP3$r `~HTTPの~message~frame法@~HTTPv3#request-response§, `双方向~stream@~HTTPv3#request-streams§を見よ)。 ◎ All client-initiated bidirectional streams are reserved by HTTP/3 as request streams, which are a sequence of HTTP/3 frames with a variety of rules (see Sections 4.1 and 6.1 of [HTTP3]).
~WebTransportは、[ 代替な要請~stream規則を宣言して利用する ]ことを~clientに許容するよう,~HTTP3を拡張する。 ~clientは、[ `~WebTransportの~support@#establishing$を指示している設定群 ]を受信したなら,[ 当の~streamを成す最初の~byte列 ]として[ `可変長な整数$として符号化された特別な通達~値 ]を送信することにより[ 当の~stream上の残りの~byte列がどう利用されるか ]を指示できる。 ◎ WebTransport extends HTTP/3 to allow clients to declare and use alternative request stream rules. Once a client receives settings indicating WebTransport support (Section 3.1), it can send a special signal value, encoded as a variable-length integer, as the first bytes of the stream in order to indicate how the remaining bytes on the stream are used.
~WebTransportは、 ~serverが起動したすべての`双方向~stream$用の規則を定義することにより, ~HTTP3を拡張する。 ~serverは、 `~WebTransport~session$を`確立して@#establishing$いる流入 `CONNECT$m 要請を受信したなら, その~sessionと伴に利用する`双方向~stream$を~openできる。 ~serverは、[ この~streamを成す最初の~byte列 ]として[ `可変長な整数$として符号化された特別な通達~値 ]を送信しなければ`ナラナイ^2119【!SHALL】 — それは、[ この~stream上の残りの~byte列がどう利用されるか ]を指示する。 ◎ WebTransport extends HTTP/3 by defining rules for all server-initiated bidirectional streams. Once a server receives an incoming CONNECT request establishing a WebTransport session (Section 3.1), it can open a bidirectional stream for use with that session and SHALL send a special signal value, encoded as a variable-length integer, as the first bytes of the stream in order to indicate how the remaining bytes on the stream are used.
[ ~client, ~server ]が双方向~WebTransport~streamを~openするために利用する通達~値は、 `0x41^hex とする。 これには、 それに結付けられる[ `可変長な整数$として符号化された`~session~ID$ ]が後続する。 残りは、 当の~streamを成す応用~payloadである ( `図 3@#fig-bidi-client$)。 ◎ The signal value, 0x41, is used by clients and servers to open a bidirectional WebTransport stream. Following this is the associated session ID, encoded as a variable-length integer; the rest of the stream is the application payload of the WebTransport stream (Figure 3).
この文書は、 特別な通達~値 `0x41^hex を~frame種別 `WEBTRANSPORT_STREAM$ft として予約する。 それは、 衝突を避けるため,~HTTP3~frame種別として登録されるが、 長さを欠如するので,適正な~HTTP3~frameではない。 `WEBTRANSPORT_STREAM$ft は,~HTTP3~frame構文の拡張であり、 ~WebTransportを折衝している相手の端点は,それを~supportしなければ`ナラナイ^2119。 この拡張を実装する端点は、 追加的な~frame取扱い要件の~subjectにもなる。 端点は、 要請~streamを成す一番最初の~byte列~以外において, ~HTTP3~stream上に~frame種別 `WEBTRANSPORT_STREAM$ft を送信しては`ナラナイ^2119。 他の状況下で,この~frame種別を受信した場合、 `接続~error$( `H3_FRAME_ERROR$er ) として扱わなければ`ナラナイ^2119。 ◎ This document reserves the special signal value 0x41 as a WEBTRANSPORT_STREAM frame type. While it is registered as an HTTP/3 frame type to avoid collisions, WEBTRANSPORT_STREAM is not a proper HTTP/3 frame, as it lacks length; it is an extension of HTTP/3 frame syntax that MUST be supported by any peer negotiating WebTransport. Endpoints that implement this extension are also subject to additional frame handling requirements. Endpoints MUST NOT send WEBTRANSPORT_STREAM as a frame type on HTTP/3 streams other than the very first bytes of a request stream. Receiving this frame type in any other circumstances MUST be treated as a connection error of type H3_FRAME_ERROR.
4.3. ~data~streamの~reset法
~WebTransport端点は、 ~WebTransport~data~stream用に[ `RESET_STREAM$ft / `STOP_SENDING$ft ]~frameを送信してもよい。 それらの通達は、 当の~WebTransport実装により,応用へ伝播される。 ◎ A WebTransport endpoint may send a RESET_STREAM or a STOP_SENDING frame for a WebTransport data stream. Those signals are propagated by the WebTransport implementation to the application.
~WebTransport応用は、 自身の演算~用に~error~codeを供さなければ`ナラナイ^2119【!SHALL】。 ~WebTransportは,~error~code空間を~HTTP3と共有するので、 ~stream用の~WebTransport応用~errorは、 無符号な 32 ~bitな整数 — `0x00000000^hex 〜 `0xffffffff^hex — に制限される。 ~WebTransport実装は、 それらの~error~codeを `WEBTRANSPORT_APPLICATION_ERROR$er 用に予約された~error範囲の中へ対応付直さなければ`ナラナイ^2119【!SHALL】 — `0x00000000^hex は `0x52e4a40fa8db^hex に, `0xffffffff^hex は `0x52e5ac983162^hex に対応するよう。 この範囲の内側には、 `HTTP3$r `~HTTP3~error~code@~HTTPv3#http-error-codes§により予約-済みな符号点たち { `0x1f^hex ~MUL %N ~PLUS `0x21^hex ; %N は負でない整数 } があることに注意 — これらの符号点は、 ~error~codeたちを対応付けるときには,飛ばされる必要がある (すなわち、 ある予約-済みな符号点を挟んで隣接な 2 個の~HTTP3~error符号点は, 2 個の隣接な~WebTransport応用~error符号点に対応付けられる)。 対応付け用の`疑似-~code例@#fig-remap-errors$は: ◎ A WebTransport application SHALL provide an error code for those operations. Since WebTransport shares the error code space with HTTP/3, WebTransport application errors for streams are limited to an unsigned 32-bit integer, assuming values between 0x00000000 and 0xffffffff. WebTransport implementations SHALL remap those error codes into the error range reserved for WEBTRANSPORT_APPLICATION_ERROR, where 0x00000000 corresponds to 0x52e4a40fa8db, and 0xffffffff corresponds to 0x52e5ac983162. Note that there are code points inside that range of form "0x1f * N + 0x21" that are reserved by Section 8.1 of [HTTP3]; those have to be skipped when mapping the error codes (i.e. the two HTTP/3 error codepoints adjacent to a reserved codepoint would map to two adjacent WebTransport application error codepoints). An example pseudocode can be seen in Figure 4.
各~WebTransport~data~stream %~stream には、 当の~streamの始めにある~header %~header を通して,ある`~WebTransport~session$ %~session が結付けられる — %~stream を`~reset$すると、 その~data【`~session~ID$】は, `RESET_STREAM$ft ~frameを利用するときに破棄される結果になるかもしれない。 これを防止するため、 ~WebTransport実装は, %~stream を`~reset$するときに `RESET_STREAM_AT$ft ~frame `RESET-STREAM-AT$r を利用しなければナラナイ — その~frameを成す `依拠-可能な~size^i( `Reliable Size^en ) ~fieldを %~header の~size以上に設定して。 これは、[ %~stream を %~session へ結付けている~ID~field【`~session~ID$】 ]が常に送達されることを確保する。 ◎ WebTransport data streams are associated with sessions through a header at the beginning of the stream; resetting a stream might result in that data being discarded when using a RESET_STREAM frame. To prevent this, WebTransport implementations MUST use the RESET_STREAM_AT frame [RESET-STREAM-AT] with a Reliable Size set to at least the size of the WebTransport header when resetting a WebTransport data stream. This ensures that the ID field associating the data stream with a WebTransport session is always delivered.
~WebTransport実装は、[ 既知な~sessionが結付けられた~stream ]用の~error~codeを当の~sessionを所有する応用へ回送しなければ`ナラナイ^2119【!SHALL】。 類似に,`媒介者$は、 相手の端点から~resetを受信したときは, 対応する~error~codeで~streamを`~reset$しなければ`ナラナイ^2119【!SHALL】。 ~WebTransport実装は、 所与の`~HTTP3接続$越しの~sessionを意図的に 1 個しか許容しない場合には, その接続~上の唯一の~sessionを所有する応用へ~error~codeを — ~WebTransport応用~error~codeに変換した上で — 回送しなければ`ナラナイ^2119【!SHALL】。 ◎ WebTransport implementations SHALL forward the error code for a stream associated with a known session to the application that owns that session; similarly, the intermediaries SHALL reset the streams with corresponding error code when receiving a reset from the peer. If a WebTransport implementation intentionally allows only one session over a given HTTP/3 connection, it SHALL forward the error codes within WebTransport application error code range to the application that owns the only session on that connection.
4.4. ~datagram
~datagramは、 `~HTTP~datagram$ `HTTP-DATAGRAM$r を利用して送信できる。 ~WebTransport~datagramの~payloadは、 `~HTTP~datagram$を成す `~HTTP~datagram~payload^i ~field内に改変されずに送信される。 それは、 `四分~stream~ID^i ~fieldの直後に後続することに注意 — この~fieldは、 当の~QUIC `DATAGRAM$ft ~frameの~payloadを成す始端にあり, `~WebTransport~session$を確立した`~CONNECT~stream$を指す。 ◎ Datagrams can be sent using HTTP Datagrams. The WebTransport datagram payload is sent unmodified in the "HTTP Datagram Payload" field of an HTTP Datagram (Section 2.1 of [HTTP-DATAGRAM]). Note that the payload field directly follows the Quarter Stream ID field, which is at the start of the QUIC DATAGRAM frame payload and refers to the CONNECT stream that established the WebTransport session.
4.5. 流入~stream/~datagramの~buffer法
~HTTP3越しの~WebTransportにおいては、 ~clientは,`~WebTransport~session$を確立する前に[ ~WebTransport用の~Upgrade~tokenを利用している `CONNECT$m 要請 ]を送信する ( `~transport能力がある~HTTP3接続の確立-法@#establishingを見よ) ことにより[ ~serverから `SETTINGS$ft ~frameが受信される ]のを待機しなければナラナイ。 これは、[ 所与の`~HTTP3接続$上で~WebTransportの各~versionのうち,どれが利用できるか ]を~clientが常に知れることを確保する。 ◎ In WebTransport over HTTP/3, the client MUST wait for receipt of the server's SETTINGS frame before establishing any WebTransport sessions by sending CONNECT requests using the WebTransport upgrade token (see Section 3.1). This ensures that the client will always know what versions of WebTransport can be used on a given HTTP/3 connection.
しかしながら~clientは、 `SETTINGS$ft ~frameに加えて,複数個の[ ~WebTransport `CONNECT$m 要請, ~WebTransport~data~stream, ~WebTransport~datagram ]を単独の~flightの中で一括して送信しても`ヨイ^2119。 それらは順序どおりに到着しないこともあるので、 `~WebTransport~server$は,[ ~streamや~datagram ]を対応する~sessionを伴わずに受信する状況に置かれることもある。 類似に、 ~clientは,~serverが起動した[ ~stream/~datagram ]を[ ~serverから `CONNECT$m 応答~headerを受信する前 ]に受信することもある。 ◎ Clients can, however, send a SETTINGS frame, multiple WebTransport CONNECT requests, WebTransport data streams, and WebTransport datagrams all within a single flight. As those can arrive out of order, a WebTransport server could be put into a situation where it receives a stream or a datagram without a corresponding session. Similarly, a client may receive a server-initiated stream or a datagram before receiving the CONNECT response headers from the server.
この事例を取扱うため、 ~WebTransport端点は,[ ~stream/~datagram ]を[ ある確立された~sessionに結付けれるようになる ]まで~bufferする`ベキ^2119である。 資源の枯渇を避けるため、 端点は,~bufferされる[ ~stream/~datagram ]の個数を制限しなければ`ナラナイ^2119。 ~bufferされた~streamの個数が それを超過したときは、 ある~streamが, ~error~code `WEBTRANSPORT_BUFFERED_STREAM_REJECTED$er を伴う[ `RESET_STREAM$ft / `STOP_SENDING$ft ]を送信することにより~closeされなければ`ナラナイ^2119【!SHALL】。 ~bufferされた~datagramの個数が それを超過したときは、 ある~datagramが落とされなければ`ナラナイ^2119【!SHALL】。 破棄する[ ~stream/~datagram ]としてどれを選ぶかは、 実装に委ねられる。 ◎ To handle this case, WebTransport endpoints SHOULD buffer streams and datagrams until those can be associated with an established session. To avoid resource exhaustion, the endpoints MUST limit the number of buffered streams and datagrams. When the number of buffered streams is exceeded, a stream SHALL be closed by sending a RESET_STREAM and/or STOP_SENDING with the WEBTRANSPORT_BUFFERED_STREAM_REJECTED error code. When the number of buffered datagrams is exceeded, a datagram SHALL be dropped. It is up to an implementation to choose what stream or datagram to discard.
4.6. ~HTTP3 `GOAWAY$ft ~frameとの相互作用
~HTTP3は、 上品な~shutdownの仕組みを定義する ( `HTTP3$r `接続の~shutdown@~HTTPv3#connection-shutdown§) — それは、 双方の端点に次を許容する ⇒ `GOAWAY$ft ~frameを送信して,もはや新たな流入[ 要請/~push ]を受容しないことを指示する ◎ HTTP/3 defines a graceful shutdown mechanism (Section 5.2 of [HTTP3]) that allows a peer to send a GOAWAY frame indicating that it will no longer accept any new incoming requests or pushes.
`GOAWAY$ft ~frameを受信した~clientは、 新たな`~WebTransport~session$用の `CONNECT$m 要請を起動し得ない — 当の【何の?】~stream識別子が指示された`~stream~ID$以上の場合には。 ◎ A client receiving GOAWAY cannot initiate CONNECT requests for new WebTransport sessions if the stream identifier is equal to or greater than the indicated stream ID.
~HTTP3 `GOAWAY$ft ~frameは、[ すべての`~WebTransport~session$に対し,~shutdownを起動する ]よう応用へ通達するものでもある。 どちらの端点も、 `DRAIN_WEBTRANSPORT_SESSION$cps ( `0x78ae^hex )`~capsule$を送信して, 単独の`~WebTransport~session$を~shut-downできる。 ◎ An HTTP/3 GOAWAY frame is also a signal to applications to initiate shutdown for all WebTransport sessions. To shut down a single WebTransport session, either endpoint can send a DRAIN_WEBTRANSPORT_SESSION (0x78ae) capsule.
DRAIN_WEBTRANSPORT_SESSION ~capsule { 種別 (i) = DRAIN_WEBTRANSPORT_SESSION, 長さ (i) = 0 } ◎ DRAIN_WEBTRANSPORT_SESSION Capsule { Type (i) = DRAIN_WEBTRANSPORT_SESSION, Length (i) = 0 }
端点は、[ `DRAIN_WEBTRANSPORT_SESSION$cps `~capsule$/ ~HTTP3 `GOAWAY$ft ~frame ]を[ 送信した/受信した ](順不同)後でも,[ 当の~sessionの利用を継続しても`ヨイ^2119/ 当の~sessionで新たな~streamを~openしても`ヨイ^2119 ](順不同)。 通達は、 ~WebTransportを利用している応用~用に意図される — 応用には、 アリな限り,当の~sessionを上品に終了するよう試みることが期待される。 ◎ After sending or receiving either a DRAIN_WEBTRANSPORT_SESSION capsule or a HTTP/3 GOAWAY frame, an endpoint MAY continue using the session and MAY open new streams. The signal is intended for the application using WebTransport, which is expected to attempt to gracefully terminate the session as soon as possible.
4.7. 鍵~用~素材~exporterの利用
~HTTP3越しの~WebTransportは、 ~TLS鍵~用~素材~exporter( `TLS keying material exporter^en )の利用を~supportする `RFC8446$r, `7.5@~RFCx/rfc8446#section-7.5§。 複数の~WebTransport~sessionが同じ下層の~QUIC接続を共有し得るので、 ~WebTransportは、[ 異なる~sessionどうしで鍵~用~素材を分離する ]ために[ ある~TLS~exporterを導出するための自前の仕組み ]を定義する。 利用元が所与の~WebTransport~session用に[ 指定された[ ~label, 文脈 ]を伴う~exporter ]を要請する場合、 結果の~exporterは, `RFC8446$r `7.5@~RFCx/rfc8446#section-7.5§ に定義されるとおりの~TLS~exporter — 当の~labelは "`EXPORTER-WebTransport^c" に設定され, 当の文脈は[ 下に定義される `~WebTransport~exporter文脈^i 構造体 ]の直列化に設定されたそれ — でなければ`ナラナイ^2119【!SHALL】。 ◎ WebTransport over HTTP/3 supports the use of TLS keying material exporters [RFC8446], Section 7.5. Since the underlying QUIC connection may be shared by multiple WebTransport sessions, WebTransport defines its own mechanism for deriving a TLS exporter that separates keying material for different sessions. If the user requests an exporter for a given WebTransport session with a specified label and context, the resulting exporter SHALL be a TLS exporter as defined in [RFC8446], Section 7.5 with the label set to "EXPORTER-WebTransport" and the context set to the serialization of the "WebTransport Exporter Context" struct as defined below.
~WebTransport~exporter文脈 { ~session~ID (64), 応用から給された~exporter~labelの長さ (8), 応用から給された~exporter~label (8..), 応用から給された~exporter文脈の長さ (8), 応用から給された~exporter文脈 (..) } ◎ WebTransport Exporter Context { WebTransport Session ID (64), WebTransport Application-Supplied Exporter Label Length (8), WebTransport Application-Supplied Exporter Label (8..), WebTransport Application-Supplied Exporter Context Length (8), WebTransport Application-Supplied Exporter Context (..) }
~TLS~exporter~APIは、 `文脈^i ~fieldを省略することを許可するかもしれない。 そのような事例では、 ~TLS 1.3 と同じく, `応用から給された~exporter文脈^i が省略された場合,その長さは 0 になる。 ◎ A TLS exporter API might permit the context field to be omitted. In this case, as with TLS 1.3, the WebTransport Application-Supplied Exporter Context becomes zero-length if omitted.
5. ~sessionの終了n
~HTTP3越しの`~WebTransport~session$は、 次に挙げるいずれかが生じたとき,終了されたものと見なされる: ◎ A WebTransport session over HTTP/3 is considered terminated when either of the following conditions is met:
- `~CONNECT~stream$が,どちらかの側で[ ~cleanに/中途で ]~closeされた。 ◎ the CONNECT stream is closed, either cleanly or abruptly, on either side; or
- `CLOSE_WEBTRANSPORT_SESSION$cps `~capsule$が[ 送信された/受信された ]。 ◎ a CLOSE_WEBTRANSPORT_SESSION capsule is either sent or received.
端点は、 ある~sessionが終了したことを悟った際には, 次に従わなければ`ナラナイ^2119: ◎ Upon learning that the session has been terminated,\
-
当の~sessionに結付けられたすべての~streamに対し:
- その送信-側を`~reset$する — ~error~codeには `WEBTRANSPORT_SESSION_GONE$er を利用する。
- その受信-側の読取りを中止する。
( `RFC9000$r `~streamに対する演算@~RFCx/rfc9000#stream-operations§を見よ。)
◎ the endpoint MUST reset the send side and abort reading on the receive side of all of the streams associated with the session (see Section 2.4 of [RFC9000]) using the WEBTRANSPORT_SESSION_GONE error code;\ -
当の~sessionに対し:
- 新たな~datagramを送信しない。
- 新たな~streamを~openしない。
応用は、 ~sessionを終了する際に詳細な~error~messageを伴わせるためとして, 種別 `CLOSE_WEBTRANSPORT_SESSION$cps ( `0x2843^hex )の~HTTP`~capsule$ `HTTP-DATAGRAM$r を送信しても`ヨイ^2119。 この`~capsule$の形式は、 次に従わなければ`ナラナイ^2119【!SHALL】: ◎ To terminate a session with a detailed error message, an application MAY send an HTTP capsule [HTTP-DATAGRAM] of type CLOSE_WEBTRANSPORT_SESSION (0x2843). The format of the capsule SHALL be as follows:
CLOSE_WEBTRANSPORT_SESSION ~capsule { 種別 (i) = CLOSE_WEBTRANSPORT_SESSION, 長さ (i), 応用~error~code (32), 応用~error~message (..8192【1024?】), } ◎ CLOSE_WEBTRANSPORT_SESSION Capsule { Type (i) = CLOSE_WEBTRANSPORT_SESSION, Length (i), Application Error Code (32), Application Error Message (..8192), }
`CLOSE_WEBTRANSPORT_SESSION$cps は、 次に挙げる~fieldを有する — いずれも、 その値は,当の接続を~closeしている応用により供される: ◎ CLOSE_WEBTRANSPORT_SESSION has the following fields:
- `応用~error~code^i ⇒ ~error~codeを与える 32 ~bitな整数 ◎ Application Error Code: • A 32-bit error code provided by the application closing the connection.
- `応用~error~message^i ⇒ ~error~messageを与える~UTF-8に符号化された文字列。 この~messageは、 当の`~capsule$を成す残りを占める — その長さは、 1024 ~byteを超過しては`ナラナイ^2119。 ◎ Application Error Message: • A UTF-8 encoded error message string provided by the application closing the connection. The message takes up the remainder of the capsule, and its length MUST NOT exceed 1024 bytes.
端点は、 `CLOSE_WEBTRANSPORT_SESSION$cps `~capsule$を送信したときは, 即時に `FIN^i を送信しなければ`ナラナイ^2119。 端点は、[ もはや`~CONNECT~stream$から読取らないことを指示する `STOP_SENDING$ft ]を送信しても`ヨイ^2119。 受信者は、 それらに呼応して,当の~streamを~closeするか`~reset$しなければ`ナラナイ^2119。 `CLOSE_WEBTRANSPORT_SESSION$cps `~capsule$を受信した後に`~CONNECT~stream$上に追加的な~stream~dataを受信した場合、 当の~streamは,~code `H3_MESSAGE_ERROR$er で`~reset$されなければ`ナラナイ^2119。 ◎ An endpoint that sends a CLOSE_WEBTRANSPORT_SESSION capsule MUST immediately send a FIN. The endpoint MAY send a STOP_SENDING to indicate it is no longer reading from the CONNECT stream. The recipient MUST either close or reset the stream in response. If any additional stream data is received on the CONNECT stream after receiving a CLOSE_WEBTRANSPORT_SESSION capsule, the stream MUST be reset with code H3_MESSAGE_ERROR.
ある`~CONNECT~stream$を~cleanに — `CLOSE_WEBTRANSPORT_SESSION$cps `~capsule$を伴わずに — 終了することは、 それを[ ~error~code 0, 空な~error文字列 ]を伴う `CLOSE_WEBTRANSPORT_SESSION$cps `~capsule$で終了することと, 意味論的に等価でならなければ`ナラナイ^2119【!SHALL】。 ◎ Cleanly terminating a CONNECT stream without a CLOSE_WEBTRANSPORT_SESSION capsule SHALL be semantically equivalent to terminating it with a CLOSE_WEBTRANSPORT_SESSION capsule that has an error code of 0 and an empty error string.
端点は,一部の局面では、 詳細な~close情報を伴う `CLOSE_WEBTRANSPORT_SESSION$cps を送信してから, 下層の~QUIC接続を即時に~closeするよう求めるかもしれない。 端点が両方を同時に行った場合、 相手の端点は `CLOSE_WEBTRANSPORT_SESSION$cps を受信する前に `CONNECTION_CLOSE$ft を受信することにもなり得る — その場合、 前者に包含された応用~error~dataを決して受信しないことになる。 これを避けるため、 端点は,[ すべての`~CONNECT~stream$が相手の端点により~closeされる ]まで待機してから `CONNECTION_CLOSE$ft を送信する`ベキ^2119である — これは、 応用~close~metadataを送達する最善な労に基づく仕組みとして, ~QUIC `CONNECTION_CLOSE$ft の仕組みのそれに類似な `CLOSE_WEBTRANSPORT_SESSION$cps ~propを与える。 ◎ In some scenarios, an endpoint might want to send a CLOSE_WEBTRANSPORT_SESSION with detailed close information and then immediately close the underlying QUIC connection. If the endpoint were to do both of those simultaneously, the peer could potentially receive the CONNECTION_CLOSE before receiving the CLOSE_WEBTRANSPORT_SESSION, thus never receiving the application error data contained in the latter. To avoid this, the endpoint SHOULD wait until all CONNECT streams have been closed by the peer before sending the CONNECTION_CLOSE; this gives CLOSE_WEBTRANSPORT_SESSION properties similar to that of the QUIC CONNECTION_CLOSE mechanism as a best-effort mechanism of delivering application close metadata.
6. 将来~version用の考慮点
~WebTransportの将来~versionは、[ `~WebTransport~session$を確立するために利用される `CONNECT$m 要請 ]の構文を変更する場合には, ~WebTransportを識別するために利用される~Upgrade~tokenを改変する必要がある — [ ~serverが同時に複数の~versionを提供する ]ことを許容するよう ( `~Upgrade~tokenの登録@#upgrade-token§を見よ)。 ◎ Future versions of WebTransport that change the syntax of the CONNECT requests used to establish WebTransport sessions will need to modify the upgrade token used to identify WebTransport, allowing servers to offer multiple versions simultaneously (see Section 8.1).
~WebTransportの互換でない将来~versionを~supportする~serverは、 `SETTINGS_WEBTRANSPORT_MAX_SESSIONS$sp ~parameter用に利用される符号点を変更することにより,その~supportを通達する ( `~HTTP3設定~parameterの登録@#http3-settings§を見よ)。 ~clientは、 適用-可能な場合には,[ 新たな~sessionを確立するときに利用する ]ためとして[ それに結付けられた~Upgrade~token ]を選定できる — ~serverが[ 各~流入~要請ごとに,それ用に利用-中にある構文 ]を常に知れることを確保するよう。 ◎ Servers that support future incompatible versions of WebTransport signal that support by changing the codepoint used for the SETTINGS_WEBTRANSPORT_MAX_SESSIONS parameter (see Section 8.2). Clients can select the associated upgrade token, if applicable, to use when establishing a new session, ensuring that servers will always know the syntax in use for every incoming request.
将来の~stream形式に対する変更は、[ `一方向~stream$の種別 ( `一方向~stream@#unidirectional-streams§を見よ), `双方向~stream$の通達~値 ( `双方向~stream@#bidirectional-streams§を見よ) ]に対する変更を要求する — 流入~frameの受信者が,[ 当の~WebTransport~version ]および, それに対応する[ 当の~streamに結付けられた~session用に利用される伝送路~形式 ]を決定することを許容するため。 ◎ Changes to future stream formats require changes to the Unidirectional Stream type (see Section 4.1) and Bidirectional Stream signal value (see Section 4.2) to allow recipients of incoming frames to determine the WebTransport version, and corresponding wire format, used for the session associated with that stream.
6.1. 草案~versionの折衝-法
注記: この節は、 ~RFCとして公表する前に除去されることになる。 ◎ [[RFC editor: please remove this section before publication.]]
~WebTransport~protocolを成す伝送路~形式の側面は、[ `SETTINGS_WEBTRANSPORT_MAX_SESSIONS$sp ~parameter用に利用される符号点 ]を変更することにより折衝される。 そのことから、 ~WebTransport端点は,~WebTransport流通を[ 送信する/処理する ]前に相手の端点からの `SETTINGS$ft ~frameを待機しなければ`ナラナイ^2119。 双方の端点が複数の~versionを~supportするときは、 両者が~supportする最も近過去な~versionが選定される。 ◎ The wire format aspects of the protocol are negotiated by changing the codepoint used for the SETTINGS_WEBTRANSPORT_MAX_SESSIONS parameter. Because of that, any WebTransport endpoint MUST wait for the peer's SETTINGS frame before sending or processing any WebTransport traffic. When multiple versions are supported by both of the peers, the most recent version supported by both is selected.
7. ~securityの考慮点
~HTTP3越しの~WebTransportは、 `OVERVIEW$r により~WebTransport~protocolに対し課される~security要件をすべて満たす。 したがって、 ~clientが信用-済みとは限らない事例でも, ~client↔~server通信~用に~secureな~frameworkを供する。 ◎ WebTransport over HTTP/3 satisfies all of the security requirements imposed by [OVERVIEW] on WebTransport protocols, thus providing a secure framework for client-server communication in cases when the client is potentially untrusted.
~HTTP3越しの~WebTransportには、 ~HTTP3`設定$の利用を通した明示的な~opt-inが要求される — これは、[ `~HTTP3~server$が それを明示的に~supportする ]こと確保することにより,潜在的な~protocol混同~攻撃を避ける。 加えて、 `Origin$h ~headerの利用も要求される — それは、[ ~Webに基づく~clientが出自にする生成元が信用-済みでない場合に,~accessを否認する能 ]を~serverに供する。 ◎ WebTransport over HTTP/3 requires explicit opt-in through the use of an HTTP/3 setting; this avoids potential protocol confusion attacks by ensuring the HTTP/3 server explicitly supports it. It also requires the use of the Origin header, providing the server with the ability to deny access to Web-based clients that do not originate from a trusted origin.
~HTTP3越しに行く~HTTP流通と同じく、 ~WebTransportは,流通を単独の接続の中で異なる生成元たちに~poolする。 異なる生成元は,異なる信用-~domainを含意するので、 実装は,[ 同じ接続~上の異なる生成元に属する~transportどうしを敵対的になり得るものとして扱う ]必要がある。 潜在的な攻撃の一つとして、 資源~枯渇~攻撃がある — 当の~transportを成すすべてが同じ[ 輻輳~制御~文脈, ~flow制御~文脈 ]どちらも共有するので、 単独の~clientが それらの資源を積極的に利用し尽くすと,他の~transportを停滞させ得る。 したがって、 ~UAは,[ 同じ接続の中の各~transportは、 制御される下で,資源を成す適理な共有分を取得する ]ことを確保するための公平性~schemeを実装する`ベキ^2119である — これは、[ ~dataを送信するとき, 新たな~streamを~openするとき ]どちらにも適用される。 ◎ Just like HTTP traffic going over HTTP/3, WebTransport pools traffic to different origins within a single connection. Different origins imply different trust domains, meaning that the implementations have to treat each transport as potentially hostile towards others on the same connection. One potential attack is a resource exhaustion attack: since all of the transports share both congestion control and flow control context, a single client aggressively using up those resources can cause other transports to stall. The user agent thus SHOULD implement a fairness scheme that ensures that each transport within connection gets a reasonable share of controlled resources; this applies both to sending data and to opening new streams.
~clientは、 いっときに多過ぎる`~WebTransport~session$を~openすることにより, 資源を枯渇させるよう試みることもできる。 ~clientが信用-済みでない事例では、 ~UAは,~clientが~openできる流出~sessionの個数を制限する`ベキ^2119である。 ◎ A client could attempt to exhaust resources by opening too many WebTransport sessions at once. In cases when the client is untrusted, the user agent SHOULD limit the number of outgoing sessions the client can open.
8. ~IANA考慮点
8.1. ~Upgrade~tokenの登録
`HTTP$r `~Upgrade~token~registry@~HTTPinfra#upgrade.token.registry§により確立された `~HTTP~Upgrade~token~registry@~IANA-a/http-upgrade-tokens$cite には、 以下に挙げる~entryが追加される。 ◎ The following entry is added to the "Hypertext Transfer Protocol (HTTP) Upgrade Token Registry" registry established by Section 16.7 of [HTTP].
~label "`webtransport^c" は、 ~WebTransport用の~protocolとして~HTTP3が利用されたことを識別する: ◎ The "webtransport" label identifies HTTP/3 used as a protocol for WebTransport:
- 値 ⇒ `webtransport^c ◎ Value: • webtransport
- 記述 ⇒ ~HTTP3越しの~WebTransport ◎ Description: • WebTransport over HTTP/3
- 参照 ⇒ この文書, `I-D.ietf-webtrans-http2$r ◎ Reference: • This document and [I-D.ietf-webtrans-http2]
8.2. ~HTTP3設定~parameterの登録
`HTTP3$r により確立された `~HTTP3設定~registry@~IANA-a/http3-parameters/http3-parameters.xhtml#http3-parameters-settings$cite には、 以下に挙げる~entryが追加される。 ◎ The following entry is added to the "HTTP/3 Settings" registry established by [HTTP3]:
`SETTINGS_WEBTRANSPORT_MAX_SESSIONS@sp ~parameterは、[ 指定された~HTTP3端点には,~WebTransport能力があること ]および[ 受信する用意がある同時並行な~sessionの個数 ]を指示する。 この~parameter用の既定の値は 0 とする — それは、[ 端点は`~WebTransport~session$を受信する用意はない ]ことを意味する。 ◎ The SETTINGS_WEBTRANSPORT_MAX_SESSIONS parameter indicates that the specified HTTP/3 endpoint is WebTransport-capable and the number of concurrent sessions it is willing to receive. The default value for the SETTINGS_WEBTRANSPORT_MAX_SESSIONS parameter is "0", meaning that the endpoint is not willing to receive any WebTransport sessions.
- 設定~名 ⇒ `SETTINGS_WEBTRANSPORT_MAX_SESSIONS$sp 【!WEBTRANSPORT_MAX_SESSIONS】 ◎ Setting Name: • WEBTRANSPORT_MAX_SESSIONS
- 値 ⇒ `0xc671706a^hex ◎ Value: • 0xc671706a
- 既定 ⇒ 0 ◎ Default: • 0
- 仕様 ⇒ この文書 ◎ Specification: • This document
8.3. ~frame種別の登録
`HTTP3$r により確立された `~HTTP3~frame種別~registry@~IANA-a/http3-parameters/http3-parameters.xhtml#http3-parameters-frame-types$cite には、 以下に挙げる~entryが追加される。 ◎ The following entry is added to the "HTTP/3 Frame Type" registry established by [HTTP3]:
`WEBTRANSPORT_STREAM@ft ~frameは、 ~WebTransport~HTTP3拡張との衝突を避ける目的で,予約される: ◎ The WEBTRANSPORT_STREAM frame is reserved for the purpose of avoiding collision with WebTransport HTTP/3 extensions:
- ~code ⇒ `0x41^hex ◎ Code: • 0x41
- ~frame種別 ⇒ `WEBTRANSPORT_STREAM$ft ◎ Frame Type: • WEBTRANSPORT_STREAM
- 仕様 ⇒ この文書 ◎ Specification: • This document
8.4. ~stream種別の登録
`HTTP3$r により確立された `~HTTP3~stream種別~registry@~IANA-a/http3-parameters/http3-parameters.xhtml#http3-parameters-stream-types$cite には、 以下に挙げる~entryが追加される。 ◎ The following entry is added to the "HTTP/3 Stream Type" registry established by [HTTP3]:
種別 `~WebTransport~stream@ は、[ `一方向~stream$が~WebTransportにより利用される ]ことを許容する: ◎ The "WebTransport stream" type allows unidirectional streams to be used by WebTransport:
- ~code ⇒ `0x54^hex ◎ Code: • 0x54
- ~stream種別 ⇒ ~WebTransport~stream ◎ Stream Type: • WebTransport stream
- 仕様 ⇒ この文書 ◎ Specification: • This document
- 送信者 ⇒ `両方^i ◎ Sender: • Both
8.5. ~HTTP3~error~codeの登録
`HTTP3$r により確立された `~HTTP3~error~code~registry@~IANA-a/http3-parameters/http3-parameters.xhtml#http3-parameters-error-codes$cite には、 以下に挙げる~entryが追加される。 ◎ The following entry is added to the "HTTP/3 Error Code" registry established by [HTTP3]:
- 名前 ⇒ `WEBTRANSPORT_BUFFERED_STREAM_REJECTED@er ◎ Name: • WEBTRANSPORT_BUFFERED_STREAM_REJECTED
- 値 ⇒ `0x3994bd84^hex ◎ Value: • 0x3994bd84
- 記述 ⇒ ~WebTransport~data~streamは、 それに結付けられた~sessionの欠如に因り,却下された ◎ Description: • WebTransport data stream rejected due to lack of associated session.
- 仕様 ⇒ この文書 ◎ Specification: • This document.
- 名前 ⇒ `WEBTRANSPORT_SESSION_GONE@er ◎ Name: • WEBTRANSPORT_SESSION_GONE
- 値 ⇒ `0x170d7b68^hex ◎ Value: • 0x170d7b68
- 記述 ⇒ ~WebTransport~data~streamは、 それに結付けられた`~WebTransport~session$が~closeされたため,中止された。 ◎ Description: • WebTransport data stream aborted because the associated WebTransport session has been closed.
- 仕様 ⇒ この文書 ◎ Specification: • This document.
加えて,次に与える範囲の~entryが登録される: ◎ In addition, the following range of entries is registered:
- 名前 ⇒ `WEBTRANSPORT_APPLICATION_ERROR@er ◎ Name: • WEBTRANSPORT_APPLICATION_ERROR
- 値 ⇒ 次を満たす整数 %符号点 ⇒ [ %符号点 ~GTE `0x52e4a40fa8db^hex ]~AND[ %符号点 ~LTE `0x52e5ac983162^hex ]~AND[ %符号点 ~NIN { `0x1f^hex ~MUL %N ~PLUS `0x21^hex ; %N は負でない整数 } ] ◎ Value: • 0x52e4a40fa8db to 0x52e5ac983162 inclusive, with the exception of the codepoints of form 0x1f * N + 0x21.
- 記述 ⇒ ~WebTransport応用~error~code ◎ Description: • WebTransport application error codes.
- 仕様 ⇒ この文書 ◎ Specification: • This document.
8.6. ~capsule種別
`HTTP-DATAGRAM$r により確立された `~HTTP~capsule種別~registry^cite には、 以下に挙げる~entryが追加される。 ◎ The following entries are added to the "HTTP Capsule Types" registry established by [HTTP-DATAGRAM]:
`CLOSE_WEBTRANSPORT_SESSION@cps `~capsule$ ◎ The CLOSE_WEBTRANSPORT_SESSION capsule.
- 値 ⇒ `0x2843^hex ◎ Value: • 0x2843
- ~capsule種別 ⇒ `CLOSE_WEBTRANSPORT_SESSION$cps ◎ Capsule Type: • CLOSE_WEBTRANSPORT_SESSION
- 位置付け ⇒ `恒久的^i ◎ Status: • permanent
- 仕様 ⇒ この文書 ◎ Specification: • This document
- 変更~制御者 ⇒ ~IETF ◎ Change Controller: • IETF
- 連絡先 ⇒ ~WebTransport~WG webtransport@ietf.org ◎ Contact: • WebTransport Working Group webtransport@ietf.org
- 注記 ⇒ なし ◎ Notes: • None
`DRAIN_WEBTRANSPORT_SESSION@cps `~capsule$ ◎: • The DRAIN_WEBTRANSPORT_SESSION capsule.
- 値 ⇒ `0x78ae^hex ◎ Value: • 0x78ae
- ~capsule種別 ⇒ `DRAIN_WEBTRANSPORT_SESSION$cps ◎ Capsule Type: • DRAIN_WEBTRANSPORT_SESSION
- 位置付け ⇒ `暫定的^i (この文書が認可されたなら、 `恒久的^i になる) ◎ Status: • provisional (when this document is approved this will become permanent)
- 仕様 ⇒ この文書 ◎ Specification: • This document
- 変更~制御者 ⇒ ~IETF ◎ Change Controller: • IETF
- 連絡先 ⇒ ~WebTransport~WG webtransport@ietf.org ◎ Contact: • WebTransport Working Group webtransport@ietf.org
- 注記 ⇒ なし ◎ Notes: • None
付録 A. 変更~log
A.1. 草案~version 02 から 07 までの変更点
この~protocolを成す草案~version 02 から草案~version 07 までの互換でない変更点は: ◎ The following changes make the draft-02 and draft-07 versions of this protocol incompatible:
- `SETTINGS_WEBTRANSPORT_MAX_SESSIONS$sp が要求される ( `86$pull ) — それは~version折衝~用に利用される。 ( `129$pull ) ◎ draft-07 requires SETTINGS_WEBTRANSPORT_MAX_SESSIONS (#86) and uses it for version negotiation (#129)
- `SETTINGS_ENABLE_CONNECT_PROTOCOL^sp を可能化することが明示的に要求される。 ( `93$pull ) ◎ draft-07 explicitly requires SETTINGS_ENABLE_CONNECT_PROTOCOL to be enabled (#93)
- `SETTINGS_H3_DATAGRAM$sp を可能化することが明示的に要求される。 ( `106$pull ) ◎ draft-07 explicitly requires SETTINGS_H3_DATAGRAM to be enabled (#106)
- `WEBTRANSPORT_STREAM$ft は~streamの始めに限り許容される。 ◎ draft-07 only allows WEBTRANSPORT_STREAM at the beginning of the stream
草案~version 07 には、 次に挙げる変更点も在り, 草案~version 02 実装にも安全に実装できる: ◎ The following changes that are present in draft-07 can be also implemented by a draft-02 implementation safely:
- ~stream~reset~error~code空間を 8 ~bitから 32 ~bitへ拡げた ( `115$pull ) ◎ Expanding stream reset error code space from 8 to 32 bits (#115)
- `WEBTRANSPORT_SESSION_GONE$er ~error~code ( `75$pull ) ◎ WEBTRANSPORT_SESSION_GONE error code (#75)
- ~HTTP `GOAWAY$ft 用の取扱い ( `76$pull ) ◎ Handling for HTTP GOAWAY (#76)
- `DRAIN_WEBTRANSPORT_SESSION$cps `~capsule$ ( `79$pull ) ◎ DRAIN_WEBTRANSPORT_SESSION capsule (#79)
- ~redirectに自動的に追従することを許容しないようにした ( `113$pull ) ◎ Disallowing following redirects automatically (#113)