从服务器上,我如何强制外部文件过期以便浏览器收到一个新文件?

From the server, how do I force an external file to expire so that the browser receives a fresh one?

我有一个显示视图,它使用 'Universal Viewer' 加载图像。图像尺寸来自来自 IIIF 图像服务器的 json 文件。

我修复了一个错误,并且存在一个新的 json 文件,但用户的浏览器仍在使用旧的 info.json 文件。

我知道我可以让他们重新加载,就像我自己在我的机器上所做的那样,但是很多用户可能会受到影响,我现在很好奇。

这取决于 JSON 文件的服务来源以及缓存方式。

使文件缓存过期的保证方法是每次更改文件名时更改文件名。这通常是通过重命名来完成的 filename-MD5HASH.ext,其中 MD5HASH 是文件的 MD5 哈希值。

如果您无法更改文件名(它来自您无法控制的来源,您可以通过向 URL 添加缓存破坏查询密钥来逃脱。类似http://example.com/file.ext?q=123456.

现代浏览器都附带缓存控制功能。结合使用 ETag 和 Cache-Control headers,您无需更改文件名或使用缓存清除查询参数即可完成您的任务。

ETags 允许您将令牌传递给客户端,客户端将告诉他们的浏览器更新缓存版本。可以根据内容创建日期、内容长度或内容指纹创建此令牌。

Cache-Control headers 允许您为 Web 资源创建有关您的内容可以缓存多长时间、谁以及如何缓存的策略。

使用 ETag 和 Cache-Control headers 是一种有用的方式来告知用户在提供 IIIF 或任何其他内容时何时更新缓存。但是,添加 ETag 和 Cache-Control 这可能非常特定于您的本地实现。许多框架(如 Ruby on Rails) have much of this functionality baked into it. There are also web server configurations that may need to be modified, some sample configurations 可从使用这些策略的 HTML5 样板项目中获得。

Apache 配置示例: