禁用缓存链接问题

mr.*_*ush 1 apache webserver centos5

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

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

<a href="12.pdf">book</a>
Run Code Online (Sandbox Code Playgroud)

它工作正常,但存在问题:我用另一个具有相同名称的文件更改了12.pdf。当下载新的12.pdf时,将下载上一个文件。甚至我从服务器上删除了12.pdf,然后在页面中按Ctrl + F5,单击上面的链接,即可完全开始12.pdf下载并完全下载文件!服务器上不存在名称为12.pdf的文件。怎么了 Apache是​​否缓存我的链接?如何解决这个问题?我的服务器操作系统是CentOS。

JSu*_*uar 5

某些解决方案可能会有所帮助,但顺序不分先后。

  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 
    
    Run Code Online (Sandbox Code Playgroud)

    对于Beta版,如果要强制用户始终获取最新版本,则可以使用:

    Cache-Control: no-cache, must-revalidate
    
    Run Code Online (Sandbox Code Playgroud)

    通过/sf/answers/5939251/

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

    <a href="12.pdf?ver=1.1">book</a>
    
    Run Code Online (Sandbox Code Playgroud)

    许多人不建议将此技术用于可能需要在某些时候进行缓存的任何文件(CSS,JavaScript等)。

  4. <FilesMatch> 指示

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

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

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

资源资源