一文帶你了解什么是瀏覽器緩存,DNS,CDN及域名解析類型
瀏覽器的緩存機(jī)制
當(dāng)我們使用Ctrl+F5組合鍵刷新一個(gè)頁面時(shí),在HTTP的請(qǐng)求頭中會(huì)增加一些請(qǐng)求頭,
它告訴服務(wù)端我們要獲取最新的數(shù)據(jù)而不是緩存。
Cache-Control
這個(gè)HTTP Head字段用于指定所有緩存機(jī)制在整個(gè)請(qǐng)求/響應(yīng)鏈中必須服從的指令。
可選值 | 說明 |
---|---|
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ì)覆蓋掉其他字段。
Expires
Expires通常的使用格式是Expires: Sat, 25 Feb 2012 12:22:17 GMT
,
后面跟著一個(gè)日期和時(shí)間,超過這個(gè)時(shí)間后,緩存的內(nèi)容將失效。
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)更新),
通過這個(gè)最后修改時(shí)間可以判斷當(dāng)前請(qǐng)求的資源是否是最新的。
一般服務(wù)器端在響應(yīng)頭中返回一個(gè)Last-Modified子彈,告訴瀏覽器這個(gè)頁面的最后修改時(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
字段,
詢問當(dāng)前緩存的頁面是否是最新的,如果是最新的就返回304狀態(tài)碼,告訴瀏覽器是最新的,服務(wù)器也不會(huì)傳輸新的數(shù)據(jù)。
與Last-Modified字段有類似功能的還有一個(gè)Etag字段,
這個(gè)字段的作用是讓服務(wù)器給每個(gè)頁面分配一個(gè)唯一的編號(hào),
然后通過這個(gè)編號(hào)來區(qū)分當(dāng)前這個(gè)頁面是否最新的。
這種方式比使用Last-Modified更加靈活,但是在后端的Web服務(wù)器有多臺(tái)時(shí)比較難處理,
因?yàn)槊總€(gè)Web服務(wù)器都要記住網(wǎng)站的所有資源,
否則瀏覽器返回這個(gè)編號(hào)就沒有意義了。
DNS域名解析過程
當(dāng)一個(gè)用戶在瀏覽器中輸入www.dbjr.com.cn
時(shí),DNS解析將會(huì)有將近10個(gè)步驟,這個(gè)過程大體描述如下。
瀏覽器
瀏覽器會(huì)檢查緩存中有沒有這個(gè)域名對(duì)應(yīng)的解析過的IP地址,
如果緩存中有,這個(gè)解析過程就將結(jié)束。
瀏覽器緩存域名也是有限制的,不僅瀏覽器緩存大小有限制,而且緩存的時(shí)間也有限制,
通常情況下為幾分鐘到幾小時(shí)不等,
域名被緩存的時(shí)間限制可以通過TTL屬性來設(shè)置。
操作系統(tǒng)
如果用戶的瀏覽器緩存中沒有,瀏覽器會(huì)查找操作系統(tǒng)緩存中是否有這個(gè)域名對(duì)應(yīng)的DNS解析結(jié)果。
其實(shí)操作系統(tǒng)也會(huì)有一個(gè)域名解析的過程,
在Windows中可以通過C:\Windows\System32\drivers\etc\hosts
文件來設(shè)置,
你可以將任何域名解析到任何能夠訪問的IP地址。
在Linux中這個(gè)配置文件是/etc/hosts
,
當(dāng)解析到這個(gè)配置文件中的某個(gè)域名時(shí),操作系統(tǒng)會(huì)在緩存中緩存這個(gè)解析結(jié)果,
緩存的時(shí)間同樣是受這個(gè)域名的失效時(shí)間和緩存的空間大小控制的。
本地區(qū)的域名服務(wù)器
如果在本機(jī)中仍然無法完成域名的解析,就會(huì)真正請(qǐng)求域名服務(wù)器來解析這個(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í)間控制的。
Root Server域名服務(wù)器
如果LDNS仍然沒有命中,就直接到Root Server域名服務(wù)器請(qǐng)求解析。
返回主域名服務(wù)器地址
根域名服務(wù)器返回給本地域名服務(wù)器一個(gè)所查詢的主域名服務(wù)器(gTLD Server)地址。
gTLD是國(guó)際頂級(jí)域名服務(wù)器,如.com
,.cn
,.org
等,全球只有13臺(tái)左右。
向主域名服務(wù)器發(fā)送請(qǐng)求
本地域名服務(wù)器(Local DNS Server)再向上一步返回的gTLD服務(wù)器發(fā)送請(qǐng)求。
域名提供商的服務(wù)器
接受請(qǐng)求的gTLD服務(wù)器查找并返回此域名對(duì)應(yīng)的Name Server域名服務(wù)器的地址,
這個(gè)Name Server通常就是你注冊(cè)的域名服務(wù)器。
例如,你在某個(gè)域名服務(wù)器提供商申請(qǐng)的域名,那么這個(gè)域名解析任務(wù)就由這個(gè)域名提供商的服務(wù)器來完成。
映射關(guān)系表
Name Server域名服務(wù)器會(huì)查詢存儲(chǔ)在域名和IP的映射關(guān)系表,
在正常情況下會(huì)根據(jù)域名得到目標(biāo)IP記錄,連同一個(gè)TTL值返回給DNS Server域名服務(wù)器。
Local DNS Server緩存
返回該域名對(duì)應(yīng)的IP和TTL值,Local DNS Server會(huì)緩存這個(gè)域名和IP的對(duì)應(yīng)關(guān)系,
緩存的時(shí)間由TTL值控制。
本地系統(tǒng)緩存
把解析的結(jié)果返回給用戶,用戶根據(jù)TTL值緩存在本地系統(tǒng)緩存中,域名解析過程結(jié)束。
注:在實(shí)際的DNS解析過程中,可能還不止這10個(gè)步驟,
如Name Server也可能有很多級(jí),或者有一個(gè)GTM來負(fù)載均衡控制,
這都有可能會(huì)影響域名解析的過程。
幾種域名解析方式
域名解析記錄主要分為A記錄,MX記錄,CNAME記錄,NS記錄,和TXT記錄。
A記錄
A代表Address,用來指定域名對(duì)應(yīng)的IP地址,
A記錄可以將多個(gè)域名解析到一個(gè)IP地址,但是不能將一個(gè)域名解析到多個(gè)IP地址。
MX記錄
MX表示Mail Exchange,就是可以將某個(gè)域名下的郵件服務(wù)器指向自己的Mail Server,
DNS會(huì)將郵件發(fā)送到MX記錄的服務(wù)器,而正常通過Web請(qǐng)求的話,仍然解析到A記錄的IP地址。
CNAME記錄
CNAME全稱為Canonial Name(別名解析)。
所謂別名解析就是可以為一個(gè)域名設(shè)置一個(gè)或者多個(gè)別名。
NS記錄
NS記錄,為某個(gè)域名指定DNS解析服務(wù)器,也就是這個(gè)域名由指定的IP地址的DNS服務(wù)器去解析。
TXT記錄
為某個(gè)主機(jī)名或域名設(shè)置說明。
CDN工作機(jī)制
CDN也就是內(nèi)容分布網(wǎng)絡(luò)(Content Delivery Network),它是構(gòu)筑在現(xiàn)有Internet上的一種先進(jìn)的流量分配網(wǎng)絡(luò)。
其目的是通過在現(xiàn)有的Internet中增加一層新的網(wǎng)絡(luò)架構(gòu),
將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡(luò)“邊緣”,使用戶可以就近取得所需的內(nèi)容,
提高用戶訪問網(wǎng)站的響應(yīng)速度。
目前CDN都以緩存網(wǎng)站中的靜態(tài)數(shù)據(jù)為主,如CSS,JS,圖片和靜態(tài)頁面等數(shù)據(jù)。
用戶在先從主站服務(wù)器請(qǐng)求到動(dòng)態(tài)內(nèi)容后,再從CDN上下載這些靜態(tài)資源,從而加速網(wǎng)頁數(shù)據(jù)內(nèi)容的下載速度。
CDN架構(gòu)
一個(gè)用戶訪問某個(gè)靜態(tài)文件(如CSS文件),這個(gè)靜態(tài)文件的域名假如是cdn.jb51.net
,
那么首先要向Local DNS服務(wù)器發(fā)起請(qǐng)求,
一般經(jīng)過迭代解析后回到這個(gè)域名的注冊(cè)服務(wù)器去解析,一般每個(gè)公司都會(huì)有一個(gè)DNS解析服務(wù)器。
這時(shí)這個(gè)DNS解析服務(wù)器通常會(huì)把它重新CNAME解析到另一個(gè)另外一個(gè)域名,
而這個(gè)域名最終會(huì)被指向CDN全局中的DNS負(fù)載均衡服務(wù)器,再由這個(gè)GTM來最終分配是哪個(gè)地方的訪問用戶,
返回給離這個(gè)訪問用戶最近的CDN節(jié)點(diǎn)。
拿到DNS解析結(jié)果,用戶就直接去這個(gè)CDN節(jié)點(diǎn)訪問這個(gè)靜態(tài)資源文件了,
如果這個(gè)節(jié)點(diǎn)中所請(qǐng)求的文件不存在,就會(huì)再回到源站去獲取這個(gè)文件,然后再返回給用戶。
本文介紹的內(nèi)容作為一名站長(zhǎng)來說是必須要知道的知識(shí),更多關(guān)于這方面的知識(shí)請(qǐng)查看下面的相關(guān)鏈接
相關(guān)文章
ICP經(jīng)營(yíng)許可申請(qǐng)應(yīng)包括的內(nèi)容小結(jié)
ICP經(jīng)營(yíng)許可申請(qǐng)應(yīng)包括的內(nèi)容小結(jié)...2007-11-11什么是真正的網(wǎng)站優(yōu)化(網(wǎng)站優(yōu)化的真正含義)?
什么是真正的網(wǎng)站優(yōu)化(網(wǎng)站優(yōu)化的真正含義)?...2007-02-02網(wǎng)站結(jié)構(gòu)和網(wǎng)站優(yōu)化關(guān)系分析
一個(gè)網(wǎng)站的結(jié)構(gòu)代表著這個(gè)網(wǎng)站性質(zhì),每個(gè)行業(yè)里都有獨(dú)特的結(jié)構(gòu)模式。政府和機(jī)構(gòu)性質(zhì)的網(wǎng)站,簡(jiǎn)單明了,突出重點(diǎn),不需要過多的美化工作,網(wǎng)站頭部通常設(shè)置一個(gè)通欄LOGO,以代表形象。2008-10-10網(wǎng)站設(shè)計(jì)中25條有利于排名的建議
網(wǎng)站設(shè)計(jì)中25條有利于排名的建議...2006-09-09TPS(吞吐量)、QPS(每秒查詢率)、并發(fā)數(shù)、RT(響應(yīng)時(shí)間)是什么意思
這篇文章主要介紹了TPS(吞吐量)、QPS(每秒查詢率)、并發(fā)數(shù)、RT(響應(yīng)時(shí)間)是什么意思,需要的朋友可以參考下2020-02-02