如何防止浏览器缓存Apache提供的XML文件? (我的htaccess文件包含在内)

时间:2013-06-10 19:55:01

标签: xml apache .htaccess caching webserver

更新2

我发现了答案,但我不确定为什么需要它以及如何在Apache中改变这种行为。

如果我首先unlink(即删除)XML文件然后重新创建它(而不是只是写它),那么两个浏览器都会看到新版本!

//This causes a fresh version
unlink( $xmlFileLocation );

//Now creating it will result in a non-cached version being sent
$f = fopen( $xmlFileLocation, "wb" );
fwrite(, $xmlFileLocation, $xml );
fclose( $xmlFileLocation );

如果我在没有unlink的情况下执行上述操作,则会更改并在磁盘上更新修改日期 ,但Apache会继续提供旧版本!为什么呢?

更新1 - 尽管启用了mod_headers,问题仍然存在!

想到我需要启用模块mod_headers。

sudo a2enmod headers

但Chrome和Firefox似乎仍然是旧版本的XML文件!

什么可能导致Apache继续提供旧版本? (清除浏览器缓存没有帮助,磁盘上的文件与两个浏览器中的文件不同)

原始发布

我正在尝试阻止浏览器缓存我正在提供的XML文件,但它无法正常工作。当我在计算机上查看该文件时,它显示它已更新,但在浏览器(Chrome和Firefox)中显示为旧版本!

我确定我位于XML文件夹中的htaccess正在运行(我通过将其更改为deny from all进行了测试,并且它正确显示了"Forbidden"响应。

的.htaccess

<FilesMatch ".(xml)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
</FilesMatch>

这不会阻止缓存!我还能做什么?

编辑我不确定,但我认为Apache可能会在服务器端缓存它!我该如何诊断并阻止它?

由于Chrome显示了请求标题,我认为就是这种情况:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Host:mywebsite.com
Pragma:no-cache

但它仍然显示缓存版本!

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,在我的情况下,它与VirtualBox和共享文件夹有关。

为我解决的是更新Apache配置并禁用sendfile:

EnableSendfile off

请参阅:

Web server seems to keep serving old images, issue with Apache & VirtualBox?

Shared folder in VirtualBox for Apache

http://httpd.apache.org/docs/2.2/mod/core.html#enablesendfile

答案 1 :(得分:0)

我发现了答案,但我不确定为什么需要它以及如何在Apache中改变这种行为。

如果我首先unlink(即删除)XML文件然后重新创建它(而不是只是写它),那么两个浏览器都会看到新版本!

//This causes a fresh version
unlink( $xmlFileLocation );

//Now creating it will result in a non-cached version being sent
$f = fopen( $xmlFileLocation, "wb" );
fwrite(, $xmlFileLocation, $xml );
fclose( $xmlFileLocation );

如果我在没有unlink的情况下执行上述操作,则会更改并在磁盘上更新修改日期 ,但Apache会继续提供旧版本!为什么呢?