web請(qǐng)求過(guò)程分析
大致過(guò)程
首先用戶輸入U(xiǎn)RL網(wǎng)址她君,會(huì)請(qǐng)求DNS對(duì)域名進(jìn)行解析成相應(yīng)的IP地址,然后根據(jù)IP地址空免,在互聯(lián)網(wǎng)上尋找對(duì)應(yīng)的服務(wù)器,向服務(wù)器發(fā)起一個(gè)get請(qǐng)求,服務(wù)器返回對(duì)應(yīng)的數(shù)據(jù)資源祝懂。
當(dāng)然,服務(wù)器可能有很多臺(tái)拘鞋,負(fù)載均衡設(shè)備會(huì)平均分配所有用戶的請(qǐng)求砚蓬,請(qǐng)求的數(shù)據(jù)可能存儲(chǔ)在分布式緩存中或是靜態(tài)文件,或是數(shù)據(jù)庫(kù)里盆色。
當(dāng)數(shù)據(jù)返回瀏覽器灰蛙,瀏覽器解析數(shù)據(jù)發(fā)現(xiàn)還有一些靜態(tài)資源,則又會(huì)發(fā)起HTTP請(qǐng)求隔躲,這些請(qǐng)求很可能在CDN上摩梧,CDN服務(wù)器又會(huì)處理這個(gè)用戶的請(qǐng)求。!
HTTP請(qǐng)求:
HTTP請(qǐng)求頭:
請(qǐng)求頭 | 說(shuō)明 |
---|---|
Accept | 瀏覽器可接受的MIME類(lèi)型 |
Accept-Charset | 瀏覽器可接受的字符集 |
Accept-Encoding | 瀏覽器能夠進(jìn)行解碼的數(shù)據(jù)編碼方式 |
Accept-Language | 瀏覽器所希望的語(yǔ)言種類(lèi)宣旱,當(dāng)服務(wù)器能夠提供一種以上的語(yǔ)言版本時(shí)要用到 |
Authorization | 授權(quán)信息仅父,通常出現(xiàn)在對(duì)服務(wù)器發(fā)送的WWW-Authenticate頭的應(yīng)答中 |
Connection | 表示是否需要持久連接 |
Content-Length | 表示請(qǐng)求消息正文的長(zhǎng)度 |
Cookie | 這是最重要的請(qǐng)求頭信息之一 |
From | 請(qǐng)求發(fā)送者的email地址,由一些特殊的Web客戶程序使用浑吟,瀏覽器不會(huì)用到它 |
Host | 初始URL中的主機(jī)和端口 |
If-Modified-Since | 只有當(dāng)所請(qǐng)求的內(nèi)容在指定的日期之后又經(jīng)過(guò)修改才返回它笙纤,否則返回304“Not Modified”應(yīng)答 |
Pragma | 指定“no-cache”值表示服務(wù)器必須返回一個(gè)刷新后的文檔,即使它是代理服務(wù)器而且已經(jīng)有了頁(yè)面的本地拷貝 |
Referer | 包含一個(gè)URL组力,用戶從該URL代表的頁(yè)面出發(fā)訪問(wèn)當(dāng)前請(qǐng)求的頁(yè)面 |
User-Agent | 瀏覽器類(lèi)型省容,如果Servlet返回的內(nèi)容與瀏覽器類(lèi)型有關(guān)則該值非常有用 |
UA-Pixels,UA-Color燎字,UA-OS蓉冈,UA-CPU | 由某些版本的IE瀏覽器所發(fā)送的非標(biāo)準(zhǔn)的請(qǐng)求頭,表示屏幕大小轩触、顏色深度寞酿、操作系統(tǒng)和CPU類(lèi)型 |
響應(yīng)頭 | 說(shuō)明 |
---|---|
Allow | 服務(wù)器支持哪些請(qǐng)求方法(如GET、POST等) |
Content-Encoding | 文檔的編碼(Encode)方法 |
Content-Length | 表示內(nèi)容長(zhǎng)度 |
Content-Type | 表示后面的文檔屬于什么MIME類(lèi)型 |
Date | 當(dāng)前的GMT時(shí)間 |
Expires | 指明應(yīng)該在什么時(shí)候認(rèn)為文檔已經(jīng)過(guò)期脱柱,從而不再緩存它 |
Last-Modified | 文檔的最后改動(dòng)時(shí)間 |
Location | 表示客戶應(yīng)當(dāng)?shù)侥睦锶ヌ崛∥臋n |
Refresh | 表示瀏覽器應(yīng)該在多少時(shí)間之后刷新文檔伐弹,以秒計(jì) |
常用狀態(tài)碼
1**:請(qǐng)求收到,繼續(xù)處理
100——客戶必須繼續(xù)發(fā)出請(qǐng)求
2**:操作成功收到榨为,分析惨好、接受
200——交易成功
3**:完成此請(qǐng)求必須進(jìn)一步處理
302——在其他地址發(fā)現(xiàn)了請(qǐng)求數(shù)據(jù)
4**:請(qǐng)求包含一個(gè)錯(cuò)誤語(yǔ)法或不能完成
400——錯(cuò)誤請(qǐng)求,如語(yǔ)法錯(cuò)誤
403——禁止訪問(wèn)
404——沒(méi)有發(fā)現(xiàn)文件随闺、查詢(xún)或URl
5**:服務(wù)器執(zhí)行一個(gè)完全有效請(qǐng)求失敗
500 - 內(nèi)部服務(wù)器錯(cuò)誤
瀏覽器緩存機(jī)制
cache control
當(dāng)劉拉起頁(yè)面異常日川,通常可能是瀏覽器做了緩存矩乐。如果ctrl+F5重新請(qǐng)求頁(yè)面龄句,則請(qǐng)求到的是最新的頁(yè)面回论。因?yàn)榇藭r(shí)請(qǐng)求會(huì)增加Pragma:no-cache和Cache-Control :no-cache
Expires
瀏覽器在發(fā)出請(qǐng)求之前會(huì)檢查這個(gè)字段,過(guò)期則會(huì)重新發(fā)起請(qǐng)求
Last-Modefied
表示最后修改時(shí)間分歇,瀏覽器再次請(qǐng)求時(shí)在請(qǐng)求頭上加上傀蓉,詢(xún)問(wèn)當(dāng)前緩存是否是最新的,是則不會(huì)傳輸新的數(shù)據(jù)职抡。
DNS域名解析
步驟:(輸入回車(chē)后)
- 瀏覽器檢查緩存有沒(méi)有域名對(duì)應(yīng)的IP地址葬燎,如果IP沒(méi)有發(fā)生變化,則直接訪問(wèn)成功缚甩。如果變化了則失敗谱净,因此緩存時(shí)間設(shè)置不能太長(zhǎng)。
- 如果瀏覽器緩存中沒(méi)有擅威,則會(huì)查找操作系統(tǒng)緩存紅是否有對(duì)應(yīng)的解析結(jié)果岳遥。
- 如果還沒(méi)有,操作系統(tǒng)把域名發(fā)送給LDNS服務(wù)器裕寨,該服務(wù)器一般都會(huì)緩存域名解析結(jié)果,緩存時(shí)間是受域名失效時(shí)間控制派继,緩存空間一般不是影響域名失效的主要因素宾袜。80%的域名解析在這里完成,LDNS承擔(dān)了域名解析的主要工作驾窟。
- 如果還沒(méi)有找到庆猫,就去ROOTServer域名服務(wù)器請(qǐng)求解析。
- 根域名服務(wù)器返回給本地域名服務(wù)器一個(gè)所查詢(xún)主域名服務(wù)器地址(gTLD server)绅络。gTLD是國(guó)際頂級(jí)域名服務(wù)器月培,全球只有13臺(tái)。
- LDNS向gTLD服務(wù)器發(fā)送請(qǐng)求恩急。
- gTLD查找并返回域名對(duì)應(yīng)的Name Server域名服務(wù)器地址杉畜。
- Name Server根據(jù)映射表,得到IP記錄衷恭,連同一個(gè)TTL值返回給DNS Server域名服務(wù)器此叠。
- 返回該域名對(duì)應(yīng)的IP地址和TTL值,LDNS緩存域名和IP随珠,緩存時(shí)間由TTL控制灭袁。
- LDNS把結(jié)果返回給用戶,用戶根據(jù)TTL值緩存在本地緩存中窗看。
總結(jié):
瀏覽會(huì)先查找緩存茸歧,未找到則會(huì)查本地的DNS緩存和hosts文件,
未找到則會(huì)調(diào)用DNS服務(wù)显沈,將地址給本地解析服務(wù)器软瞎,解析域名,若未找到則會(huì)向上尋找,一直到到根域名服務(wù)器
根域名服務(wù)器會(huì)頂級(jí)域名尋找頂級(jí)域名服務(wù)器铜涉,將該服務(wù)器IP發(fā)給本地DNS域名解析(根服務(wù)器在頂層智玻,不會(huì)一層層向下尋找,向下找到一層就讓本地DNS自己去找)
例如:根域名服務(wù)器找到.com域服務(wù)器地址IP芙代,將ip發(fā)送給我們的域名解析服務(wù)器吊奢,我們的服務(wù)器再向該ip地址詢(xún)問(wèn),直到找到域名對(duì)應(yīng)的IP地址
幾種域名解析方式
- A記錄纹烹,A代表的是Address页滚,用來(lái)指定域名對(duì)應(yīng)的IP地址。
- MX記錄铺呵,表示Mail Exchange,將域名下的郵件服務(wù)器指向自己的Mail Server
- CNAME記錄裹驰,Canonical Name(別名解析)。一個(gè)ip地址對(duì)應(yīng)多個(gè)域名片挂。
- NS記錄幻林,為某個(gè)域名指定DNS解析服務(wù)器
TXT記錄,為某個(gè)主機(jī)名或域名設(shè)置說(shuō)明
CDN架構(gòu)
用戶要訪問(wèn)某個(gè)靜態(tài)文件(如CSS文件)音念,假設(shè)這個(gè)文件域名是cdn.jianshu.com,那么首先要想LDNS發(fā)請(qǐng)求沪饺,經(jīng)過(guò)迭代解析后會(huì)回到這域名的注冊(cè)服務(wù)器去解析,這個(gè)DNS解析服務(wù)器通常會(huì)把它重新CNAME解析到另外一個(gè)域名闷愤,這個(gè)域名最終會(huì)指向CDN全局中的DNS負(fù)載均衡服務(wù)器整葡,再由這個(gè)GTM來(lái)最終分配給訪問(wèn)用戶最近的CDN節(jié)點(diǎn)。
用戶拿到DNS解析結(jié)果讥脐,用戶去CDN節(jié)點(diǎn)訪問(wèn)靜態(tài)文件遭居,如果節(jié)點(diǎn)中所請(qǐng)求的文件不存在, 就會(huì)回到源站去獲取這個(gè)文件旬渠,再返回給用戶俱萍。
負(fù)載均衡
Load Balance:對(duì)工作任務(wù)進(jìn)行平衡、分?jǐn)偟蕉鄠€(gè)操作單元上執(zhí)行告丢,如圖片服務(wù)器鼠次、應(yīng)用服務(wù)器。
鏈路負(fù)載均衡
通過(guò)DNS解析成不同的IP芋齿,用戶根據(jù)IP來(lái)訪問(wèn)不同的目標(biāo)服務(wù)器
集群負(fù)載均衡
- 硬件負(fù)載均衡
一主一備腥寇,優(yōu)點(diǎn)是性能非常好,但較為昂貴觅捆,訪問(wèn)量增大到極限時(shí)赦役,不能進(jìn)行動(dòng)態(tài)擴(kuò)容。 - 軟件負(fù)載均衡
成本低栅炒,缺點(diǎn)請(qǐng)求要多次經(jīng)過(guò)代理服務(wù)器掂摔,增加網(wǎng)絡(luò)延時(shí)术羔,如圖,LVS和HAProxy對(duì)用戶的HTTp請(qǐng)求中的URL或者Coolie來(lái)進(jìn)行負(fù)載均衡乙漓,發(fā)送給指定訪問(wèn)的機(jī)器级历。
操作系統(tǒng)負(fù)載均衡
利用操作系統(tǒng)級(jí)別的軟中斷或者硬件中斷達(dá)到負(fù)載均衡,如設(shè)置多隊(duì)列網(wǎng)卡