适用于不同类型资源的理想HTTP缓存控制标头

Chr*_*her 81 https caching http http-headers

我想找到一个最小的标题集,它可以与"所有"缓存和浏览器一起使用(当使用HTTPS时也是如此!)

在我的网站上,我将有三种资源:

(1)永远可缓存(所有用户的公共/相等)

示例:0A470E87CC58EE133616F402B5DDFE1C.cache.html(由GWT自动生成)

  • 这些文件在更改内容时会自动分配新名称(基于MD5).

  • 他们应该尽可能地缓存,即使使用HTTPS(所以我认为,我应该设置Cache-Control: public,特别是对于Firefox?)

  • 如果内容已更改,则不应要求客户端往服务器进行往返验证.

(2)偶尔改变(所有用户公开/平等)

示例:index.html,mymodule.nocache.js

  • 部署新版本的站点时,这些文件会更改其内容而不更改URL.

  • 它们可以缓存,但可能需要往返才能每次都重新验证.

(3)每个请求的个人(私人/用户特定)

示例:JSON响应

  • 在任何情况下都不应将这些资源缓存到未加密的磁盘.(除非我有一些可以缓存的特定请求.)

我对每种类型可能会使用哪些标题有一个总体思路,但总有一些我可能会遗漏的东西.

Gum*_*mbo 89

我可能会使用这些设置:

  1. Cache-Control: max-age=31556926 - 任何缓存都可以缓存表示.缓存的表示将被视为新鲜1年:

    要将响应标记为"永不过期",源服务器会在发送响应大约一年后发送 过期日期.HTTP/1.1服务器不应该在将来发送超过一年的过期日期.

  2. Cache-Control: no-cache - 允许任何缓存缓存表示.但是缓存必须在发布缓存副本之前将请求提交给源服务器进行验证.
  3. Cache-Control: no-store - 缓存不得在任何条件下缓存表示.

有关详细信息,请参阅Mark Nottingham的缓存教程.

  • 建议不要将缓存控制值设置为100年.首先,规格建议最多1年.其次,任何超过68年的价值都会导致IE8及以下版本立即到期:http://blogs.msdn.com/b/ieinternals/archive/2010/01/26/use-max-age-values-less-than- maxint.aspx (3认同)
  • 一些浏览器,例如IE,开始将Cache-Control:no-cache视为无存储.这肯定不是根据RFC,但它是故意做的"修复"许多使用no-cache完成的错误,以防止敏感数据以未加密的方式存储在磁盘上. (2认同)
  • 此外,Firefox 不再需要 Cache-Control 中的 PUBLIC 来缓存 HTTPS 资源。但总体而言,您最好的选择是在观看流量的同时测试您的网站,例如使用 Fiddler。 (2认同)