[cpif] r294 - in trunk: . frontend-web

svn at argo.es svn at argo.es
Fri Jul 27 02:45:01 CEST 2007


Author: jcea
Date: Fri Jul 27 02:45:00 2007
New Revision: 294

Log:
Afinamos un poco mas el sistema de cacheo de
objetos estaticos, dando soporte a "if-modified-since".

La forma actual de hacerlo es "cutrilla", pero es mejor
que nada, si bien, todos los objetos estaticos tienen ETags,
y es lo que deberian usar los navegadores para realizar
la verificacion.



Modified:
   trunk/TODO
   trunk/frontend-web/url_static.py

Modified: trunk/TODO
==============================================================================
--- trunk/TODO	(original)
+++ trunk/TODO	Fri Jul 27 02:45:00 2007
@@ -307,3 +307,9 @@
 - 20070726: FRONTAL WEB: En algun momento hay que hacer limpieza
   en el storage de los "CSS" y los "JS" huerfanos.
 
+- 20070727: FRONTAL WEB: En "static", si el cliente web nos manda
+  una cabecera "If-Modified-Since", la estamos comparando como cadena
+  con el "last modified" del objeto. Deberiamos parsear la cabecera
+  y comprobar que es semanticamente equivalente, no comparar como
+  simples cadenas.
+

Modified: trunk/frontend-web/url_static.py
==============================================================================
--- trunk/frontend-web/url_static.py	(original)
+++ trunk/frontend-web/url_static.py	Fri Jul 27 02:45:00 2007
@@ -15,7 +15,8 @@
 
   metadata,data=data
   data=data[0] # de-encapsulate
-  headers["Last-Modified"]=metadata["last modified"]
+  last_modified=metadata["last modified"]
+  headers["Last-Modified"]=last_modified
 
   if_none_match=handler.headers.get("if-none-match")
   if if_none_match :
@@ -23,7 +24,10 @@
       if etag==i.strip() :
         return (304,headers,"")
 
-  headers["ETag"]=etag
+  if_modified_since=handler.headers.get("if-modified-since")
+  if if_modified_since==last_modified : # TODO: Actually parse the header, do not do a simple string comparison
+    return (304,headers,"")
+
   headers["Content-Type"]=metadata["content-type"]
 
   return (200,headers,data)



More information about the cpif mailing list