亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

談?wù)凥TTP緩存

xiaodao / 990人閱讀

摘要:但遺憾的是,該響應(yīng)已經(jīng)過期。大多數(shù)情況下,不是必需的,因為明確的緩存信息例如已表示響應(yīng)是可以緩存的。表示響應(yīng)只為單個用戶緩存,因此不允許中間緩存對其進(jìn)行緩存。這樣,即使文件緩存了,也可以得到更新。

在上一篇文章中,我們講到造成網(wǎng)絡(luò)性能下降的主要原因是延遲,而非帶寬。那么為了更好地讓我們的網(wǎng)站能快速響應(yīng)用戶的請求,我們就必須對一些常用資源進(jìn)行緩存,
以免每次用戶訪問都請求一遍,這也是網(wǎng)站性能優(yōu)化比較重要的一個環(huán)節(jié)。

現(xiàn)代瀏覽器都自帶了HTTP緩存實現(xiàn)功能,我們所要做的只是確保我們正確地設(shè)置了HTTP響應(yīng)頭,以便指示瀏覽器何時緩存響應(yīng)以及緩存多久。

首先說明一點,緩存并不是說瀏覽器不會對該資源再次發(fā)起請求,每種緩存機制都有自己的過期策略,我們常??吹降?04狀態(tài)碼就表面該資源已被緩存了,但瀏覽器不知道有沒有過期,
再次使用該資源的時候,會向服務(wù)器發(fā)起請求驗證一遍,如果緩存資源有效,則會返回304狀態(tài)碼。最壞的情況下,則是該資源過期了,還得重新發(fā)起一次請求去獲取。另一種則是瀏覽
器連問都不問服務(wù)器,直接就從本地硬盤讀取,此時可以看到瀏覽器給出的響應(yīng)是200(from disk cache)。

ETag

假設(shè)我們有一份css資源,我們在獲取該資源一段時間后又刷新了頁面,這時瀏覽器就會檢查本地資源并查找之前的響應(yīng)。但遺憾的是,該響應(yīng)已經(jīng)過期。此時,瀏覽器可以直接發(fā)起請求
重新去獲取一份新的數(shù)據(jù),但這樣做效率實在是太低了。若資源本身改變了還好說,但若資源本身并沒有改變呢,重新獲取一份數(shù)據(jù)成本太高。

這時ETag就是用來解決這個問題的,ETag可以看做是這個文件的hash值,只要文件內(nèi)容沒有改變,ETag值則不會變??蛻舳送耆恍枰私釫Tag是怎么生成的,只需要在下一次請求的
時候?qū)Tag帶上即可(瀏覽器發(fā)起請求時,if-None-Match中的值就是該ETag值),若該ETag與服務(wù)器匹配,則會返回304,告訴瀏覽器可以使用該緩存,從而跳過再次下載過程。

Cache-Control

Cache-Control指令控制誰在什么條件下可以緩存響應(yīng)以及可以緩存多久,如上面所說,有些資源我們可以直接從本地磁盤獲取(from disk cache),而無需再次發(fā)起請求詢問服務(wù)器,這
便是Cache-Control的作用。Cache-Control是HTTP/1.1規(guī)范中定義的,現(xiàn)在基本用它來取代Expires。

"no-cahce"與"no-store"

"no-cache"表示必須與服務(wù)器確認(rèn)返回的響應(yīng)是否發(fā)生了變化,然后才能使用該響應(yīng)來滿足后續(xù)對同一資源的請求。該值可以配合ETag來使用,瀏覽器通過請求If-None-Match來向服務(wù)器
驗證該資源是否過期,若資源未發(fā)生變化,則避免下載。

"no-store"則表示無論什么情況下,瀏覽器都不得緩存該資源,即便存在ETag也一樣,每次都得從服務(wù)器中獲取。

"public"與"private"

