本篇內(nèi)容主要講解“Nginx客戶端緩存的原理是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Nginx客戶端緩存的原理是什么”吧!
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、網(wǎng)頁(yè)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、蚌埠網(wǎng)站維護(hù)、網(wǎng)站推廣。
緩存對(duì)于Web服務(wù)至關(guān)重要,尤其對(duì)于大型高負(fù)載Web站點(diǎn)。緩存作為性能優(yōu)化的一個(gè)重要手段,可以在極大程度上減輕后端服務(wù)器的負(fù)載。通常對(duì)于靜態(tài)資源,即不經(jīng)常更新的資源,如圖片,CSS或JS等進(jìn)行緩存,而不用每次都向服務(wù)器請(qǐng)求,這樣就可以減輕服務(wù)器的壓力。
緩存可以分為客戶端緩存
和服務(wù)端緩存
。
客戶端緩存指的是瀏覽器緩存
, 瀏覽器緩存是最快的緩存, 因?yàn)樗苯訌谋镜孬@取(但有可能需要發(fā)送一個(gè)協(xié)商緩存的請(qǐng)求), 它的優(yōu)勢(shì)是可以減少網(wǎng)絡(luò)流量, 加快請(qǐng)求速度。
服務(wù)端緩存指的是反向代理服務(wù)器或cdn的緩存, 他的作用是用于減輕后端實(shí)際的Web Server的壓力。
瀏覽器緩存可以分為兩種模式,強(qiáng)緩存
和協(xié)商緩存
。
強(qiáng)緩存(無(wú)HTTP請(qǐng)求,無(wú)需協(xié)商)
直接讀取本地緩存,無(wú)需向服務(wù)端發(fā)送請(qǐng)求確認(rèn),HTTP返回狀態(tài)碼是200(from memory cache或者from disk cache ,不同瀏覽器返回的信息不一致的)。
相關(guān)的HTTP Header
有:
Cache-Control
Expires
協(xié)商緩存(有HTTP請(qǐng)求,需協(xié)商)
瀏覽器雖然發(fā)現(xiàn)了本地有該資源的緩存,但是緩存已經(jīng)過(guò)期,于是向服務(wù)器詢問(wèn)緩存內(nèi)容是否還可以使用,若服務(wù)器認(rèn)為瀏覽器的緩存內(nèi)容還可用,那么便會(huì)返回304(Not Modified)HTTP狀態(tài)碼,告訴瀏覽器讀取本地緩存;如果服務(wù)器認(rèn)為瀏覽器的緩存內(nèi)容已經(jīng)改變,則返回新的請(qǐng)求的資源。
相關(guān)的HTTP Header
有:
Last-Modified
ETag
由于網(wǎng)站內(nèi)容的經(jīng)常變化,為了保持緩存的內(nèi)容與網(wǎng)站服務(wù)器的內(nèi)容一致,客戶端會(huì)通過(guò)內(nèi)容緩存的有效期(強(qiáng)制緩存)以及Web服務(wù)器提供的訪問(wèn)請(qǐng)求的校驗(yàn)(協(xié)商緩存),快速判斷請(qǐng)求的內(nèi)容是否已經(jīng)更新。客戶端緩存校驗(yàn)流程圖如下:
強(qiáng)制緩存原理:瀏覽器在加載資源的時(shí)候,會(huì)先根據(jù)本地緩存資源的header中的信息(Expires 和 Cache-Control)來(lái)判斷緩存是否過(guò)期。如果緩存沒(méi)有過(guò)期,則會(huì)直接使用緩存中的資源;否則,會(huì)向服務(wù)端發(fā)起協(xié)商緩存的請(qǐng)求。
客戶端判斷緩存是否過(guò)期和先前請(qǐng)求時(shí)服務(wù)端返回的HTTP消息頭字段有關(guān):
服務(wù)端返回字段 | 作用 |
---|---|
Cache-Control: max-age=x | 客戶端緩存時(shí)間超出x秒后則緩存過(guò)期。 |
Cache-Control: no-cache | 客戶端不能直接使用本地緩存的響應(yīng),需要進(jìn)行協(xié)商緩存,發(fā)送請(qǐng)求到服務(wù)器確認(rèn)是否可以使用緩存。如果Web服務(wù)器返回304,則客戶端使用本地緩存,如果返回200,則使用Web服務(wù)器返回的新的數(shù)據(jù)。 |
Cache-Control: no-store | 客戶端不能對(duì)響應(yīng)進(jìn)行緩存。 |
Cache-Control: public | 可以被所有的用戶緩存,包括終端用戶和 CDN 等中間代理服務(wù)器。 |
Cache-Control:private | 只能被終端用戶的瀏覽器緩存,不允許 CDN 等中繼緩存服務(wù)器對(duì)其緩存。 |
expires x | 客戶端緩存時(shí)間超出x秒后則緩存過(guò)期,優(yōu)先級(jí)比Cache-Control: max-age=x低。 |
協(xié)商緩存原理:當(dāng)客戶端向服務(wù)端發(fā)起請(qǐng)求時(shí),服務(wù)端會(huì)檢查請(qǐng)求中是否有對(duì)應(yīng)的標(biāo)識(shí)(If-Modified-Since或Etag),如果沒(méi)有對(duì)應(yīng)的標(biāo)識(shí),服務(wù)器端會(huì)返回標(biāo)識(shí)給客戶端,客戶端下次再次請(qǐng)求的時(shí)候,把該標(biāo)識(shí)帶過(guò)去,然后服務(wù)器端會(huì)驗(yàn)證該標(biāo)識(shí),如果驗(yàn)證通過(guò)了,則會(huì)響應(yīng)304,告訴瀏覽器讀取緩存。如果標(biāo)識(shí)沒(méi)有通過(guò),則返回請(qǐng)求的資源。
Last-Modified
與If-Modified-Since
屬于HTTP/1.0,是用于服務(wù)端對(duì)響應(yīng)數(shù)據(jù)修改時(shí)間進(jìn)行校驗(yàn)的服務(wù)端校驗(yàn)方法。Last-Modified的值是由服務(wù)端生成后傳遞給客戶端的,客戶端發(fā)送請(qǐng)求時(shí),會(huì)將本地內(nèi)容緩存中的Last-Modified的值由請(qǐng)求消息頭的If-Modified-Since字段傳遞給服務(wù)端,如果服務(wù)端的被請(qǐng)求的內(nèi)容的最后修改時(shí)間和If-Modified-Since的(默認(rèn)是exact精確匹配)值不一致,則將返回新的內(nèi)容,否則返回響應(yīng)狀態(tài)碼304,客戶端將使用本地緩存。
Etag
與If-None-Match
屬于HTTP/1.1,優(yōu)先級(jí)高于Last-Modified的驗(yàn)證,是用于服務(wù)端對(duì)響應(yīng)數(shù)據(jù)進(jìn)行實(shí)體標(biāo)簽校驗(yàn)的服務(wù)端校驗(yàn)方法。Etag類似于身份指紋,是一個(gè)可以與Web資源關(guān)聯(lián)的記號(hào)。當(dāng)客戶端第一次發(fā)起請(qǐng)求時(shí),Etag的值在響應(yīng)頭中傳遞給客戶端;當(dāng)客戶端再次發(fā)起請(qǐng)求時(shí),如果驗(yàn)證完本地內(nèi)容緩存后需要發(fā)起服務(wù)端驗(yàn)證,Etag的值將由請(qǐng)求消息頭的If-None-Match字段傳遞給服務(wù)端。如果服務(wù)端驗(yàn)證If-None-Match的值與服務(wù)端的Etag值不匹配,則認(rèn)為請(qǐng)求的內(nèi)容已經(jīng)更新,服務(wù)端將會(huì)返回新的內(nèi)容,否則返回響應(yīng)狀態(tài)碼304,客戶端將使用本地緩存。
下圖可以看到客戶端第一次請(qǐng)求時(shí),客戶端請(qǐng)求中沒(méi)有If-Modified-Since和Etag標(biāo)識(shí),服務(wù)端響應(yīng)了200,并且返回了Etag和Last-Modified消息頭。
當(dāng)?shù)诙慰蛻舳苏?qǐng)求時(shí),帶上了If-Modified-Since和If-None-Match消息頭,并且服務(wù)端經(jīng)過(guò)校驗(yàn)后返回了304讓客戶端使用本地緩存。
當(dāng)按下F5或者刷新時(shí),客戶端瀏覽器會(huì)添加請(qǐng)求消息頭字段Cache-Control: max-age=0,該請(qǐng)求不進(jìn)行內(nèi)容緩存的本地驗(yàn)證,會(huì)直接向Web服務(wù)器發(fā)起請(qǐng)求,服務(wù)端根據(jù)If-Modified-Since或者If-None-Match的值進(jìn)行驗(yàn)證。
當(dāng)按下Ctrl+F5或者強(qiáng)制刷新時(shí),客戶端瀏覽器會(huì)添加請(qǐng)求消息頭字段Cache-Control: no-cache,并且忽略所有服務(wù)端驗(yàn)證的消息頭字段(Etag和Last-Modified),該請(qǐng)求不進(jìn)行內(nèi)容緩存的本地驗(yàn)證,它會(huì)直接向Web服務(wù)器發(fā)起請(qǐng)求,因?yàn)檎?qǐng)求中沒(méi)有攜帶服務(wù)端驗(yàn)證的消息頭字段,服務(wù)端會(huì)直接返回新的內(nèi)容。
max-age:不想要在代理服務(wù)器中緩存了太長(zhǎng)時(shí)間(>max-age seconds)的資源。
max-stale:可以接收代理服務(wù)器上的過(guò)期緩存。若max-stable后沒(méi)有值,則表示無(wú)論過(guò)期多久客戶端都可以使用。
min-fresh:要求服務(wù)器使用其緩存時(shí),至少保證在min-fresh秒內(nèi)不會(huì)過(guò)期。
no-cache:告訴代理服務(wù)器,不能直接使用已有緩存作為響應(yīng)返回,除非帶著緩存條件到上游服務(wù)端得到 304 驗(yàn)證返回碼才可使用現(xiàn)有緩存。
no-store:告訴各代理服務(wù)器不得緩存這個(gè)請(qǐng)求及其相應(yīng)。
no-transform: 告訴代理服務(wù)器不要修改消息包體的內(nèi)容。
only-if-cached:告訴代理服務(wù)器僅能返回緩存,沒(méi)有緩存的話就返回 504。
max-age:告訴客戶端緩存 Age 超出 max-age 秒后則緩存過(guò)期。
s-maxage:與max-age相似,但僅針對(duì)共享緩存,且優(yōu)先級(jí)高于max-age和Expires。
public:可以被所有的用戶緩存,包括終端用戶和 CDN 等中間代理服務(wù)器。
private: 只能被終端用戶的瀏覽器緩存,不允許 CDN 等中繼緩存服務(wù)器對(duì)其緩存。
no-store:告訴所有下游節(jié)點(diǎn)不能對(duì)響應(yīng)進(jìn)行緩存。
no-cache: 告訴客戶端不能直接使用緩存的響應(yīng),使用前必須在源服務(wù)器驗(yàn)證得到304返回碼。
no-transform:告訴代理服務(wù)器不能修改消息包體的內(nèi)容。
must-revalidate:告訴客戶端一旦緩存過(guò)期,必須向服務(wù)器驗(yàn)證后才可使用。
proxy-revalidate:與 must-revalidate 類似,但它僅對(duì)代理服務(wù)器的共享緩存有效。
到此,相信大家對(duì)“Nginx客戶端緩存的原理是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
當(dāng)前文章:Nginx客戶端緩存的原理是什么
標(biāo)題網(wǎng)址:http://jinyejixie.com/article10/pgisgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司、標(biāo)簽優(yōu)化、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)