http request header
If-Modified-Since: Wed, 20 Jun 2007 18:29:03 GMT
If-None-Match: "-1"
http response header
Last-Modified: Wed, 20 Jun 2007 18:33:36 GMT
Etag: "经常是inodb编号"
304 not modified,代表资源没有变化不需要重新下载
If-Modified-Since对应于Last-Modified
If-None-Match对应于Etag
注意:
如果设置了response.setHeader("Cache-Control","no-cache"),那么在再次请求时不会发送以上两个header,因为内容根本没缓存。
浏览器中的图片等资源是在浏览器分离的线程中执行获取的,因此主页面设置的response.setHeader("Cache-Control","no-cache")对其他线程获取的资源没有影响,也就是资源线程的http response仍然会缓存资源,再次请求时也会发送相应的两个http header。
另外,对于打开新窗口、浏览器地址栏回车、F5刷新、浏览器后退按钮这四种方式打开网页,浏览器会进行不同的处理,可能发送以上两个header,也可能不发送。具体见:http://www.laruence.com/2010/03/05/1332.html
参考:
http://www.oreillynet.com/onjava/blog/2004/07/optimizing_http_downloads_in_j.html
http://www.infoq.com/cn/articles/etags
http://fishbowl.pastiche.org/2002/10/21/http_conditional_get_for_rss_hackers/