我想找到一组最小的标头集,这些标头可以与“所有”缓存和浏览器一起使用(也在使用HTTPS时使用!)
在我的网站上,我将拥有三种资源:
示例:0A470E87CC58EE133616F402B5DDFE1C.cache.html(由GWT自动生成)
这些文件在更改内容时(基于MD5)会自动分配一个新名称。
即使使用HTTPS,也应该尽可能地对其进行缓存(因此,我认为应该设置Cache-Control: public
,尤其是对于Firefox?)
如果内容已更改,他们不应该要求客户端往返服务器进行验证。
示例:index.html,mymodule.nocache.js
部署新版本的网站时,这些文件将更改其内容而不会更改URL。
它们可以被缓存,但是可能每次都需要往返来重新验证。
示例:JSON响应
我对每种类型可能使用的标头有一个大致的了解,但是总会缺少一些东西。
我可能会使用以下设置:
Cache-Control: max-age=31556926
–表示可以被任何高速缓存所高速缓存。缓存的表示将被认为是1年的新鲜:
为了将响应标记为“永不过期”,源服务器会从发送响应之日起大约一年后发送一个 Expires日期。HTTP / 1.1服务器不应发送超过一年的过期日期。
Cache-Control: no-cache
–任何缓存都允许缓存制图表达。但是缓存必须在释放缓存副本之前将请求提交给原始服务器以进行验证。Cache-Control: no-store
–缓存在任何情况下均不得缓存表示。有关更多信息,请参见Mark Nottingham的缓存教程。
@Gumbo:我很确定的一件事是,当我希望Firefox 3+在使用HTTPS的同时将公共文件缓存到磁盘时,需要设置public:stackoverflow.com/questions/174348/…
某些浏览器(例如IE)已开始将Cache-Control:no-cache视为无存储。诚然,这不是根据RFC进行的,但已知这样做是为了“修复”许多人使用无缓存来防止敏感数据未经加密存储在磁盘上所犯的错误。
@chris_l,我通过此链接发生了:palisade.plynt.com/issues/2008Jul/cache-control-attributes。我不记得以前的版本是如何表现的,尽管我认为IE7也是这样做的。
同样,Firefox不再需要Cache-Control中的PUBLIC来缓存HTTPS资源。但是总的来说,最好的选择是在观看流量的同时测试您的网站,例如使用Fiddler。
建议不要将缓存控制值设置为100年。首先,该规范建议最长为1年。其次,超过68年的任何值都会导致IE8及以下版本立即失效:blogs.msdn.com/b/ieinternals/archive/2010/01/26/…