【发布时间】:2014-06-30 12:00:36
【问题描述】:
我试图强制浏览器尽可能长时间地缓存图像,但它不起作用,浏览器总是请求新图像。我现在的代码是这样的:
session_cache_limiter('');
$gifData = "\x47\x49\x46\x38\x37\x61\x1\x0\x1\x0\x80\x0\x0\xfc\x6a\x6c\x0\x0\x0\x2c\x0\x0\x0\x0\x1\x0\x1\x0\x0\x2\x2\x44\x1\x0\x3b";
header('Content-Type: image/gif');
header("Expires: " . gmstrftime("%a, %d %b %Y %H:%M:%S GMT", time() + 365 * 86440));
header("Cache-Control: public, max-age=31556926, pre-check=10800");
header("Pragma: cache");
header('Content-Length: ' . strlen($gifData));
echo $gifData;
在浏览器中我得到了这个:
请求标头:
Request URL:http://example.com/track/8c0343920ff823148261ef1cc70e74b5_4_123.gif
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,fr;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Host:example.com
Pragma:no-cache
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36
响应标头:
Cache-Control:public, max-age=31556926, pre-check=10800
Connection:Keep-Alive
Content-Length:35
Content-Type:image/gif
Date:Mon, 12 May 2014 23:31:49 GMT
Expires:Wed, 13 May 2015 03:35:09 GMT
Keep-Alive:timeout=5, max=100
Pragma:cache
Server:Apache/2.4.6 (Ubuntu)
X-Powered-By:PHP/ 5.5.3-1ubuntu2.2
据我所知,所有响应标头似乎都是正确的,但浏览器一直在请求图像。知道可能是什么问题吗?
【问题讨论】:
-
如果你点击图片本身的刷新,浏览器仍然会发送另一个请求。
-
@Jack,是的,就是这样,我直接在图像上刷新并期望浏览器使用缓存版本。谢谢(你的)信息。随意添加这个作为答案,我会接受它。