Chrome reloadButton 是否会忽略缓存?

Chrome reloadButton 是否会忽略缓存?

我正在使用 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 代码不是很熟悉。)

相关内容