Control de caché: cómo configurarlo correctamente

Publicado el día: 2020-05-21

¿Qué es Cache-Control?# #
Cache-Controles un encabezado de caché HTTP compuesto por un conjunto de directivas que le permiten definir cuándo / cómo se debe almacenar en caché una respuesta y durante cuánto tiempo. El almacenamiento en caché HTTP se produce cuando un navegador almacena copias de recursos para un acceso más rápido .

El acceso a estos recursos copiados es mucho más rápido ya que el navegador no necesita realizar una solicitud al servidor para recibir los mismos archivos cada vez. Puede configurar su servidor para adjuntar el Cache-Controlencabezado en la respuesta, especificando qué directivas usar.

Cache-Control directivas# #
La siguiente es una lista de las directivas comunes usadas y configuradas cuando se usa el Cache-Controlencabezado. Consulte HTTP / 1.1 sección 14.9 para obtener una explicación más detallada de las directivas disponibles.

Cache-Control: no-cache# #
no-cacheusa el encabezado ETag para indicar a los cachés que este recurso no se puede reutilizar sin verificar primero si el recurso ha cambiado en el servidor de origen . Esto significa que no-cachehará un viaje de regreso al servidor para garantizar que la respuesta no haya cambiado y, por lo tanto, no es necesario descargar el recurso si ese es el caso.

Cache-Control: no-store# #
no-storees similar a no-cacheque la respuesta no se puede almacenar en caché y reutilizar, sin embargo, hay una diferencia importante. no-storerequiere que el recurso se solicite y se descargue del servidor de origen cada vez. Esta es una característica importante cuando se trata de información privada.

Cache-Control: public# #
Una respuesta que contiene la publicdirectiva significa que cualquier caché intermedia puede almacenarla en caché. Sin embargo, esto generalmente no se incluye en las respuestas, ya que otras directivas ya indican si la respuesta se puede almacenar en caché (por ejemplo max-age).

Cache-Control: private# #
La privatedirectiva significa que la respuesta solo puede ser almacenada en caché por el navegador que está accediendo al archivo. Esto no permite que ningún caché intermedio almacene la respuesta.

Cache-Control: max-age=# #
Esta directiva le dice al navegador o caché intermediario cuánto tiempo se puede usar la respuesta desde el momento en que se solicitó. Una max-agede 3600medios que la respuesta se puede utilizar para los próximos 60 minutos antes de que necesita para traer una nueva respuesta desde el servidor de origen.

Cache-Control: s-maxage=# #
s-maxagees similar a lo mencionado anteriormente, max-agesin embargo, la "s" significa compartida y solo es relevante para CDN u otros cachés intermedios. Esta directiva anula el encabezado max-agey expires.

Cache-Control: no-transform# #
Los servidores intermedios a veces cambian el formato de sus imágenes y archivos para mejorar el rendimiento. La no-transformdirectiva le dice a los proxies intermedios que no alteren el formato o sus recursos.

Cada una de estas directivas cumple su propio propósito y puede usarse en una variedad de escenarios. Para ayudar a simplificar aún más las cosas, Ilya Grigorik, desarrollador de Google, creó el árbol de decisión a continuación para ayudar a determinar qué directivas deberían establecerse para un recurso en particular.

Fuente: Desarrolladores de Google
Cache-Control configuración# #

El Cache-Controlencabezado HTTP se puede implementar en el servidor o incluso se puede agregar dentro del código. Los siguientes son ejemplos de cómo implementar Cache-Controlen Apache, Nginx o dentro de su código PHP.

apache# #
El siguiente fragmento se puede agregar a su archivo .htaccess para indicarle al servidor que configure los Cache-Controlencabezados max-ageen 84600segundos y publicpara los archivos enumerados. Expiresy los Cache-Controlencabezados también se pueden incluir con Apache utilizando el mod_expiresmódulo .


Header set Cache-Control "max-age=84600, public"



Nginx# #
Este fragmento se puede agregar a su archivo de configuración de Nginx. El siguiente ejemplo utiliza las Cache-Controldirectivas de encabezado publicy no-transformtiene una configuración de caducidad establecida en 2 días.

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 2d;
add_header Cache-Control "public, no-transform";
}

Controlar directamente la cache desde PHP# #
Cache-Controllos encabezados también se pueden agregar directamente en su código. Este ejemplo demuestra el uso del encabezado PHP para incluir la Cache-Controlconfiguración max-agede 1 día.
header('Cache-Control: max-age=84600');

Resumen# #
Cache-Controles un potente encabezado HTTP cuando se trata de acelerar sitios web con el uso de navegador y caché intermediario. Aunque su capacidad para aumentar la velocidad del sitio web no lo es solo, también es bastante útil para ayudar a que la información privada sea menos vulnerable. La configuración que elija aplicar a las Cache-Controldirectivas depende de la naturaleza de la información que se entrega, así como del tiempo de vencimiento deseado de esos activos.