Ahir em vaig estar barallant amb com funciona l'estalvi de comunicació HTTP (HTTP Cache). Els navegadors utilitzen el protocol de comunicació HTTP per a demanar pàgines web als servidors, i l'estalvi de comunicacions HTTP ha de repercutir en una expriència de navegació més fluïda.

Els mecanismes que hi intervenen els podem trobar descrits a l'RFC 2616 Secció 13.

Pel que he entès, diferencien dos grans parts del procés:

Els paràmetres que determinen els temps involucrats en aquest estalvi de transferències els podem establir al navegador (que és el que sol portar un sistema cau HTTP - HTTP cache), al servidor, a cada pàgina HTML, etc.

L'Apache serveix contingut estàtic (fitxers de disc) per HTTP per defecte sense anunciar cap temps de validesa (Expire time). Això sol voler dir que el sistema cau (el navegador, segurament) pot escollir el temps de validesa que cregui convenient. Per exemple, Firefox 3 crec que pràcticament dóna validesa eterna al contingut HTTP sense temps de validesa associat.

A través del mod_expire, l'Apache pot establir un temps de validesa del contingut de manera prou flexible. El contingut d'aquest bloc l'Apache el serveix estàticament, i tenia el problema que la gent amb Firefox 3 havia de forçar una recàrrega, fins i tot després d'un dia d'haver-lo visitat. Vaig utilitzar el mod_expire ahir per a establir un temps de validesa de mitja hora, que el firefox respecta perfectament. La petició del contingut de l'exemple ha passat a les 15:43:09:

Expires: Thu, 01 Apr 2010 14:13:09 GMT
Cache-Control: max-age=1800

Amb Firefox 3 vaig haver d'instal·lar el mòdul Live HTTP Headers per a comprovar que funcionava bé la nova configuració.

Respecte a l'estalvi de transferències HTTP, crec que en els països més desenvolupats (en termes d'ample de banda d'accés a Internet) s'ha anat perdent el costum de respectar aquests mecanismes, i per totes bandes trobem servidors que marquen el seu contingut com must-revalidate (temps de validesa zero), i que a més el contingut és servit dinàmicament i lentament per programets (PHP, Java, ...). Tot sovint en casos en què les pàgines no canvien.

No hem d'oblidar que el navegador hauría de respectar que l'usuari apretés el botó de Recàrrega, perquè això obliga a assumir els temps de validesa zero, i a no intentar revalidar el contingut, sino obtenir-lo de nou.

Els navegadors solen tenir un mode de navegació anomenat Desconnectat (Offline), on crec que ja només funcionarien els temporitzadors de l'estil max-stale, que tenen a veure amb fins a quin punt el navegador ha de tolerar contingut caducat. No entenc gaire bé com funciona aquesta part; no hi he pas aprofundit. Però almenys el Firefox pot fer l'experiència de treballar Desconnectat molt desagradable, no mostrant sovint cap pàgina tot i que es tracti d'una pàgina visitada recentment.

Per cert, vaig començar a indagar tot això de l'HTTP cache perquè a l'afegir aquest bloc com a entrada de notes a Facebook, vaig fixar-me en que Facebook comprobava si hi havia alguna entrada nova al canal de continguts RSS només cada 24h. Això podia ser el temps de validesa que ells assignaven a pàgines que eren entregades sense cap temps de validesa, com les que el meu servidor servia.

Add a comment