繁体   English   中英

没有设置“ Expires”和“ Cache-Control”头,而忽略了“ Last-Modified”或“ ETag”,为什么?

[英]No “Expires” and no “Cache-Control” header set, yet “Last-Modified” or “ETag” are being ignored, why?

尽管“ ETag”已更改且“上次修改时间”设置为比服务器缓存的资源新的日期,但Chrome仍从缓存中加载文件。 这是为什么??

最好在Cache-Control中始终设置Expires或max-age。 如果您不指定资源何时过期,则允许浏览器使用其自己的启发式进行缓存。 参见RFC 2616的13.2.4节:

如果响应中没有Expires,Cache-Control:max-age或Cache-Control:s-maxage(参见14.9.3节),并且响应中不包含其他对缓存的限制,则缓存可以计算新鲜度一生使用启发式。 如果还没有添加警告,则缓存必须将警告113附加到超过24小时的任何响应。

同样,如果响应确实具有最后修改时间,则启发式到期值应不超过该时间间隔的一部分。 该比例的典型设置可能是10%。

确定响应是否已过期的计算非常简单:

  response_is_fresh = (freshness_lifetime > current_age) 

Chrome缓存了该资源,因为您尚未指示是否应该缓存该资源。 一旦浏览器确定资源过时,Last-Modified仅由浏览器用来验证资源。

您需要设置Expires或Cache-Control来获得所需的缓存行为。

顺便说一句,对于大多数网站来说,一个很好的经验法则是立即使HTML过期,但永远缓存图像,CSS和JavaScript:

http://blog.httpwatch.com/2007/12/10/two-simple-rules-for-http-caching/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM