{ "note": "The tests driver.py runs against an HTTP cache that fronts an origin serving wai/http-conformance's objects (extensions/http-delivery.md §9). A MUST test failing means the cache, as configured, does not meet §9; an informative test reports what the cache did.", "tests": [ { "id": "C1", "name": "whole_identity", "level": "MUST", "rule": "§9 rule 1", "what": "a GET of an object, cold and then again, returns exactly the object's bytes" }, { "id": "C2", "name": "headers_kept", "level": "MUST", "rule": "§9 rule 3", "what": "a 200 keeps the origin's ETag, Content-Type and Cache-Control, and a Content-Length of the object's length" }, { "id": "C3", "name": "range_from_stored", "level": "MUST", "rule": "§9 rule 2", "what": "after a whole GET, a single range is answered 206 with exactly those bytes and Content-Range bytes a-b/n" }, { "id": "C4", "name": "range_cold", "level": "MUST", "rule": "§9 rule 2, §5.3", "what": "a single range on an object not yet fetched is answered 206 with exactly those bytes, or 200 with the whole object" }, { "id": "C5", "name": "suffix_and_open_ranges", "level": "MUST", "rule": "§9 rule 2", "what": "bytes=-N and bytes=A- are answered with exactly those bytes" }, { "id": "C6", "name": "unsatisfiable", "level": "MUST", "rule": "§9 rule 2", "what": "a range starting at the object's length is answered 416 with Content-Range bytes */n" }, { "id": "C7", "name": "no_coding", "level": "MUST", "rule": "§9 rule 1", "what": "with Accept-Encoding offering codings, the object comes back with no Content-Encoding and its exact bytes" }, { "id": "C8", "name": "if_range_strong", "level": "MUST", "rule": "§9 rule 5", "what": "If-Range with the object's ETag gets 206; with a weak form of it, or another ETag, the whole object" }, { "id": "C9", "name": "no_vary_by_header", "level": "MUST", "rule": "§9 rule 4", "what": "requests that differ in User-Agent, Accept-Language and Accept get the same bytes, with no Vary" }, { "id": "C10", "name": "head_proof_kept", "level": "MUST", "rule": "§9 rule 6, §6.2", "what": "a head proof is returned byte for byte with its immutable Cache-Control" }, { "id": "C11", "name": "alias", "level": "MUST", "rule": "§5.2, §9 rule 1", "what": "an alias returns the object's exact bytes and its ETag" }, { "id": "C12", "name": "live_edge_max_age", "level": "MUST", "rule": "§5.3, §9 rule 3", "what": "an object listed at a live edge keeps its shorter max-age and its bytes, whole and by range" }, { "id": "C13", "name": "no_vary_cors", "level": "MUST", "rule": "§5.3, §9 rule 4", "what": "a request with Origin gets Access-Control-Allow-Origin: * and no Vary: Origin" }, { "id": "R1", "name": "index_revalidated", "level": "MUST", "rule": "§9 rule 6, §8.2", "what": "a receipt index changed at the origin is returned changed on the next request" }, { "id": "R2", "name": "receipt_file_kept", "level": "MUST", "rule": "§9 rule 6, §8.1", "what": "a receipt file is returned byte for byte with its immutable Cache-Control" }, { "id": "R3", "name": "playlist_receipt_kept", "level": "MUST", "rule": "§9 rule 6, §8.6", "what": "a playlist receipt is returned byte for byte" }, { "id": "R4", "name": "key_log_max_age", "level": "MUST", "rule": "§9 rule 6, §8.4", "what": "the key log is returned byte for byte with its Cache-Control" }, { "id": "R5", "name": "parameter_set_kept", "level": "MUST", "rule": "§9 rule 6, §8.5", "what": "a parameter set named by its digest is returned byte for byte and hashes to its name" }, { "id": "S1", "name": "stored", "level": "informative", "rule": "§9", "what": "a second GET of an object is answered without reaching the origin" }, { "id": "S2", "name": "range_stored", "level": "informative", "rule": "§9 rule 2", "what": "a range after a whole GET is answered without reaching the origin" } ] }