坦白:我维护的网站对缓存控制有不同的规则,主要是基于服务器的默认配置,随后是Page Speed和Y-Slow Firefox插件的建议以及Google Speed Tracer中的Network Resources视图。 Cache-Control设置为私有/公共,具体取决于它们说的是什么,仅当Y-Slow提示有问题并且在为Amazon手动gzip文件压缩时似乎需要使用Vary-Accept-Encoding时,才会修补ETag的/最后修改的标头

在阅读有关不同选项的材料以及它们的操作时,似乎存在冲突的信息,损坏的代理规则和货物崇拜配置。上面提到的分析工具提供的任何官方信息都很难访问,因为它单独处理每个主题而不是统一策略(因此,没有技术的交叉引用)。

例如,如果速度分析工具旨在帮助进行缓存,那么将速度分析工具评定为具有ETag的网站与不具有它们的网站的网站似乎没有意义。

平台不可知的缓存控制策略?

编辑:

通过Jeff Atwood的文章的链接解释了超高深度的缓存。严格的规则:

如果使用GZIP等压缩文件,则使用“ cache-control:private”作为代理可能会将压缩版本返回给不支持该压缩版本的客户端浏览器缓存将保留以此方式标记的文件)。还请记住包含一个“ Vary:Accept-Encoding”,以表示它是可压缩的。

将Last-Modified与ETag结合使用-皮带和花括号的用法可同时提供两个验证器,而ETag基于文件内容,而不是仅基于修改时间,同时使用了所有基础。注意:由于某些原因,AOL的PageTest对ETags采取了全权委托方式。如果您在多台服务器上使用Apache来承载相同的内容,那么除非您确实使用相同的实时文件系统,否则从FileETag指令(即“ FileETag MTime Size”)中将隐式声明的inode从ETag中移除,即可。 />
尽可能使用“ cache-control:public”-这意味着即使页面的其余部分需要HTTP身份验证,代理服务器(和浏览器缓存)也将返回您的内容。

#1 楼

首先,除非您使用的是服务器场/集群,否则请不要像Yahoo所说的那样摆脱ETag。只要同一文件在未更改的情况下始终返回相同的ETag,那么它就是一个非常有用的指令。

对于其他标头,Yahoo的最佳做法建议为静态文件,请使用Expires获取动态内容。但是,Cache-Control非常适合静态内容(它们之间几乎没有区别)。

当您更改缓存的静态文件时,您将需要更改文件名或在结尾添加唯一的参数,例如Cache-control。不过,最好更改实际的文件名,如下面的注释中所述。

顺便说一句,您可以根据自己的喜好编辑YSlow规则,以删除Etag规则并将您自己的域添加为CDN。这篇文章也很读:雅虎的问题不是你的问题

评论


在Apache中,通过执行“ FileETag MTime Size”(而不是默认值)在E-Slow上包括inode(每个FS都是不可靠的),可以实现ETag的合理性。但是,与Page Speed相比,有关Yahoo最佳实践的建议有些令人困惑。例如,它说仅在动态页面上使用Cache-Control(您也建议过),而Google建议在静态CSS上使用Cache-Control:public,在手动GZipped Amazon Cloudfront文件上使用Cache-Control:private。

–金属鲨鱼
10年7月22日在10:34



很难知道该建议对代理的影响。 Google只是说“有些公共代理有bug ...”,但没有说这有多普遍。它确实建议设置标题Vary:Accept-Encoding,请参阅code.google.com/speed/page-speed/docs/caching.html的底部

–心怀不满的山羊
2010年7月22日12:00

添加查询参数会在某些浏览器中完全禁用该文件的缓存。因此,您可能想使用“更改文件名”方法,例如example.com/style_v2.css

–Evgeny
2012年1月6日7:19

@Evgeny:哪些浏览器?之前我听说过,但是我从未见过实际上没有缓存文件的浏览器(尤其是如果您具有正确的标题)。

–心怀不满的山羊
2012年1月6日13:57

实际上,@ DisgruntledGoat经过一番挖掘后似乎是http / 1.0时代的遗物,它实际上是规范的一部分,实际上说用户代理不得缓存具有查询字符串的资产。另一方面,code.google.com/speed/page-speed/docs/caching.html指出,代理(squid <3.0)不会缓存资产,因此不建议使用查询字符串进行缓存清除。

–Evgeny
2012年1月7日在2:19

#2 楼


更改资源的请求标头以使用缓存
对于大多数人来说,可实现缓存的方法是在Web主机/服务器上的.htaccess文件中添加一些代码。

这意味着转到Web主机上的文件管理器(或无论在何处添加或上传文件)。

.htaccess文件控制着您网站上的许多重要内容。如果您不熟悉.htaccess文件,请阅读我的.htaccess文件,以获取一些有关更改之前的知识。

下面的代码告诉浏览器要缓存什么以及“记住多长时间” ”。应该将它添加到您的.htaccess文件的顶部。


## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##



保存.htaccess文件,然后刷新您的网页。 br />

来源:https://varvy.com/pagespeed/leverage-browser-caching.html

评论


我看到的几乎每个ExpiresByType指令示例都包含mime类型的text / x-javascript-您的服务器是否真的以这种内容类型作为响应? (盲目复制/粘贴IMO的示例。)

–怀特先生
2015年9月15日上午11:33