谷歌浏览器缓存审核

Posted

技术标签:

【中文标题】谷歌浏览器缓存审核【英文标题】:Google Chrome audit on caching 【发布时间】:2011-03-23 15:11:51 【问题描述】:

如果我使用 Google Chrome 对我的网站进行审核,我会在利用浏览器缓存部分收到此消息:

以下资源缺少 缓存过期。做的资源 未指定到期可能不是 被浏览器缓存:

所有图片的列表如下。我在利用代理缓存中收到了类似的通知:

考虑添加一个“Cache-Control: 公共”标题到以下 资源:

除了图片,我还收到了关于 html、CSS 和 javascript 文件的通知:

以下资源是明确的 不可缓存。考虑制作它们 如果可能,可缓存:

这很有趣,因为我一直在努力缓存所有静态内容(图片除外,我刚刚离开了 Apache 的默认设置)。 Firefox 确实将所有这些项目都存储在缓存中。

我的 HTTP 标头有什么需要改进的地方吗?


这是删除浏览器缓存后加载的某些项目的完整标题集。图片使用我之前没有真正检查过的默认设置,其余的应该缓存三个小时。我可以使用.htaccessphp 设置标题。

PNG

HTTP/1.1 200 OK
Date: Sat, 31 Jul 2010 12:46:14 GMT
Server: Apache
Last-Modified: Thu, 18 Mar 2010 21:40:54 GMT
Etag: "c48024-230-4821a15d6c580"
Accept-Ranges: bytes
Content-Length: 560
Keep-Alive: timeout=4
Connection: Keep-Alive
Content-Type: image/png

HTML

HTTP/1.1 200 OK
Date: Sat, 31 Jul 2010 12:46:13 GMT
Server: Apache
X-Powered-By: PHP/5.2.11
Expires: Sat, 31 Jul 2010 15:46:13 GMT
Cache-Control: max-age=10800, s-maxage=10800, must-revalidate, proxy-revalidate
Content-Encoding: gzip
Vary: Accept-Encoding
Last-Modified: Wed, 24 Mar 2010 20:30:36 GMT
Keep-Alive: timeout=4
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-15

CSS

HTTP/1.1 200 OK
Date: Sat, 31 Jul 2010 12:48:21 GMT
Server: Apache
X-Powered-By: PHP/5.2.11
Expires: Sat, 31 Jul 2010 15:48:21 GMT
Cache-Control: max-age=10800, s-maxage=10800, must-revalidate, proxy-revalidate
Content-Encoding: gzip
Vary: Accept-Encoding
Last-Modified: Thu, 18 Mar 2010 21:40:12 GMT
Keep-Alive: timeout=4
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/css

JavaScript

HTTP/1.1 200 OK
Date: Sat, 31 Jul 2010 12:48:21 GMT
Server: Apache
X-Powered-By: PHP/5.2.11
Expires: Sat, 31 Jul 2010 15:48:21 GMT
Cache-Control: max-age=10800, s-maxage=10800, must-revalidate, proxy-revalidate
Content-Encoding: gzip
Vary: Accept-Encoding
Last-Modified: Thu, 18 Mar 2010 21:40:12 GMT
Keep-Alive: timeout=4
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/x-javascript

更新

我已经测试了 Jumby 的建议并将我的 CSS 的有效期设置为 1 年:

Cache-Control:max-age=31536000, s-maxage=31536000, must-revalidate, proxy-revalidate
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:4198
Content-Type:text/css
Date:Mon, 02 Aug 2010 20:48:56 GMT
Expires:Tue, 02 Aug 2011 20:48:56 GMT
Keep-Alive:timeout=5, max=99
Last-Modified:Thu, 18 Mar 2010 20:40:12 GMT
Server:Apache/2.2.14 (Win32) PHP/5.3.1
Vary:Accept-Encoding
X-Powered-By:PHP/5.3.1

但是,Chrome 仍然声称“明确不可缓存”。

【问题讨论】:

刚遇到类似的问题,不管我做什么,chrome 审计总是在窃听。 【参考方案1】:

对于 yslow/page speed 的东西来说,3 小时到期可能不够“时间”​​,他们可能会抱怨它。我在我的网站上看到了这个静态内容,有效期为 4 小时且 yslow(没有尝试过谷歌的东西)。

大多数人想要具有较长过期时间(如 1 年)的版本化静态内容;见here

【讨论】:

我已经尝试了您的建议(请参阅我编辑的帖子),但 Chrome 仍然抱怨。我很想忽略它并使用其他工具。当我稍后访问该页面时,甚至 Chrome 也会从缓存中加载文档。 尝试消除/修改标题,看看您是否可以确定是哪个导致它。我会尝试使用 Cache-Control:public 。此外,检查 redbot.org 并输入静态内容的 URL。 redbot.org 是一个很棒的工具(它也解释了为什么“Cache-Control: public”在大多数情况下是不必要的)。我需要仔细研究静态内容缓存,但我认为 Chrome 的审核功能存在问题。【参考方案2】:

问题在于缓存控制指令的“必须重新验证”部分。摆脱它,你应该很高兴。

【讨论】:

是的,但为什么会出现问题? Chrome 的信息是否具有误导性?不正确?巧妙地正确? 我可以验证删除 must-revalidate 会阻止 Chrome 审核抱怨这些端点不可缓存。鉴于 RFC 中描述的行为,这似乎没有意义。我想知道 Chrome 是如何处理must-revalidate...【参考方案3】:

我刚刚遇到了类似的问题,我发现在我的测试服务器 127.0.0.1 上尝试时,相同的设置和代码会产生 chrome 审核警告,但在具有真实 DNS 名称的真实服务器上却没有。

【讨论】:

以上是关于谷歌浏览器缓存审核的主要内容,如果未能解决你的问题,请参考以下文章

关于谷歌浏览器强制缓存问题

安卓版谷歌浏览器开始支持在线缓存新闻供离线阅读

谷歌浏览器没有缓存网页

谷歌浏览器缓存 PDF 文件

转 如何快速清理 chrom 缓存

谷歌浏览器如何清除当前页面的缓存