Google Page Speed 利用浏览器缓存未标记为已解决

Ton*_*bet 5 .htaccess caching apache2 browser-cache google-pagespeed

我在页面速度测试中几乎没有要解决的警告,例如:

利用浏览器缓存
在 HTTP 标头中为静态资源设置到期日期或最长期限会指示浏览器从本地磁盘而不是通过网络加载先前下载的资源。

然后它指向本地 .js 和 .css 文件

但是我的 htaccess 中有这个:

<FilesMatch "\.(js|css|ttf)$">
    Header set Cache-Control "max-age=604800, public"
</FilesMatch>
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=604800, public"
</FilesMatch>
<FilesMatch "\.(html|htm|php)$">
    Header set Cache-Control "max-age=60, private, proxy-revalidate"
</FilesMatch>
<FilesMatch "\.(css|js|gif|jpeg|png|ico)$">
ExpiresActive On
ExpiresDefault "access plus 1 year"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?

spe*_*bus 0

好吧,这是一个黑暗中的尝试,但我遇到了 Apache 不尊重我的.htaccess标头的情况,我不得不用always这样的关键字“强制”它们:

<FilesMatch "\.(js|css|ttf)$">
    Header always set Cache-Control "max-age=604800, public"
</FilesMatch>
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
    Header always set Cache-Control "max-age=604800, public"
</FilesMatch>
<FilesMatch "\.(html|htm|php)$">
    Header always set Cache-Control "max-age=60, private, proxy-revalidate"
</FilesMatch>
<FilesMatch "\.(css|js|gif|jpeg|png|ico)$">
    ExpiresActive On
    ExpiresDefault "access plus 1 year"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

当您的操作是现有标头的函数时,您可能需要指定always的条件,具体取决于原始标头设置在哪个内部表中。与always对应的表用于本地生成的错误响应以及成功响应回应。另请注意,在某些情况下,在这两个条件下重复此指令是有意义的,因为相对于现有标头,always 不是 onsuccess 的超集:

  • 您要向本地生成的不成功(非 2xx)响应(例如重定向)添加标头,在这种情况下,最终响应中将仅使用始终对应的表。
  • 您正在修改或删除由 CGI 脚本生成的标头,在这种情况下,CGI 脚本位于始终对应的表中,而不是默认表中。
  • 您正在修改或删除服务器某些部分生成的标头,但默认成功条件找不到该标头。

来自Apache 模块 mod_headers