Coverage gap
Field names in a Vary value are case-insensitive (RFC 9110 §5.1): Vary: FOO must select on request header Foo. The suite tests value-case normalization but not field-name case.
Currently tested
vary-normalise-lang-case (tests/vary.mjs) tests the value case of Accept-Language. All Vary tests use exact-case field names in both the Vary value and the request headers.
Suggested test
Store a response with Vary: FOO (uppercase) and request header Foo: 1. A matching subsequent request (Foo: 1) must be served cached; a non-matching one (Foo: 2) must be not_cached — i.e. selection works despite the case mismatch between the Vary token and the actual header name.
Tag
[MUST] — RFC 9110 §5.1
Filed from an AI-assisted (Claude Code) coverage audit against RFC 9111/9110, under maintainer direction. Absence was grep-verified; the spec section number and MUST/SHOULD/optimal strength are from model knowledge, not re-read from the RFC text — worth confirming before writing the test.
Coverage gap
Field names in a
Varyvalue are case-insensitive (RFC 9110 §5.1):Vary: FOOmust select on request headerFoo. The suite tests value-case normalization but not field-name case.Currently tested
vary-normalise-lang-case(tests/vary.mjs) tests the value case ofAccept-Language. All Vary tests use exact-case field names in both theVaryvalue and the request headers.Suggested test
Store a response with
Vary: FOO(uppercase) and request headerFoo: 1. A matching subsequent request (Foo: 1) must be servedcached; a non-matching one (Foo: 2) must benot_cached— i.e. selection works despite the case mismatch between theVarytoken and the actual header name.Tag
[MUST] — RFC 9110 §5.1
Filed from an AI-assisted (Claude Code) coverage audit against RFC 9111/9110, under maintainer direction. Absence was grep-verified; the spec section number and MUST/SHOULD/optimal strength are from model knowledge, not re-read from the RFC text — worth confirming before writing the test.