Almacenamiento en caché en HTTP

Una descripción detallada de las opciones de almacenamiento en caché disponibles a través del protocolo HTTP

El almacenamiento en caché es una técnica que puede ayudar a que las conexiones de red sean más rápidas, porque cuantas menos cosas se necesiten transferir, mejor.

Muchos recursos pueden ser muy grandes y muy costosos en términos de tiempo y también de costo real (en dispositivos móviles, por ejemplo) para recuperarlos.

Existen diferentes estrategias de almacenamiento en caché que HTTP pone a disposición y que utilizan los navegadores.

Sin caché

Primero elCache-ControlEl encabezado puede decirle al navegador que nunca use una versión en caché de un recurso sin verificar primero el valor de ETag (más sobre esto más adelante), usando elno-cachevalor:

Cache-Control: no-cache

Un mas restrictivono-storeLa opción le dice al navegador (y a todos los dispositivos de red intermediarios) que ni siquiera almacenan el recurso en su caché:

Cache-Control: no-store

SiCache-Controltiene elmax-agevalor, que se usa para determinar la cantidad de segundos que este recurso es válido como caché:

Cache-Control: max-age=3600

losExpiresencabezamiento

Cuando se envía una solicitud HTTP, el navegador comprueba si tiene una copia de esa página en la caché, según la URL que solicitó.

Si lo hay, busca en la páginafrescura.

Una página es nueva si elRespuesta HTTPExpiresencabezamientoel valor es menor que la fecha y hora actual.

El encabezado Expires tiene esta forma:

Expires: Sat, 01 Dec 2018 16:00:00 GMT

GET condicional

Hay diferentes formas de realizar una obtención condicional. Todos se basan en el uso deIf-*solicitar encabezados:

  • usandoIf-Modified-SinceyLast-Modified
  • usandoIf-None-MatchyETag

UsandoIf-Modified-SinceyLast-Modified

El navegador puede enviar una solicitud al servidor y en lugar de simplemente pedir la página, agrega unIf-Modified-Sinceencabezamiento, basado en elLast-Modifiedvalor de encabezado que obtuvo de la página actualmente almacenada en caché.

Esto le dice al servidor que solo devuelva un cuerpo de respuesta (el contenido de la página) si el recurso se ha actualizado desde esa fecha.

De lo contrario, el servidor devuelve un304 Not Modifiedrespuesta.

UsandoIf-None-MatchyETag

El servidor web (dependiendo de la configuración, cómo se sirve la página, etc.) puede enviar unEncabezado ETag.

Ese es el identificador de un recurso. Cada vez que cambia el recurso, por ejemplo, se actualiza, la ETag también debería cambiar.

Es como una suma de comprobación.

El navegador envía unIf-None-Matchencabezamientoque contiene uno (o más) valores ETag.

Si ninguno coincide, el servidor devuelve la versión nueva del recurso; de lo contrario, un304 Not Modifiedrespuesta.


Más tutoriales de red: