Cloudflare ya respeta Vary en su caché: se acabó servir JSON a quien pide HTML
Cloudflare ya respeta el encabezado Vary en su caché, una vieja petición de Simon Willison. Antes ignoraba esa cabecera salvo en imágenes y podía servir JSON a quien esperaba HTML.
Cloudflare ha añadido soporte para el encabezado Vary en su caché. La compañía ya respeta esa cabecera HTTP en respuestas que no son imágenes, algo que Simon Willison llevaba años pidiendo. Hasta ahora la CDN la ignoraba y eso hacía arriesgado desplegar negociación de contenido: si un cliente pedía JSON y otro HTML, la caché podía guardar una versión y servirla al cliente equivocado.
El problema clásico que describe Willison es el de los user agents que mandan Accept: text/html y reciben HTML, mientras que los que no mandan esa cabecera reciben JSON u otro formato. La cabecera Vary le dice a la caché que la representación depende de Accept, pero Cloudflare solo la tenía en cuenta en imágenes. El resto de respuestas se almacenaban sin distinguir entre variantes, así que una respuesta JSON cacheada podía acabar en el navegador de alguien que esperaba HTML. Willison lo resume como la parte más fea de HTTP, aunque llevaba años queriendo que Cloudflare la soportara.
La noticia llega después de que el propio Willison decidiera no usar ese patrón en sus aplicaciones, con independencia de la función de Cloudflare. Prefiere URLs que devuelvan siempre el mismo tipo de contenido y añade un sufijo .json para servir JSON en lugar de negociar por cabeceras. Es una decisión de diseño que muchos equipos comparten: la negociación por Accept es elegante sobre el papel, pero añade estados que se pueden cachear mal si la infraestructura no acompaña.
El cambio importa a quien despliega APIs o sitios detrás de una CDN. La negociación de contenido con Accept y Vary es una práctica extendida, pero dependía de que el proveedor de caché respetara la cabecera. Si Cloudflare ya lo hace, se puede volver a plantear ese diseño sin miedo a que la variante equivocada se quede almacenada y se reutilice. Queda por ver cómo se comporta en configuraciones con varias capas de caché y qué pasa con los clientes que no siguen bien la especificación.
