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.

Reply via email to