¿Qué son los datos en caché? ¿Qué significa Clear Cache y qué hace?

Primero, ¿qué es un caché?

En términos generales, un caché (pronunciado "efectivo") es un tipo de depósito. Puede pensar en un repositorio como un depósito de almacenamiento. En el ejército, esto sería para guardar armas, alimentos y otros suministros necesarios para llevar adelante una misión.

En informática, estos "suministros" se denominan recursos, donde los recursos son scripts, código y contenido del documento. Este último a veces se denomina más específicamente "activos", como texto, datos estáticos, medios e hipervínculos, pero aquí solo usaré el término recursos .

La distinción entre una caché y otros tipos de repositorios

El propósito principal de una caché es acelerar la recuperación de los recursos de la página web, disminuyendo los tiempos de carga de la página. Otro aspecto crítico de una caché es asegurarse de que contenga datos relativamente nuevos.

Este artículo cubrirá dos métodos predominantes de almacenamiento en caché: almacenamiento en caché del navegador y redes de entrega de contenido (CDN).

Además de las cachés, otros repositorios entran en juego en las arquitecturas web; a menudo, estos están diseñados para contener grandes cantidades de datos. Sin embargo, no están tan centrados en el rendimiento de la recuperación.

Por ejemplo, Amazon Glacier es un repositorio de datos diseñado para almacenar datos de forma económica, pero no recuperarlos rápidamente. Una base de datos SQL, por otro lado, está diseñada para ser flexible, actualizada y rápida, pero rara vez es barata y no suele ser tan rápida como una caché.

El caché del navegador: un caché de memoria

Una memoria caché almacena recursos localmente en la computadora donde se ejecuta el navegador. Mientras el navegador está activo, los recursos recuperados se almacenarán en la memoria física (RAM) de la computadora y posiblemente también en el disco duro.

Más tarde, cuando se necesiten exactamente los mismos recursos al volver a visitar una página web, el navegador los extraerá de la caché en lugar del servidor remoto. Dado que la caché se almacena localmente, en una memoria rápida, esos recursos se recuperan más rápido y la página se carga más rápido.

La velocidad de recuperación de los recursos es fundamental, pero también lo es la necesidad de que los recursos estén frescos. Un recurso obsoleto es uno que está desactualizado y puede que ya no sea válido.

Parte del trabajo del navegador es identificar qué recursos almacenados en caché están obsoletos y recuperar los que lo están. Dado que una página web generalmente tiene muchos recursos, generalmente habrá una combinación de versiones obsoletas y nuevas en la caché.

¿Cómo sabe el navegador qué está obsoleto en la caché?

La respuesta no es simple, pero hay dos enfoques principales: la eliminación de caché y los campos de encabezado HTTP.

revienta caché

Italianos

El almacenamiento en caché es una técnica del lado del servidor que garantiza que el navegador solo obtenga recursos nuevos. Lo hace indirectamente.

Si bien la eliminación de caché puede parecer dramática, realmente no rompe nada y ni siquiera toca lo que ya está almacenado en caché en un navegador. Todo lo que hace la eliminación de caché es cambiar el URI del recurso original de una manera que le parezca al navegador que el recurso es completamente nuevo. Como parece nuevo, no estará en la caché del navegador. La versión anterior del recurso almacenado en caché seguirá almacenada en caché, pero eventualmente se marchitará y morirá, y nunca más se podrá acceder a ella.

Digamos que tengo una página web en la www.foobar.com/about.htmlque dice todo sobre foobar.com que le gustaría saber. Una vez que visita esa página, el navegador la almacena en caché y los recursos asociados a ella.

Más tarde, foobar.com es comprado por la corporación Quxbaz y el contenido de la página acerca de experimenta cambios significativos. El caché del navegador no tendrá ese nuevo contenido, pero aún puede creer que el contenido que tiene es actual y nunca intentará recuperarlo.

¿Qué hace usted, el administrador web de Quxbaz, para asegurarse de que se elimine todo el contenido nuevo?

Dado que el navegador se basa en el URI para buscar elementos en la memoria caché, si el URI de un recurso cambia, es como si el navegador nunca lo hubiera visto antes de ir a buscar ese recurso del servidor.

