在客戶端向服務端發送http請求時,若返回狀態碼為304 Not Modified 則表明此次請求為條件請求。在請求頭中有兩個請求參數:If-Modified-Since 和 If-None-Match。 當客戶端緩存了目標資源但不確定該緩存資源是否是最新版本的時候, 就會發送一個條件請求。在進行條 ...
在客戶端向服務端發送http請求時,若返回狀態碼為304 Not Modified 則表明此次請求為條件請求。在請求頭中有兩個請求參數:If-Modified-Since 和 If-None-Match。
當客戶端緩存了目標資源但不確定該緩存資源是否是最新版本的時候, 就會發送一個條件請求。在進行條件請求時,客戶端會提供給伺服器一個If-Modified-Since請求頭,其值為伺服器上次返迴響應頭中Last-Modified值,還會提供一個If-None-Match請求頭,值為伺服器上次返回的ETag響應頭的值。
伺服器會讀取到這兩個請求頭中的值,判斷出客戶端緩存的資源是否是最新的,如果是的話,伺服器就會返回HTTP/304 Not Modified響應頭, 但沒有響應體.客戶端收到304響應後,就會從本地緩存中讀取對應的資源。 所以:當訪問資源出現304訪問的情況下其實就是先在本地緩存了訪問的資源。
另一種情況是,如果伺服器認為客戶端緩存的資源已經過期了,那麼伺服器就會返回HTTP/200 OK響應,響應體就是該資源當前最新的內容.客戶端收到200響應後,就會用新的響應體覆蓋掉舊的緩存資源.只有在客戶端緩存了對應資源且該資源的響應頭中包含了Last-Modified或ETag的情況下,才可能發送條件請求.如果這兩個頭都不存在,則必須無條件(unconditionally)請求該資源,伺服器也就必須返回完整的資源數據.另外,有時候我們瀏覽器調試的時候不希望本地緩存,可以設置取消緩存即可。
如果選中了no cache,則請求資源時,請求頭中的Cache-Control為no-cache,表明不使用緩存,則會直接獲取伺服器資源。另外,若沒選中no cache,Cache-Control有二種情況:
1、max-age>0 時直接從游覽器緩存中提取
2、max-age<=0 時向伺服器發送http請求,該資源是否有修改有的話返回200 ,無的話返回304.
本文出處:https://blog.csdn.net/franknotbad/article/details/79399809