三种行为 地址栏回车 F5 ctrl+F5
一、地址栏回车,
观察Chrome下的行为,由于该页面已经访问过,而且设置了cache-control,所有资源文件在network一栏都是200 from cache,注意这个200不是服务器返回的。
对于本页面则会得到一个304,说明浏览器会对地址栏的地址无论如何发送一个请求,并在header里带上 if-modified-since。
二、按下F5,
该行为会触发浏览器对所有资源重新请求,并在header里带上 if-modified-since,因为资源没有变化,得到的响应式304。
三、Ctrl+F5,
Ctrl+F5要的是彻底的从Server拿一份新的资源过来,所以不光要发送HTTP request给Server,而且这个请求里面连If-Modified-Since/If-None-Match都没有,这样就逼着Server不能返回304,而是把整个资源原原本本地返回一份,这样,Ctrl+F5引发的传输时间变长了,自然网页Refresh的也慢一些。
实际上,为了保证拿到的是从Server上最新的,Ctrl+F5不只是去掉了If-Modified-Since/If-None-Match,还需要添加一些HTTP Headers。按照HTTP/1.1协议,Cache不光只是存在Browser终端,从Browser到Server之间的中间节点(比如Proxy)也可能扮演Cache的作用,为了防止获得的只是这些中间节点的Cache,需要告诉他们,别用自己的Cache敷衍我,往Upstream的节点要一个最新的copy吧。
在IE6中,Ctrl+F5会添加一个Header
Pragma: no-cache
在Firefox 2.0中,Ctrl+F5会添加两个
Pragma: no-cache
Cache-Control: max-age=0
作用就是让中间的Cache对这个请求失效,这样返回的绝对是新鲜的资源