[FE] 瀏覽器緩存辛蚊,DNS,CDN

1. 瀏覽器的緩存機(jī)制

當(dāng)我們使用Ctrl+F5組合鍵刷新一個(gè)頁(yè)面時(shí)真仲,在HTTP的請(qǐng)求頭中會(huì)增加一些請(qǐng)求頭袋马,
它告訴服務(wù)端我們要獲取最新的數(shù)據(jù)而不是緩存。

1.1 Cache-Control

這個(gè)HTTP Head字段用于指定所有緩存機(jī)制在整個(gè)請(qǐng)求/響應(yīng)鏈中必須服從的指令秸应。

可選值 說(shuō)明
Public 所有內(nèi)容都將被緩存虑凛,在響應(yīng)頭中設(shè)置
Private 內(nèi)容只緩存到私有緩存中碑宴,在響應(yīng)頭中設(shè)置
no-cache 所有內(nèi)容都不會(huì)被緩存,在請(qǐng)求頭和響應(yīng)頭中設(shè)置
no-store 所有內(nèi)容都不會(huì)被緩存到緩存或Internet臨時(shí)文件中桑谍,在響應(yīng)頭中設(shè)置
must-revalidation/proxy-revalidation 如果緩存的內(nèi)容失敗延柠,請(qǐng)求必須發(fā)送到服務(wù)器/代理以進(jìn)行重新驗(yàn)證,在請(qǐng)求頭中設(shè)置
max-age=xxx 緩存的內(nèi)容將在xxx秒后失效锣披,這個(gè)選項(xiàng)只在HTTP 1.1中可用贞间,和Last-Modified一起使用時(shí)優(yōu)先級(jí)較高,在響應(yīng)頭中設(shè)置

Cache-Control請(qǐng)求字段被各個(gè)瀏覽器支持的較好雹仿,而且它的優(yōu)先級(jí)也比較高增热,
它和其他一些請(qǐng)求字段(如Expires)同時(shí)出現(xiàn)時(shí),Cache-Control會(huì)覆蓋掉其他字段胧辽。

1.2 Expires

Expires通常的使用格式是Expires: Sat, 25 Feb 2012 12:22:17 GMT钓葫,
后面跟著一個(gè)日期和時(shí)間,超過(guò)這個(gè)時(shí)間后票顾,緩存的內(nèi)容將失效础浮。

1.3 Last-Modidified/Etag

Last-Modified字段一般用于表示一個(gè)服務(wù)器上的資源的最后修改時(shí)間,
資源可以是靜態(tài)(靜態(tài)內(nèi)容自動(dòng)加上Last-Modified字段)奠骄,
或者動(dòng)態(tài)的內(nèi)容(如Servlet提供了一個(gè)getLastModified方法豆同,用于檢查某個(gè)動(dòng)態(tài)內(nèi)容是否已經(jīng)更新),
通過(guò)這個(gè)最后修改時(shí)間可以判斷當(dāng)前請(qǐng)求的資源是否是最新的含鳞。

一般服務(wù)器端在響應(yīng)頭中返回一個(gè)Last-Modified子彈影锈,告訴瀏覽器這個(gè)頁(yè)面的最后修改時(shí)間,
Last-Modified: Sat, 25 Feb 2012 12:55:04 GMT蝉绷,瀏覽器再次請(qǐng)求時(shí)鸭廷,
在請(qǐng)求頭中增加一個(gè)If-Modified-Since: Sat, 25 Feb 2012 12:55:04 GMT字段,
詢問(wèn)當(dāng)前緩存的頁(yè)面是否是最新的熔吗,如果是最新的就返回304狀態(tài)碼辆床,告訴瀏覽器是最新的,服務(wù)器也不會(huì)傳輸新的數(shù)據(jù)桅狠。

與Last-Modified字段有類似功能的還有一個(gè)Etag字段讼载,
這個(gè)字段的作用是讓服務(wù)器給每個(gè)頁(yè)面分配一個(gè)唯一的編號(hào),
然后通過(guò)這個(gè)編號(hào)來(lái)區(qū)分當(dāng)前這個(gè)頁(yè)面是否最新的中跌。

