2013-02-14 52 views
1

我有一个下载文件的网站(.pdf,.rar,.jpg,...)。 我有服务器的一个很大的问题,我认为这涉及到阿帕奇:禁用缓存链接问题

例如,我挂12.pdf下载它:

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

它工作正常,但问题: 我换12。 pdf与另一个同名的文件。当下载新的12.pdf时,先前的文件被下载。 即使我从服务器上删除12.pdf,并在我的页面按Ctrl + F5,当点击上面的链接,12.pdf下载开始和文件下载完全!而服务器上不存在具有12.pdf名称的文件。 什么是问题? apache是​​否会缓存我的链接?如何解决这个问题? 我的服务器操作系统是CentOS。

回答

4

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

  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> directive

    中包括一个<FilesMatch>指令的.htaccess线。例如,对于 示例,这些行将防止缓存以 “.htm”或“。”结尾的文件名。HTML”,同时允许的JPEG文件正常缓存:

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

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

资源