在瀏覽器位址列中輸入乙個URL後,會發生什麼事情?

2021-09-24 15:10:58 字數 3784 閱讀 2643

當我們在瀏覽器的位址列輸入 www.cnblogs.com ,然後回車,回車到看到頁面到底發生了什麼呢?

網域名稱解析 --> 發起tcp的3次握手 --> 建立tcp連線後發起http請求 --> 伺服器響應http請求,瀏覽器得到html** --> 瀏覽器解析html**,並請求html**中的資源(如js、css、等) --> 瀏覽器對頁面進行渲染呈現給使用者

首先chrome瀏覽器會解析www.cnblogs.com這個網域名稱對應的ip位址。怎麼解析到對應的ip位址?

chrome瀏覽器會首先搜尋瀏覽器的dns快取(快取時間比較短,ttl預設是1000,且只能容納1000條快取),看自身的快取中是否有www.cnblogs.com對應的條目,而且沒有過期,如果有且沒有過期則解析到此結束。

注:我們怎麼檢視瀏覽器的dns快取?可以使用 chrome://net-internals/#dns 來進行檢視

如果瀏覽器自身的快取裡面沒有找到對應的條目,那麼chrome會搜尋作業系統的dns快取,如果找到且沒有過期則停止搜尋解析到此結束。

注:怎麼檢視作業系統的dns快取,以windows系統為例,可以在命令列下使用 ipconfig /displaydns 來進行檢視

如果在windows系統的dns快取也沒有找到,那麼嘗試讀取hosts檔案(位於c:\windows\system32\drivers\etc),看看這裡面有沒有該網域名稱對應的ip位址,如果有則解析成功。

如果在hosts檔案中也沒有找到對應的條目,瀏覽器就會發起乙個dns的系統呼叫,就會向本地配置的首選dns伺服器(一般是電信運營商提供的,也可以使用像google提供的dns伺服器)發起網域名稱解析請求(通過的是udp協議向dns的53埠發起請求,這個請求是遞迴的請求,也就是運營商的dns伺服器必須得提供給我們該網域名稱的ip位址),運營商的dns伺服器首先查詢自身的快取,找到對應的條目,且沒有過期,則解析成功。如果沒有找到對應的條目,則有運營商的dns代我們的瀏覽器發起迭代dns解析請求,它首先是會找根域的dns的ip位址(這個dns伺服器都內建13臺根域的dns的ip位址),找打根域的dns位址,就會向其發起請求(請問www.cnblogs.com這個網域名稱的ip位址是多少啊?),根域發現這是乙個頂級域com域的乙個網域名稱,於是就告訴運營商的dns我不知道這個網域名稱的ip位址,但是我知道com域的ip位址,你去找它去,於是運營商的dns就得到了com域的ip位址,又向com域的ip位址發起了請求(請問www.cnblogs.com這個網域名稱的ip位址是多少?),com域這台伺服器告訴運營商的dns我不知道www.cnblogs.com這個網域名稱的ip位址,但是我知道www.cnblogs.com這個域的dns位址,你去找它去,於是運營商的dns又向www.cnblogs.com這個網域名稱的dns位址(這個一般就是由網域名稱註冊商提供的,像萬網,新網等)發起請求(請問www.cnblogs.com這個網域名稱的ip位址是多少?),這個時候cnblogs.com域的dns伺服器一查,果真在我這裡,於是就把找到的結果傳送給運營商的dns伺服器,這個時候運營商的dns伺服器就拿到了www.cnblogs.com這個網域名稱對應的ip位址,並返回給windows系統核心,核心又把結果返回給瀏覽器,終於瀏覽器拿到了www.cnblogs.com對應的ip位址,該進行一步的動作了。

dns遞迴解析圖如下所示:

dns迭代解析圖如下所示:

注:一般情況下是不會進行以下步驟的,如果經過以上的4個步驟,還沒有解析成功,那麼會進行如下步驟:

