我知道如果我收到包含标题Cache-Control:max-age=100
的响应,则表示缓存的新鲜度生命周期为100秒。这是否意味着在100秒内,后续请求永远不会请求服务器?所有这些请求只是在缓存中收到响应吗?
因此我有一个问题,如果后续请求包含标题Cache-Control:no-cache
或Cache-Control:max-age=0
,它是否会在100秒内向原始服务器请求,即使缓存不是陈旧的?
答案 0 :(得分:0)
这是否意味着在100秒内,后续请求永远不会向服务器请求?所有这些请求只是在缓存中收到响应吗?
除非后续请求使用Cache-Control
标头对缓存进行更多控制,否则请求只会从缓存中获取响应数据。
如果后续请求包含标头Cache-Control:no-cache
或Cache-Control:max-age=0
,即使缓存未过时,它是否会在100秒内向原始服务器请求?
是的,它会向原始服务器发送HTTP请求。请求标头中的Cache-Control:no-cache
表示:“除非资源被重新验证,否则浏览器不会从缓存中接受它”。请求标头中的Cache-Control:max-age=<n>
表示:“浏览器不会接受超过 n 秒的任何缓存” - 当 n 为0时,浏览器将始终向服务器
这是一个简单的实验。
在浏览器中:
var poll = function() {
$.ajax({
url: '/poll',
beforeSend: function(xhr) {
//xhr.setRequestHeader('Cache-Control', 'no-cache');
//xhr.setRequestHeader('Cache-Control', 'max-age=0');
},
success: function(){
setTimeout(poll, 5000);
}
});
}
poll();
在服务器中:
http.createServer(function(req,res) {
...
// if request path is /poll
res.setHeader('Cache-Control', 'max-age=18');
res.end();
})
你可以观察到:
/poll
请求不包含Cache-Control
标头时,浏览器会向源服务器发送请求,从缓存中获取下3个请求的资源,然后再次向源服务器发送请求... < / LI>
/poll
请求将“缓存控制”标头设为no-cache
或max-age=0
时,浏览器将始终向源服务器发送请求。请注意,在Chrome上执行此实验时,您需要取消选中DevTool中的Disable cache
。