网页设计学习笔记

HTML,CSS,JavaScript

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

一、no-cache 与 max-age

在 HTTP 1.0 中,服务器可以用头部信息的 Pragma: no-cache 字段指示浏览器不缓存该页面,或者用 Expires: Mon, 10 Jun 2013 01:50:58 GMT 指示浏览器在某时间后删除该页面的缓存。用非法的时间例如 Expires: -1 同样可以让浏览器不缓存该页面。

而在 HTTP 1.1 中,我们可以用 Cache-Control 字段进行更仔细的缓存控制。例如前面两个字段在 HTTP 1.1 可以分别类似 Cache-Control: no-cacheCache-Control: max-age=3600 的方法来设置。

二、Last-Modified 与 If-Modified-Since

HTTP 1.0 中可以用 Last-Modified 和 If-Modified-Since 这一对字段来控制页面缓存。服务器在回应的 HTTP 头部中设置 Last-Modified 字段,例如:

Last-Modified:Mon, 27 May 2013 15:39:18 GMT

这样,浏览器下次访问同一页面时,在头部设置 If-Modified-Since 字段:

If-Modified-Since:Mon, 27 May 2013 15:39:18 GMT

服务器发现该页面在此时间后并没有修改,就可以返回 304 Not Modified 状态码,而不再重新发送页面内容。此时浏览器从缓存中读取页面内容。

三、ETag 与 If-None-Match

HTTP 1.1 中增加了 ETag 和 If-None-Match 这一对字段来控制页面缓存。服务器在回应的 HTTP 头部中设置页面的 ETag 字段(Etag 经常通过某种 hash 方式计算),例如:

ETag:"1368-1369669158000"

这样,浏览器下次访问同一页面时,在头部设置 If-None-Match 字段:

If-None-Match:"1368-1369669158000"

服务器发现该页面的 ETag 值并没有变化,就可以返回 304 Not Modified 状态码,而不再重新发送页面内容。此时浏览器从缓存中读取页面内容。

四、IE 的 Ajax 缓存问题

对于 Ajax 的 GET请求,IE 默认会缓存它,我们需要设置 Expires: -1 来阻止它的缓存。

参考资料:
[1] Hypertext Transfer Protocol -- HTTP/1.0
[2] Hypertext Transfer Protocol -- HTTP/1.1
[3] Key Differences between HTTP/1.0 and HTTP/1.1
[4] List of HTTP header fields - Wikipedia
[5] HTTP ETag - Wikipedia
[6] Internet Explorer’s Ajax Caching: What Are YOU Going To Do About It?
[7] Fixing Internet Explorer & AJAX | F5 DevCentral
[8] HOWTO:防止在 Internet Explorer 中进行缓存

posted on 2013-06-09 11:46  zoho  阅读(339)  评论(0编辑  收藏  举报