无验证的apache缓存控制

无验证的apache缓存控制,apache,Apache,如何使用命令使浏览器缓存资源(如图像),以告知浏览器不要检查更新的文件?我有永远不会更改的静态资产,不断要求服务器更新是一种浪费。我的主机没有将favicon.ico文件声明为image/x-icon,因此我需要以下内容 AddType image/x-icon .ico 您可以按如下方式设置expires,每种类型一个。下面是一个示例集(您可以使用日、周、月等: ExpiresActive On ExpiresByType text/css "access plus

如何使用命令使浏览器缓存资源(如图像),以告知浏览器不要检查更新的文件?我有永远不会更改的静态资产,不断要求服务器更新是一种浪费。

我的主机没有将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”
根据其他类型的需要进行扩展。604800=1周(以秒为单位)。如果要更改此值,请进行计算

浏览器如何使用这些标题 为浏览器使用此信息的时间和方式提供框架建议。要深入了解此信息在实践中的工作原理,请使用Google Chrome developer view(Ctl+Shft+I)网络选项卡。(大多数其他主要浏览器提供了同等的工具,但可能通过扩展包提供。)但是,这是一种建议,因为用户可以通过浏览器选项选择忽略这一点,并始终选择检查服务器,或每个会话检查服务器一次。IIRC,一些早期浏览器(例如MSIE pre 8)将每个会话检查一次作为默认选项

此外,如果您选择进行页面刷新,那么大多数浏览器将使用重新验证页面上的所有资源,如果自以来进行了修改,则使用,如果没有匹配的,则使用,因此您需要重新访问链接或重新输入URI以查看正常的重用操作。同样,大多数浏览器将Shift+刷新视为“强制刷新”--也就是说,没有进行任何谈判

当我管理OpenOffice.orf用户论坛时,有一次我分析了整整一个月的访问日志,通过使用一个简单的算法来确定什么时候应该缓存重用的资源,但客户端浏览器仍然在哪里获取资源,从而查看有多少缓存正在被执行。我惊讶地发现,这个缓存未命中率超过30%(由于用户的浏览器设置)。然而,大多数用户使用谷歌访问这些用户论坛作为知识库,询问具体问题,然后查看一些页面,一个月内再也不会返回。当我将自己限制在版主的IP(他们大多使用Ff或Chrome作为浏览器)上时,这一比例增加到约95%


因此,客户端浏览器确实使用了这些信息,但并不像您期望的那样多。我还讨论了,当您没有明确请求时,浏览器也可以缓存资源。

我知道如何缓存。我想告诉服务器,甚至不要检查更新的版本。@LordZardeck,依我看,您的愿望是不合逻辑的。mod_expires执行
lstat()
在文件上。鉴于这是它无论如何都要读取的文件,这相当于文件系统缓存中已缓存的inode的lstat。这需要几百微秒。如果不兑现,读取本身可能需要100毫秒或更长时间。您不能使用mod_expires来设置将来的绝对日期。of c我们可以删除标题,让浏览器再做一次。计算出这方面的开销!-?如果你想“服务器甚至不检查”,那么就改变你的问题。你说“告诉浏览器…”顺便说一句,“访问加1个月”这意味着浏览器将在重新验证之前的下个月使用本地缓存副本。如果您不喜欢,请将“access+10年”或其他类似的说法视为不正确。对不起,我指的是浏览器。我的意思是,“我想告诉浏览器甚至不要检查服务器的更新版本”。此外,我尝试了expires模块,但它仍然从服务器发送请求,收到304个响应。我已更新我的响应,以提供您在哪里寻找的内容。如果您需要详细的响应,那么您应该考虑如何构建Q:-)