2011-08-15 17 views
45

Estoy usando Amazon S3 para servir activos estáticos para mi sitio web. Quiero que los navegadores guarden en caché estos activos el mayor tiempo posible. Lo cabeceras de meta-datos debo incluir con mis activosValor máximo para el encabezado de control de caché en HTTP

Cache-Control: max-age=??? 
+0

el posible valor máximo de la edad depende del navegador/versión y de cualquier proxy en el camino ... AFAIK no hay un estándar/especificación real, así que cualquier valor sería una suposición ... – Yahia

Respuesta

63

Generalmente se recomienda un año como valor máximo estándar. Ver RFC 2616:

Para marcar una respuesta como "nunca caduca", un servidor de origen envía un Expira la fecha aproximadamente un año desde el momento de la respuesta es enviado. Los servidores HTTP/1.1 NO DEBEN enviar fechas de Caducidad más de un año en el futuro.

A pesar de que se aplica a la norma anterior expires, tiene sentido aplicar a cache-control también en la falta de una orientación explícita normas. Por lo general, siempre debe necesitar, y elegir cualquier valor arbitrariamente más largo podría romper algunos agentes de usuario. Entonces:

Cache-Control: max-age=31536000 
16

no considera almacenarla para "el mayor tiempo posible", y en lugar de conformarse con el tiempo que razonable. Por ejemplo, es poco probable que necesites guardarlo en caché por más tiempo que digamos 10 años ... ¿estoy en lo cierto?

El RFC discute max-age aquí: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

Eric Lawrence dice que antes de IE9, Internet Explorer tratarían como rancio cualquier recurso con un Cache-Control: el valor máximo de edad durante 2147483648 (2^31) segundos, aproximadamente 68 años (http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx).

Por supuesto, otros agentes de usuario variarán, así que ... intente y elija un número que sea poco probable (¡más que probable!) Que cause un desbordamiento. La edad máxima mayor a 31536000 (un año) tiene poco sentido, e informalmente, esto se considera un valor máximo razonable.

+0

Estoy buscando el encabezados específicos para enviar. Tengo un mecanismo integrado en mi sitio web para cambiar la URL del archivo para que apunte a un nombre de archivo diferente si necesito hacer un cambio y hacer que los visitantes lo vean. Solo necesito un ejemplo de los encabezados específicos para enviar para que los navegadores guarden en caché estos activos indefinidamente. –

+9

Cache-Control: max-age = 31536000 lo almacenará en caché durante 1 año, que es el máximo recomendado. – EricLaw

+2

@Geoffrey: Creo que estás confundido acerca de lo que Casey está construyendo. Simplemente está diciendo que cambiará la URL a la que hace referencia en su marcado cuando cambie la versión. Esta es una mejor práctica utilizada por la mayoría de los mejores sitios. – EricLaw

1

Las personas que crearon la recomendación de un máximo de 1 año de almacenamiento en caché no lo pensaron bien.

En primer lugar, si a un visitante se le está entregando un archivo en caché desactualizado, ¿por qué le brindaría algún beneficio que repentinamente cargara una versión nueva después de 1 año? Si un archivo tiene TTL de 1 año, desde una perspectiva funcional, obviamente significa que el archivo no está pensado para ser cambiado en absoluto.

Entonces, ¿por qué necesitaríamos más de 1 año?

1) ¿Por qué no? No sirve ningún propósito decirle al navegador de los visitantes "hey, este archivo tiene 1 año, podría ser una idea verificar si se ha actualizado".

2) Servicios de CDN. La mayoría de las redes de entrega de contenido usan el encabezado de caché para decidir cuánto tiempo se debe servir un archivo de manera eficiente desde el servidor Edge. Si tiene un control de caché de 1 año para los archivos, en algún momento comenzará a solicitar nuevamente los archivos no cambiados desde el servidor de origen, y el caché de borde deberá ser repoblado por completo, causando cargas más lentas para el cliente e innecesariamente llama al origen

¿Cuál es el punto de tener un máximo de 1 año? ¿Qué navegadores se ahogarán con una cantidad superior a 31536000?

+3

1 año es una eternidad en la era de Internet. Además, si toma en serio el almacenamiento en caché, manejaría (además del control de caché) el mecanismo de última modificación y/o etag. Entonces, incluso esas nuevas solicitudes un año después no dañarán el ancho de banda (304 no modificado) – redben

+0

1 año no es una eternidad cuando sus imágenes NUNCA se cambian (como la mayoría de las imágenes en Internet), y cuando usted no quiere un CDN para actualizar archivos desde el origen (lo que no tendría sentido). En cuanto a last-modified/etag, por supuesto que inicia una solicitud y un diálogo entre el cliente y el servidor, solo para descubrir lo que ya sabemos "yup, todavía está bien para servir el archivo en caché". Su argumento es básicamente "1 año es una eternidad en Internet", que no sirve para nada productivo. He establecido que caducan 10 años en las imágenes, lo que simplemente sirve para un mejor resultado final. – suncat100

+3

Ah, y también hay un tamaño predeterminado de caché del navegador. ¿Algún activo en caché sobrevivirá un año en un caché del navegador? No lo sé. – redben

Cuestiones relacionadas