我正在使用 Chrome 并监控 http 连接。我加载了一个页面,服务器返回的响应包含
Cache-Control: max-age=86400
Expires: Thu, 18 Jul 2013 14:51:22 GMT
因此,当我尝试重新加载此页面时,我并不期望 Chrome 会向服务器发出请求。但是,当我按下“重新加载”按钮时,我看到了与服务器的新连接,该连接又返回了同一页面,但缓存的到期日期已更改。
有人可以解释一下吗?
编辑
这是我每次按下重新加载按钮时收到的请求和响应(除了 的时间Date
和响应中Expires
的 的值每次都会发生变化)CF-RAY
要求
GET /mobile_13.xml HTTP/1.1
Host triton.karnaval.com
Cache-Control max-age=0
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36
Accept-Encoding gzip,deflate,sdch
Accept-Language en-US,en;q=0.8
Cookie __cfduid=d518a34eae859853e9a8dbfb6eb4078ed1366655468
回复
HTTP/1.1 200 OK
Server: cloudflare-nginx
Date: Wed, 17 Jul 2013 14:51:20 GMT
Content-Type: text/xml
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: max-age=86400
Expires: Thu, 18 Jul 2013 14:51:19 GMT
Vary: Accept-Encoding
CF-RAY: 8f7bfeaf5f50697
Content-Encoding: gzip
<?xml version='1.0' encoding='UTF-8'?>
...
答案1
是的,Chrome 会在您点击“重新加载”时将 max-age 设置为 0,从而故意“破坏缓存”。请参阅此处的源代码:资源获取器.cpp:676
if (isReload || frameLoadType == FrameLoadTypeSame || request.isConditional() || request.httpMethod() == "POST")
return ReloadIgnoringCacheData;
和这里:框架加载器.cpp:1176
if (request.cachePolicy() == ReloadIgnoringCacheData) {
if (m_loadType == FrameLoadTypeReload)
request.setHTTPHeaderField("Cache-Control", "max-age=0");
(我认为这些是正确的位置,但我对 Chromium 代码不是很熟悉。)