從輸入U(xiǎn)RL網(wǎng)址到頁面呈現(xiàn)發(fā)生了什么

文章很多都是參考別人的蕴侧,然后自己進(jìn)行了大概的總結(jié)墓赴。大概的整個(gè)過程如下:

  1. 瀏覽器的地址欄輸入U(xiǎn)RL并按下回車。
  2. DNS解析URL對應(yīng)的IP挽铁。
  3. HTTP發(fā)起請求薪介。
  4. 根據(jù)IP建立TCP連接(三次握手)祠饺。
  5. HTTP發(fā)起請求。
  6. 服務(wù)器處理請求汁政。
  7. 瀏覽器接收HTTP響應(yīng)道偷。
  8. 渲染頁面,構(gòu)建DOM樹记劈。
  9. 關(guān)閉TCP連接(四次揮手)勺鸦。

一、URL地址輸入

輸入網(wǎng)址:baidu.com目木,網(wǎng)址自動(dòng)跳轉(zhuǎn)為https://www.baidu.com

此時(shí)祝旷,URL網(wǎng)址分為了:協(xié)議、域名、端口號(hào)怀跛,這里的端口號(hào)是默認(rèn)所以隱藏了。此外柄冲,URL還會(huì)包含一些路徑吻谋、查詢等其他片段,如:https://www.baidu.com/s?ie=utf-8&f=3...

  • 協(xié)議:從該計(jì)算機(jī)獲取資源的方式现横,有HTTP協(xié)議漓拾、加密的HTTPS協(xié)議、FTP協(xié)議及FILE協(xié)議等戒祠,不同協(xié)議有不同的通訊內(nèi)容格式骇两。

  • 域名:URL的中間部分為域名,一般我們都是通過域名查找網(wǎng)站姜盈,因?yàn)橛蛎唵魏糜洝?/p>

  • 端口號(hào):端口號(hào)不常見是因?yàn)榇蟛糠侄际鞘褂玫哪J(rèn)端口低千,如HTTP默認(rèn)端口號(hào)為80/8080,HTTPS默認(rèn)為443/tcp 443等馏颂。

二示血、域名解析

當(dāng)我們在瀏覽器輸入一個(gè)url時(shí),這個(gè)地址并不是真正意義上的地址救拉。互聯(lián)網(wǎng)上每一臺(tái)計(jì)算機(jī)的唯一標(biāo)識(shí)是它的IP地址难审,因此我們輸入的網(wǎng)址需要先解析為IP地址,這個(gè)過程叫DNS解析亿絮。

DNS解析過程的具體查找方式為:

  • 瀏覽器緩存: 瀏覽器會(huì)緩存DNS記錄一段時(shí)間告喊。當(dāng)用戶輸入一個(gè)url地址,首先會(huì)在瀏覽器緩存中查找是否有該域名對應(yīng)的IP地址派昧,如果有黔姜,則直接返回該IP地址。當(dāng)然斗锭,不同瀏覽器一般都有一個(gè)自固定的緩存時(shí)間(2分鐘到30分鐘不等)地淀;

  • 系統(tǒng)緩存: 一般在瀏覽器緩存栗沒有找到需要的記錄,瀏覽器會(huì)查找系統(tǒng)緩存岖是,查看本地C盤中的hosts文件上是否有對應(yīng)IP地址帮毁,如果有,則返回IP豺撑;同樣烈疚,如果有病毒把一些常用的域名,修改 hosts 文件聪轿,指向一些惡意的 ip爷肝,那么瀏覽器也會(huì)不加判斷的去連接,這正是很多病毒的慣用手法。

  • 路由器緩存: 在系統(tǒng)緩存中沒有查詢到IP灯抛,瀏覽器將會(huì)將請求發(fā)給路由器金赦,它一般會(huì)有自己的DNS緩存信息;

  • ISP DNS緩存: 如果路由器緩存中也沒有查詢到IP地址对嚼,接下來要查詢的就是本地DNS服務(wù)器緩存夹抗,本地DNS服務(wù)器一般是由為用戶提供互聯(lián)網(wǎng)接入服務(wù)的運(yùn)營商提供,如果在本地DNS服務(wù)緩存中找到了纵竖,則返回IP地址漠烧,這個(gè)過程是以遞歸方式進(jìn)行的;

  • 遞歸搜索: 如果以上方式都沒有查詢到IP地址靡砌,那你的ISP的DNS服務(wù)器將從根域名服務(wù)器開始進(jìn)行遞歸搜索已脓,從.com頂級(jí)域名服務(wù)器到百度的域名服務(wù)器,然后依次返回IP地址通殃。

