Selecciona las directivas o pega una cabecera existente. El análisis se aplica al texto, no al funcionamiento real de una caché.
Se ejecuta localmente en tu navegadorEl panel superior compone una política de respuesta: elige una visibilidad, añade un periodo de vigencia en segundos, marca las directivas que necesites y pulsa Crear cabecera. La cabecera que enviaría la página aparece en el cuadro Cabecera de respuesta con un resumen de tres líneas —cuántas directivas hay, qué vigencia tiene la respuesta y qué cachés pueden conservarla— y, debajo, cada conflicto que contiene la combinación. El panel inferior hace lo contrario: pega un valor copiado de una respuesta, de la configuración de un CDN o de un registro, pulsa Inspeccionar cabecera y lee ese mismo resumen para ese texto. Los dos paneles funcionan en este navegador y la página sigue operativa sin conexión.
Cache-Control es el campo de respuesta HTTP que indica a las cachés cuánto tiempo pueden reutilizar una respuesta y qué deben comprobar antes: max-age y s-maxage fijan la duración para navegadores y cachés compartidas, no-store prohíbe almacenar, no-cache permite almacenar pero exige validar, e immutable, stale-while-revalidate y stale-if-error matizan todo eso. Esta herramienta lee el texto de la cabecera según la RFC 9111 e indica qué haría una caché con él. Nunca contacta con una URL, así que no puede decir qué hacen realmente tu servidor, tu CDN o la caché de un navegador en producción.
public y private se contradicen: public marca la respuesta como almacenable por cachés compartidas y private se lo prohíbe justamente a esas cachés, así que sobra una de las dos. no-store es la directiva más fuerte —no se puede almacenar nada—, de modo que max-age, s-maxage y las ventanas de contenido obsoleto no sirven de nada en la misma cabecera; el resumen lo dice en lugar de mostrar una vigencia que nunca se aplicará. s-maxage solo lo leen las cachés compartidas y private las excluye, así que s-maxage junto a private no tiene efecto.
immutable promete que el recurso no cambiará mientras esté vigente (RFC 8246); sin max-age ni s-maxage no hay ninguna ventana de vigencia que esa promesa cubra. must-understand va junto a no-store, y una caché que entiende los requisitos de caché de ese código de estado ignora la parte no-store (RFC 9111, sección 5.2.2.3). También se avisa si no hay duración: sin max-age, s-maxage ni no-cache, una caché puede recurrir a una heurística —habitualmente una décima parte del tiempo desde Last-Modified— y reutilizar la respuesta sin consultar al origen.
max-age, s-maxage, stale-while-revalidate y stale-if-error llevan delta-seconds, que la RFC 9111 define como uno o más dígitos (sección 1.2.2): 0 es válido y significa obsoleto de inmediato, y el punto decimal no forma parte de la gramática. Un valor entre comillas como max-age="5" se avisa porque quien lo envía debe usar la forma de token (sección 5.2.2.1). También se avisa si se superan 2147483647 segundos: una caché que no pueda representar esa cifra debe leerla como 2147483648 segundos, más de 68 años, lo que equivale a no quedar obsoleta nunca.
La otra forma de argumento en este campo es la lista de nombres de campo entre comillas de no-cache y private, como no-cache="Set-Cookie". Las comas dentro de esas comillas pertenecen a la lista, así que el analizador divide el campo por las comas que quedan fuera de las comillas y cuenta ese valor como una sola directiva. Las directivas que una caché no reconoce las ignora esa caché (sección 5.2.3), y por eso merece la pena avisar de una errata como maz-age=60: la respuesta se serviría igual y la regla simplemente no existiría.
La página nunca envía una petición: solo lee el texto de la cabecera. Que un CDN, un proxy inverso o un navegador respete el campo depende de la configuración de ese sistema y del código de estado de la respuesta, y una caché puede almacenar una respuesta sin ninguna directiva si la considera cacheable por heurística. Comprueba la política en la respuesta real —curl -I, las cabeceras de caché que informa tu CDN o el panel de red del navegador— antes de confiar en ella.
Dos vecinos de este campo quedan fuera a propósito: Expires da una fecha absoluta en lugar de una duración, y Pragma es un campo de petición de HTTP/1.0 que la RFC 9111 deja obsoleto (sección 5.4). Por eso se rechaza una línea que empieza con otro nombre de campo en lugar de reetiquetarla como Cache-Control. Y como la comprobación es textual, una cabecera impecable puede seguir siendo equivocada para el contenido que hay detrás: no-store en un recurso estático o un max-age de un año en una página que cambia cada hora son decisiones que ningún analizador puede tomar por ti.