在浏览器中输入网址后的流程
? ? ? ?在廣域網(wǎng)中是基于IP地址進(jìn)行通信的。但通??蛻粼L問(wèn)的是一個(gè)網(wǎng)址,為此需要先得到網(wǎng)址對(duì)應(yīng)的IP地址,這就需要域名服務(wù)系統(tǒng)將域名轉(zhuǎn)換成IP地址。在客戶端瀏覽器中輸入網(wǎng)址時(shí),瀏覽器會(huì)根據(jù)本地客戶端DNS服務(wù)器配置,向DNS服務(wù)器獲取域名對(duì)應(yīng)的IP地址。
? ? ? ?域名解析服務(wù)器是基于UDP協(xié)議實(shí)現(xiàn)的一個(gè)應(yīng)用程序,通常通過(guò)監(jiān)聽(tīng)53端口來(lái)獲取客戶端的域名解析請(qǐng)求。
? ? ? ?DNS查找過(guò)程為:
? ? ? ?瀏覽器緩存->系統(tǒng)緩存->路由器緩存->ISP DNS緩存->遞歸搜索
? ? ? ?遞歸搜索過(guò)程為:從根域名服務(wù)器到頂級(jí)域名服務(wù)器到所查詢的域名服務(wù)器。
2、域名服務(wù)器向客戶端返回查詢結(jié)果域名,從而完成域名到IP地址的轉(zhuǎn)換。
3、客戶端向web服務(wù)器發(fā)送HTTP請(qǐng)求
? ? ? ?得到了域名對(duì)應(yīng)的IP地址后客戶端便可向真正的web服務(wù)器發(fā)生HTTP請(qǐng)求。通常一個(gè)HTTP請(qǐng)求格式如下:
? ? ? ?如果瀏覽器存儲(chǔ)了該域名下的cookie,那么cookie也會(huì)放入http請(qǐng)求中 ? ? ? ??
? ? ? ?HTTP請(qǐng)求是一個(gè)基于TCP協(xié)議之上的應(yīng)用層協(xié)議——超文本傳輸協(xié)議。瀏覽器通過(guò)DNS獲取到web服務(wù)器真的IP地址后,便向Web服務(wù)器發(fā)起TCP連接請(qǐng)求,通過(guò)TCP三次握手建立好連接后,瀏覽器便可以將HTTP請(qǐng)求數(shù)據(jù)通過(guò)發(fā)送給服務(wù)器了。
? ? ? TCP三次握手連接:
? ? ? 第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
? ? ? 第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
? ? ? 第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
? ? ?握手過(guò)程中傳送的包里不包含數(shù)據(jù),三次握手完畢后,客戶端與服務(wù)器才正式開(kāi)始傳送數(shù)據(jù)。理想狀態(tài)下,TCP連接一旦建立,在通信雙方中的任何一方主動(dòng)關(guān)閉連接之前,TCP 連接都將被一直保持下去。
?
4、服務(wù)器給瀏覽器進(jìn)行一個(gè)301永久重定向響應(yīng)。
? ? ? ?IP對(duì)應(yīng)的服務(wù)器很可能是代理服務(wù)器,比如輸入“http://baidu.com”,而不是“http://www.baidu.com”,這兩個(gè)網(wǎng)址對(duì)應(yīng)的是同一個(gè)網(wǎng)頁(yè),因此通過(guò)代理服務(wù)器的方式進(jìn)行重定向響應(yīng),讓這兩個(gè)網(wǎng)址訪問(wèn)的同一個(gè)網(wǎng)頁(yè)。 瀏覽器根據(jù)重定向地址再次進(jìn)行HTTP請(qǐng)求。
5、發(fā)送響應(yīng)數(shù)據(jù)給客戶端
? ? ? Web服務(wù)器通常通過(guò)監(jiān)聽(tīng)80端口來(lái)獲取客戶端的HTTP請(qǐng)求。與客戶端建立好TCP連接后,Web服務(wù)器開(kāi)始接受客戶端發(fā)來(lái)的數(shù)據(jù),并通過(guò)HTTP解碼,從接受到的網(wǎng)絡(luò)數(shù)據(jù)中解析出請(qǐng)求的url信息以前其他諸如Accept-Encoding、Accept-Language等信息。
? ? ?Web服務(wù)器根據(jù)HTTP請(qǐng)求頭的信息,得到響應(yīng)數(shù)據(jù)返回給客戶端。一個(gè)典型的HTTP響應(yīng)頭數(shù)據(jù)報(bào)如下:
?
? ? ? ?至此,一個(gè)HTTP通信過(guò)程完成。web服務(wù)器會(huì)根據(jù)HTTP請(qǐng)求頭中的Connection字段值決定是否關(guān)閉TCP鏈接通道,當(dāng)Connection字段值為keep-alive時(shí),web服務(wù)器不會(huì)立即關(guān)閉此連接。
?
6、瀏覽器響應(yīng)過(guò)程
? ? ? 瀏覽器收到響應(yīng)內(nèi)容之后,生成主頁(yè)框架,同時(shí)向服務(wù)端繼續(xù)發(fā)送請(qǐng)求,請(qǐng)求的內(nèi)容是主頁(yè)里的一些資源,比如說(shuō)圖片、視頻等。 對(duì)于靜態(tài)的頁(yè)面內(nèi)容,瀏覽器通常進(jìn)行緩存,對(duì)于動(dòng)態(tài)的內(nèi)容通常不緩存,緩存的時(shí)間也是有期限的。
? ? ?瀏覽器向服務(wù)器發(fā)送異步請(qǐng)求,因?yàn)橛行╉?yè)面顯示完成之后客戶端仍需要與服務(wù)端保持聯(lián)系。
? ? ?整個(gè)過(guò)程結(jié)束之后,瀏覽器關(guān)閉TCP連接。
TCP四次揮手?jǐn)嚅_(kāi)連接
? ? ?假設(shè)Client端發(fā)起中斷連接請(qǐng)求,即發(fā)送FIN報(bào)文。Server端接到FIN報(bào)文后,意思是說(shuō)"Client端沒(méi)有數(shù)據(jù)要發(fā)送了",但是如果Server端還有數(shù)據(jù)沒(méi)有發(fā)送完成,則不必急著關(guān)閉Socket,可以繼續(xù)發(fā)送數(shù)據(jù)。所以Server端先發(fā)送ACK,告訴Client端"請(qǐng)求已經(jīng)收到,但是Server端還沒(méi)準(zhǔn)備好,請(qǐng)繼續(xù)等待消息"。這個(gè)時(shí)候Client端進(jìn)入FIN_WAIT狀態(tài),繼續(xù)等待Server端的FIN報(bào)文。當(dāng)Server端確定數(shù)據(jù)已發(fā)送完成,則向Client端發(fā)送FIN報(bào)文,告訴Client端"數(shù)據(jù)發(fā)送完成,準(zhǔn)備好關(guān)閉連接"。Client端收到FIN報(bào)文后知道可以斷開(kāi)連接,但是怕Server端不知道要關(guān)閉,所以發(fā)送ACK后進(jìn)入TIME_WAIT狀態(tài),如果Server端沒(méi)有收到ACK則可以重傳。Server端收到ACK后斷開(kāi)連接。Client端等待了2MSL后依然沒(méi)有收到回復(fù),則證明Server端已正常關(guān)閉,則自身關(guān)閉連接。
轉(zhuǎn)載于:https://www.cnblogs.com/csong7876/p/9084744.html
總結(jié)
以上是生活随笔為你收集整理的在浏览器中输入网址后的流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【AR】Vuforia之unity3d
- 下一篇: Redis详解(一)------ red