日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

详解浏览器解析一个URL的全过程

發(fā)布時間:2025/3/15 HTML 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解浏览器解析一个URL的全过程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

1、瀏覽器解析url

2、DNS域名解析

3、瀏覽器獲取端口號

4、TCP建立連接

5、發(fā)送HTTP請求

6、服務(wù)器處理請求

7、返回響應(yīng)結(jié)果

8、關(guān)閉TCP連接

9、瀏覽器加載解析渲染


先概括一下整個過程:

首先,瀏覽器向本地DNS服務(wù)器發(fā)送請求,如果本地沒有緩存該域名的IP地址,就需要通過遞歸或迭代的方式向根域名服務(wù)器、頂級域名服務(wù)器、權(quán)威域名服務(wù)器發(fā)起查詢請求,直至返回一個IP地址給瀏覽器。然后根據(jù)該IP地址建立TCP連接,客戶端發(fā)送HTTP請求,服務(wù)器返回報文,關(guān)閉TCP連接,再由瀏覽器進(jìn)行解析渲染頁面,最后TCP四次揮手結(jié)束連接(404:服務(wù)器找不到請求的頁面)

應(yīng)用層:DNS、HTTP、HTTPS

傳輸層:TCP

網(wǎng)絡(luò)層:IP、ARP

1、瀏覽器解析url

瀏覽器會對我們輸入的url進(jìn)行解析,主要將其分為下部分:協(xié)議、網(wǎng)絡(luò)地址、資源路徑。其中網(wǎng)絡(luò)地址指示該連接網(wǎng)絡(luò)上哪一臺計算機(jī),可以是域名或者IP地址,可以包括端口號;協(xié)議是從該計算機(jī)獲取資源的方式,常見的是HTTP,HTTPS,FTP等。不同協(xié)議有不同的通訊內(nèi)容格式;資源路徑指示從服務(wù)器上需要獲取資源的具體路徑。

這里瀏覽器對輸入的url解析為如下內(nèi)容:
url:https://mp.csdn.net/mp_blog/creation/editor/119778557
協(xié)議:https
網(wǎng)絡(luò)地址(網(wǎng)站名):mp.csdn.net
資源路徑:/mp_blog/creation/editor/119778557

2、DNS域名解析

客戶端收到你輸入的域名地址后,它首先去找本地的hosts文件,檢查在該文件中是否有相應(yīng)的域名、IP對應(yīng)關(guān)系,如果有,則向其IP地址發(fā)送請求,如果沒有,再去找DNS服務(wù)器。一般用戶很少去編輯修改hosts文件。
可以理解ip是你家的具體住址 如南京市建鄴區(qū)吉慶家園04棟603室

DNS服務(wù)器層級如下:

DNS查詢的具體步驟如下:
a、從瀏覽器緩存中查詢。瀏覽器會存儲一定時間的DNS記錄,操作系統(tǒng)不會告訴瀏覽器每個DNS記錄的保存時限,不同瀏覽器設(shè)置保存時限為一個固定值(不同瀏覽器情況不同,一般在2-30分鐘)。

b、從操作系統(tǒng)緩存中查詢。如果瀏覽器中沒有包含想要的緩存記錄,那瀏覽器就會發(fā)起操作系統(tǒng)請求,繼續(xù)查詢操作系統(tǒng)緩存

c、從路由器中查詢DNS緩存。請求持續(xù)發(fā)送到你的路由,它通常會有自己的DNS緩存。

d、從ISP中查詢DNS緩存。下一個被查詢地方是ISP緩存DNS的服務(wù)器。

e、域名服務(wù)器迭代查詢,根據(jù)返回的地址逐級向上查詢。首先從root域名服務(wù)器中查詢?nèi)?com域名服務(wù)器,然后逐步向前查詢,.com頂級域名服務(wù)器到ruanyifeng的域名服務(wù)器。一般來說,.com級別的都已經(jīng)在緩存中了,所以一般不會進(jìn)行對root域名服務(wù)器的查詢。下面給出一張迭代查詢的圖。

瀏覽器客戶端向本地DNS服務(wù)器發(fā)送一個含有域名https://mp.csdn.net的DNS查詢報文。
本地DNS服務(wù)器把查詢報文轉(zhuǎn)發(fā)到根DNS服務(wù)器,根DNS服務(wù)器注意到其com后綴,于是向本地DNS服務(wù)器返回comDNS服務(wù)器的IP地址。
本地DNS服務(wù)器再次向comDNS服務(wù)器發(fā)送查詢請求,comDNS服務(wù)器注意到其https://mp.csdn.net后綴并用負(fù)責(zé)該域名的權(quán)威DNS服務(wù)器的IP地址作為回應(yīng)。
最后,本地DNS服務(wù)器將含有https://mp.csdn.net的IP地址的響應(yīng)報文發(fā)送給客戶端。
從客戶端到本地服務(wù)器屬于遞歸查詢,而DNS服務(wù)器之間的交互屬于迭代查詢。
正常情況下,本地DNS服務(wù)器的緩存中已有comDNS服務(wù)器的地址,因此請求根域名服務(wù)器這一步不是必需的。

