我应该对 Apache HTTP Server 使用什么策略以便新部署的文件的缓存无效?

我应该对 Apache HTTP Server 使用什么策略以便新部署的文件的缓存无效?

一个非常常见的解决方案是执行以下操作:

<ifModule mod_headers.c>
    FileETag None
    Header unset ETag
    Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires "Thu, 01 Jan 1970 00:00:01 GMT"
</ifModule>

我确实希望缓存它们,但我也希望它们在我们重新部署时失效。我认为我需要重新启用 ETag,然后在我们重新上传文件时“触摸”它们,这样时间戳将全部读取当前时间,并且它们将获得不同的 ETag。

我有点按照我从这个答案中读到的内容去做:

https://stackoverflow.com/questions/499966/etag-vs-header-expires

这听起来正确吗?

答案1

Etag 是个好主意,但您的 expires 标头会阻碍它。为什么不将您的 expires 标头设置为合理的值呢?太多人将 expires 设置为疯狂的日期,对于正确配置的客户端来说,这会导致客户端甚至不会向服务器发送请求。

首先,将过期时间设置为合理的值request date + 1 week(无论您的预期发布周期是多少)。然后,正确遵循过期标头规范的客户端将在这么长时间后重新检查。这比每次部署时尝试缓存所有内容要简单和可靠得多。

编辑:我假设您给出的示例是您的配置。我并不是想说得过分,但我经常看到人们使用缓存做傻事。

相关内容