¿Cuál es la diferencia entre los encabezados Expires y Cache-Control?

Respuestas:

130

Cache-Controlfue introducido en HTTP / 1.1 y ofrece más opciones que Expires. Se pueden usar para lograr lo mismo, pero el valor de los datos Expireses una fecha HTTP, mientras que Cache-Controlmax-age le permite especificar una cantidad de tiempo relativa para que pueda especificar "X horas después de que se solicitó la página".

El control de caché HTML es una pregunta muy similar y tiene un buen enlace a un tutorial de caché que debería responder la mayoría de sus preguntas (por ejemplo, http://www.mnot.net/cache_docs/#EXPIRES ). En resumen, sin embargo, Expiresse recomienda para recursos estáticos como imágenes y Cache-Controlcuando necesita más control sobre cómo se realiza el almacenamiento en caché.

Un lee
fuente
8
Vale la pena comentar que el control de caché es lo que usarán todos los navegadores, pero es útil especificar ambos encabezados en caso de que haya servidores proxy viejos en el camino.
Nacho Coloma
3
Utilice el servicio redbot.org (también de Mark Nottingham , quien ha escrito el artículo de almacenamiento en caché mencionado en la respuesta anterior) para verificar el uso correcto de los encabezados de almacenamiento en caché.
daxim
35
Además: "Cuando Cache-Control y Expires están presentes, Cache-Control tiene prioridad". - mnot.net/cache_docs/
KFunk
35

Si está utilizando una red CDN (Cloud Delivery Network), le recomiendo usar Cache-Control con un tiempo máximo en segundos. Por ejemplo, Cache-Control: max-age = 604800. Esto evita los picos de solicitud a su servidor de origen: con "Vence el Mié, 30 Oct 20xx 04:37:07 GMT" todos los navegadores lo solicitarán al mismo tiempo.

usuario3241258
fuente
22
Apache (y probablemente muchos servidores) generalmente establecen la fecha de vencimiento utilizando la hora a la que se solicitó el archivo + el tiempo de espera que especifique. Como esta fecha está usando segundos, su escenario es muy poco probable y el comportamiento es el mismo que cache-control. Así que no veo por qué habría picos de solicitudes cuando se usaExpires:
hilnius
19

De acuerdo con este artículo de Google Developers, HTTP Caching :

El encabezado Cache-Control se definió como parte de la especificación HTTP / 1.1 y reemplaza los encabezados anteriores (por ejemplo, Expires) utilizados para definir políticas de almacenamiento en caché de respuestas. Todos los navegadores modernos admiten Cache-Control, por lo tanto, eso es todo lo que necesitaremos.

Pablo
fuente
No solo todos los navegadores modernos lo admiten, sino que también deberían hacerlo, como está en la especificación: "Si una respuesta incluye un encabezado Expires y una directiva max-age, la directiva max-age anula el encabezado Expires, incluso si expira el encabezado es más restrictivo "[ w3.org/Protocols/rfc2616/rfc2616-sec14.html]
rosell.dk
8

Cache-Control se definió en HTTP / 1.1, indica a todos los mecanismos de almacenamiento en caché del servidor al cliente si pueden almacenar en caché este objeto. Se mide en segundos: Cache-Control: max-age=3600.

El Expirescampo de encabezado proporciona la fecha / hora después de la cual la respuesta se considera obsoleta. Expira el valor es una marca de tiempo en HTTP fecha: Expires: Tue, 18 Jul 2017 16:07:23 GMT.

Si una respuesta incluye un Cache-Controlcampo con la max-agedirectiva, un destinatario DEBE ignorar el Expirescampo.

nodejh
fuente
4

Heroku devcenter tiene un excelente artículo sobre este tema.

Citando de eso,

Mientras que el encabezado Cache-Control activa el almacenamiento en caché del lado del cliente y establece la antigüedad máxima de un recurso, el encabezado Expires se usa para especificar un punto específico en el tiempo en que el recurso ya no es válido.

Devi
fuente
0

Excepto por las opciones privadas / públicas de CC, no veo ninguna diferencia. Cuando se utiliza Expira como "acceso más 1 año / mes / semana / día", funciona exactamente de la misma manera que CC.

Robar
fuente
¿Te gustaría explicar el voto negativo? Hice algunas pruebas exhaustivas en Chrome, Safari y Firefox. Cache Control tiene algunas opciones que no están disponibles cuando se usa caduca, pero para todos los fines prácticos, ambas funcionan exactamente de la misma manera.
Rob
-1

Si todavía está interesado, les dejo esta recomendación directamente de los chicos de google. https://developers.google.com/speed/docs/insights/LeverageBrowserCaching Prefieren caduca antes que Cache-Control

rayo
fuente
¿Estás seguro de que prefieren Expires sobre Cache-Control? Leí que la anulación es al revés, al menos para Firefox. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires
Ecker00
Actualmente, esa página menciona "En desuso. Esta página fue escrita para la versión 4 de la API de PageSpeed ​​Insights, que está en desuso y se cerrará en mayo de 2019. La versión 5 es la última y proporciona datos del mundo real de Chrome User Experience Informe y datos de laboratorio de Lighthouse ".
Jochem Schulenklopper