http緩存控制(對計算機網絡知識的複習)------提高併發效率

瀏覽器緩存分類

  • 瀏覽器緩存分爲強緩存協商緩存
  • 強緩存:不用發請求到服務器就能拿到緩存文件的請求(狀態碼200 注意:正常請求是200,強緩存也是200)
  • 協商緩存:如果沒有命中強緩存,瀏覽器會將資源加載請求發送到服務器。服務器來判斷瀏覽器本地緩存是否有效。如果可以使用,則服務器並不會返回資源信息,瀏覽器繼續從緩存加載資源。(需要發送請求到服務器,狀態碼304)
  • 如果沒有命中強緩存或者協商緩存,服務器會將完整的資源返回給瀏覽器,瀏覽器加載新資源,並更新緩存。(新的請求)

如何判斷命中強緩存

  • 在Chrome的開發者工具中看到http的返回碼是200,在Size列會顯示爲(from cache)Status Code:200 OK(from memory cache)
  • 強緩存是利用http的返回頭中的Expires或者Cache-Control兩個字段來控制的,用來表示資源的緩存時間
  • Expires:緩存過期時間,用來指定資源到期的時間,是服務端的具體的時間點。(服務器告訴瀏覽器在這個絕對時間以前都可以命中強緩存,都不需要向服務器發送請求)
  • Cache-control:是一個相對時間,代表着資源的有效期。
  • 注意:使用絕對時間的方式有一個明顯的缺點----當客戶端本地時間被修改以後,服務器與客戶端時間偏差變大以後,可能會導致緩存混亂。
  • Cache-Control與Expires可以在服務端配置同時啓用或者啓用任意一個,同時啓用的時候Cache-Control優先級高。
    max-age:指定一個時間長度,在這個時間段內緩存是有效的,單位是s。

強緩存存在的意義

  • 服務器的配置是有限的,設置強緩存能夠擴充服務器所提供服務的客戶端數量。
  • 利用用戶的電腦配置來分擔服務器的壓力,從而減小服務器的負擔。
  • 服務器可以少買幾臺。

協商緩存(瀏覽器問服務器我緩存的文件有無更新呀?)

  • 沒有更新;瀏覽器可以用緩存。(狀態碼304)
  • 有更新;瀏覽器不能用緩存,服務器需要發新的給瀏覽器。(狀態碼200)

Last-Modify/If-Modify-Since(記錄的是時間)

  • Last-Modify(響應頭裏面的 Response Headers):服務器發過來的
  • If-Modify-Since(請求頭裏面的 Request Headers):瀏覽器發請求
  • 判斷兩者是否相等

ETag/If-None-Match(注意:上面記錄時間的方式沒有那麼精確,所以採用ETag/If-None-Match)

  • 返回的是一個校驗碼,ETag值的變更說明資源狀態已經被修改,服務器根據瀏覽器上發送的If-None-Match值來判斷是否命中緩存。(判斷兩者是否相等,走協商緩存的話應該是相等的。)

總結

(1)http緩存能夠幫助服務器提高併發性能,很多資源不需要重複請求直接從瀏覽器拿緩存
(2)http緩存分類:強緩存和協商緩存
(3)強緩存通過expires和cache-control控制,協商緩存通過last-Modify和E-tag控制
補充:1.爲什麼有expires還需要cache-control
回答:expires存在服務器和瀏覽器時間不同步的問題
expires是絕對時間,cache-control是相對時間
2.last-modify和Etag
回答:last-modify它是有時間精度的問題(到秒)
Etag沒有精度的問題,只要文件改變,Etag值就會變

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