为什么Apache在缓存方面对待某些文件的方式不同?

时间:2014-01-28 22:39:08

标签: ajax apache caching

基本问题:我正在开发一个通过Ajax引入XML文件的Web应用程序。最初我的问题是该文件似乎无限期地在浏览器中缓存,并且从不发出HTTP请求。通过添加“Cache-Control:max-age = 0”请求标头可以轻松缓解这种情况。但是,现在我处于频谱的另一端,服务器总是返回200连同文件内容,而不是304。

用Fiddler调试这个让我更加困惑。最后,我在Fiddler中为一个返回304的PNG文件选择了一个请求。我复制了请求,然后只更改了URL以指向XML文件。然而,尽管具有与304返回的PNG文件相同的请求头,但XML文件仍然返回200。 Apache还为XML文件返回许多其他响应头。 PNG文件仅返回Date,ETag,Server,Connection和Keep-Alive。 XML文件包含所有这些以及Vary,Content-Length,Last-Modified,Accept-Ranges和Server。

我只想像任何其他文件一样缓存XML文件。如果它是服务器上的新内容,则返回新内容,否则以304响应。所以我的问题是,哪些设置导致Apache以不同于PNG文件的方式处理XML文件?感谢。

编辑 - Per Covener的问题

  1. 不,我没有关掉eTag,我可以尝试这样做 回到办公室。
  2. Vary:Accept-Encoding,User-Agent
  3. 不知道,我正在运行Apache的Uniform服务器的默认安装,用于本地开发,无需修改。 (由于服务器返回304而没有内容,因此内容长度可能不存在。)
  4. EDIT -2- 我注意到Apache没有GZip PNG文件(根据Fiddler的说法,它实际上会更大,所以很有意义)。如果我从请求中删除Accept-Encoding以及从etag中删除'-gzip',Apache将返回304以获取XML文件。对于这个文件,GZip压缩是10比1,所以理想情况下,压缩但在适当的时候仍然发送304是很好的。

0 个答案:

没有答案