[英]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.