這種方式比使用Last-Modified更加靈活咨堤,但是在后端的Web服務(wù)器有多臺(tái)時(shí)比較難處理,
因?yàn)槊總€(gè)Web服務(wù)器都要記住網(wǎng)站的所有資源漩符,
否則瀏覽器返回這個(gè)編號(hào)就沒(méi)有意義了一喘。

參考

深入分析Java Web技術(shù)內(nèi)幕 p9-p12


2. DNS域名解析過(guò)程

當(dāng)一個(gè)用戶在瀏覽器中輸入www.abc.com時(shí),DNS解析將會(huì)有將近10個(gè)步驟嗜暴,這個(gè)過(guò)程大體描述如下凸克。

2.1 瀏覽器

瀏覽器會(huì)檢查緩存中有沒(méi)有這個(gè)域名對(duì)應(yīng)的解析過(guò)的IP地址铝侵,
如果緩存中有,這個(gè)解析過(guò)程就將結(jié)束触徐。

瀏覽器緩存域名也是有限制的咪鲜,不僅瀏覽器緩存大小有限制,而且緩存的時(shí)間也有限制撞鹉,
通常情況下為幾分鐘到幾小時(shí)不等疟丙,
域名被緩存的時(shí)間限制可以通過(guò)TTL屬性來(lái)設(shè)置。

2.2 操作系統(tǒng)

如果用戶的瀏覽器緩存中沒(méi)有鸟雏,瀏覽器會(huì)查找操作系統(tǒng)緩存中是否有這個(gè)域名對(duì)應(yīng)的DNS解析結(jié)果享郊。

其實(shí)操作系統(tǒng)也會(huì)有一個(gè)域名解析的過(guò)程,
在Windows中可以通過(guò)C:\Windows\System32\drivers\etc\hosts文件來(lái)設(shè)置孝鹊,
你可以將任何域名解析到任何能夠訪問(wèn)的IP地址炊琉。

在Linux中這個(gè)配置文件是/etc/hosts
當(dāng)解析到這個(gè)配置文件中的某個(gè)域名時(shí)又活,操作系統(tǒng)會(huì)在緩存中緩存這個(gè)解析結(jié)果苔咪,
緩存的時(shí)間同樣是受這個(gè)域名的失效時(shí)間和緩存的空間大小控制的。

2.3 本地區(qū)的域名服務(wù)器

如果在本機(jī)中仍然無(wú)法完成域名的解析柳骄,就會(huì)真正請(qǐng)求域名服務(wù)器來(lái)解析這個(gè)域名了团赏。

在我們的網(wǎng)絡(luò)配置中都會(huì)有“DNS服務(wù)器地址”這一項(xiàng),
操作系統(tǒng)會(huì)把這個(gè)域名設(shè)置為本地區(qū)的域名服務(wù)器(LNDS)耐薯。

這個(gè)DNS通常都提供給你本地互聯(lián)網(wǎng)接入的一個(gè)DNS解析服務(wù)舔清,
例如,你是在學(xué)校接入互聯(lián)網(wǎng)曲初,那么你的DNS服務(wù)器肯定在你的學(xué)校体谒,
如果你是在一個(gè)小區(qū)接入互聯(lián)網(wǎng),那這個(gè)DNS就是提供給你接入互聯(lián)網(wǎng)的應(yīng)用提供商臼婆,即電信或者聯(lián)通抒痒。

這個(gè)專門的域名解析服務(wù)器性能都會(huì)很好,它們一般都會(huì)緩存域名解析結(jié)果目锭,
當(dāng)然緩存時(shí)間是受域名的失效時(shí)間控制的评汰。

2.4 Root Server域名服務(wù)器

如果LDNS仍然沒(méi)有命中纷捞,就直接到Root Server域名服務(wù)器請(qǐng)求解析痢虹。

2.5 返回主域名服務(wù)器地址

