搜索

首页  >  问答  >  正文

对象标签无法显示最新版本的 PDF

我正在托管一个网站,其中有几个当前位于对象标签中的 PDF 文件每周更新一次。 这些 PDF 文件的名称保持不变,但数据发生了变化。

目前我正在使用:

<object id="men" data="seasons/S2223/Men2023.pdf?" type="application/pdf" width="100%" height="750px">
<p>The file could not be read in the browser
      <a href="seasons/S2223/Men2023.pdf?"> Click here to download</a>
</p>
</object>

当我更新 PDF 时,我期待

data="seasons/S2223/Men2023.pdf?"

正在阅读最新的 PDF,但它与以前保持不变。

我添加了?在文件名末尾,应该检查最新版本,但它似乎不起作用。

当我清除浏览器的缓存时,它会更新,但这当然不适合用户。

感谢所有帮助。

P粉677573079P粉677573079272 天前502

全部回复(1)我来回复

  • P粉300541798

    P粉3005417982024-03-30 00:20:52

    在此上下文中,缓存是指浏览器过去从 URL 加载数据并且仍然拥有其本地副本的位置。为了加快速度并节省带宽,它使用本地副本,而不是向服务器请求新副本。

    如果您希望浏览器获取新的副本,那么您需要执行一些操作,使其认为缓存中的副本不好。

    缓存清除查询字符串

    您正在尝试使用此方法,但它并不真正适合您的需求,并且您的实现已损坏。

    此技术专为不经常更改且不可预测的资源(例如网站的样式表)而设计。 (由于您的资源每周都会发生变化,因此这对您来说不是一个好的选择。)

    每当资源发生变化时,它的工作原理就是更改资源的 URL。这意味着该 URL 与浏览器缓存的数据不匹配。由于浏览器不知道新的 URL,因此必须重新请求它。

    由于您已将查询硬编码为 n=1,因此它永远不会改变,这会破坏该对象。

    常见的方法是将查询的值设置为文件的时间戳或校验和。 (这通常是使用网站的构建工具作为部署过程的一部分来完成的。)

    缓存控制头

    HTTP 提供了告诉浏览器何时应该获取新副本的机制。有各种各样的标头,我鼓励您阅读此针对 Web 作者和网站管理员的缓存教程:它很好地涵盖了主题。

    由于您的文档每周都会过期,我认为您最好的方法是在 PDF 的 URL 的 HTTP 资源上设置 Expires 标头。

    您可以通过编程方式将其设置为(例如)预计上传新版本的时间后一小时。

    如何进行此操作取决于部署 PDF 的主机的 HTTP 服务器和/或服务器端编程功能。

    回复
    0
  • 取消回复