我正在寻找适合我的具体情况的最佳缓存/过期配置。
我意识到有些网站主张关闭 etags:Header unset ETag、FileETag None
我知道我应该使用 Expires 或 Cache-Control。此外,我知道我应该使用 Last-modified 或 ETAG(根据 ySlow 文档)。
我继承了一个客户端服务器,它在.htaccess 中使用以下内容:
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|xml|txt|html|htm)$">
Header set Cache-Control "max-age=172800, public, must-revalidate"
</FilesMatch>
使用此服务器,我将无法依赖工作人员重命名 Web 应用程序中的图像、css 和 js,因此我不想在不知道(非常确定)“大多数/所有”浏览器将检查内容是否已更改的情况下将过期时间设置为遥远的未来。我不希望发生的事情是有人打电话给我说网站坏了,因为他们替换了图像,但它没有显示出来。
但我确实希望充分利用缓存和过期功能,同时仍然保持大多数浏览器都会检查服务器以查看组件是否已发生变化。
我可以访问.htaccess 和 apache .conf 文件,并且它是单个服务器,内容未部署在多台服务器上。
对于我来说,为了实现这个客户服务器的目标,最好的 .htaccess 或 .conf 配置是什么?
感谢您的帮助
答案1
尽管有些人建议在使用负载均衡器时不要打开 eTag,但您应该这样做。
对于过期和缓存您的内容,您可以使用 mod_expires 并配置哪些资源及其期限。或者您可以在 httpd.conf 中设置
标头设置 Cache-Control“max-age=63072000,public”
现在,当你查看响应标头时,你会看到带有期限的 Cache-Control。我已将其设置为 2 年
> Cache-Control:max-age=63072000, public Connection:close Date:Thu, 22
> Oct 2015 17:09:31 GMT ETag:"2b7e6-a9777-523307081ff00"
> Server:Apache/2.2.3 Vary:Accept-Encoding,User-Agent
答案2
基本上,确保服务器发送Etag
和Last-Modified
标头(这允许客户端检查资源是否已更改而无需实际下载),并尽可能在将来设置Expires
和Cache-Control: max-age
标头。如果静态内容将在不重命名的情况下更改,那么您可以做的最好的事情是将其设置为覆盖典型的浏览会话(例如 15 分钟)。