El navegador de cada usuario utiliza una memoria caché incorporada para guardar los objetos descargados, lo que puede acelerar significativamente las visitas repetidas a su portal web al cargarlo desde el disco en lugar de la red. A continuación, se explica cómo configurarlo en Apache.
¿Cómo funciona el almacenamiento en caché?
La primera vez que un usuario se conecta a su sitio, descargará todos los recursos estáticos necesarios para representar la página, incluidos ítems como su logotipo. Cuando navegan a una nueva página, cargará su logotipo de la memoria en lugar de volver a solicitarlo, lo que acelerará el rendimiento de manera significativa y reducirá la carga en su servidor web en el procedimiento.
Esta es una caché del lado del cliente, pero muchos sitios además utilizarán una red de entrega de contenido o CDN. Una CDN es una red de servidores que se encuentran frente a su servidor web principal, o servidor de «origen». Esta red almacena en caché sus páginas, aumentando su ancho de banda máximo, reduciendo la latencia de acceso y reduciendo en gran medida el estrés en su servidor de origen. Si desea obtener más información sobre las CDN, puede leer nuestra guía aquí.
Cache-Control
es un encabezado que puede configurar su servidor web para agregar a todas las solicitudes salientes, que le indicará al navegador y a los CDN cómo almacenar en caché su contenido.
Algunas páginas deberían Nunca ser almacenado en caché por cachés compartidos como CDN. Si lo hace, se arriesgará mostrar la información personal de un usuario a otros. Como regla general, si la página va a ser exactamente la misma para todos los usuarios, como su página de inicio, puede almacenarla en caché. Si muestra información confidencial del usuario, querrá incluirla en el listado negra de su caché. Los recursos estáticos, como CSS e imágenes, de forma general se pueden almacenar en caché para todos, a menudo durante mucho más tiempo.
La cantidad de tiempo que los objetos pasan en la caché además es esencial. Conocido como el tiempo de vida (TTL), la antigüedad máxima de sus recursos en caché determina cuánto tiempo permanecerá el objeto en el caché antes de ser invalidado y pedirle al usuario que solicite un nuevo objeto. Para los recursos estáticos que no cambian mucho, puede determinar valores TTL muy altos, de forma general alrededor de dos años. Para las cosas que tal vez desee actualizar, querrá determinar valores TTL más bajos para evitar que los recursos obsoletos permanezcan en la caché durante demasiado tiempo.
Siempre puede usar nombres de archivo versionados para activar una recarga de caché. Si publica una versión nueva de una hoja de estilo CSS, puede nombrarla styles-1.0.1.css
, y el navegador del usuario (y cualquier CDN frente a él) lo verá como un nuevo archivo que debe volver a descargarse. Al mismo tiempo, para algunas CDN, puede emitir invalidaciones manuales para vaciar la caché existente sin cambiar ningún nombre de archivo.
Cómo utilizar Cache-Control en Apache
Cache-Control
tiene algunas opciones:
public
– Cualquiera puede almacenarlo en caché, incluidos navegadores y CDN. Use esto para la mayoría de los objetos estáticos.private
– Contiene datos confidenciales que no pueden almacenarse en caché a través de CDN o proxies inversos. El navegador del usuario puede almacenarlo en caché localmente. Use esto para la mayoría de las páginas autenticadas.no-cache
– A pesar del nombre, no deshabilita el almacenamiento en caché. El navegador aún puede almacenar en caché la solución para el rendimiento, pero debe verificar con el servidor de origen las actualizaciones antes de usarlo. Use esto si desea que el usuario revalide cada vez.no-store
– Deshabilita el almacenamiento en caché por completo. Use esto solo para datos altamente confidenciales que no deben enviarse dos veces.
Al mismo tiempo, puede agregar el no-transform
directiva, que deshabilita cualquier conversión que se pueda llevar a cabo en el recurso. A modo de ejemplo, algunas CDN comprimen imágenes para reducir el ancho de banda. Esta directiva deshabilita aquella conducta.
En Apache, tendrá que configurar este encabezado manualmente usando el Header set
directiva, así:
Header set Cache-Control "max-age=84600, public"
los max-age
El valor se establece en segundos, a modo de ejemplo, max-age=300
durante un TTL de cinco minutos, y max-age=63072000
durante dos años.
Puede poner esta directiva en la raíz de su configuración para aplicarla en todo el sitio, pero un mejor método es aplicar la configuración según el tipo de archivo. A modo de ejemplo, para determinar un TTL alto para la mayoría de los medios estáticos, puede usar un FilesMatch
cuadra:
<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> Header set Cache-Control "max-age=63072000, public" </FilesMatch>
Si desea incluir en el listado negra una ruta específica para que no sea almacenada en caché por CDN, puede utilizar un Directory
cuadra:
<Directory "/private"> Header set Cache-Control "max-age=300, private" </Directory>
O simplemente haga coincidir un solo archivo:
<File "protected.html"> Header set Cache-Control "max-age=300, private" </File>
Los bloques con coincidencias más específicas tendrán prioridad sobre las coincidencias de expresiones regulares generales, pero querrá verificar que todo se esté configurando correctamente en el extremo receptor. Puede verificar esto desde DevTools de Chrome, en Red> Encabezados.
Si solo tiene acceso a .htaccess
configuración, aún puede usar la coincidencia de directorios creando una nueva .htaccess
archivo en cada subdirectorio.
RELACIONADO: Cómo hallar la carpeta de configuración de Apache
Use Surrogate-Control para modificar el comportamiento de CDN de forma directa
los Surrogate-Control
el encabezado funciona exactamente como Cache-Control
, pero detalla instrucciones específicas para CDN y proxies inversos, en lugar de usuarios finales. De esta manera, puede decirle a los CDN que hagan una cosa, pero que envíen diferentes direcciones al navegador.
Tendrá que configurar este encabezado manualmente, de la misma manera que configuró Cache-Control
:
Header set Surrogate-Control "max-age=300, public"
Definitivamente querrá probar con su CDN para verificar que esto funcione.Surrogate-Control
es bastante nuevo y no es universal.