如何通過Nginx配置來優(yōu)化你的網(wǎng)絡(luò)請求?

緩存可以減少冗余的數(shù)據(jù)傳輸。節(jié)省了網(wǎng)絡(luò)帶寬,從而更快的加載頁面。
緩存降低了服務(wù)器的要求,從而服務(wù)器更快的響應(yīng)。
那么我們使用緩存,緩存的資源文件到什么地方去了呢?首先來看下有哪幾種緩存類型呢?

為子長等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及子長網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計、成都做網(wǎng)站、子長網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

1.memory cache: 它是將資源文件緩存到內(nèi)存中。等下次請求訪問的時候不需要重新下載資源,而是直接從內(nèi)存中讀取數(shù)據(jù)。

2.disk cache: 它是將資源文件緩存到硬盤中。等下次請求的時候它是直接從硬盤中讀取。

那么他們兩則的區(qū)別是?

3.memory cache(內(nèi)存緩存)退出進程時數(shù)據(jù)會被清除,而disk cache(硬盤緩存)退出進程時數(shù)據(jù)不會被清除。內(nèi)存讀取比硬盤中讀取的速度更快。但是我們也不能把所有數(shù)據(jù)放在內(nèi)存中緩存的,因為內(nèi)存也是有限的。

memory cache(內(nèi)存緩存)一般會將腳本、字體、圖片會存儲到內(nèi)存緩存中。

4.disk cache(硬盤緩存) 一般非腳本會存放在硬盤中,比如css這些。

緩存讀取的原理:先從內(nèi)存中查找對應(yīng)的緩存,如果內(nèi)存中能找到就讀取對應(yīng)的緩存,否則的話就從硬盤中查找對應(yīng)的緩存,如果有就讀取,否則的話,就重新網(wǎng)絡(luò)請求。

那么瀏覽器緩存它又分為2種: 強制緩存 和 協(xié)商緩存 。

協(xié)商緩存原理:客戶端向服務(wù)器端發(fā)出請求,服務(wù)端會檢測是否有對應(yīng)的標(biāo)識,如果沒有對應(yīng)的標(biāo)識,服務(wù)器端會返回一個對應(yīng)的標(biāo)識給客戶端,客戶端下次再次請求的時候,把該標(biāo)識帶過去,然后服務(wù)器端會驗證該標(biāo)識,如果驗證通過了,則會響應(yīng)304,告訴瀏覽器讀取緩存。如果標(biāo)識沒有通過,則返回請求的資源。

那么協(xié)商緩存的標(biāo)識又有2種:ETag/if-None-Match 和 Last-Modified/if-Modify-Since

Last-Modified/if-Modify-Since緩存

瀏覽器第一次發(fā)出請求一個資源的時候,服務(wù)器會返回一個last-Modify到hearer中. Last-Modify 含義是最后的修改時間。

當(dāng)瀏覽器再次請求的時候,request的請求頭會加上 if-Modify-Since,該值為緩存之前返回的 Last-Modify. 服務(wù)器收到if-Modify-Since后,根據(jù)資源的最后修改時間(last-Modify)和該值(if-Modify-Since)進行比較,如果相等的話,則命中緩存,返回304,否則, 如果 Last-Modify > if-Modify-Since, 則會給出200響應(yīng),并且更新Last-Modify為新的值。

ETag/if-None-Match緩存

ETag的原理和上面的last-modified是類似的。ETag則是對當(dāng)前請求的資源做一個唯一的標(biāo)識。該標(biāo)識可以是一個字符串,文件的size,hash等。只要能夠合理標(biāo)識資源的唯一性并能驗證是否修改過就可以了。ETag在服務(wù)器響應(yīng)請求的時候,返回當(dāng)前資源的唯一標(biāo)識(它是由服務(wù)器生成的)。但是只要資源有變化,ETag會重新生成的。瀏覽器再下一次加載的時候會向服務(wù)器發(fā)送請求,會將上一次返回的ETag值放到request header 里的 if-None-Match里面去,服務(wù)器端只要比較客戶端傳來的if-None-Match值是否和自己服務(wù)器上的ETag是否一致,如果一致說明資源未修改過,因此返回304,如果不一致,說明修改過,因此返回200。并且把新的Etag賦值給if-None-Match來更新該值。

last-modified 和 ETag之間對比

在精度上,ETag要優(yōu)先于 last-modified。
在性能上,Etag要遜于Last-Modified,Last-Modified需要記錄時間,而Etag需要服務(wù)器通過算法來計算出一個hash值。
在優(yōu)先級上,服務(wù)器校驗優(yōu)先考慮Etag。
如何通過Nginx配置來優(yōu)化你的網(wǎng)絡(luò)請求?

