Diciembre de rastreo: Almacenamiento en caché de HTTP

Lunes, 9 de diciembre de 2024

Permítenos usar la caché.

A medida que Internet creció a lo largo de los años, también lo hizo la cantidad de contenido que rastrea Google. Si bien la infraestructura de rastreo de Google admite mecanismos de almacenamiento en caché heurísticos, de hecho, siempre lo hizo, la cantidad de solicitudes que se pueden mostrar desde las cachés locales disminuyó: hace 10 años, alrededor del 0.026% del total de recuperaciones se podía almacenar en caché, lo que ya no es tan impresionante; hoy esa cifra es del 0.017%.

¿Por qué es importante el almacenamiento en caché?

La caché es una pieza fundamental del gran rompecabezas que es Internet. La caché permite que las páginas se carguen con la rapidez del rayo en las visitas repetidas, ahorra recursos de procesamiento y, por lo tanto, también recursos naturales, y ahorra una gran cantidad de ancho de banda costoso para los clientes y los servidores.

En especial, si tienes un sitio grande con contenido que rara vez cambia en URLs individuales, permitir el almacenamiento en caché de forma local puede ayudar a que tu sitio se rastree de manera más eficiente. La infraestructura de rastreo de Google admite el almacenamiento en caché HTTP heurístico como se define en el estándar de almacenamiento en caché HTTP, específicamente a través del encabezado de respuesta ETag y el encabezado de solicitud If-None-Match, y el encabezado de respuesta Last-Modified y el encabezado de la solicitud If-Modified-Since.

Te recomendamos que uses ETag porque es menos propenso a errores (el valor no está estructurado a diferencia del valor Last-Modified). Y, si tienes la opción, set ambos: Internet te lo agradecerá. Tal vez.

En cuanto a lo que consideras un cambio que requiere que los clientes actualicen sus cachés, depende de ti. Te recomendamos que solicites una actualización de la caché cuando realices cambios significativos en tu contenido. Si solo actualizaste la fecha de derechos de autor en la parte inferior de la página, es probable que no sea significativo.

ETag y If-None-Match

Los rastreadores de Google admiten solicitudes condicionales basadas en ETag exactamente como se define en el estándar de almacenamiento en caché de HTTP. Es decir, para indicar la preferencia de almacenamiento en caché a los rastreadores de Google, establece el valor de Etag en cualquier cadena ASCII arbitraria (por lo general, un hash del contenido o el número de versión, pero también podría ser una parte de π, depende de ti) única para la representación del contenido alojado por la URL a la que se accedió. Por ejemplo, si alojas diferentes versiones del mismo contenido en la misma URL (por ejemplo, una versión para dispositivos móviles y otra para computadoras), cada versión podría tener su propio valor ETag único.

Los rastreadores de Google que admiten el almacenamiento en caché enviarán el valor ETag que se muestra para un rastreo anterior de esa URL en If-None-Match header. Si el valor de ETag que envió el rastreador coincide con el valor actual que generó el servidor, este debería mostrar un código de estado HTTP 304 (Sin modificar) sin cuerpo HTTP. Este último fragmento, sin cuerpo HTTP, es la parte importante por dos razones:

  • tu servidor no tiene que gastar recursos de procesamiento para generar contenido; es decir, ahorras dinero
  • tu servidor no tiene que transferir el cuerpo HTTP, es decir, ahorras dinero

En el lado del cliente, como el navegador de un usuario o Googlebot, el contenido de esa URL se recupera de la caché interna del cliente. Como no hay transferencia de datos, esto sucede con la rapidez del rayo, lo que complace a los usuarios y, posiblemente, también les ahorra algunos recursos.

Last-Modified y If-Modified-Since

Al igual que ETag, los rastreadores de Google también admiten solicitudes condicionales Last-Modified based, exactamente como se define en el estándar de almacenamiento en caché HTTP. Esto funciona de la misma manera que ETag desde una perspectiva semántica (se usa un identificador para decidir si el recurso se puede almacenar en caché) y proporciona los mismos beneficios que ETag del lado de los clientes.

