如何在不使用客户端缓存的情况下下载文件的新版本?

3

我有一个页面,其中包含用户数据的表格。每一行都有一个名片,这个名片是指向存储在服务器上的PDF文件的标签。

   <td class="business_card">
    <a href="/static/users_documents/9/business_card.pdf" target="_blank">
    <img src="/static/images/business_card.png" name="business_card" alt="business_card_image">
    </a>
   </td>

当用户发送Post请求时,服务器上先前的PDF文件将被删除并创建新的PDF文件。 但问题在于浏览器缓存了旧版本的文件,我必须每次按下CTRL+F5来强制刷新缓存,然后才能从服务器上查看文件,而不是从缓存中获取。
我需要使用JavaScript来清除缓存吗? 另外,我的a标签引用的页面如下:
https://192.168.2.244/static/users_documents/9/business_card.pdf

该页面的 HTML 是由 Firefox 创建,用于显示我的 PDF 文件。

一些额外的信息可能会有所帮助,我正在使用 Ubuntu 16.04.3 上的 Nginx 服务器。


1
只需将唯一的查询添加到URL中,例如使用时间戳:url + '?' + Date.now() - hindmost
2个回答

7

更进一步解释@hindmost在评论中提到的,如果URL链接有查询参数并且这个数字比之前缓存过的文件版本号大,浏览器将不会使用该文档的缓存版本。通常可以通过在URL链接末尾添加类似?v=2的内容来实现。使用Date.now()可以确保这个数字始终比以前缓存过的版本高。

url + '?v=' + Date.now();将每次产生一个唯一的版本号,由于时间只会向前推移,所以数字总是比以前的版本大。


6
你还可以通过在服务器上使用HTTP头Cache-Control来解决这个问题。
使用Cache-Control:no-cache,no-store,must-revalidate将告诉浏览器不要缓存URL,并始终请求新文件。
另一方面,由于它不使用JavaScript,这也适用于禁用JavaScript的浏览器。
来源:MDN上的缓存控制

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接