※ 默認(rèn)情況下度液,DNS服務(wù)器使用遞歸方式來解析IP地址,如果你禁止DNS服務(wù)器使用遞歸方式邓了,則DNS服務(wù)器使用迭代方式工作恨诱。

知識(shí)擴(kuò)展:

1)什么是DNS?

DNS(Domain Name System骗炉,域名系統(tǒng))照宝,因特網(wǎng)上作為域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫,能夠使用戶更方便的訪問互聯(lián)網(wǎng)句葵,而不用去記住能夠被機(jī)器直接讀取的IP數(shù)串厕鹃。通過主機(jī)名,最終得到該主機(jī)名對應(yīng)的IP地址的過程叫做域名解析(或主機(jī)名解析)乍丈。

簡單來講就是將域名和IP地址進(jìn)行翻譯剂碴,比如www.baidu.com更方便記憶,而IP地址卻不方便記憶轻专。計(jì)算機(jī)的唯一標(biāo)識(shí)就是它的IP地址忆矛,所以最終計(jì)算機(jī)是通過IP地址找到對應(yīng)資源。

2)DNS查詢的兩種方式:遞歸查詢和迭代查詢

  1. 遞歸解析
    客戶端主機(jī)向本地DNS服務(wù)器進(jìn)行遞歸查詢请垛,然后本地DNS服務(wù)器先向該域名的根域服務(wù)器查詢催训,再由根域名服務(wù)器一級(jí)級(jí)向下查詢。最后得到的查詢結(jié)果再一級(jí)級(jí)返回給本地DNS服務(wù)器,客戶端主機(jī)再得到本地DNS服務(wù)器返回的IP地址宗收。遞歸查詢的結(jié)果要么是返回的IP地址漫拭,要么是報(bào)錯(cuò),表示無法查詢到地址混稽;

    遞歸查詢

  2. 迭代解析
    當(dāng)本地DNS服務(wù)器自己不能回答客戶端主機(jī)的DNS查詢時(shí)采驻,也可以通過迭代查詢的方式進(jìn)行解析审胚。本地DNS服務(wù)器向根域名服務(wù)器發(fā)起查詢請求,根域名服務(wù)器會(huì)返回頂級(jí)域名服務(wù)器的信息礼旅,讓本地DNS服務(wù)器去查詢膳叨,本地DNS服務(wù)器會(huì)繼續(xù)向頂級(jí)域名服務(wù)器發(fā)出請求,得到IP地址信息各淀,或者得到下一步向哪個(gè)權(quán)限域名服務(wù)器請求的信息懒鉴,直到找到IP地址或找不到IP返回報(bào)錯(cuò)信息,然后將信息返回給客戶端主機(jī)碎浇。也就是說,迭代解析只是幫你找到相關(guān)的服務(wù)器而已璃俗,而不會(huì)幫你去查奴璃。

    迭代查詢

    3)域名服務(wù)器的劃分

  3. 根域名服務(wù)器
    就是所謂的“.”,網(wǎng)址www.baidu.com在配置當(dāng)中應(yīng)該www.baidu.com.(最后有一點(diǎn)),一般我們在瀏覽器里輸入時(shí)會(huì)省略后面的點(diǎn)城豁,而這也已經(jīng)成為了習(xí)慣苟穆。全球總共有13個(gè)根域名服務(wù)器的地址,但機(jī)器數(shù)量卻不是13臺(tái)唱星,它是最重要的域名服務(wù)器雳旅,它知道所有頂級(jí)域名服務(wù)器的域名和IP地址;

  4. 頂級(jí)域名服務(wù)器
    它有兩種劃分方式间聊,一種互聯(lián)網(wǎng)剛興起時(shí)的按照行業(yè)性質(zhì)劃分的.com攒盈,.net等,一種是按國家劃分的如.cn哎榴,.jp等型豁;

  5. 權(quán)限域名服務(wù)器
    個(gè)人或組織在互聯(lián)網(wǎng)上使用的注冊名稱,例如qq.com/baidu.com尚蝌;

  6. 本地域名服務(wù)器
    每個(gè)因特網(wǎng)服務(wù)提供商ISP迎变,或大學(xué),甚至大學(xué)里的一個(gè)系飘言,都可以擁有本地域名服務(wù)器衣形。

三、TCP連接

得到 ip 地址后姿鸿,瀏覽器會(huì)開始構(gòu)造一個(gè) http 請求谆吴,應(yīng)用層的 http 請求準(zhǔn)備好后,瀏覽器在傳輸層發(fā)起一條到達(dá)服務(wù)器的 tcp 連接般妙,這個(gè)時(shí)候應(yīng)該開始三次握手的過程纪铺。

