谷歌浏览器缓存 PDF 文件

Posted

技术标签:

【中文标题】谷歌浏览器缓存 PDF 文件【英文标题】:Google Chrome Cache PDF files 【发布时间】:2013-10-14 01:04:43 【问题描述】:

我已经构建了一个小型 php/mysql 内部应用程序来托管和排序文档。在更新文件(在本例中为 .PDF 文件)之前,一切正常。当用户更新 .PDF 时,新文件按预期在服务器上,旧版本被删除。用户正在获取新版本,前提是他们从未打开过旧版本。

现在的问题....版本实际上在服务器上。

我猜 Google Chrome 浏览器正在某处缓存旧版本的 PDF。我怎样才能解决这个问题?由于用户数量和每天更新的次数,一些文档要求用户手动清除任何缓存是不切实际的。

【问题讨论】:

【参考方案1】:

你真的有三个选择:

    每次更新时更改文件名 始终使用 GET 参数生成 HREF 发送标头信息,告知浏览器始终从服务器下载新内容

选项 1 - 适用于 100% 的情况。可能很难维护

echo '<a href="files/pdfs/'.$row['FILENAME_FROM_DATABASE'].'">PDF</a>';

// Could produce something like:
// <a href="files/pdfs/filename_v5.pdf">PDF</a>

选项 2 - 适用于 99% 的情况

echo '<a href="files/pdfs/filename.pdf?q='.microtime(true).'">PDF</a>';

选项 3 - 适用于 99% 的情况

header("Pragma: public");
header("Cache-Control: maxage=1"); // <-- important
header('Expires: '.gmdate('D, d M Y H:i:s', time()+1).' GMT');
header('Content-type: application/pdf');
exit(file_get_contents(PATH_TO_PDF_FILE));

【讨论】:

我使用选项 2,但使用 time() 返回带有秒的 unix 时间戳。函数 microtime() 返回一个浮点数/字符串。在 url 中追加可能不太安全。【参考方案2】:

html5 中,您可以强制浏览器 缓存某些域(或根本不缓存,或使用缓存(如果可用)等等) - 请参阅 https://developer.mozilla.org/en-US/docs/HTML/Using_the_application_cache

将此添加到您的&lt;!doctype html&gt;&lt;head&gt; -section:

<html manifest="my.cache">

在您的文档根目录上创建一个文件 - my.cache - 包含以下内容:

CACHE MANIFEST  
CACHE  
# dont force any caching 
NETWORK:
#force downloads form your site not to use cache
your-site.com

这会强制不缓存任何内容。

如果您有 pdf 下载路径,请改用该路径(这样您网站上的其他文件(PDF 除外)将被缓存)

在浏览器中试试这个。记得先清除缓存! :) 当您发现每个 PDF 都已下载时,无论文件名或标题如何。

【讨论】:

【参考方案3】:

我将完成第三个选项,通过将动态参数附加到将下载文件的链接,即:

    <a href="http://host.com/my_file.pdf?t=<?php time(); ?>">My File</a>

这应该绕过缓存。

【讨论】:

以上是关于谷歌浏览器缓存 PDF 文件的主要内容,如果未能解决你的问题,请参考以下文章

谷歌浏览器无法加载PDF文件,下载显示文件损坏?

chrome保存pdf位置

在谷歌浏览器中动态查看pdf文件

如何播放谷歌浏览器的缓存视频

关于谷歌浏览器强制缓存问题

chrome浏览器缓存文件在哪