http-headers - 为什么浏览器不发送“If-None-Match” header ?

标签 http-headers browser-cache cache-control

我正在尝试下载(并希望缓存)PHP中的动态加载的图像。这是发送和接收的标头:

请求:

GET /url:resource/Pomegranate/resources/images/logo.png HTTP/1.1
Host: pome.local
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Ubuntu Chromium/25.0.1364.160 Chrome/25.0.1364.160 Safari/537.22
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: PHPSESSID=fb8ghv9ti6v5s3ekkmvtacr9u5


响应:

HTTP/1.1 200 OK
Date: Tue, 09 Apr 2013 11:00:36 GMT
Server: Apache/2.2.22 (Ubuntu)
X-Powered-By: PHP/5.3.14 ZendServer/5.0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Disposition: inline; filename="logo"
ETag: "1355829295"
Last-Modified: Tue, 18 Dec 2012 14:44:55 Asia/Tehran
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: image/png


当我重新加载URL时,发送和接收的标题完全相同。我的问题是我应该在响应中发送什么以查看后续请求中的If-None-Match标头?

注意:我相信这些头文件不久前就可以了,尽管我不能确定,但​​是我认为浏览器已更改为不再发送If-None-Match头文件(我曾经看到过该头文件)。我正在使用Chrome和Firefox进行测试,但都无法发送标头。

最佳答案

您的响应标头包括Cache-Control: no-store, no-cache;这些可以防止缓存。

删除这些值(我认为可以/应该保留must-revalidate, post-check=0, pre-check=0 –它们告诉浏览器与服务器核对是否有更改)。

而且我会单独使用Last-Modified(如果仅使用此标准就可以检测到资源的变化)– ETag是处理起来更复杂的事情(尤其是如果您想自己在PHP脚本中处理它) ,Google PageSpeed / YSlow也建议不要这样做。

关于http-headers - 为什么浏览器不发送“If-None-Match” header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15900548/

相关文章:

http-headers - Expires 和 Cache-control :max-age? 有什么区别

Tapestry 中缓存清除的 javascript 和 CSS 版本控制

c# - 自动刷新缓存 ASP.NET

HTTP 缓存控制 max-age,must-revalidate

php - 通过 HTTPHeaderField 传递值时出现有趣的问题

http - 如何在POST数据包中添加HTTP头?

javascript - 为其他服务器上托管的 JavaScript 启用 Gzip 压缩

javascript - 谷歌浏览器不尊重缓存控制中的最大年龄

amazon-web-services - 如何在 amazon cloudfront 中设置 Cache-Control Header?

ajax - Backbone.js 和缓存控制