diff --git a/fetch.bs b/fetch.bs index 1e2ec3df2..732ff1c83 100755 --- a/fetch.bs +++ b/fetch.bs @@ -66,6 +66,11 @@ urlPrefix:https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-layered-cooki url:name-retrieve-cookies;text:retrieve cookies url:name-serialize-cookies;text:serialize cookies url:name-garbage-collect-cookies;text:garbage collect cookies + +urlPrefix:https://urlpattern.spec.whatwg.org/#;type:dfn;spec:urlpattern + url:url-pattern-create;text:creating a URL pattern + url:url-pattern-has-regexp-groups;text:has regexp groups +
@@ -1818,6 +1823,7 @@ device to assist defining CSP and Mixed Content. It is not exposed to JavaScriptA destination type is one of: the empty string, "
audio", +"compression-dictionary", "audioworklet", "document", "embed", @@ -1875,7 +1881,7 @@ not always relevant and might require different behavior.CSP directive Features - "" + "" " report"— CSP, NEL reports. @@ -1967,6 +1973,10 @@ not always relevant and might require different behavior. " video"media-srcHTML's <video>element ++ " compression-dictionary" +connect-src+HTML's <link rel=compression-dictionary>" download""" @@ -2323,9 +2333,10 @@ When a request is [=request/cloned=], the created request gets a unique A subresource request is a request whose destination is "
audio", "audioworklet", -"font", "image", "json", "manifest", -"paintworklet", "script", "style", "text", -"track", "video", "xslt", or the empty string. +"compression-dictionary", "font", "image", +"json", "manifest", "paintworklet", "script", +"style", "text", "track", "video", +"xslt", or the empty string.A non-subresource request is a request whose destination is "
document", "embed", @@ -3323,6 +3334,22 @@ or an implementation-defined value. +Compression-dictionary cache partitions
+ +++ +To determine the compression-dictionary cache partition, given a request request: + +
+
+Let key be the result of determining the network partition key + given request. + +
If key is null, then return null. + +
Return the unique compression-dictionary cache associated with key. [[!RFC9842]] +
Port blocking
New protocols can avoid the need for blocking ports by negotiating the protocol @@ -6381,8 +6408,9 @@ run these steps:
If httpRequest's cache mode is "
only-if-cached", then return a network error. -Let forwardResponse be the result of running HTTP-network fetch given - httpFetchParams, includeCredentials, and isNewConnectionFetch. +
Let forwardResponse be the result of running + HTTP-network compression-dictionary fetch given httpFetchParams, + includeCredentials, and isNewConnectionFetch.
If httpRequest's method is unsafe and forwardResponse's status is in the range 200 to 399, inclusive, @@ -6531,12 +6559,126 @@ run these steps:
If isAuthenticationFetch is true, then create an authentication entry for request and the given realm. +
+ If request's response tainting is not "
opaque" + and response's header list contains + `Use-As-Dictionary`: + + ++
+Let dictionaryValue be the result of + getting a structured field value given `
Use-As-Dictionary`, + "dictionary", and response's header list. + +If dictionaryValue is null or dictionaryValue["
match"] + does not exist, then return response. + +Let compressionDictionaryCache be the result of + determining the compression-dictionary cache partition given request. + +
If compressionDictionaryCache is null, then return response. + +
Let pattern be the result of + creating a URL pattern given the bare item of dictionaryValue["
match"], + the serialization of request's current URL, + and an empty map. + +If pattern is failure or pattern has regexp groups, + then return response. + +
Let expirationTime be the time at which the response becomes + a stale response. + +
If expirationTime is not in the future, then return response. + +
Store response in compressionDictionaryCache with its associated + pattern, dictionaryValue and expirationTime. +
Return response. Typically response's body's stream is still being enqueued to after returning. +
HTTP-network compression-dictionary fetch
+ ++To HTTP-network compression-dictionary fetch, +given a fetch params fetchParams, an optional boolean +includeCredentials (default false), and an optional boolean forceNewConnection +(default false), run these steps: + +
+
+Let request be fetchParams's request. + +
If request's mode is "
no-cors", then return the + result of running HTTP-network fetch given fetchParams, + includeCredentials, and forceNewConnection. + +If the user agent is configured to block cookies for request, then return the + result of running HTTP-network fetch given fetchParams, + includeCredentials, and forceNewConnection. + +
Let compressionDictionaryCache be the result of + determining the compression-dictionary cache partition given request. + +
If compressionDictionaryCache is null, then return the result of running + HTTP-network fetch given fetchParams, includeCredentials, and + forceNewConnection. + +
Let bestMatch be the result of finding the best matching dictionary in + compressionDictionaryCache for request as defined in + [[!RFC9842]]. + +
If bestMatch is null, then return the result of running HTTP-network fetch + given fetchParams, includeCredentials, and forceNewConnection. + +
Add the `
Available-Dictionary` and `Dictionary-ID` + (if applicable) headers to request using bestMatch as defined in + [[!RFC9842]]. + +Combine (`
Accept-Encoding`, `dcb`) + in request's header list. + +Combine (`
Accept-Encoding`, `dcz`) + in request's header list. + +Let response be the result of running HTTP-network fetch given + fetchParams, includeCredentials, and forceNewConnection. + +
Let codings be the result of extracting header list values given + `
Content-Encoding` and response's header list. + +If codings is null or does not contain `
dcb` or `dcz`, + then return response. + +If request's response tainting is "
opaque", + then return a network error. + +Let availableDictionaryItem be the result of + getting a structured field value given `
Available-Dictionary`, + "item", and request's header list. + +If availableDictionaryItem is null, then return a network error. + +
Let availableDictionaryHash be the bare item of availableDictionaryItem. + +
Let newBody be a new body whose stream is the + result of transforming response's body's stream + with an algorithm that verifies that the dictionary hash in the stream matches + availableDictionaryHash and decodes the rest of the stream with the applicable + algorithm as defined in [[!RFC9842]]. If verification or decoding fails, + the transformed stream must error. + +
Set response's body to newBody. + +
Delete `
Content-Encoding` from response's + header list. + +Return response. +
HTTP-network fetch
@@ -6608,6 +6750,7 @@ optional boolean forceNewConnection (default false), run these steps:
Follow the relevant requirements from HTTP. [[!HTTP]] [[!HTTP-CACHING]] + [[!RFC9842]]
If request's body is non-null, and request's @@ -8473,7 +8616,7 @@ dictionary RequestInit { any window; // can only be set to null }; -enum RequestDestination { "", "audio", "audioworklet", "document", "embed", "font", "frame", "iframe", "image", "json", "manifest", "object", "paintworklet", "report", "script", "sharedworker", "style", "text", "track", "video", "worker", "xslt" }; +enum RequestDestination { "", "audio", "audioworklet", "compression-dictionary", "document", "embed", "font", "frame", "iframe", "image", "json", "manifest", "object", "paintworklet", "report", "script", "sharedworker", "style", "text", "track", "video", "worker", "xslt" }; enum RequestMode { "navigate", "same-origin", "no-cors", "cors" }; enum RequestCredentials { "omit", "same-origin", "include" }; enum RequestCache { "default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached" };