什么是200和304
狀態碼200:請求已成功,請求所希望的響應頭或數據體將隨此響應返回。即返回的數據為全量的數據,如果文件不通過GZIP壓縮的話,文件是多大,則要有多大傳輸量。
狀態碼304:如果客戶端發送了一個帶條件的 GET 請求且該請求已被允許,而文檔的內容(自上次訪問以來或者根據請求的條件)並沒有改變,則服務器應當返回這個狀態碼。即客戶端和服務器端只需要傳輸很少的數據量來做文件的校驗,如果文件沒有修改過,則不需要返回全量的數據。
200和304發生的條件
在客戶端強制刷新,如ctrl+f5這種情況下,所有的緩存策略失效,服務器端都會返回200;在客戶端非強制刷新,如點擊刷新按鈕或按f5的情況下,服務器端會根據request頭中:If-Modified-Since字段的時間與文件的實際修改時間進行比較,
如果修改時間比If-Modified-Since時間要新,則服務器會認為文件已經修改過了,向客戶端返回全量的數據,客戶端本地的緩存失效,狀態碼為200。
如果修改時間比If-Modified-Since時間要舊,則服務器會認為文件並未修改過,並且只會向客戶端寫回頭文件,不返回文件數據,客戶端使用本地緩存,狀態碼為304。
根據上述以及圖中所示,狀態為304的請求要比狀態為200的請求的數據量小很多,因為304只需要返回響應頭,並不需要返回整個文件,所以只需要幾字節就可以了,這樣能夠節省大量的網絡帶寬,並減少了頁面的渲染時間。

