国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
NodeJS中的客戶端緩存、瀏覽器緩存、304緩存和OnceIO的緩存控制

OnceIOOnceDoc 企業(yè)私有內(nèi)容(網(wǎng)盤)管理系統(tǒng)的底層Web框架,它可以實(shí)現(xiàn)模板文件、靜態(tài)文件的全緩存,運(yùn)行起來完全不需要I/O操作,并且支持客戶端緩存優(yōu)化,GZIP壓縮等(只壓縮一次),擁有非常好的性能,為您節(jié)約服務(wù)器成本。它的模塊化功能,可以讓你的Web進(jìn)行分布式存儲(chǔ),在一個(gè)擴(kuò)展包里即可包含前端、后端和數(shù)據(jù)庫定義,只需通過添加/刪除目錄的方式就可實(shí)現(xiàn)功能刪減,實(shí)現(xiàn)真正的模塊化擴(kuò)展。目前 OnceIO 已經(jīng)開源,這里是介紹如何使用的一系列文章。

客戶端緩存

緩存定義

這里討論的緩存是指 web 緩存:一個(gè) web 資源(如 html 頁面、圖片、文件等)在服務(wù)器和客戶端(瀏覽器)之間的副本。緩存會(huì)根據(jù)進(jìn)來的請(qǐng)求保存請(qǐng)求輸出的內(nèi)容的副本;然后,如果下一個(gè)請(qǐng)求是相同的 URL,且網(wǎng)頁在這段時(shí)間內(nèi)沒有更新,瀏覽器就不會(huì)再次下載網(wǎng)頁,而是直接使用本地緩存的網(wǎng)頁副本。

緩存的作用主要有:

  • 節(jié)約帶寬。
  • 減少延遲。
  • 降低服務(wù)器壓力。

客戶端(瀏覽器)的緩存機(jī)制

所有的緩存都有一套規(guī)則來幫助它們決定什么情況下使用緩存中的副本,什么情況下向源服務(wù)器再次發(fā)送請(qǐng)求。這些規(guī)則有的在協(xié)議(如 HTTP 協(xié)議 1.0 和 1.1)中有定義,有的則是由緩存的管理員(如 DBA、瀏覽器的用戶、代理服務(wù)器管理員或者應(yīng)用開發(fā)者)設(shè)置。

對(duì)于瀏覽器端的緩存,這些規(guī)則是在 HTTP 協(xié)議頭和 html 頁面的 meta 標(biāo)簽中定義的。它們從新鮮度和校驗(yàn)值兩個(gè)維度來決定瀏覽器是否可以直接使用緩存中的副本。

新鮮度(過期機(jī)制):也就是緩存副本有效期。一個(gè)緩存副本必須滿足以下條件,瀏覽器才會(huì)認(rèn)為它是有效的:

  1. 含有完整的過期時(shí)間控制頭信息(HTTP協(xié)議報(bào)頭),并且仍在有效期內(nèi);
  2. 瀏覽器已經(jīng)使用過這個(gè)緩存副本,并且在一個(gè)會(huì)話中已經(jīng)檢查過新鮮度;

滿足以上兩個(gè)情況的一種,瀏覽器會(huì)直接從緩存中獲取副本并渲染。

校驗(yàn)值(驗(yàn)證機(jī)制):服務(wù)器返回資源的時(shí)候有時(shí)在控制頭信息帶上這個(gè)資源的實(shí)體標(biāo)簽 ETag(Entity Tag),它可以用來作為瀏覽器再次請(qǐng)求過程的校驗(yàn)標(biāo)識(shí)。如過發(fā)現(xiàn)校驗(yàn)標(biāo)識(shí)不匹配,說明資源已經(jīng)被修改或過期,瀏覽器需求重新獲取資源內(nèi)容。

常用的與緩存有關(guān)的 HTTP 消息報(bào)頭

消息報(bào)頭 類型 作用 規(guī)則
Status Code 200 OK 普通 表明服務(wù)器成功返回網(wǎng)頁 不適用
  304 Not Modified 普通 表明當(dāng)前資源的內(nèi)容(自上次訪問以來或根據(jù)請(qǐng)求的條件)沒有修改過,服務(wù)器不返回網(wǎng)頁內(nèi)容 不適用
Cache-Control max-age=315360000 響應(yīng) 指明緩沖副本的有效時(shí)長(zhǎng),單位為秒 新鮮度
Expires Thu, 31 Dec 2037 23:55:55 GMT 響應(yīng) 告訴瀏覽器在過期時(shí)間前可以使用副本 新鮮度
Last-Modified Sun, 23 Oct 2016 06:36:08 GMT 響應(yīng) 告訴瀏覽器當(dāng)前資源的最近一次修改時(shí)間 新鮮度
If-Modified-Since Sun, 23 Oct 2016 06:36:08 GMT 請(qǐng)求 如果瀏覽器第一次請(qǐng)求時(shí)響應(yīng)中 Last-Modified 非空,第二次請(qǐng)求同一資源時(shí),會(huì)把它作為該項(xiàng)的值發(fā)給服務(wù)器 新鮮度
ETag 978534 響應(yīng) 告訴瀏覽器當(dāng)前資源在服務(wù)器的唯一標(biāo)識(shí)符(生成規(guī)則由服務(wù)器決定) 校驗(yàn)值
If-None-Match 978534 請(qǐng)求 如果瀏覽器第一次請(qǐng)求時(shí)響應(yīng)中 ETag 非空,第二次請(qǐng)求同一資源時(shí),會(huì)把它作為該項(xiàng)的值發(fā)給服務(wù)器 校驗(yàn)值

