Nginx與瀏覽器緩存 一、瀏覽器對緩存的處理:Internet選項 ★ 控制請求伺服器策略:是忽略資源的緩存策略的情況下額外強制請求伺服器的意思。 ★ 檢查存儲的頁面較新版本 1.每次訪問網頁時 不管是否有緩存、資源狀態是否過期,都會再次請求伺服器。 2.每次啟動Internet Explorer ...
Nginx與瀏覽器緩存
一、瀏覽器對緩存的處理:Internet選項
★ 控制請求伺服器策略:是忽略資源的緩存策略的情況下額外強制請求伺服器的意思。
★ 檢查存儲的頁面較新版本
1.每次訪問網頁時
不管是否有緩存、資源狀態是否過期,都會再次請求伺服器。
2.每次啟動Internet Explorer時
不管是否有緩存、資源狀態是否過期,都會再次請求伺服器。
3.自動
大體上和2是一樣的,只是對於圖片的策略有點不同。
4.從不
完全按照資源的緩存策略來請求伺服器。
★ F5 刷新:請求服務端,但是會根據和伺服器對比文件來確定是否下載
★ Ctrl + F5刷新:一定會去伺服器下載。
二、緩存控制策略
★Last-Modified/If-Modified-Since要配合Cache-Control使用,Etag/If-None-Match也要配合Cache-Control使用。
ps: 分散式系統里多台機器間文件的last-modified必須保持一致,以免負載均衡到不同機器導致比對失敗
分散式系統儘量關閉掉Etag(每台機器生成的etag都會不一樣)
★HTML通過meta的http-equiv屬性控制瀏覽器緩存策略:通過設置Pragma和Cache-control和expires控制
ps:只能控制html的緩存策略,不能控制css/js/圖片的緩存策略。
Cache-control的max-age和expires同時存在,那麼先處理max-age。
Cache-control指定了no-cache後,max-age和expires。
Pragma: http 1.0 IE瀏覽器才識別,請求頭中不會體現,但是確實有效果
Cache-control: http 1.1
三、Nginx設置瀏覽器緩存
★Nginx設置瀏覽器緩存:可以在http 、server、location節點中添加。可以設置各種資源的緩存策略,不僅僅是HTML。而<meta http-equiv>節點只針對HTML
#add_header Cache-Control no-cache;
#add_header Cache-Control private;
add_header Cache-Control max-age=7200;
if ($request_filename ~* ^.*?\.(ico|jpeg|gif|jpg|png|woff)$){
expires 7d;
}
if ($request_filename ~* ^.*?\.(js|css)$){
expires 7d;
}
if ($request_filename ~* ^.*?\.(html|htm)$){
expires 3d;
}
★Nginx中的配置會覆蓋HTML的http-equiv="Cache-control"配置。
但是如果HTML中的加了下麵3個標簽,瀏覽器端效果還是只能no-cache。(從效果上來看:Nginx的Cache-control配置無效)
因為Nginx的Cache-control配置只是覆蓋了Cache-control(如果html加的是後面兩個標簽,Nginx還是有效的),而Pragma仍然起著作用。
<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Cache-control" content="no-cache;max-age=0"/>
<meta http-equiv="expires" content="0"/>