Por lo tanto, al cambiar el URI del recurso de www.foobar.com/about.htmla www.foobar.com/about2.html(o a www.quxbaz.com/about.html), el navegador no encontrará ningún recurso de caché asociado con ese URI y realizará una búsqueda completa del servidor. El recurso puede ser sustancialmente el mismo que el original con el URI anterior, pero el navegador no lo sabe.

Sin embargo, no es necesario que cambie el nombre de la página. Desde el URI también incluye una cadena de consulta, por definición, se puede añadir un parámetro de versión a la URI: www.foobar.com/about.html?v=2hef9eb1.

En este caso, el parámetro de versión v se establece como un nuevo valor hash generado cada vez que cambia el contenido o se activa mediante algún otro proceso, como el reinicio del servidor. El navegador ve que la cadena de consulta ha cambiado y, dado que las cadenas de consulta pueden afectar lo que se devolverá, buscará un recurso actualizado del servidor.

Ninguna de estas técnicas funcionará si se accede directamente al URI antiguo desde un marcador. A menos que se le indique al navegador que revalide el URI en la última solicitud almacenada en caché (o el recurso almacenado en caché expiró), no realizará una búsqueda completa para actualizar su caché. Esto nos lleva al siguiente tema.

Campos de encabezado HTTP

Cada solicitud de recursos viene con una metainformación conocida como encabezado. Por el contrario, cada respuesta también tiene información de encabezado asociada.

En algunos casos, el navegador ve los valores del encabezado de respuesta y cambia los valores correspondientes en los encabezados de solicitud posteriores. Entre estos valores de encabezado se encuentran los que afectan la forma en que se realiza el almacenamiento en caché de recursos en el navegador.

Solicitudes HEAD y solicitudes condicionales

Una solicitud HEAD es como una solicitud GET o POST truncada. En lugar de solicitar el recurso completo, una solicitud HEAD solo solicita los campos de encabezado que, de lo contrario, se devolverían en una solicitud completa.

El encabezado de un recurso generalmente será mucho más pequeño (en número de bytes totales) que los datos del recurso asociados con él (el "cuerpo" de la respuesta). La información del encabezado es lo suficientemente informativa como para permitir que el navegador determine la actualidad del recurso en su caché.

Las solicitudes HEAD se utilizan a menudo para verificar la validez de un recurso del servidor (es decir, ¿el recurso todavía existe y, de ser así, se ha actualizado desde la última vez que el navegador accedió?). El navegador usará lo que está en su caché si la solicitud HEAD indica que el recurso es válido; de lo contrario, realizará una solicitud GET o POST completa y actualizará su caché con lo que se devuelve.

Con una solicitud condicional, el navegador envía campos en el encabezado que describen la actualidad de su recurso en caché. Esta vez, el servidor determina si la caché del navegador aún está actualizada.

Si es así, el servidor devuelve una respuesta 304 con solo la información del encabezado del recurso y sin el cuerpo del recurso (los datos). Si se determina que la caché del navegador está desactualizada, el servidor devolverá una respuesta completa 200 OK.

Este mecanismo es más rápido que usar solicitudes HEAD, ya que elimina la posibilidad de tener que emitir dos solicitudes en lugar de una.

Lo anterior simplifica lo que puede ser un proceso bastante complicado. Hay muchos ajustes involucrados en el almacenamiento en caché, pero todo se controla a través de los campos de encabezado, el más importante de los cuales es el control de caché.

Control de caché

Al responder a una solicitud, el servidor enviará campos de encabezado al navegador indicando qué comportamiento debe adaptarse al almacenar en caché. Si cargo la página en //en.wikipedia.org/wiki/Uniform_Resource_Identifier, la respuesta contiene esto en su registro de encabezado:

cache-control: private, s-maxage=0, max-age=0, must-revalidate 

privado significa que solo el navegador debe almacenar en caché el contenido del documento.

s-maxage y max-age se establecen en 0 . El valor de s-maxage es para servidores proxy con cachés, mientras que max-age está destinado al navegador. El efecto de configurar max-age solo es que el recurso almacenado en caché expira inmediatamente, sin embargo, aún se puede usar (aunque esté obsoleto) durante las recargas de la página mientras se está en la misma sesión del navegador.

