¿Cómo se hace el envío de archivos a la caché del usuario y qué diablos son las cabeceras HTTP?

21. marzo 2016 SEO 0
¿Cómo se hace el envío de archivos a la caché del usuario y qué diablos son las cabeceras HTTP?

Ya en la pregunta anterior estamos adelantando este concepto que, entiendo, suena bastante técnico y engorroso. El proceso de cachear páginas se hace mandando instrucciones por medio de las cabeceras HTTP (HTTP headers) y seguramente ya se están preguntando qué son y dónde están.

Muy bien, pues como habrán visto, la dirección de una página web comienza por http://… (o https://… que es un protocolo que funge igual, pero está diseñado para la transferencia de datos seguros), esto significa “HyperText Transfer Protocol” y es el protocolo que usa internet para comunicarse desde los 90’s (para los jóvenes, es cierto, antes de los 90’s no existían navegadores y si bien existía internet no tenía nada que ver con lo que hoy es).

Entonces, con este protocolo la carga de una página web se basa en las peticiones HTTP que envía un navegador a un servidor y en las respuestas que envía el servidor al navegador. Durante este proceso, para que se visualice la página web, se pueden generar decenas de peticiones HTTP y cada una de esas peticiones tiene su propia cabecera.

Esquema protocolo HTTP

Las cabeceras HTTP incluyen distintos tipos de información, como el tipo de navegador que es utilizado para la petición, el juego de caracteres utilizado, el tipo de servidor y por supuesto información del cache. Si recordamos el diálogo simulado entre navegador y servidor, cada línea de la conversación podría ser una cabecera HTTP.

Las cabeceras deben comunicar que algunas respuestas son cacheables. HTTP es un código o un lenguaje, y como ya mencionamos sirve para enviar respuestas del servidor al navegador sobre la página web, en este caso revisaremos cómo comunican las cabeceras qué elementos deberán ser cacheables, o sea cuáles debe descargar y guardar el navegador en su caché para conservarlo durante un rango de tiempo establecido.

HTTP especifica las siguientes cuatro cabeceras relacionadas con la caché:

Cache-Control

Expires

ETag

Last-Modified

Sin embargo, definitivamente la cabecera cache control es la más útil, pues permite establecer en varias opciones de configuración, separadas por una coma, atributos como: Public o Private, o el Max-Age que detallo en la siguiente table:

La sintaxis es así:

Cache-Control: private, max-age=0, must-revalidate
 
Cache-Control: max-age=3600, must-revalidate

Las directivas de `Cache-Control` controlan quién puede almacenar la respuesta en memoria caché, en qué condiciones y durante cuánto tiempo. Bien se dice que la mejor solicitud es aquella que no necesita comunicarse con el servidor, tener un acopia en el navegador nos permitirá disminuir el costo de datos del usuario y hacer más rápida la carga de la página.

Por cierto, hay un Framework de PHP muy bueno y muy recomendado para desarrollo web, que nos permite establecer las cabeceras HTTP con una interfaz muy sencilla, orientada a objetos.

Este Framework se llama Symfony y pueden una Guía completa en este link.

Aquí un ejemplo de cómo se escriben las cabeceras con Symfony:

// ...
 
use Symfony\Component\HttpFoundation\Response;
 
$response = new Response();
 
// indica si la respuesta es pública o privada
$response->setPublic();
$response->setPrivate();
 
// establece la duración máxima de la caché privada o compartida
$response->setMaxAge(600);
$response->setSharedMaxAge(600);
 
// establece una directiva Cache-Control concreta
$response->headers->addCacheControlDirective('must-revalidate', true);

¿Respuestas públicas o privadas?

Cabe mencionar que existen las gateway cache y las proxy cache, este tema será analizado en otro post más profundo sobre el análisis de las cabeceras HTTP, pero por ahora lo importante es que ambas son caches compartidas, se les dice así porque el contenido guardado en cache se comparte con más de un usuario.

Imaginemos que por error algunas de estas estas caches almacenan información privada del usuario, se estaría sirviendo esta misma información privada a todos los usuarios. Sería terrible que la información privada de tu cuenta se estuviera sirviendo a otros usuarios cada que soliciten la página.

Por lo anterior es que se establecen dos tipos de cabeceras:

 

  • public: indica que la respuesta se puede guardar en cualquier caché privadas o compartidas.
  • private: indica que toda o parte de la respuesta es exclusiva para un solo usuario y no se debe guardar en una caché compartida.

Finalmente, ¿por qué?

Cerraremos el por qué con las palabras de Google en su fundamentals para developers: “obtener un elemento de la red es lenta y cara: las respuestas de gran tamaño suponen muchos recorridos de ida y vuelta entre el cliente y el servidor, y el proceso se dilata cuando están disponibles y el navegador puede procesarlas. Además, suponen costes de datos para el visitante. Por lo tanto, la capacidad de almacenar en memoria caché y reutilizar recursos obtenidos anteriormente es un aspecto esencial para optimizar el rendimiento.”

Te invito votar por el contenido y a seguirme en Twitter.

[Total: 0    Average: 0/5]

About José Arturo Navarro Mayorga

Apasionado de la data, el Code y las Matemáticas. Experto en SEO y Estrategia de Negocios Digital. #GrowthHacker. Me interesa todo lo que esté cambiando al mundo ahora.