Hi guys,
I've been using Chrome as my browser recently (from FF) and noticed
something I had forgotten: Firefox caches in content in weird ways
that breaks the http spec. Mostly, this refers to static content --
FF chooses to cache most things even if the web server doesn't
explicitly tell it to so long as there aren't url arguments and
possibly some other voodoo (and if Mozilla would fix this, that would
be fantastic).
That said, I noticed that static content was taking a while to load on
Chrome because they (correctly) request the file each time. This was
annoying for some larger javascript files I was working with, so I
added support for etags to the basic server. Nothing big, but it
means I don't need to resend big files. Here's the diff:
diff --git a/web/httpserver.py b/web/httpserver.py
index f2c91cc..f46db97 100644
--- a/web/httpserver.py
+++ b/web/httpserver.py
@@ -183,6 +183,18 @@ class StaticApp(SimpleHTTPRequestHandler):
from cStringIO import StringIO
self.wfile = StringIO() # for capturing error
+ try:
+ path = self.translate_path(self.path)
+ etag = str(os.path.getmtime(path))
+ client_etag = environ.get('HTTP_IF_NONE_MATCH')
+ self.send_header('ETag', etag)
+ if etag == client_etag:
+ self.send_response(304)
+ self.start_response(self.status, self.headers)
+ raise StopIteration
+ except OSError:
+ pass # Probably a 404
+
f = self.send_head()
self.start_response(self.status, self.headers)
I haven't tested this on windows -- I think the getmtime function
should work correctly but only assuming.
Anand, if this works for other people, think this could get added to
the tree?
Cheers,
Justin
--
You received this message because you are subscribed to the Google Groups
"web.py" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/webpy?hl=en.