91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nginx客戶端緩存的原理是什么

發布時間:2021-11-30 11:53:19 來源:億速云 閱讀:163 作者:iii 欄目:云計算

本篇內容主要講解“Nginx客戶端緩存的原理是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Nginx客戶端緩存的原理是什么”吧!

緩存的作用

緩存對于Web服務至關重要,尤其對于大型高負載Web站點。緩存作為性能優化的一個重要手段,可以在極大程度上減輕后端服務器的負載。通常對于靜態資源,即不經常更新的資源,如圖片,CSS或JS等進行緩存,而不用每次都向服務器請求,這樣就可以減輕服務器的壓力。

緩存的分類

緩存可以分為客戶端緩存服務端緩存

  • 客戶端緩存指的是瀏覽器緩存, 瀏覽器緩存是最快的緩存, 因為它直接從本地獲取(但有可能需要發送一個協商緩存的請求), 它的優勢是可以減少網絡流量, 加快請求速度。

  • 服務端緩存指的是反向代理服務器或CDN的緩存, 他的作用是用于減輕后端實際的Web Server的壓力。

瀏覽器緩存可以分為兩種模式,強緩存協商緩存

  • 強緩存(無HTTP請求,無需協商)

    直接讀取本地緩存,無需向服務端發送請求確認,HTTP返回狀態碼是200(from memory cache或者from disk cache ,不同瀏覽器返回的信息不一致的)。

    相關的HTTP Header有:

    • Cache-Control

    • Expires

  • 協商緩存(有HTTP請求,需協商)

    瀏覽器雖然發現了本地有該資源的緩存,但是緩存已經過期,于是向服務器詢問緩存內容是否還可以使用,若服務器認為瀏覽器的緩存內容還可用,那么便會返回304(Not Modified)HTTP狀態碼,告訴瀏覽器讀取本地緩存;如果服務器認為瀏覽器的緩存內容已經改變,則返回新的請求的資源。

    相關的HTTP Header有:

    • Last-Modified

    • ETag

緩存校驗流程

由于網站內容的經常變化,為了保持緩存的內容與網站服務器的內容一致,客戶端會通過內容緩存的有效期(強制緩存)以及Web服務器提供的訪問請求的校驗(協商緩存),快速判斷請求的內容是否已經更新。客戶端緩存校驗流程圖如下:

Nginx客戶端緩存的原理是什么

強制緩存

強制緩存原理: 瀏覽器在加載資源的時候,會先根據本地緩存資源的header中的信息(Expires 和 Cache-Control)來判斷緩存是否過期。如果緩存沒有過期,則會直接使用緩存中的資源;否則,會向服務端發起協商緩存的請求。

客戶端判斷緩存是否過期和先前請求時服務端返回的HTTP消息頭字段有關:

服務端返回字段作用
Cache-Control: max-age=x客戶端緩存時間超出x秒后則緩存過期。
Cache-Control: no-cache客戶端不能直接使用本地緩存的響應,需要進行協商緩存,發送請求到服務器確認是否可以使用緩存。如果Web服務器返回304,則客戶端使用本地緩存,如果返回200,則使用Web服務器返回的新的數據。
Cache-Control: no-store客戶端不能對響應進行緩存。
Cache-Control: public可以被所有的用戶緩存,包括終端用戶和 CDN 等中間代理服務器。
Cache-Control:private只能被終端用戶的瀏覽器緩存,不允許 CDN 等中繼緩存服務器對其緩存。
expires x客戶端緩存時間超出x秒后則緩存過期,優先級比Cache-Control: max-age=x低。

協商緩存

協商緩存原理: 當客戶端向服務端發起請求時,服務端會檢查請求中是否有對應的標識(If-Modified-Since或Etag),如果沒有對應的標識,服務器端會返回標識給客戶端,客戶端下次再次請求的時候,把該標識帶過去,然后服務器端會驗證該標識,如果驗證通過了,則會響應304,告訴瀏覽器讀取緩存。如果標識沒有通過,則返回請求的資源。

Last-ModifiedIf-Modified-Since屬于HTTP/1.0,是用于服務端對響應數據修改時間進行校驗的服務端校驗方法。Last-Modified的值是由服務端生成后傳遞給客戶端的,客戶端發送請求時,會將本地內容緩存中的Last-Modified的值由請求消息頭的If-Modified-Since字段傳遞給服務端,如果服務端的被請求的內容的最后修改時間和If-Modified-Since的(默認是exact精確匹配)值不一致,則將返回新的內容,否則返回響應狀態碼304,客戶端將使用本地緩存。

