我应该为Apache HTTP Server使用什么策略,以使新部署的文件的caching失效?

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

<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> 

我希望他们被caching,但我也希望他们在我们重新部署时失效。 我想我需要重新启用ETag,然后当我们重新上传文件“触摸”他们,所以时间戳将读取当前时间,他们会得到一个不同的ETag。

我有点从我从这个答案阅读:

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

这听起来正确吗?

Etag是一个好主意,但是你的过期标题阻止了它。 为什么不把你的expires头文件设置为一个理智的值呢? 太多的人设置过期疯狂的date,这对于一个正确configuration的客户端将使客户端甚至不发送请求到服务器。

首先,将你的过期设定为request date + 1 week (无论你的预期发布周期是多less)。 然后,那些正确遵循expires头文件规范的客户端将在很长一段时间后进行检查。 它比caching更简单,更可靠,每次部署都要放弃一切。

编辑:我认为你给的例子是你的configuration。 我不认为这听起来很刺耳,但我看到人们一直在缓慢地做着傻事。