demo · v141

key-order & except

No-Vary-Search has three directives that interact in non-obvious ways: params (ignore these), except (ignore everything except these), and key-order (param ordering doesn't matter). This concept normalises any URL pair against your chosen header so you can verify whether they'll hit the same cache entry.

checking support…

Pick a preset header or write your own, then enter two URLs:

awaiting comparison…

the response header

// All three directives, combined
No-Vary-Search: key-order, params=("fbclid" "gclid"), except=()

// Common patterns
No-Vary-Search: params=("utm_source" "utm_medium" "utm_campaign" "utm_term" "utm_content")
No-Vary-Search: except=("v")        // only "v" matters; ignore everything else
No-Vary-Search: key-order            // ?a=1&b=2 and ?b=2&a=1 are the same

why this angle

The three directives reflect three different real-world patterns. params is straightforward — list the tracking params to drop. except is for situations where you want a strict allowlist: an API endpoint where only id and v are meaningful, everything else is noise. key-order matters for client-side libraries that serialise objects to query strings in unpredictable orders. The interactive comparator lets you check intuition against the spec.

see also