Cache-Control

El encabezado HTTP Cache-Control especifica directivas (instrucciones) para almacenar temporalmente (caching) tanto en peticiones como en respuestas. Una directiva dada en una petici贸n no significa que la misma directiva estar en la respuesta.

Tipo de encabezado Encabezado general
nombre prohibido del encabezado no
Respuesta del encabezado CORS-safelisted yes

Sintaxis

Las directivas para almacenamiento temporal siguen las siguientes reglas para ser v谩lidas:

  • Insensible a may煤sculas, pero las min煤sculas son recomendadas.
  • Directivas m煤ltiples son separadas por comas.
  • Algunas directivas tienen un argumento opcional, lo cual puede ser tanto un token o una cadena-citada. (Ver la especificaci贸n para definiciones)

Directivas de solicitud de cache

Las directivas est谩ndar Cache-Control que pueden ser usadas por el cliente en una solicitud HTTP.

Cache-Control: max-age=<seconds>
Cache-Control: max-stale[=<seconds>]
Cache-Control: min-fresh=<seconds>
Cache-Control: no-cache
Cache-Control: no-store
Cache-Control: no-transform
Cache-Control: only-if-cached

Directivas de solicitud de cache

Las diretivas est谩ndar Cache-Control que pueden ser usadas por el servidor en una respuesta HTTP.

Cache-Control: must-revalidate
Cache-Control: no-cache
Cache-Control: no-store
Cache-Control: no-transform
Cache-Control: public
Cache-Control: private
Cache-Control: proxy-revalidate
Cache-Control: max-age=<seconds>
Cache-Control: s-maxage=<seconds>

Directivas de extensi贸n de Cache-Control

Las directivas de extensi贸n Cache-Control no forman parte de la base del documento estandar para cacheo HTTP. Revis茅 la tabla de compatibilidad para ver su soporte, los agentes de usuario que no reconocen estas directivas las ignorar谩n.

Cache-Control: immutable
Cache-Control: stale-while-revalidate=<seconds>
Cache-Control: stale-if-error=<seconds>

Directivas

Cacheabilidad

  • Una respuesta es normalmente cacheado por el navegador si
    • tiene un c贸digo de estado 301, 302, 307, 308, o 410 y
    • Cache-Control no tiene no-store, o si proxy, no tiene private y
    • Authorization no esta definido
    • Cualquiera
      • tiene un c贸digo de estado 301, 302, 307, 308, o 410 o
      • tiene public, max-age o s-maxage en Cache-Control o
      • tiene definido Expires
public
La respuesta puede estar almacenada en cualquier memoria cache, incluso si la petici贸n normalmente no es cacheable.
private
La respuesta puede estar almacenada s贸lo por el cache de un navegador, incluso si la petici贸n es normalmente no cacheable. Si no desea almacenar la respuesta en alg煤n cache, use en su lugar no-store. Esta directiva no es efectiva previniendo el cacheo al almacenar respuestas.
no-cache
La respuesta puede estar almacenada por cualquier cache, incluso si la petici贸n es normalmente no cacheable. Sin embargo, la respuesta almacenada DEBE siempre pasar por una validaci贸n con el servidor de origen antes de utilizarse, por lo tanto, no se puede usar no-cache en conjunci贸n con immutable. Si no desea almacenar la respuesta en alg煤n cache, se debe utilizar no-store en su lugar. Esta directiva no es efectiva para prevenir el cacheo al guardar la respuesta.
no-store
La respuesta puede no ser almacenada en cualquier cache. Aunque otras directivas pueden definirla, 茅sta es la 煤nica directiva que se necesita para prevenir el cacheo de respuestas en navegadores modernos. max-age=0 es impl铆cito. Configurando must-revalidate no tiene sentido porque en orden para revalidar se necesita que la respuesta este almacenada en la cache, lo cual no-store previene.
No copie y pege el m茅todo espec铆fico para Intenet Explorer pre-check=0,post-check=0 si lo ve en l铆nea porque es completamente ignorado, confirmado por el tweet de un desarrollador de Edge.
Deshabilitando Cache v铆a Cache-Control
no-store
no-cache,no-store,must-revalidate,pre-check=0,post-check=0

Expiraci贸n

