HTTP statusCode 200 OK 和 304 Not Modified

場景

啓動Node服務器之後,GET一個文件資源,多次刷新發現除了第一次,之後的相應碼皆爲304
響應分爲五類:信息響應(100–199),成功響應(200–299),重定向(300–399),客戶端錯誤(400–499)和服務器錯誤 (500–599)
首先看響應碼大類:

請求碼格式 含義
1XX 信息響應
2XX 成功響應
3XX 重定向
4XX 客戶端錯誤
5XX 服務端錯誤

再看200和304的區別:

  • 200 OK

    請求成功。成功的含義取決於HTTP方法:

      GET:資源已被提取並在消息正文中傳輸。
      HEAD:實體標頭位於消息正文中。
      POST:描述動作結果的資源在消息體中傳輸。
      TRACE:消息正文包含服務器收到的請求消息
    
  • 304 Not Modified
    如果客戶端發送了一個帶條件的 GET 請求且該請求已被允許,而文檔的內容(自上次訪問以來或者根據請求的條件)並沒有改變,則服務器應當返回這個狀態碼。304 響應禁止包含消息體,因此始終以消息頭後的第一個空行結尾。

也就是說,兩者都表示獲取到了資源。
區別:
第一次請求服務器,得到資源的響應,響應碼爲200
(此時客戶端的瀏覽器可能會對響應數據進行緩存,根據瀏覽器設置而定)
之後再次請求,此時:
瀏覽器這邊有一份數據,時間戳爲aaa,
請求到服務端的時候,發現服務器裏的數據,自從上次請求之後未經修改,那就不用了發數據回來了。
所以此時返回狀態碼304

程序裏是如何判斷:這次要從服務器請求的資源,我在瀏覽器已經訪問過,有了緩存,且兩份資源一樣的|未經修改的?
兩個參數:
- 請求頭的If-Modified-Since
- 響應頭的Last-Modified
就是通過比較這兩個參數是否變化。
在這裏插入圖片描述
驗證:
兩種方式驗證:
- 修改服務端的文件內容(加空行,字符之類的,重新保存)
- 請求|禁用本次資源:切換瀏覽器,或清除瀏覽器緩存、禁用瀏覽器緩存等。
再次發起請求,查看狀態碼,爲200
在這裏插入圖片描述

Refer

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章