谷歌浏览器缓存 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
将此添加到您的<!doctype html><head>
-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 文件的主要内容,如果未能解决你的问题,请参考以下文章