all
" or "none
". Unless stated otherwise it is "compression-dictionary
",
"download
",
"imageset
",
"manifest
",
@@ -1782,6 +1786,7 @@ device to assist defining CSP and Mixed Content. It is not exposed to JavaScript
A destination type is one of:
the empty string,
"audio
",
+"compression-dictionary
",
"audioworklet
",
"document
",
"embed
",
@@ -1926,6 +1931,11 @@ not always relevant and might require different behavior.
video
"
media-src
<video>
element
+ compression-dictionary
"
+ compression-dictionary
"
+ default-src
+ <link rel=compression-dictionary>
download
"
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. [[!HTTP-COMPRESSION-DICTIONARIES]] +
New protocols can avoid the need for blocking ports by negotiating the protocol @@ -6106,8 +6132,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, @@ -6256,12 +6283,120 @@ run these steps:
If isAuthenticationFetch is true, then create an authentication entry for request and the given realm. +
If response's header list
+ contains `Use-As-Dictionary
`, then:
+
+
+
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 pattern be the result of creating a URL pattern from
+ dictionaryValue["match
"] and request's
+ current URL.
+
+
If pattern is failure or pattern has regexp groups, then return + response. + +
Let compressionDictionaryCache be the result of + determining the compression-dictionary cache partition given request. + +
If compressionDictionaryCache is null or request's
+ response tainting is "opaque
", then return response.
+
+
Let expirationTime be the time at which the response becomes stale. + +
If expirationTime is not in the future, then return response. + +
Store response in compressionDictionaryCache with its associated + dictionaryValue and expirationTime. +
Return response. Typically response's body's stream is still being enqueued to after returning. +
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 + [[!HTTP-COMPRESSION-DICTIONARIES]]. + +
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
+ [[!HTTP-COMPRESSION-DICTIONARIES]].
+
+
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 response's type is "opaque
", then return a
+ network error.
+
+
Let availableDictionaryHash be the result of
+ getting a structured field value given `Available-Dictionary
`,
+ "bytestring
", and request's header list.
+
+
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 [[!HTTP-COMPRESSION-DICTIONARIES]]. 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. +
Follow the relevant requirements from HTTP. [[!HTTP]] [[!HTTP-CACHING]] + [[!HTTP-COMPRESSION-DICTIONARIES]]
If request's body is non-null, and request's @@ -8182,7 +8318,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", "track", "video", "worker", "xslt" }; +enum RequestDestination { "", "audio", "audioworklet", "compression-dictionary", "document", "embed", "font", "frame", "iframe", "image", "json", "manifest", "object", "paintworklet", "report", "script", "sharedworker", "style", "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" };