EtagIf-None-Match屬于HTTP/1.1,優先級高于Last-Modified的驗證,是用于服務端對響應數據進行實體標簽校驗的服務端校驗方法。Etag類似于身份指紋,是一個可以與Web資源關聯的記號。當客戶端第一次發起請求時,Etag的值在響應頭中傳遞給客戶端;當客戶端再次發起請求時,如果驗證完本地內容緩存后需要發起服務端驗證,Etag的值將由請求消息頭的If-None-Match字段傳遞給服務端。如果服務端驗證If-None-Match的值與服務端的Etag值不匹配,則認為請求的內容已經更新,服務端將會返回新的內容,否則返回響應狀態碼304,客戶端將使用本地緩存。

下圖可以看到客戶端第一次請求時,客戶端請求中沒有If-Modified-Since和Etag標識,服務端響應了200,并且返回了Etag和Last-Modified消息頭。

Nginx客戶端緩存的原理是什么 當第二次客戶端請求時,帶上了If-Modified-Since和If-None-Match消息頭,并且服務端經過校驗后返回了304讓客戶端使用本地緩存。 Nginx客戶端緩存的原理是什么

用戶行為對瀏覽器緩存的影響

當按下F5或者刷新時,客戶端瀏覽器會添加請求消息頭字段Cache-Control: max-age=0,該請求不進行內容緩存的本地驗證,會直接向Web服務器發起請求,服務端根據If-Modified-Since或者If-None-Match的值進行驗證。

當按下Ctrl+F5或者強制刷新時,客戶端瀏覽器會添加請求消息頭字段Cache-Control: no-cache,并且忽略所有服務端驗證的消息頭字段(Etag和Last-Modified),該請求不進行內容緩存的本地驗證,它會直接向Web服務器發起請求,因為請求中沒有攜帶服務端驗證的消息頭字段,服務端會直接返回新的內容。

Cache-Control字段在請求和響應中的含義

客戶端請求

  • max-age:不想要在代理服務器中緩存了太長時間(>max-age seconds)的資源。

  • max-stale:可以接收代理服務器上的過期緩存。若max-stable后沒有值,則表示無論過期多久客戶端都可以使用。

  • min-fresh:要求服務器使用其緩存時,至少保證在min-fresh秒內不會過期。

  • no-cache:告訴代理服務器,不能直接使用已有緩存作為響應返回,除非帶著緩存條件到上游服務端得到 304 驗證返回碼才可使用現有緩存。

  • no-store:告訴各代理服務器不得緩存這個請求及其相應。

  • no-transform: 告訴代理服務器不要修改消息包體的內容。

  • only-if-cached:告訴代理服務器僅能返回緩存,沒有緩存的話就返回 504。

服務端響應

  • max-age:告訴客戶端緩存 Age 超出 max-age 秒后則緩存過期。

  • s-maxage:與max-age相似,但僅針對共享緩存,且優先級高于max-age和Expires。

  • public:可以被所有的用戶緩存,包括終端用戶和 CDN 等中間代理服務器。

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

  • no-store:告訴所有下游節點不能對響應進行緩存。

  • no-cache: 告訴客戶端不能直接使用緩存的響應,使用前必須在源服務器驗證得到304返回碼。

  • no-transform:告訴代理服務器不能修改消息包體的內容。

  • must-revalidate:告訴客戶端一旦緩存過期,必須向服務器驗證后才可使用。

  • proxy-revalidate:與 must-revalidate 類似,但它僅對代理服務器的共享緩存有效。

到此,相信大家對“Nginx客戶端緩存的原理是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孝昌县| 定州市| 大港区| 广丰县| 客服| 翁牛特旗| 乐平市| 德庆县| 桂平市| 浠水县| 海阳市| 余姚市| 彰化市| 澄迈县| 林周县| 信丰县| 于田县| 田阳县| 南投县| 永新县| 曲麻莱县| 泗洪县| 浦北县| 昌宁县| 桃江县| 太原市| 正镶白旗| 射阳县| 锡林郭勒盟| 湘潭县| 海阳市| 宜黄县| 巴彦淖尔市| 东乡| 中宁县| 九寨沟县| 许昌县| 岱山县| 永宁县| 曲阜市| 清水河县|