Tenemos algunas recomendaciones si usas Last-Modified como directiva de almacenamiento en caché:

  1. La fecha en el encabezado Last-Modified debe tener el formato según el estándar HTTP. Para evitar problemas de análisis, te recomendamos que uses el siguiente formato de fecha: "Día de la semana, zona horaria DD Mon YYYY HH:MM:SS". Por ejemplo: "Fri, 4 Sep 1998 19:15:56 GMT".
  2. Si bien no es obligatorio, considera configurar también el campo max-age del encabezado Cache-Control para ayudar a los rastreadores a determinar cuándo volver a rastrear la URL específica. Establece el valor del campo max-age en la cantidad esperada de segundos que el contenido no cambiará. Por ejemplo: Cache-Control: max-age=94043.

Ejemplos

Si eres como yo, es difícil comprender cómo funciona la caché heurística. Sin embargo, mostrar un ejemplo de la cadena de solicitudes y respuestas parece ayudarme. Estas son dos cadenas, una para ETag/If-None-Match y otra para Last-Modified/If-Modified-Since, para visualizar cómo se supone que funciona:

ETag/If-None-Match Last-Modified/If-Modified-Since
La respuesta de un servidor a un rastreo: Esta es la respuesta a partir de la cual un rastreador puede guardar los campos de encabezado de precondición ETag y Last-Modified.
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Fri, 4 Sep 1998 19:15:50 GMT
ETag: "34aa387-d-1568eb00"
...
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Fri, 4 Sep 1998 19:15:50 GMT
Last-Modified: Fri, 4 Sep 1998 19:15:56 GMT
Cache-Control: max-age=94043
...
Solicitud condicional del rastreador posterior: La solicitud condicional se basa en los valores del encabezado de condición previa guardados de una solicitud anterior. Los valores se vuelven a enviar al servidor para su validación en los encabezados de la solicitud If-None-Match y If-Modified-Since.
GET /hello.world HTTP/1.1
Host: www.example.com
Accept-Language: en, hu
User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html)
If-None-Match: "34aa387-d-1568eb00"
...
GET /hello.world HTTP/1.1
Host: www.example.com
Accept-Language: en, hu
User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html)
If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT
...
Respuesta del servidor a la solicitud condicional: Como los valores de encabezado de condición previa que envía el rastreador se validan del lado del servidor, este muestra un código de estado HTTP 304 (sin un cuerpo HTTP) al rastreador. Esto ocurrirá con cada solicitud posterior hasta que las condiciones previas no se validen (la fecha de ETag o Last-Modified cambie del lado del servidor).
HTTP/1.1 304 Not Modified
Date: Fri, 4 Sep 1998 19:15:50 GMT
Expires: Fri, 4 Sep 1998 19:15:52 GMT
Vary: Accept-Encoding
If-None-Match: "34aa387-d-1568eb00"
...
HTTP/1.1 304 Not Modified
Date: Fri, 4 Sep 1998 19:15:50 GMT
Expires: Fri, 4 Sep 1998 19:15:51 GMT
Vary: Accept-Encoding
If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT
...

Si tu objetivo es satisfacer a los usuarios y, además, quieres ahorrar un poco en la factura de hosting, habla con tu proveedor de hosting o CMS, o con tus desarrolladores, sobre cómo habilitar el almacenamiento en caché HTTP para tu sitio. Al menos, tus usuarios te querrán un poco más.

Si quieres chatear sobre el almacenamiento en caché, visita la Comunidad de ayuda de la Central de la Búsqueda más cercana. Si tienes comentarios sobre cómo almacenamos en caché, deja comentarios en la documentación sobre el almacenamiento en caché que publicamos junto con esta entrada de blog.


¿Quieres obtener más información sobre el rastreo? Mira toda la serie "Crawling December":