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

时间:2017-12-13 22:55:34

标签: ruby-on-rails caching passenger iiif

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

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

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

2 个答案:

答案 0 :(得分:0)

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

使文件缓存失效的保证方法是每次更改时更改文件名。这通常是将其重命名为filename-MD5HASH.ext,其中MD5HASH是文件的MD5哈希值。

如果您无法更改文件名(它来自您无法控制的来源,则可以通过向网址添加缓存清除查询密钥来实现。例如http://example.com/file.ext?q=123456

答案 1 :(得分:0)

现代浏览器都附带了缓存控制功能。使用ETag和Cache-Control标头的组合,您可以完成所需的操作,而无需更改文件名或使用缓存清除查询参数。

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

Cache-Control headers允许您为网络资源创建有关缓存内容的时间,人员和方式的政策。

使用ETag和Cache-Control标头是一种有用的方式,可以在用户IIIF或任何其他内容时更新缓存时与用户进行通信。但是,添加ETag和Cache-Control这可能非常特定于您的本地实现。许多框架(如Ruby on Rails)都有很多这样的功能。还有一些Web服务器配置可能需要修改,一些sample configurations可以从使用这些策略的HTML5 Boilerplate项目中获得。

示例Apache配置: