我正在托管一个网站,其中有几个当前位于对象标签中的 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粉3005417982024-03-30 00:20:52
在此上下文中,缓存是指浏览器过去从 URL 加载数据并且仍然拥有其本地副本的位置。为了加快速度并节省带宽,它使用本地副本,而不是向服务器请求新副本。
如果您希望浏览器获取新的副本,那么您需要执行一些操作,使其认为缓存中的副本不好。
您正在尝试使用此方法,但它并不真正适合您的需求,并且您的实现已损坏。
此技术专为不经常更改且不可预测的资源(例如网站的样式表)而设计。 (由于您的资源每周都会发生变化,因此这对您来说不是一个好的选择。)
每当资源发生变化时,它的工作原理就是更改资源的 URL。这意味着该 URL 与浏览器缓存的数据不匹配。由于浏览器不知道新的 URL,因此必须重新请求它。
由于您已将查询硬编码为 n=1
,因此它永远不会改变,这会破坏该对象。
常见的方法是将查询的值设置为文件的时间戳或校验和。 (这通常是使用网站的构建工具作为部署过程的一部分来完成的。)
HTTP 提供了告诉浏览器何时应该获取新副本的机制。有各种各样的标头,我鼓励您阅读此针对 Web 作者和网站管理员的缓存教程:它很好地涵盖了主题。
由于您的文档每周都会过期,我认为您最好的方法是在 PDF 的 URL 的 HTTP 资源上设置 Expires
标头。
您可以通过编程方式将其设置为(例如)预计上传新版本的时间后一小时。
如何进行此操作取决于部署 PDF 的主机的 HTTP 服务器和/或服务器端编程功能。