diff options
author | Lode Vandevenne <lvandeve@users.noreply.github.com> | 2017-11-16 19:13:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-16 19:13:39 +0100 |
commit | bdda95ee553c9f52a3f72a21ce8c4338ce8d41a5 (patch) | |
tree | c59a73349ca4be164a3efa8773f7369db2b6852b | |
parent | 3e58ea5f90798a4c80f638a98f2d75b07a72af39 (diff) | |
download | brotli-bdda95ee553c9f52a3f72a21ce8c4338ce8d41a5.zip brotli-bdda95ee553c9f52a3f72a21ce8c4338ce8d41a5.tar.gz brotli-bdda95ee553c9f52a3f72a21ce8c4338ce8d41a5.tar.bz2 |
Create shared-brotli-fetch-spec.txt
-rw-r--r-- | fetch-spec/shared-brotli-fetch-spec.txt | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/fetch-spec/shared-brotli-fetch-spec.txt b/fetch-spec/shared-brotli-fetch-spec.txt new file mode 100644 index 0000000..1257212 --- /dev/null +++ b/fetch-spec/shared-brotli-fetch-spec.txt @@ -0,0 +1,95 @@ +Changes for Shared Brotli dictionaries to https://fetch.spec.whatwg.org/: + +Additions to `4.5. HTTP-network-or-cache fetch` + +Add to point `15. Modify httpRequest’s header list per HTTP.`: + + If the recursive-sbr flag is enabled, `Accept-Encoding` may not contain `sbr` + [NOTE-BOX] When sbr can be used, it is possible to add a header Available-Dict + with the URL and hash code of a cached resource. The server may then use it as + shared dictionary. + +Additions to `4.6. HTTP-network fetch` + +Add after point `10. Run these steps, but abort if the ongoing fetch is terminated`: + + 11. Let codings be the result of extracting header list values given + `Content-Encoding` and response’s header list. + 12. If codings contains `sbr` + 1. If the header list does not contain `Sbr-Dict`, return a network error + 2. Let dictionaryId be the result of extracting header list values given + `Sbr-Dict` and response’s header list. + +To point `12. Run these substeps in parallel:`, add new first sub-point: + + 1. If codings contains `sbr`, run these subsubsteps: + 1. Let dictionaryResponse be the result of performing a + Shared-Brotli-dictionary fetch given dictionaryId and request. + 2. If dictionaryResponse is a network error, return a network error. + +Change point `12.4. Set bytes to the result of handling content codings given codings and bytes.` to: + + 4. Set bytes to the result of handling content codings given codings, bytes + and, if codings contains `sbr`, also dictionaryResponse's body. + [NOTE-BOX] If the dictionary is still being fetched, which happens in + parallel, enqueue bytes in a compressed buffer and handle content coding + once the dictionary is fetched + +Additions to `2.2.4. Bodies` + + +Change last section `To handle content codings ...` to: + + To handle content codings given codings, bytes and optionally a dictionary, run these substeps: + 1. If codings are not supported, return bytes. + 2. If the codings has `sbr`, run these subsubsteps: + a. Return the result of decoding bytes and dictionary with the Shared + Brotli decoder. + [Shared Brotli Spec] [IANA Brotli](https://www.iana.org/assignments/http-parameters/http-parameters.xhtml) + 3. Else: + a. Return the result of decoding bytes with the given codings, as + explained in HTTP. [HTTP] [HTTP-SEMANTICS] [HTTP-COND] [HTTP-CACHING] + [HTTP-AUTH] + +New section `4.10. Shared-Brotli-dictionary fetch` + + To perform a Shared-Brotli-dictionary fetch using dictionaryId, and parentRequest, perform these steps: + + 1. Let dictionaryURL be the URL extracted from dictionaryId + 2. Let dictionaryHash be the hash id extracted from dictionaryId + 3. Let dictionaryRequest be a new request whose method is `GET`, url is + dictionaryURL, mode is "cors", and client is parentRequest's client. + 4. Let dictionaryResponse be the result of performing an + [HTTP-network-or-cache](https://fetch.spec.whatwg.org/#concept-http-network-or-cache-fetch) + fetch using dictionaryRequest with the recursive-sbr flag set to true. + [NOTE-BOX] For compression benefits, the dictionary should be reused to + decode multiple different responses. We rely on caching to achieve this. + It is suggested for servers to not add any "no-cache" or short "max-age" + Cache-Control directives, and it is suggested for the client to effectively + support caching it. + [NOTE-BOX] Since the same dictionary can be identified by a hash code, a + browser can avoid fetching a dictionary if it already has one with the same + hashed cached from a different source URL. + [NOTE-BOX] It is suggested that a server does not reuse the same URL + to host an updated or different dictionary. Instead the same dictionary URL + should contain a dictionary with the same content and same hash. + 5. If dictionaryResponse is a network error, return a network error. + 6. If dictionaryResponse's status is not an ok status, return a network error. + 7. Let tokens be the result of + [parsing metadata](https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata) + given dictionaryHash. + [Subresource Integrity](https://w3c.github.io/webappsec-subresource-integrity/) + 8. If tokens is no metadata or the length of tokens is not 1, return a network + error + 9. Let algorithm be the alg component of tokens[0]. If alg is 'hw3', set + algorithm to 256-bit HighwayHash + 10. Let digest be the val component of tokens[1]. + 11. Let hashValue be the result of base64 decoding digest + [base64](https://tools.ietf.org/html/rfc4648) + 12. If hashValue is not a valid base64 encoding, return a network error + [NOTE-BOX] All of the supported hashing algorithms are cryptographically + secure. + 13. Compute the hash code of dictionaryResponse's body using algorithm and + compare this checksum for equality with hashValue. If the computed + checksum does not match hashValue, return a network error. + 14. Return dictionaryResponse. |