該握手包括一個(gè)“同步報(bào)文”,一個(gè)“同步-應(yīng)答報(bào)文”和一個(gè)“應(yīng)答報(bào)文”碟渺,這三個(gè)報(bào)文在 瀏覽器和服務(wù)器之間傳遞鲜锚。該握手首先由客戶端嘗試建立起通信突诬,而后服務(wù)器應(yīng)答并接受客戶端的請求,最后由客戶端發(fā)出該請求已經(jīng)被接受的報(bào)文芜繁。

完成三次握手旺隙,客戶端與服務(wù)器開始傳送數(shù)據(jù)。三次握手的主要目的防止server端一直等待骏令,浪費(fèi)資源蔬捷。

四、瀏覽器向web服務(wù)器發(fā)送http請求

瀏覽器 通過TCP/IP連接 向web服務(wù)器 發(fā)送一個(gè) HTTP 請求榔袋,完整的HTTP請求包含請求起始行周拐、請求頭部、請求主體三部分凰兑。
  • 請求行:指定http請求的方法妥粟、url、http協(xié)議版本等吏够。常用的方法有 GET 或者 POST 等勾给,不常用的還有 PUT 和 DELETE 、HEAD锅知、OPTION以及 TRACE 播急,一般的瀏覽器只能發(fā)起 GET 或者 POST 請求。
    eg: GET index.html HTTP/1.1
  • 請求頭(Request Header):描述瀏覽器的相關(guān)信息售睹,語言桩警、編碼等。
  • 請求正文:當(dāng)發(fā)送POST, PUT等請求時(shí)侣姆,通常需要向服務(wù)器傳遞數(shù)據(jù)生真。這些數(shù)據(jù)就儲(chǔ)存在請求正文中。

五捺宗、服務(wù)器處理HTTP請求

后端在固定的端口接收到TCP報(bào)文開始柱蟀,它會(huì)對TCP連接進(jìn)行處理,對HTTP協(xié)議進(jìn)行解析蚜厉,并按照報(bào)文格式進(jìn)一步封裝成HTTP Request對象长已,供上層使用。

一些大一點(diǎn)的網(wǎng)站會(huì)將你的請求到反向代理服務(wù)器中昼牛,因?yàn)楫?dāng)網(wǎng)站訪問量非常大术瓮,網(wǎng)站越來越慢,一臺(tái)服務(wù)器已經(jīng)不夠用了贰健。于是將同一個(gè)應(yīng)用部署在多臺(tái)服務(wù)器上胞四,將大量用戶的請求分配給多臺(tái)機(jī)器處理。此時(shí)伶椿,客戶端不是直接通過HTTP協(xié)議訪問某網(wǎng)站應(yīng)用服務(wù)器辜伟,而是先請求到Nginx氓侧,Nginx再請求應(yīng)用服務(wù)器,然后將結(jié)果返回給客戶端导狡。

這里Nginx的作用是反向代理服務(wù)器约巷。同時(shí)也帶來了一個(gè)好處,其中一臺(tái)服務(wù)器萬一掛了旱捧,只要還有其他服務(wù)器正常運(yùn)行独郎,就不會(huì)影響用戶使用。

六枚赡、服務(wù)器返回一個(gè) HTTP 響應(yīng)

服務(wù)器處理完的結(jié)果以HTTP的Response對象返回氓癌,主要包括狀態(tài)碼,響應(yīng)頭贫橙,響應(yīng)報(bào)文三個(gè)部分顽铸。

狀態(tài)碼主要包括以下部分:

狀態(tài)碼 釋義
1xx 指示信息–表示請求已接收,繼續(xù)處理料皇。
. 100: Continue/繼續(xù) 、 101: Switch Protocols/協(xié)議轉(zhuǎn)換
2xx 成功–表示請求已被成功接收星压、理解践剂、接受。
. 200: OK/正常 娜膘、 201: Create/已創(chuàng)建 逊脯、 202: Accepted/接受 、 203: Non-Authoritative Information/非官方信息 竣贪、 204: No Content/無內(nèi)容军洼、205: Reset Content/重置內(nèi)容 、 206: Partial Content/局部內(nèi)容演怎。
3xx 重定向–要完成請求必須進(jìn)行更進(jìn)一步的操作匕争。
. 300: Multiple Choices/多重選擇、301: Moved Permanently/永久移動(dòng)爷耀、302: Found/已找到甘桑、303: See Other/查看其他位置、304: Not Modified/未修改歹叮、305: Use Proxy/使用代理跑杭、 307: Temporary Redirect/臨時(shí)重定向。
4xx 客戶端錯(cuò)誤–請求有語法錯(cuò)誤或請求無法實(shí)現(xiàn)咆耿。
. 400: Bad Request/錯(cuò)誤請求德谅、401: Unauthorized/未授權(quán)、 403: Forbidden/禁止萨螺、 404: Not Found/未找到窄做、405: Method Not Allowed/方法未允許愧驱、406: Not Acceptable/無法訪問……
5xx 服務(wù)器端錯(cuò)誤–服務(wù)器未能實(shí)現(xiàn)合法的請求。
. 500: Internal Server Error/內(nèi)部服務(wù)器錯(cuò)誤浸策、501: Not Implemented/未實(shí)現(xiàn)502: Bad Gateway/網(wǎng)關(guān)錯(cuò)誤冯键、503: Service Unavailable/服務(wù)無法獲得、504: Gateway Timeout/網(wǎng)關(guān)超時(shí)庸汗、505: HTTP Version Not Supported/HTTP 版本不支持惫确。

