文章很多都是參考別人的蕴侧,然后自己進(jìn)行了大概的總結(jié)墓赴。大概的整個(gè)過程如下:
- 瀏覽器的地址欄輸入U(xiǎn)RL并按下回車。
- DNS解析URL對應(yīng)的IP挽铁。
- HTTP發(fā)起請求薪介。
- 根據(jù)IP建立TCP連接(三次握手)祠饺。
- HTTP發(fā)起請求。
- 服務(wù)器處理請求汁政。
- 瀏覽器接收HTTP響應(yīng)道偷。
- 渲染頁面,構(gòu)建DOM樹记劈。
- 關(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查詢的兩種方式:遞歸查詢和迭代查詢
遞歸解析
客戶端主機(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ò),表示無法查詢到地址混稽;
遞歸查詢迭代解析
當(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ù)器的劃分根域名服務(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地址;頂級(jí)域名服務(wù)器
它有兩種劃分方式间聊,一種互聯(lián)網(wǎng)剛興起時(shí)的按照行業(yè)性質(zhì)劃分的.com攒盈,.net等,一種是按國家劃分的如.cn哎榴,.jp等型豁;權(quán)限域名服務(wù)器
個(gè)人或組織在互聯(lián)網(wǎng)上使用的注冊名稱,例如qq.com/baidu.com尚蝌;本地域名服務(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)建渲染樹裆悄、定位頁面元素、繪制頁面元素等帅戒。
八灯帮、斷開TCP連接
客戶端與服務(wù)器四次揮手,斷開tcp連接逻住。
- 第一次揮手:客戶端想分手钟哥,發(fā)送消息給服務(wù)器;
- 第二次揮手:服務(wù)器通知客戶端已經(jīng)接受到分手請求瞎访,但還沒做好分手準(zhǔn)備腻贰;
- 第三次揮手:服務(wù)器已經(jīng)做好分手準(zhǔn)備,通知客戶端扒秸;
- 第四次揮手:客戶端發(fā)送消息給服務(wù)器播演,確定分手冀瓦,服務(wù)器關(guān)閉連接。
參考網(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