header設置緩存
『壹』 Nginx怎樣設置瀏覽器緩存
瀏覽器緩存(BrowserCaching)
為了加速瀏覽器,瀏覽器在用戶磁碟上,對最近請求過的文檔進行存儲。
當訪問者再次請求這個頁面時,瀏覽器就可以從本地磁碟顯示文檔,這樣,就可以加速頁面的閱覽,緩存的方式節約了網路的資源,提高了網路的效率。
瀏覽器緩存可以通過expires指令輸出Header頭來實現,expires指令的語法如下
語法:expires[time| epoch | max |off]
默認值:expiresoff
作用域:http、server、location
用途:使用本指令可以控制http應答中的expires和Cache-Control的Header頭信息,起到控制頁面緩存的作用。
參數說明
Time,可以使用正數或負數,Expires頭標的值,將通過當前系統時間加上設定的time值來獲得。
epoch,指定expires的值為1January,1970,00:00:01 GMT。
Max,指定expires的值為31December 2037 23:59:59 GMT,Cache-Control的值為10年。
Off,表示不修改Expires和Cache-Control的值。
一個HTML頁面,會引用一些JavaScript文件、圖片文件、而這些格式的文件很少會被修改,則可以通過expires設置瀏覽器緩存。
比如,對常見格式的圖片、Flash文件在瀏覽器本地緩存30天,對JS、CSS文件在瀏覽器本地緩存1小時,代碼如下
『貳』 關於瀏覽器緩存
首先瀏覽器緩存分為 內存緩存 和 文件緩存 。
內存緩存是瀏覽器自己控制的,不受 Cache-Control 影響,跟計算機內存空間大小有關,並且關閉瀏覽器就會消失。
文件緩存 就是我們常說的瀏覽器緩存。
文件緩存分為2種: 強制緩存 和 協商緩存 。
強制緩存 就是通過Header上配置Cache-Control:public,max-age=300這種形式實現的,Cache-Control可以客戶端在請求Header配置,也可以服務端在響應Header配置。
強制緩存 比較適合用在變化頻率比較低的穗並文件上,比如圖片,js,css都可以,通常我們都使用這種緩存再配合文件hash後綴實現緩存文件的即時更新。
協商緩存 是一種服務端控制文件緩存的策略,機猜宏跡制是服務端會根據最新更絕首改時間和文件標識判斷響應的時候是否要返回內容。雖然每次都會向服務端發起請求,但是如果服務端確定緩存,會返回很少響應內容。
這種方式比較適合需要頻繁更新的文件,需要配合Cache-Control:no-cache阻止強制緩存。另外html不要配置強制緩存,通常我們請求的html文件地址不會加hash。
協商緩存 主要通過2組Header標簽讓客戶端與服務端確認來達成:首先服務端在響應的時候會加上 Last-Modified 和 Etag ,前者表示文件最後更新時間,後者表示文件唯一標識;然後客戶端再次請求的時候會帶上 If-Modified-Since 和 If-None-Match ,值分別跟服務端的 Last-Modified 和 Etag 一致。
參考:
瀏覽器緩存
『叄』 Nginx緩存設置教程
| 這篇文章主要介紹了Nginx緩存設置案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下 |
在開發調試web的時候,經常會碰到因瀏覽器緩存(cache)而經常要去清空緩存或者強制刷新來測試的煩惱,提供下apache不緩存配置和nginx不緩存配置的設置。在常用的緩存設置裡面有兩種方式,都是使用add_header來設置:分別為Cache-Control和Pragma。
對於站點中不經常修改的靜態內容(如圖片,JS,CSS),可以在伺服器中設置expires過期時間,控制瀏覽器緩存,達到有效減小帶寬流量,降低伺服器壓力的目的。
以Nginx伺服器為例:
【背景】:Expires是Web伺服器響應消息頭欄位,在響應http請求時告訴瀏覽器在過期時間前瀏覽器可以直接從瀏覽器緩存取數據,而無需再次請求。
【相關資料】
1、Cache-control策略
Cache-Control與Expires的作用一致,都是指明當前資源的有效期,控制瀏覽器是否直接從瀏覽器緩存取數據還是重新發請求到伺服器取數據。只不過Cache-Control的選擇更多,設置更細致,如果同時設置的話,其優先順序高於Expires。
http協議頭Cache-Control :
值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age
各個消息中的指令含義如下:
Last-Modified/If-Modified-Since
其最終達到的就是等效於設置這三類html緩存技術:
『肆』 微信公眾號html緩存處理
近期在發版驗證時遇到一個問題,微信公眾號登入後頁面顯示的是老的,強制刷新後,再退出重新登入,仍然顯示的是老的頁面;
經過一番查找得到了解決方案:
(1)公眾號放的菜單地址後加 ?version=1.0.0 每次更新頁面則更新菜單;
但是這樣每次發版還得修改公眾號的菜單,多一步很不方便;
於是和前端一塊嘗試尋找到另一中解決方案:
(2)前端在html的header中加入緩存策略
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Cache" content="no-cache" />
這樣就徹底解決了緩存問題;
但是注意,往往遇到此問題時,已經緩存了沒有加緩存策略的html文件,需要清除掉緩存,載入新的帶緩存策略的html文件,將來才會實時更新;但是也不能讓用戶每個都清理緩存啊;
於是就要配合第一種解決方法,在菜單鏈接後面加參數,這樣用戶側會重新load新版本的html(微信菜單設置發布後,有將近10分鍾的延時),這樣配合使用就完美解決了我們的問題;
期間多次嘗試發現,微信的緩存策略和頁面地址的後綴參數相關,使用相同的後綴,在不設置緩存策略下,就能回到對應的版本,很強大,也很雞肋