具體狀態(tài)碼內(nèi)容點(diǎn)此查看

響應(yīng)頭主要由Cache-Control、 Connection蚯舱、Date改化、Pragma等組成。
響應(yīng)報(bào)文為服務(wù)器返回給瀏覽器的信息枉昏,主要由HTML陈肛,css,js兄裂,圖片文件組成句旱。

七、瀏覽器頁面渲染

瀏覽器接受到http服務(wù)器發(fā)送過來的響應(yīng)頭晰奖,此處如果瀏覽器訪問過谈撒,緩存上有對應(yīng)資源,會(huì)與服務(wù)器最后修改時(shí)間對比匾南,一致則返回304啃匿;如果有修改或沒有緩存,瀏覽器將開始下載解析html文檔蛆楞,渲染頁面溯乒,同時(shí)使用緩存。具體的渲染過程包括:構(gòu)建DOM樹豹爹、構(gòu)建渲染樹裆悄、定位頁面元素、繪制頁面元素等帅戒。

DOM樹節(jié)點(diǎn)

八灯帮、斷開TCP連接

客戶端與服務(wù)器四次揮手,斷開tcp連接逻住。

  • 第一次揮手:客戶端想分手钟哥,發(fā)送消息給服務(wù)器;
  • 第二次揮手:服務(wù)器通知客戶端已經(jīng)接受到分手請求瞎访,但還沒做好分手準(zhǔn)備腻贰;
  • 第三次揮手:服務(wù)器已經(jīng)做好分手準(zhǔn)備,通知客戶端扒秸;
  • 第四次揮手:客戶端發(fā)送消息給服務(wù)器播演,確定分手冀瓦,服務(wù)器關(guān)閉連接。
斷開TCP連接

參考網(wǎng)址:
https://blog.csdn.net/qq_32657025/article/details/79672419
https://www.cnblogs.com/xianyulaodi/p/6547807.html
https://segmentfault.com/a/1190000006879700#articleHeader0
https://www.cnblogs.com/dinghuihua/p/6739340.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末写烤,一起剝皮案震驚了整個(gè)濱河市翼闽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洲炊,老刑警劉巖感局,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異暂衡,居然都是意外死亡询微,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門狂巢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撑毛,“玉大人,你說我怎么就攤上這事唧领≡宕疲” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵斩个,是天一觀的道長蹦疑。 經(jīng)常有香客問我,道長萨驶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任艇肴,我火速辦了婚禮腔呜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘再悼。我一直安慰自己核畴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布冲九。 她就那樣靜靜地躺著谤草,像睡著了一般。 火紅的嫁衣襯著肌膚如雪莺奸。 梳的紋絲不亂的頭發(fā)上丑孩,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機(jī)與錄音灭贷,去河邊找鬼温学。 笑死,一個(gè)胖子當(dāng)著我的面吹牛甚疟,可吹牛的內(nèi)容都是我干的仗岖。 我是一名探鬼主播逃延,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼轧拄!你這毒婦竟也來了揽祥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤檩电,失蹤者是張志新(化名)和其女友劉穎拄丰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體是嗜,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡愈案,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鹅搪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片站绪。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖丽柿,靈堂內(nèi)的尸體忽然破棺而出恢准,到底是詐尸還是另有隱情,我是刑警寧澤甫题,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布馁筐,位于F島的核電站,受9級(jí)特大地震影響坠非,放射性物質(zhì)發(fā)生泄漏敏沉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一炎码、第九天 我趴在偏房一處隱蔽的房頂上張望盟迟。 院中可真熱鬧,春花似錦潦闲、人聲如沸攒菠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辖众。三九已至,卻和暖如春和敬,著一層夾襖步出監(jiān)牢的瞬間凹炸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工昼弟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留还惠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像蚕键,于是被迫代替她去往敵國和親救欧。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

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