一个非常常见的解决方案是执行以下操作:
<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
(无论您的预期发布周期是多少)。然后,正确遵循过期标头规范的客户端将在这么长时间后重新检查。这比每次部署时尝试缓存所有内容要简单和可靠得多。
编辑:我假设您给出的示例是您的配置。我并不是想说得过分,但我经常看到人们使用缓存做傻事。