根域名服務(wù)器返回給本地域名服務(wù)器一個(gè)所查詢的主域名服務(wù)器(gTLD Server)地址。
gTLD是國(guó)際頂級(jí)域名服務(wù)器主儡,如.com奖唯,.cn.org等糜值,全球只有13臺(tái)左右丰捷。

2.6 向主域名服務(wù)器發(fā)送請(qǐng)求

本地域名服務(wù)器(Local DNS Server)再向上一步返回的gTLD服務(wù)器發(fā)送請(qǐng)求坯墨。

2.7 域名提供商的服務(wù)器

接受請(qǐng)求的gTLD服務(wù)器查找并返回此域名對(duì)應(yīng)的Name Server域名服務(wù)器的地址,
這個(gè)Name Server通常就是你注冊(cè)的域名服務(wù)器病往。

例如捣染,你在某個(gè)域名服務(wù)器提供商申請(qǐng)的域名,那么這個(gè)域名解析任務(wù)就由這個(gè)域名提供商的服務(wù)器來(lái)完成停巷。

2.8 映射關(guān)系表

Name Server域名服務(wù)器會(huì)查詢存儲(chǔ)在域名和IP的映射關(guān)系表耍攘,
在正常情況下會(huì)根據(jù)域名得到目標(biāo)IP記錄,連同一個(gè)TTL值返回給DNS Server域名服務(wù)器畔勤。

2.9 Local DNS Server緩存

返回該域名對(duì)應(yīng)的IP和TTL值蕾各,Local DNS Server會(huì)緩存這個(gè)域名和IP的對(duì)應(yīng)關(guān)系,
緩存的時(shí)間由TTL值控制庆揪。

2.10 本地系統(tǒng)緩存

把解析的結(jié)果返回給用戶式曲,用戶根據(jù)TTL值緩存在本地系統(tǒng)緩存中,域名解析過(guò)程結(jié)束缸榛。

注:
在實(shí)際的DNS解析過(guò)程中吝羞,可能還不止這10個(gè)步驟,
如Name Server也可能有很多級(jí)内颗,或者有一個(gè)GTM來(lái)負(fù)載均衡控制脆贵,
這都有可能會(huì)影響域名解析的過(guò)程。

參考

深入分析Java Web技術(shù)內(nèi)幕 p12-p15


3. 幾種域名解析方式

域名解析記錄主要分為A記錄起暮,MX記錄卖氨,CNAME記錄,NS記錄负懦,和TXT記錄筒捺。

3.1 A記錄

A代表Address,用來(lái)指定域名對(duì)應(yīng)的IP地址纸厉,
A記錄可以將多個(gè)域名解析到一個(gè)IP地址系吭,但是不能將一個(gè)域名解析到多個(gè)IP地址。

3.2 MX記錄

MX表示Mail Exchange颗品,就是可以將某個(gè)域名下的郵件服務(wù)器指向自己的Mail Server肯尺,
DNS會(huì)將郵件發(fā)送到MX記錄的服務(wù)器,而正常通過(guò)Web請(qǐng)求的話躯枢,仍然解析到A記錄的IP地址则吟。

3.3 CNAME記錄

CNAME全稱為Canonial Name(別名解析)。
所謂別名解析就是可以為一個(gè)域名設(shè)置一個(gè)或者多個(gè)別名锄蹂。

3.4 NS記錄

NS記錄氓仲,為某個(gè)域名指定DNS解析服務(wù)器,也就是這個(gè)域名由指定的IP地址的DNS服務(wù)器去解析。

3.5 TXT記錄

為某個(gè)主機(jī)名或域名設(shè)置說(shuō)明敬扛。

參考

深入分析Java Web技術(shù)內(nèi)幕 p19-p20


4. CDN工作機(jī)制

