瀏覽器輸入URL按回車背後的經歷

2021-09-12 08:53:54 字數 3541 閱讀 9193

當我們在瀏覽器的位址列輸入 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對應的條目,而且沒有過期,如果有且沒有過期則解析到此結束。

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

如果在windows系統的dns快取也沒有找到,那麼嘗試讀取hosts檔案(位於c:\windows\system32\drivers\etc),看看這裡面有沒有該網域名稱對應的ip位址,如果有則解析成功。(hosts檔案主要作用是定義ip位址和主機名的對映關係,是乙個對映ip位址和主機名的規定。可以用文字檔案開啟!當使用者在瀏覽器中輸入乙個需要登入的**時,系統會自動從hosts檔案中尋找對應的ip位址,一旦找到,瀏覽器會立即開啟對應網頁,如果沒有找到,則瀏覽器會將**提交dns伺服器進 行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位址,該進行一步的動作了。

一般情況下是不會進行以下步驟的,如果經過以上的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的連線。如下圖:

tcp3次握手:

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

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

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

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

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

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

瀏覽器輸入URL回車後

當我們想瀏覽某乙個網頁時,一般都會輸入對應的url,這個其實就是請求對應資源的過程。那麼這個過程實質上經歷了什麼呢?查詢ip 客戶端根據網域名稱查詢對應的ip 相互通訊 客戶端與資源伺服器通訊 斷開連線 客戶端與資源伺服器斷開連線 1.查詢ip 系統將網域名稱傳送至 ldns 本地網域名稱伺服器 查...

在瀏覽器位址列輸入URL,按下回車後內部處理過程

這是一道面試會經常問的問題,平時雖然很常見的操作,但是 其底層原理,可能並不是一件簡單的事情,於是我從各處蒐羅整理下全過程,在這裡做分享。第一步 瀏覽器輸入網域名稱 例如輸入 www.csdn.net 瀏覽器會把輸入的網域名稱解析成對應的ip,其過程如下 3.查詢路由器快取 如果1,2步都查詢無果,...

在瀏覽器輸入url回車之後發生了什麼?

瀏覽器解析url 獲得協議 https web伺服器名 baidu.com 和檔案路徑 dist test.html 等資訊 根據解析url獲取的資訊生成http請求報文 請求行 訊息頭 訊息體 客戶端去dns伺服器查詢web伺服器網域名稱對應的ip位址網域名稱解析 www.baidu.com 客戶...