快取可以大幅提公升使用者的訪問速度因此來提公升使用者體驗。
快取又分為瀏覽器端的快取和伺服器端的快取。下面來比較一下瀏覽器快取和nginx快取的優劣。
專案優點
缺點瀏覽器快取
1.使用本地快取時,沒有網路消耗,速度最快 2.對於失效快取,304相應可以做到流量消耗最小化
僅僅提公升乙個使用者的本地體驗
nginx快取
1.提公升所有使用者的體驗 2.降低上游服務的負載 3.通過304相應減少與上游服務間的流量消耗
使用者仍然保持網路消耗
所以當然是要同時使用這兩種快取。
etaghttp響應頭是資源的特定版本的標誌服。這可以讓快取更高效,並節省頻寬,因為如果內容沒有改變,web伺服器不需要傳送完整的響應。而如果內容發生了變化,使用etag有助於防止資源的同時更新相互覆蓋(空中碰撞)。
如果給定url中的資源更改,則會生成新的etag值。因此etag類似於指紋,也可能被某些伺服器用於跟蹤。比較etags能快速確認此資源是否變化,但也可能被跟蹤伺服器永久留存。
在nginx中的配置:
語法etag on/off;
預設etag on
上下文http,server,location
etag實際上是根據上一次的修改時間和內容長度來生成的。場景:瀏覽器端的快取已經過期了,而瀏覽器還想賭一賭伺服器端是否有更新的版本,因此瀏覽器將所快取頁面的etag傳送給伺服器,如果伺服器發現這個etag就是最近的,那就直接返回304即可。
動作為:瀏覽器在if-none-match頭部中,填入etag,傳送給伺服器。
if-none-match是乙個條件式請求首部。對於get和head請求方法來說,當且僅當伺服器上沒有任何資源的etag屬性值和這個首部中列出的相匹配的時候,服務端才會返回所請求的資源,響應碼為200
瀏覽器將自己儲存快取的時間傳送給伺服器,詢問伺服器在此時間之後是否對此資源做過修改。如果沒改動過,伺服器則返回乙個不帶訊息主體的304響應,在last-modified首部中帶上上次修改時間。
當與if-none-match一同出現時,if-modified-since會被忽略掉,除非伺服器不支援if-none-match。首先,你在位址列中輸入某url,按下回車,此時瀏覽器會發出請求吧,在請求之前,瀏覽器會檢查自己是否有該**的快取,如果存在快取的話,檢查該快取是否過期(expires),如果沒過期的話,直接在快取中讀取然後呈現出來即可。
如果快取過期了,首先檢查是否有etag,有的話,就向伺服器傳送if-none-match,由伺服器決斷是否需要更新快取。
如果沒有etag的話,那就看是否有last-modified,有的話,就像伺服器傳送if-modified-since,由伺服器決斷是否需要更新快取。
如果瀏覽器這邊啥都沒有…那就直接請求吧。
瀏覽器快取詳解
報文頭里的一些關鍵資訊 e xpires http1.0 中的標準,表明過期時間,注意此處的時間都是指的是伺服器的時間。cache control http1.1 中的標準,可以看成是 expires 的補充。使用的是相對時間的概念。cache control的屬性 max age 設定快取的最大的...
瀏覽器快取詳解
第一次請求了 100 個檔案,再次訪問的時候,如果全部重新請求,非常浪費時間,也很笨拙.分析 因為有些檔案,在使用者的多次請求中,都是相同的,如果多次請求都重複請求這個檔案,無疑是一種浪費.那麼就想到了快取 把資源快取到本地,再次請求的時候直接使用本地的快取檔案.走極端 把所有的檔案都快取起來.分析...
瀏覽器快取詳解
1.快取位置 1.service worker,service worker是執行在瀏覽器背後的獨立執行緒,一般可以用來實現快取功能.使用service worker必須使用https協議,因為service worker涉及請求攔截,所以必須使用https協議來保證安全.3.disk cache,...