以訪問網(wǎng)站 http://oncedoc.com/ 為例,網(wǎng)站的 shader.css 文件的 HTTP 頭信息為:

客戶端緩存生效的常見流程

服務(wù)器收到請(qǐng)求時(shí),在 200 OK 響應(yīng)中回送該資源的 Last-Modified 和 ETag,客戶端將該資源保存在緩存中,并記錄這兩個(gè)屬性。當(dāng)客戶端再次發(fā)送相同的請(qǐng)求時(shí),會(huì)在請(qǐng)求中攜帶 If-Modified-Since 和 If-None-Match 兩個(gè)消息報(bào)頭。兩個(gè)報(bào)頭的值分別是上次請(qǐng)求收到的響應(yīng)中 Last-Modified 和 ETag 的值。服務(wù)器通過這兩個(gè)頭判斷本地資源未發(fā)生變化,客戶端不需要重新下載,返回 304 響應(yīng)。以訪問 oncedoc.com 為例,客戶端緩存生效流程如下:

用戶操作行為與緩存

用戶在使用瀏覽器的時(shí)的各種操作,如輸入地址后回車,按F5刷新等,對(duì)緩存有可能會(huì)造成影響。

用戶操作 Expires/Cache-Controll Last-Modified/ETag
地址欄回車 有效 有效
頁面鏈接跳轉(zhuǎn) 有效 有效
新開窗口 有效 有效
前進(jìn)后退 有效 有效
F5 刷新 無效 有效
Ctrl+F5 強(qiáng)制刷新 無效 無效

當(dāng)用戶在按 F5 進(jìn)行刷新時(shí),瀏覽器會(huì)忽略 Expires/Cache-Control 的設(shè)置,再次向服務(wù)器發(fā)送請(qǐng)求,而 Last-Modified/Etag 仍然是有效的,服務(wù)器會(huì)根據(jù)情況判斷返回 304 還是 200 ;而當(dāng)用戶使用 Ctrl+F5 進(jìn)行強(qiáng)制刷新的時(shí)候,所有的緩存機(jī)制都將失效,;瀏覽器將重新從服務(wù)器下載資源并返回 200。

在服務(wù)器端設(shè)置客戶端緩存機(jī)制

瀏覽器端緩存

運(yùn)行服務(wù)器,訪問 localhost:8054/img,打開瀏覽器開發(fā)者工具中的 Network 欄,地址欄回車,Network 顯示:

此時(shí)瀏覽器直接從本地獲取圖片資源,瀏覽器和服務(wù)器之間并沒有進(jìn)行I/O操作。瀏覽器沒有問服務(wù)器端是否有更新,而直接從本地緩存中獲取資源。

res.cache(0)

有時(shí)侯,我們可能需要禁用瀏覽器端的緩存機(jī)制,然后讓瀏覽器發(fā)送一次請(qǐng)求詢問是否有更新(比如ajax操作)??梢杂锰砑右粋€(gè) cache-control的header: res.cache(0),即0秒后立即失效(不緩存),示例代碼如下:

app.use(function(req, res) {  res.cache(0)  req.filter.next()})app.get('/img', function(req, res) {  res.render('img.html')})

此時(shí)瀏覽器與服務(wù)器之間會(huì)進(jìn)行一次 I/O,如果本地緩文件的修改時(shí)間(IF-Modify-since)與服務(wù)器端的一致,即沒有修改,則OnceIO會(huì)發(fā)出 304 響應(yīng)(如圖所示),告訴瀏覽器從本地緩存中獲取資源;如果服務(wù)器端文件有更新,OnceIO則會(huì)發(fā)出 200 響應(yīng),并將更新資源重新發(fā)給瀏覽器。

此時(shí)服務(wù)器端通過304告訴瀏覽器從本地緩存中獲取資源。

通過res.cache接口,您可以根據(jù)您應(yīng)用的Release周期(周、月)來設(shè)置資源文件緩存的最大緩存時(shí)間,來優(yōu)化您的應(yīng)用,比如一周后過期:

res.cache(7*24*3600)

下一節(jié)我們將介紹OnceIO的服務(wù)器端的模板和靜態(tài)文件緩存和gzip壓縮機(jī)制,和其一次讀取,永久使用的實(shí)現(xiàn)原理。

OnceIO項(xiàng)目: https://github.com/OnceDoc/onceio

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【W(wǎng)eb緩存機(jī)制概述】2 – Web瀏覽器的緩存機(jī)制
瀏覽器緩存機(jī)制詳解
Web緩存基礎(chǔ):術(shù)語、HTTP報(bào)頭和緩存策略
HTTP緩存相關(guān)頭
Service Worker cache 相比 HTTP cache 的一些優(yōu)點(diǎn)
接口測(cè)試第七課(cache)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服