如何使浏览器缓存资源(如图像),并使用命令告诉浏览器不要检查更新的文件?我拥有永远不会改变的静态资产,不断要求服务器进行更新是一种浪费。apache缓存控制无需验证
0
A
回答
1
我的主人不声明favicon.ico的文件,图像/ X-图标,所以我需要以下
AddType image/x-icon .ico
您设置到期如下,每种类型之一。下面是一个例子集(您可以使用天,周,月等。
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)规定了何时以及如何b的框架建议罗尔斯使用这些信息。要深入了解实际情况,请使用Google Chrome开发者视图(Ctl + Shft + I)网络标签。 (尽管可能通过扩展包,但大多数其他主流浏览器都提供相同的工具。)但是,这是建议性的,用户可以选择忽略此选项,但它们总是选择检查服务器,或者每个会话检查一次服务器。 IIRC,一些早期的浏览器(例如MSIE 8)每次会话都有一次检查作为默认选项。
此外,如果你选择做一个刷新页面,那么大多数浏览器将重新验证在页面上使用的所有资源如果-Modified-Since的和如果 - 无 - 匹配,所以你需要重新链接或重新输入URI以查看正常重用操作。同样,大多数人会将Shift +刷新视为“强制刷新” - 即不进行协商。
当我管理OpenOffice.orf用户论坛时,我曾经分析过整个月份的访问日志,看看有多少缓存是通过使用简单的算法来确定何时重用资源应该被缓存,但仍然被客户端浏览器。我惊讶地发现这个缓存未命中率超过了30%(由于用户的浏览器设置)。然而,大多数用户使用谷歌作为知识库访问这些用户论坛,询问具体问题,然后查看几页,从不在本月内返回。当我将自己限制在主持人的IP(主要使用Ff或Chrome作为他们的浏览器)时,此速率提高到〜95%。
因此,客户端浏览器做使用此信息,但没有你所期望的那么多。我还讨论了here,当你没有明确请求这个时,浏览器也可以缓存资源。
相关问题
- 1. URL重写和缓存控制apache htaccess
- 2. 缓存控制:必须重新验证是否需要验证所有请求,或只是过时的?
- 3. 光油4不尊重缓存控制:必须重新验证
- 4. mvc:控制特定的需要验证
- 5. 验证归因缓存
- 6. http身份验证缓存
- 7. HTTP缓存控制
- 8. 缓存控制头
- 9. Ajax缓存控制
- 10. JavaScript验证控制
- 11. HTTP缓存控制:无到期日
- 12. HTTP/1.1缓存控制无缓存问题
- 13. 它是如何必要的是使用“必须重新验证”中的“缓存控制:无缓存,必重新验证”
- 14. 用Apache控制缓存的正确方法是什么?
- 15. 在Apache服务器上使用.htaccess实现缓存控制
- 16. 缓存控制私人
- 17. 缓存用户控制
- 18. 缓存控制问题
- 19. 关于缓存控制
- 20. Tomcat中的缓存控制
- 21. 控制缓存过期
- 22. 使用jQuery控制缓存
- 23. 控制浏览器缓存
- 24. 控制缓存在asp.net
- 25. 缓存控制HTML标题
- 26. 双缓存控制线
- 27. 缓存控制器响应
- 28. 缓存控制C#ASP.NET
- 29. 如何控制CSS缓存?
- 30. 验证控制器问题
我知道如何缓存。我想告诉服务器甚至不要检查更新的版本。 – LordZardeck 2012-03-11 04:41:20
@LordZardeck,你的愿望是不合逻辑的。 mod_expires在文件上执行'lstat()'。鉴于这是它将要读取的文件,这与已经在文件系统缓存中缓存的inode的lstat相当。这花费几百微秒。如果没有兑现,读取本身可能需要100毫秒或更多。您无法使用mod_expires将来设置绝对日期。当然,您可以放下标题并让浏览器执行cond'l GET。解决这个问题! ; - ? – TerryE 2012-03-11 05:13:49
此外,如果你想“服务器甚至不检查”,然后改变你的问题。你说“告诉*浏览器* ...“顺便说一句,”访问加1个月“意味着浏览器在重新验证之前将在下个月使用本地缓存副本。如果您不喜欢,那么将”access + 10 years“或其他相同的东西放在一起。 – TerryE 2012-03-11 05:18:42