4 de marzo de 2006

"Conditional GET"

Hace tiempo me metí con HTTP por ser un protocolo algo vetusto para las necesidades de hoy. Una de las cosas que odiaba especialmente es que cada vez que mi cliente RSS (akregator) mira los feeds, se baja todo el feed nuevamente incluso cuando no había habido cambios. No es un comportamiento muy óptimo: Primero se debería mirar a ver si el documento que el cliente tiene en cache está actualizado, el servidor envia un hash (o algo) en cada documento, el cliente lo almacena, y la próxima vez que vaya a mirar el documento envia o mira el hash de nuevo, y si no ha habido cambios, no se reenvia el documento. Existen problemas reales de servidores que son "atacados" por clientes de rss que se bajan todo el feed cada X tiempo (tanto, que se ha llegado a hablar de que RSS iba a acabar fracasando por no poder aguantar grandes demandas)

Aunque mi falta de pasión por HTTP persiste (sigo pensando que HTTP es perfectamente sustituible por un sistema de archivos remoto bien diseñado e implementado), me he alegrado al saber que HTTP 1.1 si puede hacer aquello de lo que yo me quejaba: Existe la posibilidad de que los clientes almacenen el campo ETag y Last-Modified cuando cogen un documento. Asi, la próxima vez que vayan a mirar ese mismo documento los clientes enviarán esos campos guardados como cabeceras "If-None-Match" e "If-Modified-Since", y el servidor responderá con el código 304, "Not Modified"

Un grep rápido me ha llevado a comprobar que firefox almacena esos campos y más en el cache, y que algunas páginas lo usan y que otras no (las páginas dinámicas parecen no estar muy interesadas en ser cacheadas, por ejemplo). Pero bueno, tan importante es criticar como hacer justicia, y si HTTP a pesar de sus defectos da la talla, la da y es justo reconocerlo. Ahora lo que me importa es conseguir que akregator de la talla y utilize esto para ahorrarme ancho de banda. Ya hay un bug abierto desde hace meses (no muy activo), y parece que KHTML está envuelto en el asunto. Ya se verá

Por si alguien tiene curiosidad, me he enterado de todo esto siguiendo un enlace sobre MSNbot. Parece ser que el bot de msn escanea los feeds con mucha frecuencia haciendo caso omiso de la utilización del conditional get, parece ser que mucha gente bloquea al bot de msn por su mal comportamiento

1 comentario:

  1. Anónimo5:26 p. m.

    Feed fetching: Do not use Konqueror cache settings, but use "refresh" mode by default (Check with server if the cached file is up-to-date, reload if not)

    arreglado en kde 3.5.2 creo

    ResponderEliminar