禁用缓存链接问题

时间:2013-02-14 06:43:08

标签: apache webserver centos5

我有一个下载文件站点(.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。

1 个答案:

答案 0 :(得分:4)

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

  1. 创建一个哈希:

      

    更好的方法是通过引入来修改文件路径(或名称)   一个哈希值,当文件被修改时会改变;然后在阿帕奇   您可以删除该值以获取正确的文件路径(或   名称)。看这里:   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

      

    .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

  5. <强>资源