2

我有一个下载文件的站点(.pdf、.rar、.jpg、...)。我的服务器有一个大问题,我认为它与 apache 有关:

例如我链接到 12.pdf 下载它:

<a href="12.pdf">book</a>

它工作正常,但问题:我用另一个同名的文件更改了 12.pdf。下载新的 12.pdf 时,会下载以前的文件。即使我从服务器中删除 12.pdf 并在我的页面中按 Ctrl+F5,当单击上面的链接时,12.pdf 下载开始并完全下载文件!!而服务器上不存在名称为 12.pdf 的文件。什么是问题?apache会缓存我的链接吗?如何解决这个问题?我的服务器操作系统是 CentOS。

4

1 回答 1

7

一些没有特定顺序的解决方案可能会有所帮助。

  1. 创建一个哈希:

    更好的方法是通过引入一个哈希值来修改文件路径(或名称),该哈希值会在文件被修改时发生变化;然后在 apache 配置中,您可以剥离该值以获得正确的文件路径(或名称)。见这里: https ://developers.google.com/speed/docs/best-practices/caching?hl=es-419#LeverageBrowserCaching

    通过http://www.immense.net/force-update-cached-files-images-favicon/#comment-18489

  2. 服务器标头。缓存也可以根据响应头在服务器端进行控制。

    例如,要强制缓存文件不超过 1 天,您可以发送:

    Cache-Control: max-age=86400, must-revalidate 
    

    对于测试版,如果您想强制用户始终获取最新版本,您可以使用:

    Cache-Control: no-cache, must-revalidate
    

    通过https://stackoverflow.com/a/84846/1085891

  3. 使用GET变量。添加版本号或任何值,这将强制浏览器提取最新文件。例子:

    <a href="12.pdf?ver=1.1">book</a>
    

    许多人不建议将这种技术用于任何可能需要缓存的文件(CSS、JavaScript 等)。

  4. <FilesMatch>指示

    在指令中包含这些.htaccess行。<FilesMatch>例如,这些行将阻止缓存以“.htm”或“.html”结尾的文件名,同时允许正常缓存 JPEG 文件:

    <FilesMatch "\.(htm|html)$">
      ExpiresActive On
      ExpiresDefault A1
      Header append Cache-Control must-revalidate
    </FilesMatch>
    

    通过http://support.tigertech.net/prevent-caching

资源

于 2013-02-17T12:50:50.443 回答