HTTP協議狀態碼304和200區別

  • 當瀏覽器第一次加載資源的時候,返回通常爲200,意思是成功獲取資源,並會在瀏覽器的緩存中記錄下max-age;
  • 當第二次訪問的時候:若是隻是用瀏覽器打開,那麼瀏覽器會去判斷這個資源在緩存裏有沒有,若是有的話,會去判斷max-age,看看過時沒有,若是沒有過時,則直接讀緩存,根本不會和服務器進行交互,換句話說,斷網都能打開,就和本地跑同樣。若是已通過期了,那就去服務器請求,等待服務器響應,這是很費時間的,服務器若是發現資源沒有改變過,那麼就會返回304,告訴瀏覽器,我沒變過,你去讀緩存吧,因而瀏覽器也不用從服務器拉數據了,然而,等待服務器響應也是一個很要命的問題,在網速發達的今天,等一個響應,有時比下載還慢。若是是用瀏覽器刷新的,那麼瀏覽器不會去判斷max-age了,直接去服務器拿,若是服務器判斷資源沒變過,則仍是會返回304,和上面是同樣的,因此刷新一下,其實很可怕,等於把全部的資源都要去服務器請求一邊,問問服務器過時了沒有。

也就是說:在通常狀況下,瀏覽器在發請求前,感受本身可能緩存了某個文件,就先把本身緩存的文件信息放在請求頭裏。
服務器在發送響應前,對比一下這個文件信息,發現瀏覽器緩存的文件就是它,因而決定不發送整個文件內容,直接告訴瀏覽器 304 。
瀏覽器接收到 304 時,就知道原來我緩存的就是跟服務器端同樣的文件,因而就直接拿本地緩存來用了。
若是服務器發現瀏覽器的緩存文件信息已是舊的了,服務器就直接正常的發送文件內容,瀏覽器正常的接收文件內容了。瀏覽器

相關文章
相關標籤/搜索