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

时间:2018-11-08 12:06:32

标签: javascript html browser-cache

我有一个页面,其中有一个包含用户数据的表,每一行(每个用户都有自己的名片,该名片是引用存储在服务器上的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>

当用户发送发布请求时,服务器上先前的pdf文件将被删除并创建新的pdf。 但是,问题在于浏览器缓存了旧版本的文件,每次我必须按下CTRL+F5来硬刷新缓存,然后我才能从服务器而不是从缓存中看到文件。

我需要使用JavaScript清除缓存吗?
另外,我的标记引用是这样的页面:

https://192.168.2.244/static/users_documents/9/business_card.pdf

该页面的html由Firefox创建,以显示我的pdf文件。

一些其他信息可能会帮助我在Ubuntu 16.04.3。上使用Nginx服务器。

2 个答案:

答案 0 :(得分:2)

您还可以通过使用服务器上的HTTP标头Cache-Control来解决此问题。

使用Cache-Control: no-cache, no-store, must-revalidate会告诉浏览器不要缓存URL并始终请求新文件。

从正面来看,由于它不使用JavaScript,因此在禁用JavaScript的浏览器中也可以使用。

来源:Cache-Control on MDN

答案 1 :(得分:0)

要进一步解释@hindmost在评论中所说的内容,如果URL附加了查询,并且该数字大于此文件的先前缓存版本,则浏览器将不使用该文件的缓存版本。 。通常,这可以通过在网址中添加?v=2或类似的方式来完成。使用Date.now()可确保此数字始终高于任何以前缓存的版本。

url + '?v=' + Date.now();每次都会产生唯一的版本号,并且由于时间仅向前计数,因此该号码将始终大于先前的版本。