1. 程式人生 > >HTTP協議狀態碼304和200區別

HTTP協議狀態碼304和200區別

  • 當瀏覽器第一次載入資源的時候,返回一般為200,意思是成功獲取資源,並會在瀏覽器的快取中記錄下max-age;
  • 當第二次訪問的時候:如果只是用瀏覽器開啟,那麼瀏覽器會去判斷這個資源在快取裡有沒有,如果有的話,會去判斷max-age,看看過期沒有,如果沒有過期,則直接讀快取,根本不會和伺服器進行互動,換句話說,斷網都能開啟,就和本地跑一樣。如果已經過期了,那就去伺服器請求,等待伺服器響應,這是很費時間的,伺服器如果發現資源沒有改變過,那麼就會返回304,告訴瀏覽器,我沒變過,你去讀快取吧,於是瀏覽器也不用從伺服器拉資料了,然而,等待伺服器響應也是一個很要命的問題,在網速發達的今天,等一個響應,有時比下載還慢。如果是用瀏覽器重新整理的,那麼瀏覽器不會去判斷max-age了,直接去伺服器拿,如果伺服器判斷資源沒變過,則還是會返回304,和上面是一樣的,所以重新整理一下,其實很可怕,等於把所有的資源都要去伺服器請求一邊,問問伺服器過期了沒有。

也就是說:在一般情況下,瀏覽器在發請求前,感覺自己可能快取了某個檔案,就先把自己快取的檔案資訊放在請求頭裡。
伺服器在傳送響應前,對比一下這個檔案資訊,發現瀏覽器快取的檔案就是它,於是決定不傳送整個檔案內容,直接告訴瀏覽器 304 。
瀏覽器接收到 304 時,就知道原來我快取的就是跟伺服器端一樣的檔案,於是就直接拿本地快取來用了。
如果伺服器發現瀏覽器的快取檔案資訊已經是舊的了,伺服器就直接正常的傳送檔案內容,瀏覽器正常的接收檔案內容了。