如上我們可以看到返回值里面有Etag的值。
然后當(dāng)我們再次刷新瀏覽器代碼的時候,瀏覽器將會帶上 if-None-Match請求頭,并賦值為上一次返回頭的Etag的值。然后和服務(wù)器端的Etag的值進行對比,如果相等的話,就會返回304 Not Modified。如下圖所示:
如何通過Nginx配置來優(yōu)化你的網(wǎng)絡(luò)請求?

我們再來改下html的內(nèi)容,我們再來刷新下看看,可以看到頁面內(nèi)容發(fā)生改變了,因此Etag值是不一樣的。如下圖所示
如何通過Nginx配置來優(yōu)化你的網(wǎng)絡(luò)請求?

然后我們繼續(xù)刷新,就會返回304了,因為它會把最新的Etag的值賦值給 if-None-Match請求頭,然后請求的時候,會把該最新值帶過去,因此如下圖所示可以看到。
如何通過Nginx配置來優(yōu)化你的網(wǎng)絡(luò)請求?

強制緩存

基本原理:瀏覽器在加載資源的時候,會先根據(jù)本地緩存資源的header中的信息(Expires 和 Cache-Control)來判斷是否需要強制緩存。如果命中的話,則會直接使用緩存中的資源。否則的話,會繼續(xù)向服務(wù)器發(fā)送請求。

Expires 是http1.0的規(guī)范,它的值是一個絕對時間的GMT格式的時間字符串。這個時間代表的該資源的失效時間,如果在該時間之前請求的話,則都是從緩存里面讀取的。但是使用該規(guī)范時,可能會有一個缺點就是當(dāng)服務(wù)器的時間和客戶端的時間不一樣的情況下,會導(dǎo)致緩存失效。

Cache-Control

Cache-Control 是http1.1的規(guī)范,它是利用該字段max-age值進行判斷的。該值是一個相對時間,比如 Cache-Control: max-age=3600, 代表該資源的有效期是3600秒。除了該字段外,我們還有如下字段可以設(shè)置:

no-cache: 需要進行協(xié)商緩存,發(fā)送請求到服務(wù)器確認(rèn)是否使用緩存。

no-store:禁止使用緩存,每一次都要重新請求數(shù)據(jù)。

public:可以被所有的用戶緩存,包括終端用戶和 cdn 等中間代理服務(wù)器。

private:只能被終端用戶的瀏覽器緩存,不允許 CDN 等中繼緩存服務(wù)器對其緩存。

Cache-Control 與 Expires 可以在服務(wù)端配置同時啟用,同時啟用的時候 Cache-Control 優(yōu)先級高。

Nginx緩存的類型

1.客戶端的緩存(一般指瀏覽器的緩存)。

2.服務(wù)端的緩存(使用proxy-cache實現(xiàn)的)。

Nginx如何配置

知道Nginx虛擬機的配置文件,示例如下圖:

server {
 server_name www.qqdeveloper.com
 location ~* \.(html)$ {
 access_log off;
 add_header Cache-Control max-age=no-cache;
 }

 location ~* \.(css|js|png|jpg|jpeg|gif|gz|svg|mp4|ogg|ogv|webm|htc|xml|woff)$ {
 access_log off;
 add_header Cache-Control max-age=360000;
 }
}

~ 的含義是:通配任意字符(且大小寫不敏感),\轉(zhuǎn)義字符,因此 ~ .(html)$的含義是:匹配所有以.html結(jié)尾的請求

access_log off; 的含義是 關(guān)閉日志功能。

add_header Cache-Control max-age=no-cache; 的含義:html文件不設(shè)置強制緩存時間,協(xié)商緩存,使用 Last-Modified。no-cache 會發(fā)起往返通信來驗證緩存的響應(yīng),但如果資源未發(fā)生變化,則不會下載,返回304。

如下圖
如何通過Nginx配置來優(yōu)化你的網(wǎng)絡(luò)請求?

add_header Cache-Control max-age=360000; 的含義給上面匹配后綴的文件設(shè)置強制緩存,且緩存的時間是360000秒,第一次訪問的時候,從服務(wù)器請求,當(dāng)除了第一次以外,再次刷新瀏覽器,會從瀏覽器緩存讀取,那么強制緩存一般是從內(nèi)存里面先讀取,如果內(nèi)存沒有,再從硬盤讀取。
如何通過Nginx配置來優(yōu)化你的網(wǎng)絡(luò)請求?

本文標(biāo)題:如何通過Nginx配置來優(yōu)化你的網(wǎng)絡(luò)請求?
鏈接地址:http://bm7419.com/article8/igcoip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、面包屑導(dǎo)航定制開發(fā)、響應(yīng)式網(wǎng)站、App開發(fā)、企業(yè)網(wǎng)站制作

廣告

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

h5響應(yīng)式網(wǎng)站建設(shè)