http的強緩存和弱(協商)緩存

概念

瀏覽器緩存主要分爲本地緩存(又稱強緩存)和弱緩存(又稱協商緩存)

  • 強緩存
用戶發送的請求,直接從客戶端緩存中獲取資源、不發送到服務器。不會與服務器發生任何的交互行爲
  • 弱緩存
用戶發送的請求,發送給服務器,由服務器判斷是否從緩存中拿資源

1、第一次請求的時候,瀏覽器無緩存,用戶發送請求到服務端,服務端響應請求。此時瀏覽器端將響應進行緩存。具體大概是,第一次請求到服務端時,服務端會把頁面的最後修改時間通過在response-header的last-modified告訴瀏覽器。瀏覽器將頁面的最後修改時間進行記錄。還會生成一個Etag。
2、用戶第二次在訪問的時候,瀏覽器會判斷緩存是否過期,

沒有過期,直接從緩存中獲取資源進行呈現。
沒有過期,會有兩種緩存機制的方式,如下:
1、第一種 是查看是否有Etag,如果有查看響應服務端資源版本的報文頭信息Etag是否發生改變(就是查看Etag,如果發送給服務端的某個資源發生變化了,Etag就會響應的發生變化),如果發生改變,向服務器請求的時候,會在request-header中添加if-none-match屬性,屬性值就是Etag的值,本次請求,發送給服務端之後,服務端將屬性值和存的Etag進行對比。如果服務端驗證資源的Etag沒有改變的時候,將返回304狀態,告訴瀏覽器使用本地緩存。因爲資源沒有更新。如果Etag有改變的時候,會返回200把新的資源和新的Etag響應給瀏覽器。
2、第二種 是查看是否有last-modified,查看值是多少,它代表當前資源的緩存時間/即頁面的最後修改時間,然後看當前資源的request-header中的last-modified-since。這個是告訴服務器當前資源的緩存時間,請求也會把此時間發送給服務端,服務端會將兩者進行對比,如果時間一致,證明沒有修改,服務器會返回304,告訴瀏覽器直接從本地緩存中獲取資源,如果時間不一致,會返回200新的資源給瀏覽器。瀏覽器拿到之後會丟棄掉之前緩存的,把新的資源緩存,然後每一次請求都會用這種方式。
3、如果既沒有Etag又沒有last-modified,就會直接向服務器請求,服務器響應,然後進行緩存協商。最後呈現。

  • 你就記住,Etag是結合if-none-match使用的, last-modified是結合last-modified-since使用的,然後搞清楚兩者的結合使用關係即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章