如果響應(yīng)被標(biāo)記為"public",則即使它有關(guān)聯(lián)的 HTTP 身份驗證,甚至響應(yīng)狀態(tài)代碼通常無法緩存,也可以緩存響應(yīng)。大多數(shù)情況下,“public”不是必需的,因為明確的緩存信息(例如“max-age”)
已表示響應(yīng)是可以緩存的。

"private"表示響應(yīng)只為單個用戶緩存,因此不允許中間緩存對其進(jìn)行緩存。例如,用戶瀏覽器可以緩存包含用戶私人信息的HTML網(wǎng)頁,但CDN則不可以。

"max-age"

該值是Cache-Control中用得比較多的一個值,表示從請求的時間開始,允許獲取的響應(yīng)被緩存的最長時間(單位:秒)。例如,max-age設(shè)置為100,則表示該資源可以緩存100秒,100秒后,再次
請求該資源,瀏覽器則會攜帶ETag去詢問服務(wù)器該資源是否過期。在該資源未過期時,訪問該資源,瀏覽器則從本地磁盤獲取,不會發(fā)起任何網(wǎng)絡(luò)請求。

定義最佳Cache-Control策略

如上圖所示,如果資源不需要緩存,我們設(shè)置Cache-Control的值為no-store;如果資源需要緩存且每次都得向服務(wù)器驗證,則為no-cache;如果中間設(shè)備可以緩存,設(shè)置為public,中間設(shè)備不
可緩存,設(shè)置為private;如果緩存有時間限制,我們設(shè)置max-age的值。private與public的值可以與max-age同時使用,中間用分號隔開。

Expires

Expires頭指定了一個日期/時間,在這個日期/時間之后,HTTP響應(yīng)被認(rèn)為是過時的,一個無效的日期,例如0也表示該資源過時。如果還設(shè)置了max-age,則該請求頭會被忽略。

總結(jié)

使用緩存最好的方式就是ETag配合Cache-Control,并設(shè)置相應(yīng)的max-age,一般情況下,不再建議使用Expires頭。如果資源許久都不更新,max-age可以設(shè)置比較長的時間,但是這樣會有個問題就是
在緩存期間,該文件發(fā)生改變,但相應(yīng)的客戶端卻還是在使用舊版本,解決的方法就是每個文件都帶一個相應(yīng)內(nèi)容的hash值作為文件名。這樣,即使文件緩存了,也可以得到更新。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/61913.html

相關(guān)文章

  • 金三銀四,2019大廠Android高級工程師面試題整理

    摘要:原文地址游客前言金三銀四,很多同學(xué)心里大概都準(zhǔn)備著年后找工作或者跳槽。最近有很多同學(xué)都在交流群里求大廠面試題。 最近整理了一波面試題,包括安卓JAVA方面的,目前大廠還是以安卓源碼,算法,以及數(shù)據(jù)結(jié)構(gòu)為主,有一些中小型公司也會問到混合開發(fā)的知識,至于我為什么傾向于混合開發(fā),我的一句話就是走上編程之路,將來你要學(xué)不僅僅是這些,豐富自己方能與世接軌,做好全棧的裝備。 原文地址:游客kutd...

    tracymac7 評論0 收藏0
  • 談?wù)?/em>對模塊化的理解

    摘要:重要的模塊化規(guī)范有幾個,模塊機制,,。模塊化的目的在于營造安全封閉的作用域且具有易于引用接口,按我的理解可分為模塊定義模塊引入兩部分。它的定義如下模塊標(biāo)識符模塊對外輸出的值調(diào)用該模塊的模塊。在中,有一部分模塊由提供,稱之為核心模塊。 重要的模塊化規(guī)范有幾個:commonjs,ES6模塊機制,AMD,CMD。由于業(yè)務(wù)中一直接觸的都是Vue+webpack+babel架構(gòu)的項目,在封裝代碼...

    silvertheo 評論0 收藏0

發(fā)表評論

0條評論

xiaodao

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<