【发布时间】:2013-04-09 11:23:42
【问题描述】:
我正在尝试在 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 进行测试,但都无法发送标头。
【问题讨论】:
-
Last-Modified: Tue, 18 Dec 2012 …和Expires: Thu, 19 Nov 1981 08:52:00 GMT有点矛盾,你不觉得吗? -
那是因为我想确保它没有被缓存在浏览器中。我刚刚将
Expires设置为等于Last-Modified并得到了相同的结果。 -
在你问题的一开始你说你想要缓存,现在你不想要了吗?
-
抱歉,但在我看来,您似乎只是在混合您能想到的任何类型的标题,没有任何逻辑。你说
Cache-Control: no-store, no-cache——但期望缓存发生? -
这真的很愚蠢,但我只花了 4 个小时在我的 .NET Web Api 中使用不同的方法来实现它,只是为了意识到我的 chrome 开发工具禁用了缓存。确保关闭此功能以便在 Chrome 中进行测试!!!
标签: http-headers browser-cache cache-control