304 Not Modified詳解

? ??????在客戶端向服務端發(fā)送http請求時,若返回狀態(tài)碼為304 Not Modified 則表明此次請求為條件請求。在請求頭中有兩個請求參數:If-Modified-Since 和 If-None-Match。


????????當客戶端緩存了目標資源但不確定該緩存資源是否是最新版本的時候, 就會發(fā)送一個條件請求。在進行條件請求時,客戶端會提供給服務器一個If-Modified-Since請求頭,其值為服務器上次返回響應頭中Last-Modified值,還會提供一個If-None-Match請求頭,值為服務器上次返回的ETag響應頭的值。

????????服務器會讀取到這兩個請求頭中的值,判斷出客戶端緩存的資源是否是最新的,如果是的話,服務器就會返回HTTP/304 Not Modified響應頭, 但沒有響應體.客戶端收到304響應后,就會從本地緩存中讀取對應的資源。 所以:當訪問資源出現304訪問的情況下其實就是先在本地緩存了訪問的資源。

????????另一種情況是,如果服務器認為客戶端緩存的資源已經過期了,那么服務器就會返回HTTP/200 OK響應,響應體就是該資源當前最新的內容.客戶端收到200響應后,就會用新的響應體覆蓋掉舊的緩存資源.只有在客戶端緩存了對應資源且該資源的響應頭中包含了Last-Modified或ETag的情況下,才可能發(fā)送條件請求.如果這兩個頭都不存在,則必須無條件(unconditionally)請求該資源,服務器也就必須返回完整的資源數據.另外,有時候我們?yōu)g覽器調試的時候不希望本地緩存,可以設置取消緩存即可。

????????如果選中了no cache,則請求資源時,請求頭中的Cache-Control為no-cache,表明不使用緩存,則會直接獲取服務器資源。另外,若沒選中no cache,Cache-Control有二種情況:

? ? ? ?1、max-age>0 時直接從游覽器緩存中提取?

? ? ? ?2、max-age<=0 時向服務器發(fā)送http請求,該資源是否有修改有的話返回200 ,無的話返回304.?

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容