我有一个显示视图,它使用“通用查看器”来加载图像。图像尺寸来自 IIIF 图像服务器的 json 文件。
我修复了一个错误并存在一个新的 json 文件,但用户的浏览器仍在使用旧的 info.json 文件。
我知道我可以让他们重新加载,就像我自己在我的机器上做的那样,但是很多用户可能会受到影响,我现在很好奇。
我有一个显示视图,它使用“通用查看器”来加载图像。图像尺寸来自 IIIF 图像服务器的 json 文件。
我修复了一个错误并存在一个新的 json 文件,但用户的浏览器仍在使用旧的 info.json 文件。
我知道我可以让他们重新加载,就像我自己在我的机器上做的那样,但是很多用户可能会受到影响,我现在很好奇。
现代浏览器都内置了缓存控制功能。使用 ETag 和 Cache-Control 标头的组合,您可以完成您所寻求的,而无需更改文件名或使用缓存破坏查询参数。
ETags允许您将令牌传递给客户端,该客户端将告诉他们的浏览器更新缓存的版本。可以基于内容创建日期、内容长度或内容的指纹来创建此令牌。
Cache-Control 标头允许您为 Web 资源创建有关内容可以缓存多长时间、谁以及如何缓存的策略。
在提供 IIIF 或任何其他内容时,使用 ETags 和 Cache-Control 标头是与用户交流何时更新其缓存的有用方式。但是,添加 ETags 和 Cache-Control 这可能非常特定于您的本地实现。许多框架(如Ruby on Rails)都内置了很多这种功能。还有一些 Web 服务器配置可能需要修改,一些示例配置可从使用这些策略的 HTML5 Boilerplate 项目中获得。
示例 Apache 配置:
这取决于提供 JSON 文件的位置以及缓存的方式。
保证文件缓存过期的保证方法是每次更改文件名时更改文件名。这通常通过重命名来完成filename-MD5HASH.ext
,其中 MD5HASH 是文件的 MD5 哈希。
如果您无法更改文件名(它来自您无法控制的来源,您可能可以通过向 URL 添加缓存破坏查询键来逃脱。像http://example.com/file.ext?q=123456
.