出于测试目的,我在我的 Apache 配置中有这个:
<Directory "/home/http">
...
<FilesMatch "\.(html|htm)$">
Header unset Etag
Header set Cache-control "max-age=0, no-cache"
</FilesMatch>
<FilesMatch "\.(jpg|jpeg|gif|png|js|css)$">
Header unset Etag
Header set Cache-control "public, max-age=10"
</FilesMatch>
</Directory>
这基本上是说将静态资产设置为具有持续 10 秒的缓存。这也是为了测试和演示目的。
我通过直接导航到文件来测试它
$ wget -O - --save-headers localhost/mod_pagespeed_example/images/Puzzle.jpg
Cache-control: public, max-age=10
效果很好。但后来我尝试加载启用了 mod_pagespeed 和 extend_cache 的页面
$wget -O - --save-headers localhost/mod_pagespeed_example/extend_cache.html?ModPagespeed=on&ModPagespeedFilters=extend_cache
<img src="images/Puzzle.jpg"/>
$wget -O - --save-headers localhost/mod_pagespeed_example/extend_cache.html?ModPagespeed=on&ModPagespeedFilters=extend_cache
<img src="http://localhost/mod_pagespeed_example/images/xPuzzle.jpg.pagespeed.ic.hgbHsZe0IN.jpg"/>
这一切都很好,花花公子。初始请求不起作用,因为它需要将信息加载到缓存中,但从那里它正确地将 img 标记的 src 替换为缓存的哈希版本。
然而,这只持续到最大年龄。所以,如果我将它设置为 10 秒,它会继续指向http://localhost/mod_pagespeed_example/images/xPuzzle.jpg.pagespeed.ic.hgbHsZe0IN.jpg
,但images/Puzzle.jpg
在 10 秒后它会再次恢复,此时它会回到缓存的版本。
这是预期的行为吗?我认为 pagespeed 会在 max-age 之后检查哈希,如果它相同,它不会费心将其更改回原始值,而是继续提供缓存文件。
这有点令人担忧。如果我将 max-age 设置为更有用的值,比如 60 分钟,这将允许我继续更新这些资产文件并确保及时看到我的更新。但是,如果用户每天访问该站点一次,那么这将超过 max-age 并且将始终为他们提供原始文件而不是缓存版本。