3、瀏覽器獲取端口號

知道ip地址后,還需要端口號,這樣才能知道具體在603室的哪個房間里。http協(xié)議默認(rèn)端口號是80。

4、TCP建立連接

IP和端口都有了,在http消息發(fā)送前,需要建立客戶端與服務(wù)器的TCP鏈接,也就是進(jìn)行所謂的三次握手。

TCP是因特網(wǎng)中的傳輸層協(xié)議,使用三次握手協(xié)議建立連接。當(dāng)主動方發(fā)出SYN連接請求后,
等待對方回答SYN+ACK,并最終對對方的 SYN 執(zhí)行 ACK 確認(rèn)。這種建立連接的方法可以防止產(chǎn)生錯誤的連接,
TCP使用的流量控制協(xié)議是可變大小的滑動窗口協(xié)議。

TCP三次握手的過程如下:

a、客戶端發(fā)送SYN(SEQ=x)報文給服務(wù)器端,進(jìn)入SYN_SEND狀態(tài)。

b、服務(wù)器端收到SYN報文,回應(yīng)一個SYN (SEQ=y)ACK(ACK=x+1)報文,進(jìn)入SYN_RECV狀態(tài)。

c、客戶端收到服務(wù)器端的SYN報文,回應(yīng)一個ACK(ACK=y+1)報文,進(jìn)入Established狀態(tài)。

三次握手完成,TCP客戶端和服務(wù)器端成功地建立連接,可以開始傳輸數(shù)據(jù)了。

5、發(fā)送HTTP請求

經(jīng)過三次握手之后,與服務(wù)器建立了連接后,就可以向服務(wù)器發(fā)起請求了。

6、服務(wù)器處理請求

請求到達(dá)服務(wù)器之后,接下來服務(wù)器需要響應(yīng)瀏覽器的請求。服務(wù)器端收到請求后的由web服務(wù)器(準(zhǔn)確說應(yīng)該是http服務(wù)器)處理請求,諸如Apache、Ngnix、IIS等。web服務(wù)器解析用戶請求,知道了需要調(diào)度哪些資源文件,再通過相應(yīng)的這些資源文件處理用戶請求和參數(shù),并調(diào)用數(shù)據(jù)庫信息,最后將結(jié)果通過web服務(wù)器返回給瀏覽器客戶端。下面以靜態(tài)渲染的頁面為例,ajax渲染不需要在服務(wù)器做頁面數(shù)據(jù)寫入

7、返回響應(yīng)結(jié)果

在HTTP里,有請求就會有響應(yīng),哪怕是錯誤信息。這里我們同樣看下響應(yīng)報文的組成結(jié)構(gòu):

在響應(yīng)結(jié)果中都會有個一個HTTP狀態(tài)碼,比如我們熟知的200、301、404、500等。通過這個狀態(tài)碼我們可以知道服務(wù)器端的處理是否正常,并能了解具體的錯誤。
狀態(tài)碼由3位數(shù)字和原因短語組成。根據(jù)首位數(shù)字,狀態(tài)碼可以分為五類:

8、關(guān)閉TCP連接

為了避免服務(wù)器與客戶端雙方的資源占用和損耗, 當(dāng)雙方?jīng)]有請求或響應(yīng)傳遞時,任意一方都可以發(fā)起關(guān)閉請求。

建立一個連接需要三次握手,而終止一個連接要經(jīng)過四次揮手,這是由TCP的半關(guān)閉(half-close)造成的。具體過程如下圖所示。

(1) 某個應(yīng)用進(jìn)程首先調(diào)用close,稱該端執(zhí)行“主動關(guān)閉”(active close)。該端的TCP于是發(fā)送一個FIN分節(jié),表示數(shù)據(jù)發(fā)送完畢。
(2) 接收到這個FIN的對端執(zhí)行 “被動關(guān)閉”(passive close),這個FIN由TCP確認(rèn)。
注意:FIN的接收也作為一個文件結(jié)束符(end-of-file)傳遞給接收端應(yīng)用進(jìn)程,放在已排隊等候該應(yīng)用進(jìn)程接收的任何其他數(shù)據(jù)之后,因?yàn)?#xff0c;FIN的接收意味著接收端應(yīng)用進(jìn)程在相應(yīng)連接上再無額外數(shù)據(jù)可接收。
(3) 一段時間后,接收到這個文件結(jié)束符的應(yīng)用進(jìn)程將調(diào)用close關(guān)閉它的套接字。這導(dǎo)致它的TCP也發(fā)送一個FIN。
(4) 接收這個最終FIN的原發(fā)送端TCP(即執(zhí)行主動關(guān)閉的那一端)確認(rèn)這個FIN。

既然每個方向都需要一個FIN和一個ACK,因此通常需要4個分節(jié)。

9、瀏覽器加載解析渲染

總結(jié)

以上是生活随笔為你收集整理的详解浏览器解析一个URL的全过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。