Cache-Control

This translation is incomplete. Please help translate this article from English

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 esta 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

Especificaciones Estado Comentario
RFC 8246: HTTP Immutable Responses IETF RFC
RFC 7234: Hypertext Transfer Protocol (HTTP/1.1): Caching IETF RFC
RFC 5861: HTTP Cache-Control Extensions for Stale Content IETF RFC Definición inicial

Compatibilidad de los navegadores

Update compatibility data on GitHub
DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome para AndroidFirefox para AndroidOpera para AndroidSafari en iOSSamsung Internet
Cache-ControlChrome Soporte completo SiEdge Soporte completo 12Firefox Soporte completo SiIE Soporte completo SiOpera Soporte completo SiSafari Soporte completo SiWebView Android Soporte completo SiChrome Android Soporte completo SiFirefox Android Soporte completo SiOpera Android Soporte completo SiSafari iOS Soporte completo SiSamsung Internet Android Soporte completo Si
immutable
Experimental
Chrome Sin soporte No
Notas
Sin soporte No
Notas
Notas See Chromium bug 611416.
Edge Sin soporte 15 — 79Firefox Soporte completo 49IE Sin soporte NoOpera Sin soporte NoSafari Soporte completo 11WebView Android Sin soporte NoChrome Android Sin soporte NoFirefox Android Sin soporte NoOpera Android Sin soporte NoSafari iOS Soporte completo 11Samsung Internet Android Sin soporte No
stale-if-error
ExperimentalNo estándar
Chrome Sin soporte No
Notas
Sin soporte No
Notas
Notas See Chromium bug 348877.
Edge Sin soporte No
Notas
Sin soporte No
Notas
Notas See Chromium bug 348877.
Firefox Sin soporte No
Notas
Sin soporte No
Notas
Notas See Bugzilla bug 995651 comment 7.
IE Sin soporte NoOpera Sin soporte NoSafari Sin soporte NoWebView Android Sin soporte NoChrome Android Sin soporte NoFirefox Android Sin soporte NoOpera Android Sin soporte NoSafari iOS Sin soporte NoSamsung Internet Android Sin soporte No
stale-while-revalidate
ExperimentalNo estándar
Chrome Soporte completo 75Edge Soporte completo 79Firefox Soporte completo 68IE Sin soporte NoOpera Sin soporte NoSafari Sin soporte NoWebView Android Soporte completo 75Chrome Android Soporte completo 75Firefox Android Soporte completo 68Opera Android Sin soporte NoSafari iOS Sin soporte NoSamsung Internet Android Sin soporte No

Leyenda

Soporte completo  
Soporte completo
Sin soporte  
Sin soporte
Experimental. Esperar que el comportamiento cambie en el futuro.
Experimental. Esperar que el comportamiento cambie en el futuro.
No estandar . Esperar poco soporte entre navegadores.
No estandar . Esperar poco soporte entre navegadores.
Ver notas de implementación.
Ver notas de implementación.

Véase también