<li id="ggsgy"></li>
<rt id="ggsgy"><acronym id="ggsgy"></acronym></rt>
  • <li id="ggsgy"><source id="ggsgy"></source></li>
    <strike id="ggsgy"></strike>
  • 當(dāng)前位置:第一POS網(wǎng) > pos機知識點 >

    瀏覽器緩存機制post

    瀏覽:159 發(fā)布日期:2023-04-28 00:00:00 投稿人:佚名投稿

    1、瀏覽器緩存機制

    有dns的地方,就有緩存。瀏覽器、操作系統(tǒng)、Local DNS、根域名服務(wù)器,它們都會對DNS結(jié)果做一定程度的緩存。

    DNS查詢過程如下:

    首先搜索瀏覽器自身的DNS緩存,如果存在,則域名解析到此完成。
    如果瀏覽器自身的緩存里面沒有找到對應(yīng)的條目,那么會嘗試讀取操作系統(tǒng)的hosts文件看是否存在對應(yīng)的映射關(guān)系,如果存在,則域名解析到此完成。
    如果本地hosts文件不存在映射關(guān)系,則查找本地DNS服務(wù)器(ISP服務(wù)器,或者自己手動設(shè)置的DNS服務(wù)器),如果存在,域名到此解析完成。
    如果本地DNS服務(wù)器還沒找到的話,它就會向根服務(wù)器發(fā)出請求,進行遞歸查詢。

    瀏覽器本地緩存失效后,瀏覽器會向CDN邊緣節(jié)點發(fā)起請求。類似瀏覽器緩存,CDN邊緣節(jié)點也存在著一套緩存機制。CDN邊緣節(jié)點緩存策略因服務(wù)商不同而不同,但一般都會遵循h(huán)ttp標(biāo)準(zhǔn)協(xié)議,通過http響應(yīng)頭中的
    Cache-control: max-age 的字段來設(shè)置CDN邊緣節(jié)點數(shù)據(jù)緩存時間。

    當(dāng)瀏覽器向CDN節(jié)點請求數(shù)據(jù)時,CDN節(jié)點會判斷緩存數(shù)據(jù)是否過期,若緩存數(shù)據(jù)并沒有過期,則直接將緩存數(shù)據(jù)返回給客戶端;否則,CDN節(jié)點就會向服務(wù)器發(fā)出回源請求,從服務(wù)器拉取最新數(shù)據(jù),更新本地緩存,并將最新數(shù)據(jù)返回給客戶端。 CDN服務(wù)商一般會提供基于文件后綴、目錄多個維度來指定CDN緩存時間,為用戶提供更精細化的緩存管理。

    CDN 優(yōu)勢
    CDN節(jié)點解決了跨運營商和跨地域訪問的問題,訪問延時大大降低。
    大部分請求在CDN邊緣節(jié)點完成,CDN起到了分流作用,減輕了源服務(wù)器的負載。

    http請求報文(request)
    請求行
    請求方法  空格  URL 空格  協(xié)議版本 回車符 換行符
    請求頭(通用信息頭、請求頭、實體頭)
    頭部字段名 冒號  值  回車鍵 換行符
    ...
    頭部字段名 冒號  值  回車鍵 換行符
    空行
    回車符   換行符
    實體主體(只有post請求有)
    主體

    http響應(yīng)報文(response)
    狀態(tài)行
    協(xié)議版本  空格  狀態(tài)碼 空格  狀態(tài)碼描述 回車符 換行符
    響應(yīng)頭部
    頭部字段名 冒號  值   回車符 換行符
    ...
    頭部字段名 冒號  值   回車符 換行符
    空行
    回車符   換行符
    響應(yīng)正文
    正文

    瀏覽器初次向服務(wù)器發(fā)起請求后拿到請求結(jié)果,會根據(jù)響應(yīng)報文中HTTP頭的緩存標(biāo)識,決定是否緩存返回的結(jié)果,是則將請求結(jié)果和緩存標(biāo)識存入瀏覽器緩存中

    瀏覽器每次發(fā)起請求,都會現(xiàn)在瀏覽器緩存中查找該請求的結(jié)果以及緩存標(biāo)識
    瀏覽器                瀏覽器緩存        服務(wù)器

    ——————第一次發(fā)起http請求——————>

    <——沒有該請求的緩存結(jié)果和緩存標(biāo)識————

    ——————————————發(fā)起http請求——————————————>

    <——————————返回該請求結(jié)果和緩存規(guī)則————————————

    ——將請求結(jié)果和緩存標(biāo)識存入瀏覽器緩存——>

    強制緩存就是向瀏覽器緩存查找結(jié)果,并根據(jù)該結(jié)果的緩存規(guī)則來決定是否使用該緩存結(jié)果的過程

    強制緩存的情況分為三種:
    1、不存在該緩存結(jié)果和緩存標(biāo)識,強制緩存失效,直接向服務(wù)器發(fā)起請求
    2、存在該緩存結(jié)果和緩存標(biāo)識,但結(jié)果已經(jīng)失效,強制緩存失效,使用協(xié)商緩存
    3、存在該緩存結(jié)果和緩存標(biāo)識,且該結(jié)果沒有失效,強制緩存生效,直接返回該結(jié)果

    控制強制緩存的字段:Expires,Cache-Control

    Expires 是 HTTP/1.0 控制緩存的字段,值為服務(wù)器返回該請求的結(jié)果緩存時間
    即再次發(fā)送請求是,客戶端時間 小于 Expires的值,直接使用緩存結(jié)果

    Cache-Control 是HTTP/1.1的規(guī)則,主要用于控制網(wǎng)頁緩存,主要取值為:
    public:所有的內(nèi)容都緩存(客戶端和代理服務(wù)器都可以緩存)
    private:所有內(nèi)容只有客戶端可以緩存(默認值)
    no-cache:客戶端緩存內(nèi)容,但是是否使用緩存則需要經(jīng)過協(xié)商緩存來驗證決定
    no-store:即不使用強制緩存,也不使用協(xié)商緩存
    max-age=xxx:緩存內(nèi)容將在xxx秒后失效

    Expires 是一個絕對值
    Cache-Control 中 max-age 是相對值,解決了 Expires時期 服務(wù)端與客戶端 可能出現(xiàn)時間差的問題

    注:Expires和Cache-Control同時存在時,只有Cache-Control生效

    協(xié)商緩存就是強制緩存失效后,瀏覽器攜帶緩存標(biāo)識向服務(wù)器發(fā)起請求,由服務(wù)器根據(jù)緩存標(biāo)識決定是否使用緩存的過程

    協(xié)商緩存的兩種情況:
    1、協(xié)商緩存生效,返回304,繼續(xù)使用緩存
    過程:
    瀏覽器                 瀏覽器緩存     服務(wù)器

    ————————發(fā)起http請求————————>

    <——該請求的緩存結(jié)果失效,只返回緩存標(biāo)識——

    ————————攜帶該資源的緩存標(biāo)識,發(fā)起http請求————————>

    <—————————————304,該資源無更新————————————

    ——————獲取該請求的緩存結(jié)果——————>

    <——————返回該請求的緩存結(jié)果——————

    2、協(xié)商緩存失敗,返回200和請求結(jié)果
    過程:
    瀏覽器                 瀏覽器緩存     服務(wù)器

    ————————發(fā)起http請求————————>

    <——該請求的緩存結(jié)果失效,只返回緩存標(biāo)識——

    ————————攜帶該資源的緩存標(biāo)識,發(fā)起http請求————————>

    <————————200,資源已更新,重新返回請求和結(jié)果———————

    ——將該請求結(jié)果和緩存標(biāo)識存入瀏覽器緩存中—>

    協(xié)商緩存的標(biāo)識也是在響應(yīng)報文的HTTP頭中和請求結(jié)果一起返回給瀏覽器的

    控制協(xié)商緩存的字段:
    (1) Last-Modified/If-Modified-Since:Last-Modified是服務(wù)器響應(yīng)請求是,返回該資源文件在服務(wù)器最后被修改的時間;If-Modified-Since再次發(fā)起請求時,攜帶上次返回的Last-Modified的值,服務(wù)器將該字段值與該資源最后修改時間對比,決定是否用緩存
    (2)Etag/If-None-Match:Etag服務(wù)器響應(yīng)請求時,返回當(dāng)前資源文件的一個唯一標(biāo)識,由服務(wù)器生成之;If-None-Match是再次發(fā)起請求時,攜帶上次返回的唯一標(biāo)識Etag的值,服務(wù)器收到后,將該字段值與該資源在服務(wù)器上的Etag對比,一致 則返回304,否則返回200

    注:Etag/If-None-Match優(yōu)先級高于Last-Modified/If-Modified-Since,同時存在時只有Etag/If-None-Match生效

    瀏覽器緩存分為:內(nèi)存緩存 和 硬盤緩存

    內(nèi)存緩存特性:
    (1)快速讀取:內(nèi)存緩存會將編譯解析后的文件,存入該進程的內(nèi)存中,便于下次運行時快速讀取
    (2)時效性:一旦關(guān)閉進程,進程內(nèi)存清空

    硬盤緩存特性:
    永久性:直接寫入硬盤文件中
    復(fù)雜、緩慢:讀取緩存對該緩存存放的硬盤文件進行I/O操作,重新解析

    from memory cache:使用內(nèi)存中的緩存

    from disk cache:使用硬盤中的緩存

    瀏覽器讀取順序:memory ——> disk

    瀏覽器將js和圖片等文件解析執(zhí)行后直接存入內(nèi)存緩存中,F(xiàn)5刷新頁面時,from memory cache(使用內(nèi)存中的緩存)
    css文件存入硬盤中,F(xiàn)5刷新頁面時,from disk cache(使用硬盤中的緩存)

    參考文章
    https://segmentfault.com/a/1190000017962411
    https://www.cnblogs.com/chengxs/p/10396066.html

    2、為什么蘋果瀏覽器返回一次刷新一次

    您好,很高興為您解答:蘋果瀏覽器返回一次刷新一次是因為它使用了一種叫做“緩存機制”的機制,來提高瀏覽器的速度和性能,從而可以節(jié)省網(wǎng)絡(luò)數(shù)據(jù),減少下載的內(nèi)容,提升瀏覽器的體驗。緩存機制的關(guān)鍵一步就是檢測網(wǎng)頁上的內(nèi)容是否有變化,以決定是否需要重新加載網(wǎng)頁。蘋果瀏覽器會把頁面緩存,如果有任何更改,就會立即重新加載網(wǎng)頁,這樣可以保證你的網(wǎng)頁有最新內(nèi)容出來。這也就是為什么蘋果瀏覽器總是返回一次刷新一次的原因。
    希望可以幫到您,祝您生活愉快。 瀏覽器沒有緩存功能。蘋果瀏覽器返回刷新原因是,瀏覽器沒有緩存功能。每次打開一個網(wǎng)頁后,要返回上一頁的時候,都要重新加載。通常都是靜態(tài)的重新打開可以使搜索速度更快更流暢。

    3、瀏覽器中的緩存

    在我們使用瀏覽器訪問網(wǎng)頁的過程中,瀏覽器經(jīng)常會緩存各種網(wǎng)頁中的內(nèi)容。當(dāng)再次訪問同一個網(wǎng)頁時,可以發(fā)現(xiàn)部分內(nèi)容是從緩存直接讀取的。
    查看HTTP的響應(yīng)信息,就能發(fā)現(xiàn)一些端倪。比如響應(yīng) 200 from cache; 304 not modify 等等。
    下面對瀏覽器使用緩存的各種情形做一下分析:

    Pragma是HTTP 1.0版本的一個參數(shù),在HTTP 1.1版本里面這個參數(shù)也會生效,如果不想瀏覽器緩存網(wǎng)頁的內(nèi)容,可以在 Response header 里面加上 :Pragma: no-cache。

    Cache-Control是HTTP 1.1版本新增的一個參數(shù)。

    Cache-Control:no-store 不允許緩存

    Cache-Control:no-cache 不允許直接使用緩存,需要先發(fā)起請求和服務(wù)器協(xié)商(這個經(jīng)常被誤認為是不允許緩存,實際上它的作用是讓瀏覽器在使用緩存前先請求服務(wù)端一次,確認內(nèi)容是否有更新)

    這樣的響應(yīng)代表沒有跟服務(wù)端進行交互,內(nèi)容是直接從本地讀取的。

    Expires和Cache-control: max-age= 有類似的作用,都是指定緩存內(nèi)容的有效周期,Expires指定的格式是格林威治時間,max-age則是秒數(shù)。

    服務(wù)端也可以在 Response header 里加上 Last-Modified,它的格式是格林威治時間,再次請求時,瀏覽器的 Request header 中會多出一個叫 If-Modified-Since的值,通過比較這兩個值是否一致來決定是否返回304。

    ETag的用法和 Last-Modified 類似,值是一種文件指紋。比如:ETag:"5a3ccff0-5dc"。
    服務(wù)端在 Response header 里加上 ETag,再次請求時,瀏覽器的 Request header 中會多出一個叫 If-None-Match的值,通過比較這兩個值是否一致來決定是否返回304。

    總體來說,瀏覽器使用緩存時有兩種表現(xiàn):
    1.直接從本地讀取,不與服務(wù)端有交互,就是 200 OK (from memory cache)。
    2.請求一次服務(wù)端,查看本地緩存是否生效,這種方式叫 協(xié)商緩存。如果服務(wù)端判斷緩存有效,將不返回完整內(nèi)容,而是返回 304 Not Modified。

    在優(yōu)先級上 Pragma > Cache-Control > Expires。

    4、web前端緩存機制

    前端緩存機制有多種,如瀏覽器緩存、CDN緩存、DNS緩存、代理服務(wù)器緩存等。

    CDN全稱是Content Delivery Network,即內(nèi)容分發(fā)網(wǎng)絡(luò)。CDN的原理是將資源存放在各地的緩存服務(wù)器上,當(dāng)用戶請求資源時,從就近的服務(wù)器上返回緩存的資源,而不需要每次都從源服務(wù)器獲取,減輕源服務(wù)器的壓力,又能提升用戶的訪問速度。

    瀏覽器可以將用戶請求的資源進行緩存,存放在本地。瀏覽器緩存一般通過請求頭來設(shè)置。
    與瀏覽器緩存有關(guān)的頭部有:

    瀏覽器會將服務(wù)器的域名與IP地址的映射緩存在本地,這樣用戶在訪問網(wǎng)站時,不用每次都去查詢DNS映射表。

    在瀏覽器和服務(wù)器之間架設(shè)的一個服務(wù)器 ,這個代理服務(wù)器會幫助瀏覽器去請求頁面,然后將頁面進行處理和壓縮(例如壓縮圖片和文件),使頁面變小,再傳輸給瀏覽器。大部分代理服務(wù)器都有緩存的功能,如果瀏覽器所請求的文件在它本機中存在且是最新的,就不需要再從源服務(wù)器請求數(shù)據(jù),提高了瀏覽速度。

    在瀏覽某個頁面時,瀏覽器會判斷頁面的關(guān)聯(lián)內(nèi)容,進行預(yù)加載。用戶在瀏覽A頁面時,就加載好B頁面,這樣當(dāng)用戶去訪問B頁面時,B頁面很快就出來,提升了用戶體驗。但這個機制有一定的缺陷,就是預(yù)判不一定準(zhǔn)確,可能會造成流量和資源的浪費。

    5、北大青鳥java培訓(xùn):瀏覽器緩存功能在使用上都有哪些類型?

    緩存功能的存在,讓我們在瀏覽網(wǎng)頁和訪問防止的時候可以更快的加載我們需要的內(nèi)容,而今天北大青鳥http://www.kmbdqn.cn/就通過案例分析來了解一下,瀏覽器的緩存功能在使用上都有哪些類型。
    1.ServiceWorkerServiceWorker是運行在瀏覽器背后的獨立線程,一般可以用來實現(xiàn)緩存功能。
    使用ServiceWorker的話,傳輸協(xié)議必須為HTTPS。
    因為ServiceWorker中涉及到請求攔截,所以必須使用HTTPS協(xié)議來保障安全。
    ServiceWorker的緩存與瀏覽器其他內(nèi)建的緩存機制不同,它可以讓我們自由控制緩存哪些文件、如何匹配緩存、如何讀取緩存,并且緩存是持續(xù)性的。
    ServiceWorker實現(xiàn)緩存功能一般分為三個步驟:先需要先注冊ServiceWorker,然后監(jiān)聽到install事件以后就可以緩存需要的文件,那么在下次用戶訪問的時候就可以通過攔截請求的方式查詢是否存在緩存,存在緩存的話就可以直接讀取緩存文件,否則就去請求數(shù)據(jù)。
    當(dāng)ServiceWorker沒有命中緩存的時候,我們需要去調(diào)用fetch函數(shù)獲取數(shù)據(jù)。
    也就是說,如果我們沒有在ServiceWorker命中緩存的話,會根據(jù)緩存查找優(yōu)先級去查找數(shù)據(jù)。
    但是不管我們是從MemoryCache中還是從網(wǎng)絡(luò)請求中獲取的數(shù)據(jù),瀏覽器都會顯示我們是從ServiceWorker中獲取的內(nèi)容。
    2.MemoryCacheMemoryCache也就是內(nèi)存中的緩存,主要包含的是當(dāng)前中頁面中已經(jīng)抓取到的資源,例如頁面上已經(jīng)下載的樣式、腳本、圖片等。
    讀取內(nèi)存中的數(shù)據(jù)肯定比磁盤快,內(nèi)存緩存雖然讀取高效,可是緩存持續(xù)性很短,會隨著進程的釋放而釋放。
    一旦我們關(guān)閉Tab頁面,內(nèi)存中的緩存也就被釋放了。
    那么既然內(nèi)存緩存這么高效,我們是不是能讓數(shù)據(jù)都存放在內(nèi)存中呢?這是不可能的。
    計算機中的內(nèi)存一定比硬盤容量小得多,操作系統(tǒng)需要精打細算內(nèi)存的使用,所以能讓我們使用的內(nèi)存必然不多。

    轉(zhuǎn)載請帶上網(wǎng)址:http://www.lol998.com/posjitwo/118930.html

    版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 babsan@163.com 舉報,一經(jīng)查實,本站將立刻刪除。
    聯(lián)系我們
    訂購聯(lián)系:小莉
    微信聯(lián)系方式
    地址:深圳市寶安區(qū)固戍聯(lián)誠發(fā)產(chǎn)業(yè)園木星大廈

    公司地址:深圳市寶安區(qū)固戍聯(lián)誠發(fā)產(chǎn)業(yè)園木星大廈

    舉報投訴 免責(zé)申明 版權(quán)申明 廣告服務(wù) 投稿須知 技術(shù)支持:第一POS網(wǎng) Copyright@2008-2030 深圳市慧聯(lián)實業(yè)有限公司 備案號:粵ICP備18141915號

    主站蜘蛛池模板: 外汇| 彩票| 昭通市| 菏泽市| 察哈| 福建省| 桑植县| 礼泉县| 合川市| 奉节县| 珲春市| 宁武县| 长春市| 安顺市| 黄大仙区| 乌鲁木齐县| 宜兰县| 海宁市| 利川市| 增城市| 合山市| 湘潭县| 乡城县| 霍城县| 苏州市| 山西省| 万盛区| 灌南县| 澄城县| 沭阳县| 福泉市| 阿图什市| 雅江县| 唐山市| 杭锦旗| 友谊县| 铜鼓县| 安庆市| 焦作市| 郯城县| 福清市|