如何使用命令告诉浏览器不检查更新的文件,使浏览器缓存资产(如图像)?我有静态资产,永远不会改变,不断向服务器询问更新是浪费。
答案 0 :(得分:1)
我的主机没有将favicon.ico文件声明为image / x-icon,所以我需要以下
AddType image/x-icon .ico
您设置expires如下,每种类型一个。这是一个示例集(您可以使用日,周,月等:
ExpiresActive On
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType image/gif "access plus 1 week"
ExpiresByType image/png "access plus 1 week"
ExpiresByType image/x-icon "access plus 1 week"
您可能还希望设置缓存标头
<FilesMatch "\.(css|js|gif|jpe?g|png|ico)$">
Header add "Cache-Control" "public, max-age=604800"
</FilesMatch>
根据其他类型的要求进行扩展。 604800 = 1周秒。如果你想改变它,请做数学。
RFC 2616 (HTTP/1.1)提供了浏览器何时以及如何使用此信息的框架建议。要深入了解其在实践中的工作原理,请使用Google Chrome开发人员视图(Ctl + Shft + I)网络标签。 (大多数其他主流浏览器虽然可能通过扩展包提供等效的检测。)然而,这是建议性的,用户可以选择忽略它通过他们的浏览器选项并始终选择检查服务器,或每个会话检查一次服务器。 IIRC,一些早期的浏览器(例如MSIE pre 8)将每次会话检查作为默认选项。
此外,如果您选择进行页面刷新,那么大多数浏览器都会使用 If-Modified-Since 和 If-None-Match 重新验证页面上的所有资源,因此您需要重新访问链接或重新输入URI以查看正常的重用操作。同样,大多数人都会将Shift + refresh视为“强制刷新” - 即不进行协商。
当我管理OpenOffice.orf用户论坛时,我曾经分析了一个月的访问日志,看看通过使用一个简单的算法确定何时应该缓存重用资源但是仍在被客户端提取的地方进行了多少缓存浏览器。我很惊讶地发现这个缓存未命中率超过30%(由于用户的浏览器设置)。但是,大多数用户使用谷歌作为知识库访问这些用户论坛,询问具体问题,然后查看几页,永远不会在一个月内返回。当我将自己限制在主持人的IP(主要使用Ff或Chrome作为他们的浏览器)时,这个比率增加到~95%。
因此,客户端浏览器执行会使用此信息,但不会像您预期的那样多。我还讨论了here,当您没有明确请求时,浏览器也可以缓存资源。