CDN也就是內(nèi)容分布網(wǎng)絡(luò)(Content Delivery Network)晰洒,它是構(gòu)筑在現(xiàn)有Internet上的一種先進(jìn)的流量分配網(wǎng)絡(luò)。
其目的是通過(guò)在現(xiàn)有的Internet中增加一層新的網(wǎng)絡(luò)架構(gòu)啥箭,
將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡(luò)“邊緣”谍珊,使用戶可以就近取得所需的內(nèi)容,
提高用戶訪問(wèn)網(wǎng)站的響應(yīng)速度急侥。

目前CDN都以緩存網(wǎng)站中的靜態(tài)數(shù)據(jù)為主抬驴,如CSS,JS缆巧,圖片和靜態(tài)頁(yè)面等數(shù)據(jù)布持。
用戶在先從主站服務(wù)器請(qǐng)求到動(dòng)態(tài)內(nèi)容后,再?gòu)腃DN上下載這些靜態(tài)資源陕悬,從而加速網(wǎng)頁(yè)數(shù)據(jù)內(nèi)容的下載速度题暖。

CDN架構(gòu)

一個(gè)用戶訪問(wèn)某個(gè)靜態(tài)文件(如CSS文件),這個(gè)靜態(tài)文件的域名假如是cdn.taobao.com捉超,
那么首先要向Local DNS服務(wù)器發(fā)起請(qǐng)求胧卤,
一般經(jīng)過(guò)迭代解析后回到這個(gè)域名的注冊(cè)服務(wù)器去解析,一般每個(gè)公司都會(huì)有一個(gè)DNS解析服務(wù)器拼岳。

這時(shí)這個(gè)DNS解析服務(wù)器通常會(huì)把它重新CNAME解析到另一個(gè)另外一個(gè)域名枝誊,
而這個(gè)域名最終會(huì)被指向CDN全局中的DNS負(fù)載均衡服務(wù)器,再由這個(gè)GTM來(lái)最終分配是哪個(gè)地方的訪問(wèn)用戶惜纸,
返回給離這個(gè)訪問(wèn)用戶最近的CDN節(jié)點(diǎn)叶撒。

拿到DNS解析結(jié)果,用戶就直接去這個(gè)CDN節(jié)點(diǎn)訪問(wèn)這個(gè)靜態(tài)資源文件了耐版,
如果這個(gè)節(jié)點(diǎn)中所請(qǐng)求的文件不存在祠够,就會(huì)再回到源站去獲取這個(gè)文件,然后再返回給用戶粪牲。

參考

深入分析Java Web技術(shù)內(nèi)幕 p19-p20

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末古瓤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子腺阳,更是在濱河造成了極大的恐慌落君,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亭引,死亡現(xiàn)場(chǎng)離奇詭異绎速,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)痛侍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門朝氓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)魔市,“玉大人主届,你說(shuō)我怎么就攤上這事赵哲。” “怎么了君丁?”我有些...
    開(kāi)封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵枫夺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我绘闷,道長(zhǎng)橡庞,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任印蔗,我火速辦了婚禮扒最,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘华嘹。我一直安慰自己吧趣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布耙厚。 她就那樣靜靜地躺著强挫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪薛躬。 梳的紋絲不亂的頭發(fā)上俯渤,一...
    開(kāi)封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音型宝,去河邊找鬼八匠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛趴酣,可吹牛的內(nèi)容都是我干的臀叙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼价卤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼劝萤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起慎璧,我...
    開(kāi)封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤床嫌,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后胸私,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體厌处,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年岁疼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阔涉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缆娃。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瑰排,靈堂內(nèi)的尸體忽然破棺而出贯要,到底是詐尸還是另有隱情,我是刑警寧澤椭住,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布崇渗,位于F島的核電站,受9級(jí)特大地震影響京郑,放射性物質(zhì)發(fā)生泄漏宅广。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一些举、第九天 我趴在偏房一處隱蔽的房頂上張望跟狱。 院中可真熱鬧,春花似錦户魏、人聲如沸驶臊。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)资铡。三九已至,卻和暖如春幢码,著一層夾襖步出監(jiān)牢的瞬間笤休,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工症副, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留店雅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓贞铣,卻偏偏與公主長(zhǎng)得像闹啦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辕坝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容