【问题标题】:How to download new version of file without using the client cache?如何在不使用客户端缓存的情况下下载新版本的文件?
【发布时间】:2018-11-08 12:06:32
【问题描述】:

我有一个页面,其中有包含用户数据和每一行的表格(每个用户都有自己的名片,这是一个引用存储在服务器上的 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 来清除缓存吗?
另外,我对页面的标签引用如下:

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

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

一些可能有帮助的附加信息是我在 Ubuntu 16.04.3 上使用 Nginx 服务器。

【问题讨论】:

  • 只需将唯一查询添加到 URL,例如使用时间戳:url + '?' + Date.now()

标签: javascript html browser-cache


【解决方案1】:

为了扩展 @hindmost 在 cmets 中所说的内容,如果 URL 附加了查询,浏览器将不会使用文档的缓存版本,其编号高于此文件的先前缓存版本.通常这将通过在 URL 中添加 ?v=2 或类似的东西来完成。使用Date.now() 可确保此数字始终高于任何以前缓存的版本。

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

【讨论】:

    【解决方案2】:

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

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

    从好的方面来说,由于它不使用 JavaScript,这也适用于禁用 JavaScript 的浏览器。

    来源:Cache-Control on MDN

    【讨论】:

      猜你喜欢
      • 2013-05-30
      • 2022-12-11
      • 2018-12-01
      • 1970-01-01
      • 2015-02-03
      • 2011-08-22
      • 2020-06-24
      • 2010-09-08
      • 1970-01-01
      相关资源
      最近更新 更多