2010/4/28 Justin Davis <[email protected]>: > Small change: Add message to status and put etags in double quotes per > spec. > > diff --git a/web/httpserver.py b/web/httpserver.py > index f2c91cc..f9c0e8d 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 = '"%s"' % 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, "Not Modified") > + 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) > > > > On Apr 28, 2:08 am, Justin Davis <[email protected]> wrote: >> 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?
Pushed. http://github.com/webpy/webpy/commit/43b2176a8d2d8b7a5df7e8f2dbeeeef7f251434f -- 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.
