Hi,
After reading http://wiki.nginx.org, I find out that nginx has not the
offical support for the HTTP Etag, HTTP/1.1: Header Field Definitions . I
want to know whether the future version of nginx will add this
feature.
My website is taking use of nginx to run static files server including
lots of Javascipt and CSS files modified frequently. Now I set a very
short expires time like, expires 1h, to renew the client cache as soon
as possible.
But I think it is not a good solution. It wastes my network bandwidth
if I do not modify the static files. Etag will do it better because it
can renew the client’s cache immediately. Moreover the implement of
this feature is not very hard. One simple method of generating the
ETag is based on the the size and last modified time of the file.
But I think it is not a good solution. It wastes my network bandwidth
if I do not modify the static files. Etag will do it better because it
can renew the client’s cache immediately. Moreover the implement of
this feature is not very hard. One simple method of generating the
ETag is based on the the size and last modified time of the file.
Do what (I do) and other large sites do.
Put a query string parameter on the file. It will make the browser
treat it as a fresh one.
foo.js
foo.js?v=1
foo.js?v=2
(Somewhat thanks to Flickr for validating this concept)
It is also CDN friendly, we use Akamai and it allows us to not have to
purge the cache constantly.
We use our subversion revision number for the ID that goes in the v=
param. This automates it and there is no way for the file to be
updated without going through subversion anyway; it’s kind of a
win/win. I find this to be easy and require less configuration.
However, if you don’t have an automated system you’ll have to remember
when you update your .js file to go update the calling page (which
might be just as simple too)
Yahoo discourages ETags as well depending on your usage model:
“If you’re not taking advantage of the flexible validation model that
ETags provide, it’s better to just remove the ETag altogether. The
Last-Modified header validates based on the component’s timestamp. And
removing the ETag reduces the size of the HTTP headers in both the
response and subsequent requests.”[1]
This e-mail and its attachments are intended for the above named
recipient(s) only and may be confidential. If they have come to you in
error, please reply to this e-mail and highlight the error. No action
should be taken regarding content, nor must you copy or show them to
anyone.
This e-mail has been created in the knowledge that Internet e-mail is
not a 100% secure communications medium, and we have taken steps to
ensure that this e-mail and attachments are free from any virus. We must
advise that in keeping with good computing practice the recipient should
ensure they are completely virus free, and that you understand and
observe the lack of security when e-mailing us.
Thanks a lot for Michael and Anton’s replies and good suggestion!
On Tue, Apr 14, 2009 at 11:36 PM, Michael S. [email protected]
wrote:
short expires time like, expires 1h, to renew the client cache as soon
purge the cache constantly.
“If you’re not taking advantage of the flexible validation model that
ETags provide, it’s better to just remove the ETag altogether. The
Last-Modified header validates based on the component’s timestamp. And
removing the ETag reduces the size of the HTTP headers in both the
response and subsequent requests.”[1]