diff --git a/fetch.bs b/fetch.bs index 8d19ae84d..567638330 100755 --- a/fetch.bs +++ b/fetch.bs @@ -183,7 +183,7 @@ exposes most of the networking functionality at a fairly low level of abstractio

This specification uses terminology from ABNF, Encoding, HTML, HTTP, MIME Sniffing, Streams, -URL, Web IDL, and WebSockets. +URL, Web IDL, WebSockets, and WebTransport. [[!ABNF]] [[!ENCODING]] [[!HTML]] @@ -193,6 +193,7 @@ exposes most of the networking functionality at a fairly low level of abstractio [[!URL]] [[!WEBIDL]] [[!WEBSOCKETS]] +[[!WEBTRANSPORT]]

ABNF means ABNF as augmented by HTTP (in particular the addition of #) and RFC 7405. [[!RFC7405]] @@ -1889,7 +1890,7 @@ not always relevant and might require different behavior. navigator.sendBeacon(), {{EventSource}}, HTML's <a ping=""> and <area ping="">, fetch(), fetchLater(), {{XMLHttpRequest}}, - {{WebSocket}}, Cache API + {{WebSocket}}, {{WebTransport}}, Cache API "object" object-src @@ -2045,8 +2046,8 @@ during fetching. It provides a convenient way for standard

A request has an associated mode, which is "same-origin", "cors", "no-cors", -"navigate", or "websocket". Unless stated otherwise, it is -"no-cors". +"navigate", "websocket", or "webtransport". +Unless stated otherwise, it is "no-cors".

@@ -2071,6 +2072,9 @@ during fetching. It provides a convenient way for standard
"websocket"
This is a special mode used only when establishing a WebSocket connection. + +
"webtransport" +
This is a special mode used only by {{WebTransport/WebTransport(url, options)}}.

Even though the default request mode is "no-cors", @@ -3581,7 +3585,7 @@ given a request request, run these steps: with request.

  • If request's response tainting is "cors" or - request's mode is "websocket", then + request's mode is either "websocket" or "webtransport", then append (`Origin`, serializedOrigin) to request's header list. @@ -4841,7 +4845,7 @@ steps:

    request's current URL's scheme is "data"
    request's mode is - "navigate" or "websocket" + "navigate", "websocket" or "webtransport"
    1. Set request's @@ -6424,6 +6428,11 @@ optional boolean forceNewConnection (default false), run these steps: obtaining a WebSocket connection, given request's current URL. +

      "webtransport" +

      Let connection be the result of + obtaining a WebTransport connection, given + networkPartitionKey, and request. +

      Otherwise

      Let connection be the result of obtaining a connection, given networkPartitionKey, @@ -8325,8 +8334,9 @@ enum RequestPriority { "high", "low", "auto" };

      "serviceworker" is omitted from RequestDestination as it cannot be observed from JavaScript. Implementations -will still need to support it as a destination. "websocket" is -omitted from RequestMode as it cannot be used nor observed from JavaScript. +will still need to support it as a destination. "websocket" and +"webtransport" are omitted from RequestMode as they cannot be +used or observed from JavaScript.

      A {{Request}} object has an associated request (a request). @@ -9794,6 +9804,18 @@ requests — and do not use `Vary`. establish a WebSocket connection directly, but both are now defined in WebSockets. [[WEBSOCKETS]] +

      WebTransport

      + +

      As part of establishing a connection, the {{WebTransport}} object initiates a special kind of +fetch (using a request whose mode is +"webtransport") which allows it to share in many fetch policy decisions, such +HTTP Strict Transport Security (HSTS). Ultimately this results in fetch calling into +WebTransport which in turn obtains a connection. +[[WEBTRANSPORT]][[HSTS]] + +

      WebTransport needs to wrap the obtain a connection +algorithm to add features unique to WebTransport, like +{{WebTransportOptions/serverCertificateHashes}}. [[WEBTRANSPORT]]

      Using fetch in other standards