作業系統就會查詢netbios name cache(netbios名稱快取,就存在客戶端電腦中的),那這個快取有什麼東西呢?凡是最近一段時間內和我成功通訊的計算機的計算機名和ip位址,就都會存在這個快取裡面。什麼情況下該步能解析成功呢?就是該名稱正好是幾分鐘前和我成功通訊過,那麼這一步就可以成功解析。

如果第5步也沒有成功,那會查詢wins 伺服器(是netbios名稱和ip位址對應的伺服器)

如果第6步也沒有查詢成功,那麼客戶端就要進行廣播查詢

如果第7步也沒有成功,那麼客戶端就讀取lmhosts檔案(和hosts檔案同乙個目錄下,寫法也一樣)

如果第八步還沒有解析成功,那麼這次解析失敗,那就無法跟目標計算機進行通訊。只要這八步中有一步可以解析成功,那就可以成功和目標計算機進行通訊。

拿到網域名稱對應的ip位址之後,user-agent(一般是指瀏覽器)會以乙個隨機埠(1024 < 埠 < 65535)向伺服器的web程式(常用的有tomcat,nginx等)80埠發起tcp的連線請求。這個連線請求(原始的http請求經過tcp/ip4層模型的層層封包)到達伺服器端後(這中間通過各種路由裝置,區域網內除外),進入到網絡卡,然後是進入到核心的tcp/ip協議棧(用於識別該連線請求,解封包,一層一層的剝開),還有可能要經過netfilter防火牆(屬於核心的模組)的過濾,最終到達web程式,最終建立了tcp/ip的連線。如下圖:

注:tcp三次握手詳解

http請求報文的方法是get方式,如果瀏覽器儲存了該網域名稱下的cookies,那麼會把cookies放入http請求頭里發給伺服器。

下面是chrome發起的http請求報文頭部資訊:

伺服器端web程式接收到http請求以後,就開始處理該請求,處理之後就返回給瀏覽器html檔案。

用chrome瀏覽器看到的響應頭資訊:

瀏覽器在請求靜態資源時(在未過期的情況下),向伺服器端發起乙個http請求(詢問自從上一次修改時間到現在有沒有對資源進行修改),如果伺服器端返回304狀態碼(告訴瀏覽器伺服器端沒有修改),那麼瀏覽器會直接讀取本地的該資源的快取檔案。

最後,chrome瀏覽器利用自己內部的工作機制,把請求到的靜態資源和html**進行渲染,渲染之後呈現給使用者。

**:

在瀏覽器位址列中輸入URL後發生了什麼

瀏覽器通過ip路由到你的服務,在tcp3次握手和伺服器建立連線,通過tcp協議開始訪問你的web伺服器,web伺服器得到請求後,開始提供服務,接受請求,之後通過response返回響應給瀏覽器.1.查詢ip位址 2.建立tcp連線,接入伺服器 3.瀏覽器發起http請求 4.伺服器後台操作並作出ht...

瀏覽器位址列輸入url到頁面顯示

1 瀏覽器通過dns網域名稱解析到ip位址 2 瀏覽器通過tcp協議建立到伺服器的tcp連線 tcp三次握手 3 客戶端 瀏覽器 向web伺服器端傳送http協議包,請求伺服器裡的資源文件 4 伺服器向客戶端傳送http協議應答包 5 客戶端和伺服器斷開連線 tcp四次揮手 客戶端開始解析處理htm...

在瀏覽器位址列輸入url,會發生哪些流程

1 dns解析 瀏覽器向dns伺服器請求解析該url中的網域名稱所對應的ip位址,解析出ip位址後,根據ip位址和預設埠,和伺服器建立tcp連線。2 tcp連線 結合三次握手講解 cp三次握手如圖 這裡寫描述 第一次握手 客戶主動 active open 去connect伺服器,並且傳送syn 假設...