前端緩存一般針對如CSS,JS,image等使用緩存
Expires頭
這些標頭用于指定相應時間段,瀏覽器可在指定的這段時間內(nèi)使用已緩存的資源,而無需查看網(wǎng)絡服務器是否提供了新版資源。這些緩存標頭功能強大,沒有任何應用條件限制。
解讀:
炒雞厲害的緩存,基本接到該資源會看下expires要到什么時候才會結(jié)束下圖為2037年,緩存20年,本地有緩存會顯示200 from cache(以后也不會去跟服務器發(fā)請求了),與第一次正常請求不同的是,第一次請求200.但是from cache會顯示文件大小
nginx設置代碼
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ { //設置后綴格式 root /data/www/html/; //設置文件夾地址 expires max; //設置時間,疑似默認20年 }
Cache-Control頭
描述的是一個相對時間,在進行緩存命中的時候,都是利用客戶端時間進行判斷,所以相比較Expires,Cache-Control的緩存管理更有效,安全一些。
Cache-Control值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age
挑兩個重要的抄下
no-cache指示請求或響應消息不能緩存,該選項并不是說可以設置”不緩存“,而是需要和服務器確認
no-store在請求消息中發(fā)送將使得請求和響應消息都不使用緩存,完全不存下來。
max-age指示客戶機可以接收生存期不大于指定時間(以秒為單位)的響應。上次緩存時間(客戶端的)+max-age(64200s)<客戶端當前時間
nginx代碼
location ~ \.(html|htm)$ { root /data/www/html/; expires -1; //永久不緩存,這個也設置下不緩存 add_header Cache-Control no-cache; //不緩存,試了好幾次,可能之前設置測試的頭有點多,之前設置一個expires好像不好使,兩個都設置比較安全。}
Last-Modifed和ETag標頭
這些標頭可用于指定瀏覽器應如何確定用于緩存的文件是否相同。在Last-Modified標頭中指定的是日期,而在ETag標頭中指定的則可以是唯一標識資源的任意值(通常為文件版本或內(nèi)容哈希值)。Last-Modified是功能“較弱”的緩存標頭,因為瀏覽器會使用試探法來確定是否需要從緩存中抓取內(nèi)容。
借助這些標頭,瀏覽器可以通過在用戶明確重新加載頁面時發(fā)出條件式GET請求,有效地更新其已緩存資源。除非您在服務器端更改資源,否則條件式GET請求不會返回完整的響應,因此相較于完整GET請求,此類請求的延遲較小。
解讀 :
這個是比較靈活的,瀏覽器在發(fā)送請求之后,收到返回頭的這兩個頭(一般來說只設置一個),對比下Etag,啊是上一次的,那么就不下載了,304,但是304B是http頭的大小,還是要發(fā)請求給瀏覽器的
額,我感覺Etag這個服務器都會自動配好的!蛤蛤
我應使用哪個緩存標頭?
一般來說我自己的話會將永遠不會變的或者變起來名字也會變的用expires緩存,如logo.png,avatar-123.jpg,index-xxxxx.js這種請求都不用請求了,不然nginx沒設置好,好像還會有驚群的情況(就是一個請求很多個線程會等待,然后就一個線程最終獲取到,產(chǎn)生了不少的消耗,好像很厲害的樣子,推薦nginx用use epoll),然后其他的像index.html,這種經(jīng)常會變的,就讓他自己用304緩存好了。
詳細解讀https://segmentfault.com/a/1190000006741200
最后盜張圖