我知道,如果我有一個響應包含一個頭Cache-Control:max-age=100
,這意味着高速緩存的新鮮生命週期爲100秒相比。這是否意味着在100秒內,後續請求永遠不會向服務器請求?所有這些請求都只是在緩存中收到響應?如何緩存控制效果請求頭,在響應頭
因此,我有一個問題,如果後續請求包含一個標頭Cache-Control:no-cache
或Cache-Control:max-age=0
,它是否會在100秒內向原始服務器發出請求,即使緩存未陳舊?
我知道,如果我有一個響應包含一個頭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