mod_pagespeed不使用扩展缓存发送预期输出

时间:2013-03-26 18:53:37

标签: apache cache-control pagespeed mod-pagespeed

出于测试目的,我在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。

然而,这仅持续UNTIL最大年龄。所以,如果我将它设置为10秒,它将继续指向http://localhost/mod_pagespeed_example/images/xPuzzle.jpg.pagespeed.ic.hgbHsZe0IN.jpg,但之后它将在10秒后再次恢复为images/Puzzle.jpg,此时它将返回到缓存版本

这是预期的行为吗?我认为pagespeed会在max-age之后检查哈希,如果它是相同的,它就不会把它更改回原始值,而是继续提供缓存文件。

这有点令人担忧。如果我将max-age设置为更有用的东西,例如60分钟,这将允许我继续更新这些资产文件并确保及时看到我的更新。但是,如果用户每天访问一次该站点,那么这超过了max-age,并且它们将始终提供给原始文件而不是缓存版本。

1 个答案:

答案 0 :(得分:1)

这是预期的行为。正如您所提到的,原因是资源已在缓存中过期,因此我们需要重新检查它以确保它仍然相同。我们不想在检查所有子资源时阻止用户请求。

注意,一个解决方案是使用ModPagespeedLoadFromFile。这将检查文件在磁盘上的最后修改时间,因此即使资源在缓存中过期,也可以检查。