max-age=<seconds>
La cantidad m谩xima de tiempo un recurso es considerado reciente. A diferencia de Expires, esta directiva es relativa a el tiempo de la petici贸n.
s-maxage=<seconds>
Anula el encabezado max-age o el Expires, pero solo para caches compartidos (e.g., proxies). Ignorado por caches privados.
max-stale[=<seconds>]
Indica que el cliente aceptar谩 una respuesta tard铆a. Un valor opciona en segundo indica el l铆mite superior de estancamiento que el cliente aceptar谩.
min-fresh=<seconds>
Indica que el cliente quiere una respuesta que ser谩 reciente por al menos el n煤mero espec铆fico de segundos.
stale-while-revalidate=<seconds>
Indica que el cliente aceptar谩 una respuesta tard铆a, mientras as铆ncronamente revisa por el fondo por una reciente. El valor de los segundos indica que tan largo es el cliente aceptar谩 una respuesta estancada. Ver "Manteniendo las cosas frescas con stale-while-revalidate" para m谩s informaci贸n.
stale-if-error=<seconds>
Indica que el cliente aceptar谩 una respuesta tard铆a si la revisi贸n por una res煤esta reciente falla. El valor de los segundos indica cuanto tiempo el cliente aceptar谩 la respuesta tard铆a despu茅s de una expiraci贸n inicial.

Revalidaci贸n y recarga

must-revalidate
Indica que una vez un recurso se vuelve obsoleto, el cache no debe usar su copia obsoleta sin correctamente validar en el servidor de origen.
proxy-revalidate
Similar a must-revalidate, pero solo para caches compartidos (es decir, proxies). Ignorado por caches privados.
immutable
Indica que la respuesta del cuerpo no deber铆a cambiar con el tiempo. El recurso, si no ha expirado, no ha cambiado en el servidor y por lo tanto el cliente no deber铆a enviar una revalidaci贸n condicional por ello (es decir, If-None-Match o If-Modified-Since) para revisar por actualizaciones, incluso cuando el usuario expl铆citamente recarga la p谩gina. Los clientes que no son consientes de esta extensi贸n las ignoran deacuerdo a la especificaci贸n HTTP. En Firefox, immutable solo es respetada en transacciones https://. Para m谩s informaci贸n, ver tambi茅n este 谩rticulo de un blog.

Otros

no-transform
No hay transformaciones o conversiones deber铆an hacerse al recurso. Los encabezados Content-Encoding, Content-Range, Content-Type no deben ser modificados por un proxy. Un proxy no transparente o una caracter铆stica de un navegador como podr铆a ser Google's Light Mode, por ejemplo, convierte entre formatos de imagenes con el motivo de guardar espacio del cache o para reducir la cantidad de tr谩fico en un enlace lento. La directiva no-transform no permite esto.
only-if-cached
Definida por el cliente para indicar "no usar la red" para la respuesta. la cache deber铆a ya sea responder usando una respuesta almacenada, o responder con un c贸digo de estado 504. Encabezados condicionales como If-None-Match no deber铆an ser definidos. No hay efecto si only-if-cached es definido por un servidor como parte de una respuesta.

Ejemplos

Prevenci贸n de almacenamiento en cach茅

Para desactivar el almacenamiento en cach茅, puede enviar el siguiente encabezado de respuesta. Adem谩s, ver tambi茅n los encabezados Expires y Pragma.

Cache-Control: no-store
Cache-Control: private,no-cache,no-store,max-age=0,must-revalidate,pre-check=0,post-check=0

Almacenando temporalmente recursos est谩ticos

Para los archivos de la aplicaci贸n que no cambian, generalmente se puede agregar almacenamiento en cach茅 agresivo enviando el encabezado de respuesta a continuaci贸n. Esto incluye, por ejemplo, archivos est谩ticos servidos por la aplicaci贸n, como im谩genes, archivos CSS y archivos JavaScript. Adem谩s, vea tambi茅n, el encabezado Expires.

Cache-Control: public, max-age=604800, immutable

Requiriendo revalidaci贸n

Especificando no-cache o max-age=0 se indica a los clientes que se puede almacenar temporalmente un recurso y debe revalidarse en cada ocasi贸n antes de utilizarse. Esto significa que las peticiones HTTP ocurren cada vez, pero se pueden saltar la descarga del cuerpo HTTP si el contenido es v谩lido.

Cache-Control: no-cache
Cache-Control: no-cache, max-age=0
Cache-Control: no-cache, max-age=0, stale-while-revalidate=300

Especificaciones

Compatibilidad de los navegadores

BCD tables only load in the browser

V茅ase tambi茅n