Un recurso obsoleto puede ser la revalidación a través de una solicitud HEAD, que puede ir seguida de una solicitud GET o POST, según la respuesta. La directiva must-revalidate ordena al navegador que revalide el recurso almacenado en caché si está obsoleto.

Dado que max-age se establece en 0 en este caso, el recurso en caché queda obsoleto inmediatamente una vez recibido. La combinación de las dos directivas es equivalente a la directiva única sin caché .

Las dos configuraciones aseguran que el navegador siempre revalide el recurso almacenado en caché, ya sea que esté en la misma sesión o no.

Las directivas de control de caché son muy extensas y, a veces, confusas: son un tema por derecho propio. Puede encontrar una lista documentada completa de directivas aquí.

Etiqueta electrónica

Este es un token que el servidor envía y el navegador retiene hasta la próxima solicitud. Esto solo se usa cuando el navegador sabe que la vida útil de la caché del recurso ha expirado.

Las etiquetas electrónicas son valores hash generados por el servidor, que a menudo utilizan el nombre del archivo físico del recurso y la fecha de la última modificación en el servidor como semilla. Cuando se actualiza un archivo de recursos, la fecha de modificación cambia y se genera un nuevo valor hash y se envía en el encabezado de respuesta a la solicitud.

Otras etiquetas de encabezado que afectan al almacenamiento en caché

Las etiquetas de encabezado caducan y las últimas modificaciones son casi obsoletas, sin embargo, la mayoría de los servidores las envían para compatibilidad con navegadores más antiguos. Un ejemplo:

expires: Thu, 01 Jan 1970 00:00:00 GMT last-modified: Sun, 01 Mar 2020 17:59:02 GMT 

Aquí, el expires se establece en la fecha cero (históricamente, desde el sistema operativo UNIX). Eso indica que el recurso vence inmediatamente, al igual que max-age = 0 . Última modificación le dice al navegador cuándo se realizó la última actualización del recurso, que luego puede usar para decidir si debe volver a buscarlo en lugar de usar el valor de caché.

Forzar una actualización de caché desde el navegador

¿Qué es una recarga dura?

Una recarga completa obliga a recuperar todos los recursos de una página, ya sea contenido, scripts, hojas de estilo o medios. Prácticamente todo, ¿verdad?

Bueno, es posible que algunos recursos no se incluyan explícitamente en una página. En su lugar, se pueden recuperar de forma dinámica, normalmente después de que se haya cargado todo lo explícito.

El navegador no sabe de antemano que esto sucederá y, cuando lo haga, las solicitudes posteriores (iniciadas por scripts, por lo general) seguirán usando copias en caché de esos recursos si están disponibles.

¿Qué es borrar caché y recargar duro?

Esta operación borra todo el caché del navegador, lo que tiene el mismo efecto que una recarga completa, pero además hace que también se obtengan recursos cargados dinámicamente; después de todo, no hay nada en el caché, ¡así que no hay otra opción!

Redes de entrega de contenido: una caché geolocalizada

Una CDN es más que un caché, pero el almacenamiento en caché es uno de sus trabajos. Un CDN almacena datos en ubicaciones distribuidas geográficamente de modo que se reducen los tiempos de ida y vuelta hacia y desde un navegador geográficamente local.

las solicitudes del navegador se encaminan a un CDN cerca, acortando así los datos de respuesta distancia física tiene que viajar. Las CDN también pueden manejar grandes cantidades de tráfico y brindar seguridad contra algunos tipos de ataques.

Una CDN obtiene sus recursos a través de un punto de intercambio de Internet (IXP), nodos que forman parte de la columna vertebral de Internet (en mayúsculas). Hay pasos que se deben seguir para configurar el enrutamiento de solicitudes para ir a una CDN en lugar del servidor host. El siguiente paso es asegurarse de que la CDN tenga el contenido actual de su sitio web.

En los viejos tiempos, la mayoría de las CDN admitían el método de inserción: un sitio web enviaba contenido nuevo a un centro de CDN, que luego se distribuía a nodos geográficamente dispersos.

Hoy en día, la mayoría de las CDN utilizan los protocolos de almacenamiento en caché descritos anteriormente (o similares) para 1) descargar nuevos recursos y 2) actualizar los existentes. El navegador todavía tiene su caché y nada de eso cambia. Todo lo que hace una CDN es acelerar las transferencias de nuevos recursos.