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 JavaScript
 

A 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-src HTML'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: + +

    +
  1. Let key be the result of determining the network partition key + given request. + +

  2. If key is null, then return null. + +

  3. 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`: + + +

      +
    1. Let dictionaryValue be the result of + getting a structured field value given `Use-As-Dictionary`, + "dictionary", and response's header list. + +

    2. If dictionaryValue is null or dictionaryValue["match"] + does not exist, then return response. + +

    3. Let compressionDictionaryCache be the result of + determining the compression-dictionary cache partition given request. + +

    4. If compressionDictionaryCache is null, then return response. + +

    5. 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. + +

    6. If pattern is failure or pattern has regexp groups, + then return response. + +

    7. Let expirationTime be the time at which the response becomes + a stale response. + +

    8. If expirationTime is not in the future, then return response. + +

    9. 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: + +

      +
    1. Let request be fetchParams's request. + +

    2. If request's mode is "no-cors", then return the + result of running HTTP-network fetch given fetchParams, + includeCredentials, and forceNewConnection. + +

    3. 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. + +

    4. Let compressionDictionaryCache be the result of + determining the compression-dictionary cache partition given request. + +

    5. If compressionDictionaryCache is null, then return the result of running + HTTP-network fetch given fetchParams, includeCredentials, and + forceNewConnection. + +

    6. Let bestMatch be the result of finding the best matching dictionary in + compressionDictionaryCache for request as defined in + [[!RFC9842]]. + +

    7. If bestMatch is null, then return the result of running HTTP-network fetch + given fetchParams, includeCredentials, and forceNewConnection. + +

    8. Add the `Available-Dictionary` and `Dictionary-ID` + (if applicable) headers to request using bestMatch as defined in + [[!RFC9842]]. + +

    9. Combine (`Accept-Encoding`, `dcb`) + in request's header list. + +

    10. Combine (`Accept-Encoding`, `dcz`) + in request's header list. + +

    11. Let response be the result of running HTTP-network fetch given + fetchParams, includeCredentials, and forceNewConnection. + +

    12. Let codings be the result of extracting header list values given + `Content-Encoding` and response's header list. + +

    13. If codings is null or does not contain `dcb` or `dcz`, + then return response. + +

    14. If request's response tainting is "opaque", + then return a network error. + +

    15. Let availableDictionaryItem be the result of + getting a structured field value given `Available-Dictionary`, + "item", and request's header list. + +

    16. If availableDictionaryItem is null, then return a network error. + +

    17. Let availableDictionaryHash be the bare item of availableDictionaryItem. + +

    18. 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. + +

    19. Set response's body to newBody. + +

    20. Delete `Content-Encoding` from response's + header list. + +

    21. Return response. +

    +

    HTTP-network fetch

    @@ -6608,6 +6750,7 @@ optional boolean forceNewConnection (default false), run these steps: