如何缓存控制效果请求头,在响应头
问题描述:
我知道,如果我有一个响应包含一个头Cache-Control:max-age=100
,这意味着高速缓存的新鲜生命周期为100秒相比。这是否意味着在100秒内,后续请求永远不会向服务器请求?所有这些请求都只是在缓存中收到响应?如何缓存控制效果请求头,在响应头
因此,我有一个问题,如果后续请求包含一个标头Cache-Control:no-cache
或Cache-Control:max-age=0
,它是否会在100秒内向原始服务器发出请求,即使缓存未陈旧?
答
这是否在百秒意味着,后续请求绝不会要求到服务器?所有这些请求都只是在缓存中收到响应?
除非随后的请求使用Cache-Control
头来控制缓存,否则这些请求只会从缓存中获取响应数据。
如果后续请求包含标头Cache-Control:no-cache
或Cache-Control:max-age=0
,它是否会在100秒内向原始服务器请求,即使缓存没有过期?
是的,它会发送HTTP请求到原始服务器。请求头中的Cache-Control:no-cache
表示:“除非资源被重新验证,否则浏览器不会从缓存中接受它”。 Cache-Control:max-age=<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个请求从缓存中获取资源,然后将请求发送到原点再次服务器... - 当
/poll
要求有“的Cache-Control”为no-cache
或max-age=0
头,浏览器总是会发送请求到原始服务器。
请注意,在Chrome上执行此实验时,您需要在DevTool中取消选中Disable cache
。
非常感谢!你的回答非常棒! –
@ Squirtle.F是你的问题正确回答?如果是的话,也许你可以“接受”这个答案? – shaochuancs