2017-04-15 111 views
1

我知道,如果我有一個響應包含一個頭Cache-Control:max-age=100,這意味着高速緩存的新鮮生命週期爲100秒相比。這是否意味着在100秒內,後續請求永遠不會向服務器請求?所有這些請求都只是在緩存中收到響應?如何緩存控制效果請求頭,在響應頭

因此,我有一個問題,如果後續請求包含一個標頭Cache-Control:no-cacheCache-Control:max-age=0,它是否會在100秒內向原始服務器發出請求,即使緩存未陳舊?

回答

0

這是否在百秒意味着,後續請求絕不會要求到服務器?所有這些請求都只是在緩存中收到響應?

除非隨後的請求使用Cache-Control頭來控制緩存,否則這些請求只會從緩存中獲取響應數據。

如果後續請求包含標頭Cache-Control:no-cacheCache-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(); 
}) 

你可以觀察到:

  1. /poll請求不包含Cache-Control頭,瀏覽器將請求發送到原點服務器,爲後面的3個請求從緩存中獲取資源,然後將請求發送到原點再次服務器...
  2. /poll要求有「的Cache-Control」爲no-cachemax-age=0頭,瀏覽器總是會發送請求到原始服務器。

請注意,在Chrome上執行此實驗時,您需要在DevTool中取消選中Disable cache

+0

非常感謝!你的回答非常棒! –

+0

@ Squirtle.F是你的問題正確回答?如果是的話,也許你可以「接受」這個答案? – shaochuancs