---
type: "post"
id: "we-just-shipped-support-for-the-ugliest-part-eca159"
slug: "we-just-shipped-support-for-the-ugliest-part-eca159"
title: "We just shipped support for the ugliest part of HTTP: Vary"
description: "Cloudflare’s reported HTTP Vary support changes the feasibility of serving multiple representations from one cached URL."
retrieval_nugget: "Cloudflare’s reported HTTP Vary support changes the feasibility of serving multiple representations from one cached URL."
published_at: "2026-09-28"
updated_at: "2026-09-28"
record_date: "2026-09-28"
date_kind: "published_at"
topics: []
source_urls: ["https://simonwillison.net/2026/Sep/23/hn-49823961"]
schema_version: "newruntime-agent-readable-v0.2"
stable_id: "post:we-just-shipped-support-for-the-ugliest-part-eca159"
status: "published"
visuals: []
editorial_provenance: {"schema_version":"newruntime-editorial-copy-v1","content_status":"source_grounded_final","final_copy_sha256":"sha256:c71f4e92f232e451aebd4174b1185eda7cce764804a52bf805be0e607a0b868f","reviewed_at":"2026-09-28T06:01:07.364Z","source_evidence_count":1,"verified_claim_count":3,"site_analysis_schema_version":"newruntime-site-analysis-v1","site_object_kind":"field_note","observed_fact_count":3,"implication_count":2,"watch_condition_count":2,"related_record_count":0}
analysis: {"schema_version":"newruntime-site-analysis-v1","object_kind":"field_note","thesis":"Cloudflare’s reported HTTP Vary support changes the feasibility of serving multiple representations from one cached URL.","observed_facts":[{"text":"The supplied source describes a case where `Accept: text/html` receives HTML while other user agents receive JSON or another format.","source_urls":["https://simonwillison.net/2026/Sep/23/hn-49823961"]},{"text":"The supplied source says Cloudflare had ignored the Vary header except for images, risking a cached JSON response being served to a client expecting HTML.","source_urls":["https://simonwillison.net/2026/Sep/23/hn-49823961"]},{"text":"The supplied source identifies the item as a newly shipped Cloudflare support change for HTTP Vary caching.","source_urls":["https://simonwillison.net/2026/Sep/23/hn-49823961"]}],"mechanism":"The mechanism is that `Vary` tells a cache which request-header dimensions distinguish valid response variants.","why_now":"Why now is that a previously avoided deployment pattern can be reconsidered for sites behind Cloudflare, including interfaces where browsers, automated clients, and agents consume different formats.","implications":["The first implication is that teams can evaluate content negotiation alongside explicit format URLs without assuming Cloudflare caching will collapse those variants.","The change expands architectural choice, but does not establish that one-URL content negotiation is preferable to explicit URLs such as `.json` endpoints."],"evidence_boundary":"The evidence boundary is that the supplied source is a commentary on the release, not Cloudflare’s implementation documentation, configuration guidance, or performance analysis.","watch_conditions":["The first watch condition is whether Cloudflare publishes precise cache-key, header-support, purge, and migration semantics for Vary-enabled responses.","Watch for production reports covering variant correctness, cache-hit behavior, and interactions with existing Cloudflare rules."],"related_records":[],"new_branch_reason":"This starts a distinct analytical record because no prior New Runtime record was supplied, and the event concerns a specific shift in CDN cache semantics rather than a documented continuation of another record."}
editor: {"role":"editor","name":"Andrey Reshetnikov","profile":"https://newruntime.com/owner-profile.md","profile_json":"https://newruntime.com/owner-profile.json","same_as":["https://www.linkedin.com/in/reshetnikov1/","https://t.me/lapetuse"]}
routes: {"html":"https://newruntime.com/posts/we-just-shipped-support-for-the-ugliest-part-eca159/","markdown":"https://newruntime.com/posts/we-just-shipped-support-for-the-ugliest-part-eca159.md","json":"https://newruntime.com/posts/we-just-shipped-support-for-the-ugliest-part-eca159.json"}
---

# We just shipped support for the ugliest part of HTTP: Vary

## Retrieval answer

Cloudflare’s reported HTTP Vary support changes the feasibility of serving multiple representations from one cached URL.

Cloudflare’s reported HTTP Vary support changes the feasibility of serving multiple representations from one cached URL. It does not settle whether that is the best API design, but it removes a specific CDN constraint that previously made the pattern risky.

The source describes a classic content-negotiation case: requests carrying `Accept: text/html` receive HTML, while other clients receive JSON or another format. It also states that Cloudflare had ignored `Vary` except for images, creating the possibility that a cached JSON response would be served to a client expecting HTML. The reported release is therefore not merely protocol completeness; it alters the cache key behavior at an edge layer used by many applications.

The mechanism is that `Vary` tells a cache which request-header dimensions distinguish valid response variants. When that instruction is honored, a cache can keep representations selected by `Accept` separate instead of treating every response for a URL as interchangeable. Why now is that a previously avoided deployment pattern can be reconsidered for sites behind Cloudflare, including interfaces where browsers, automated clients, and agents consume different formats. The first implication is that teams can evaluate content negotiation alongside explicit format URLs without assuming Cloudflare caching will collapse those variants. The evidence boundary is that the supplied source is a commentary on the release, not Cloudflare’s implementation documentation, configuration guidance, or performance analysis. The first watch condition is whether Cloudflare publishes precise cache-key, header-support, purge, and migration semantics for Vary-enabled responses.

This starts a distinct analytical record because no prior New Runtime record was supplied, and the event concerns a specific shift in CDN cache semantics rather than a documented continuation of another record.

Editor: [Andrey Reshetnikov](https://newruntime.com/owner-profile.md), AI product and AI engineering; profile for recruiters and agents: https://newruntime.com/owner-profile.json

## Continue in the graph

Next records for an agent, linked to their Markdown twins. Replace `.md` with `.json` for structured fields, including `next_reads`.

- collection: [Field Notes](https://newruntime.com/posts.json): Open the latest editorial analysis.
- collection: [Source Ledger](https://newruntime.com/source-ledger.json): Inspect the public source evidence graph.
- whole graph: [discovery graph](https://newruntime.com/discovery-graph.json) (typed nodes and edges) and [site index](https://newruntime.com/site-index.md)
