如何在nginx中設(shè)置資源緩存-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)如何在nginx中設(shè)置資源緩存,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

成都創(chuàng)新互聯(lián)服務(wù)緊隨時代發(fā)展步伐,進(jìn)行技術(shù)革新和技術(shù)進(jìn)步,經(jīng)過10余年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計師、專業(yè)的網(wǎng)站實施團(tuán)隊以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對網(wǎng)站進(jìn)行成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、建設(shè)、維護(hù)、更新和改版,實現(xiàn)客戶網(wǎng)站對外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。

首先我在 nginx 的根目錄下新建了一個 index.html 文件以及 index.js 文件。此時 nginx 的配置文件是長這個樣子的:

server {
 listen  8080;
 server_name localhost;
 location / {
  root /Volumes/myFile/nginx_root; 
  index index.html index.htm;
 }
}

然后我們?yōu)g覽器訪問 localhost:8080。打開控制臺,發(fā)現(xiàn)里面有兩條請求:

如何在nginx中設(shè)置資源緩存

可以看到第一次訪問,兩條請求的狀態(tài)碼都是 200。我們點(diǎn)開其中一條請求看看響應(yīng)頭信息:

如何在nginx中設(shè)置資源緩存

可以看到,響應(yīng)頭中給我們攜帶了 Etag 以及 Last-Modified 信息。這就是協(xié)商緩存所使用的字段嘛??磥?nginx 已經(jīng)默認(rèn)給我們使用了緩存。那我們在不修改 html文件以及js文件的基礎(chǔ)上再次去刷新頁面驗證一下,命中協(xié)商緩存的話,狀態(tài)碼應(yīng)該給我們返回 304 Not Modified 。我刷新了幾次去觀察http請求的狀態(tài)碼。html文件每次都是返回的 304。但是 js 文件在最初是 304 后面卻變成了 200 OK (from memory cache) 。也就是說每一次html文件都是命中了協(xié)商緩存,而js文件都是命中了強(qiáng)緩存(強(qiáng)緩存的優(yōu)先級是高于協(xié)商緩存的)。為什么會出現(xiàn)這樣的情況呢,我百度一下:

為什么有的緩存是 200 OK (from cache),有的緩存是 304 Not Modified 呢?很簡單,看是否移除了 Entity Tag。移除了,就總是 200 OK (from cache)。沒有移除,就兩者會交替出現(xiàn)。

那么,兩者觸發(fā)的時機(jī)有什么區(qū)別呢?200 OK (from cache) 是直接點(diǎn)擊鏈接訪問,輸入網(wǎng)址按回車訪問也能觸發(fā);而 304 Not Modified 是刷新頁面時觸發(fā),或是設(shè)置了強(qiáng)緩存、但 Entity Tags 沒有移除時觸發(fā)。

對照我的例子,我是這樣理解的: index.html 文件刷新頁面命中協(xié)商緩存返回了 304,而 js 文件是在 index.html 文件中鏈接引入的,所以命中強(qiáng)緩存 200 OK (from cache) 。為了驗證我的想法,我用在地址欄直接訪問了 index.js 文件。地址欄鍵入:localhost:8080/index.js,此時的確是返回了 304 給我了,在來看一下此時的請求頭:

如何在nginx中設(shè)置資源緩存

可以看到此時 Cache-Control 給的是max-age=0;然后也攜帶上了協(xié)商緩存的相關(guān)參數(shù)。看來在瀏覽器是刷新操作的時候就會攜帶上 Cache-Control:max-age=0 以此來避免命中強(qiáng)緩存。

nginx禁用強(qiáng)緩存

在試試 nginx 禁用強(qiáng)緩存之后會發(fā)生什么效果。修改 nginx 配置文件:

server {
 listen  8080;
 server_name localhost;
 location / {
  root /Volumes/myFile/nginx_root; 
  index index.html index.htm;
  add_header Cache-Control no-cache;
  # 為 public可以被任何對象緩存,private只能針對個人用戶,而不能被代理服務(wù)器緩存
  add_header Cache-Control private;
 }
}

修改完 nginx 配置文件之后我們重啟一下 nginx 服務(wù)器。此時在訪問 localhost:8080

如何在nginx中設(shè)置資源緩存

可以看到,此時 html 文件和 js文件都是 304 都是命中協(xié)商緩存了。

Cache-Control: no-store

禁止一切緩存(這個才是響應(yīng)不被緩存的意思)。緩存通常會像非緩存代理服務(wù)器一樣,向客戶端轉(zhuǎn)發(fā)一條 no-store 響應(yīng),然后刪除對象。

Cache-Control:no-cache

強(qiáng)制客戶端直接向服務(wù)器發(fā)送請求,也就是說每次請求都必須向服務(wù)器發(fā)送。服務(wù)器接收到請求,然后判斷資源是否變更,是則返回新內(nèi)容,否則返回304,未變更。這個很容易讓人產(chǎn)生誤解,使人誤以為是響應(yīng)不被緩存。實際上Cache-Control: no-cache是會被緩存的,只不過每次在向客戶端(瀏覽器)提供響應(yīng)數(shù)據(jù)時,緩存都要向服務(wù)器評估緩存響應(yīng)的有效性。

其實將 Cache-Control 設(shè)置為 no-store 才是真正的不被緩存的意思,那在修改一下 nginx 文件將 Cache-Control 設(shè)置為 no-store 看看會發(fā)生什么。此時再次刷新瀏覽器。

如何在nginx中設(shè)置資源緩存

可以看到,修改完 nginx 的配置文件之后,除了第一次是304(這次訪問瀏覽器才剛剛接收到 no-store的信息,請求頭上還是攜帶了緩存相關(guān)信息) 外,剩下的幾次刷新頁面都是返回 200了。既沒有命中強(qiáng)緩存、也沒有命中協(xié)商緩存。在看一下 index.js 文件的 http 頭信息。

如何在nginx中設(shè)置資源緩存

關(guān)于如何在nginx中設(shè)置資源緩存就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

當(dāng)前文章:如何在nginx中設(shè)置資源緩存-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://bm7419.com/article44/iphee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、靜態(tài)網(wǎng)站、網(wǎng)站內(nèi)鏈、建站公司、標(biāo)簽優(yōu)化、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作