摘要:如果從指定日期之后文檔被修改過,就執(zhí)行請求方法,可以與服務(wù)器響應(yīng)首部配合使用,只有在內(nèi)容被修改后與已緩存的版本不同的時(shí)候才去獲取內(nèi)容。
web瀏覽器會自動(dòng)緩存訪問過的頁面,當(dāng)訪問同一個(gè)頁面的請求時(shí),瀏覽器不再從服務(wù)器中重新下載頁面而是優(yōu)先使用本地緩存中的頁面
為什么要進(jìn)行web緩存從用戶的角度來看web緩存加快了上網(wǎng)速度,當(dāng)然這是用戶主觀認(rèn)為的增加了上網(wǎng)速度,從設(shè)計(jì)者的角度來看:
1.網(wǎng)絡(luò)帶寬的限制,也就是說在單位時(shí)間內(nèi),用戶從網(wǎng)絡(luò)上獲取的信息是有著上限的,這就限制了用戶的上網(wǎng)速度,而緩存可以造成一種加快上網(wǎng)速度的假象;
2.緩存可以有效的減少網(wǎng)絡(luò)冗余信息的傳輸,即同一個(gè)頁面如果用戶每個(gè)一段時(shí)間就刷新一次,服務(wù)器中的頁面并沒有發(fā)生變化,如果用戶每刷新一次服務(wù)器就傳送一個(gè)新的頁面這就造成了數(shù)據(jù)的冗余;
3.緩存可以有效地削弱瞬間擁塞現(xiàn)象;瞬間擁塞可能造成整個(gè)網(wǎng)絡(luò)和服務(wù)器的崩潰;
雖然緩存有著種種好處,但是緩存并不是簡簡單單地在本地存儲一個(gè)頁面,緩存首先要面對的一個(gè)現(xiàn)實(shí)問題即網(wǎng)絡(luò)上有海量的頁面,總不能都緩存吧;為了解決這個(gè)問題,提出了緩存命中的概念(緩存命中這個(gè)概念顯然是一個(gè)舶來品)所謂的緩存命中是指當(dāng)一個(gè)請求所需的頁面在本地緩存中,并且經(jīng)過檢測緩存的頁面并沒有在服務(wù)器發(fā)生變化,瀏覽器將使用本地緩存的頁面(緩存頁面的再檢測也稱為緩存頁面的保鮮度,當(dāng)瀏覽器發(fā)現(xiàn)所需的頁面在本地緩存中,為了確定頁面是否是最新的頁面時(shí),瀏覽器將向服務(wù)器發(fā)送一個(gè)請求詢問頁面是否是最新的,最新的依據(jù)就是頁面的最后修改時(shí)間,若服務(wù)器發(fā)現(xiàn)頁面是最新的,則返回一個(gè)應(yīng)答,若發(fā)現(xiàn)頁面不是最新的將會把最新的頁面發(fā)送給瀏覽器)
緩存服務(wù)器若將緩存多帶帶地存放在一個(gè)服務(wù)器中,就形成了緩存服務(wù)器,緩存服務(wù)器的拓?fù)浣Y(jié)構(gòu)多種多樣,有層次結(jié)構(gòu)、網(wǎng)狀結(jié)構(gòu)和對等結(jié)構(gòu)等,但是緩存服務(wù)器的處理流程基本相同:
新鮮度頁面總是可能隨時(shí)間發(fā)生變化的,那如何保證頁面總是最新的那?http協(xié)議提供文檔過期時(shí)間和服務(wù)器再驗(yàn)證;
文檔過期時(shí)間:
cacahe-control:maxAge/文檔的相對過期時(shí)間 Expire: /文檔的絕對過期時(shí)間 相對過期時(shí)間相對于絕對過期時(shí)間更好一些,因?yàn)榻^對過期時(shí)間依賴于計(jì)算機(jī)時(shí)鐘的本地設(shè)置;
服務(wù)器再驗(yàn)證
當(dāng)文檔的到期時(shí)間到了,但并不能說明文檔在服務(wù)器端也發(fā)生了變化,因此此時(shí)就需要瀏覽器向服務(wù)器進(jìn)行再驗(yàn)證,注意當(dāng)服務(wù)器已經(jīng)掛掉了,而緩存又需要驗(yàn)證,緩存就要返回一條錯(cuò)誤信息;
條件驗(yàn)證
Http允許緩存向原始服務(wù)器發(fā)送一個(gè)條件get,將新鮮度檢測和獲取對象合并成一個(gè)get請求,請求服務(wù)器只有在文檔和緩存的文檔不一致時(shí)才會返回新的文檔。
If-Modified-Since:
If-None-Math:服務(wù)器可以提供特殊的標(biāo)簽,而不是將其與最近的修改日期相匹配,這些標(biāo)簽就像序列號一樣,如果已緩存的標(biāo)簽和服務(wù)器的標(biāo)簽不同,則執(zhí)行請求的方法,返回新的內(nèi)容。
緩存設(shè)置
cache-control:no-store表示不再緩存中緩存文檔
cache-control:no-cache表示可以在本地緩存文檔,但在新鮮度檢測之前不得返給瀏覽器,不管文檔是否過期;
cache-control:maxage表示文檔的最大緩存時(shí)間
Expire:表示文檔的過期時(shí)間
cache-control:must-revaildate表示在文檔過期后,必須進(jìn)行新鮮度檢測后才能返回給瀏覽器
探測性過期算法:
如果未設(shè)置cache-control,且文檔有緩存線索即最后修改日期,瀏覽器可以運(yùn)行探測性算法計(jì)算出一個(gè)大概的日期,其中LM-Factor算法如下:
新的過期日期=server_date+(server_date-last_modified_time)*factor server_date:緩存和服務(wù)器會話時(shí)間 factor:比例數(shù)
廣告商的困勁
1.緩存清楚
2.緩存日志
3.命中計(jì)數(shù)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/52040.html
摘要:瀏覽器緩存只存在于每個(gè)單獨(dú)的客戶端,因此它是私有緩存。表示該資源既能被瀏覽器緩存,也能被任何中間人比如代理服務(wù)器等緩存。普通刷新會啟用協(xié)商緩存,忽略強(qiáng)緩存。只有在地址欄或收藏夾輸入網(wǎng)址通過鏈接引用資源等情況下,瀏覽器才會啟用強(qiáng)緩存。 前言 在訪問一個(gè)網(wǎng)頁時(shí),客戶端會從服務(wù)器下載所需的資源。但是有些資源很少發(fā)生變動(dòng),例如 HTML、JS、CSS、圖片、字體文件等。如果每次加載頁面都從源服...
Volley is an HTTP library that makes networking for Android apps easier and most importantly, faster. Volley是Google在2013年推出來的HTTP庫,旨在幫助開發(fā)者更快更簡便的實(shí)現(xiàn)網(wǎng)絡(luò)請求。說說為什么要分析Volley的源碼吧,因?yàn)閂olley中線程的轉(zhuǎn)換時(shí)通過 Thread 和 Ha...
摘要:引入了新的環(huán)境和概要信息,是一種更揭秘與實(shí)戰(zhàn)六消息隊(duì)列篇掘金本文,講解如何集成,實(shí)現(xiàn)消息隊(duì)列。博客地址揭秘與實(shí)戰(zhàn)二數(shù)據(jù)緩存篇掘金本文,講解如何集成,實(shí)現(xiàn)緩存。 Spring Boot 揭秘與實(shí)戰(zhàn)(九) 應(yīng)用監(jiān)控篇 - HTTP 健康監(jiān)控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...
閱讀 1773·2023-04-26 00:20
閱讀 1823·2021-11-08 13:21
閱讀 2016·2021-09-10 10:51
閱讀 1581·2021-09-10 10:50
閱讀 3312·2019-08-30 15:54
閱讀 2143·2019-08-30 14:22
閱讀 1439·2019-08-29 16:10
閱讀 3101·2019-08-26 11:50