完整的web請求與響應

2021-07-11 10:50:14 字數 2270 閱讀 3386

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

整個流程如下:

1、網域名稱解析

2、發起tcp的3次握手

3、建立tcp連線後發起http請求

4、伺服器響應http請求,瀏覽器得到html**

5、瀏覽器解析html**,並請求html**中的資源(如js、css、等)

6、瀏覽器對頁面進行渲染呈現給使用者

以下就是上面過程的一一分析,我們就以chrome瀏覽器為例:

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

chrome瀏覽器會首先搜尋瀏覽器自身的dns快取(快取時間比較短,大概只有1分鐘,且只能容納1000條快取)。

如果瀏覽器自身快取找不到則會檢視系統的dns快取,如果找到且沒有過期則停止搜尋解析到此結束.

而如果本機沒有找到dns快取,則瀏覽器會發起乙個dns的系統呼叫,就會向本地配置的首選dns伺服器發起網域名稱解析請求(通過的是udp協議向dns的53埠發起請求,這個請求是遞迴的請求,也就是運營商的dns伺服器必須得提供給我們該網域名稱的ip位址),運營商的dns伺服器首先查詢自身的快取,找到對應的條目,且沒有過期,則解析成功。

如果沒有找到對應的條目,則有運營商的dns代我們的瀏覽器發起迭代dns解析請求,它首先是會找根域的dns的ip位址(這個dns伺服器都內建13臺根域的dns的ip位址),找打根域的dns位址,就會向其發起請求(請問www.linux178.com這個網域名稱的ip位址是多少啊?),根域發現這是乙個頂級域com域的乙個網域名稱,於是就告訴運營商的dns我不知道這個網域名稱的ip位址,但是我知道com域的ip位址,你去找它去,於是運營商的dns就得到了com域的ip位址,又向com域的ip位址發起了請求(請問www.linux178.com這個網域名稱的ip位址是多少?),com域這台伺服器告訴運營商的dns我不知道www.linux178.com這個網域名稱的ip位址,但是我知道linux178.com這個域的dns位址,你去找它去,於是運營商的dns又向linux178.com這個網域名稱的dns位址(這個一般就是由網域名稱註冊商提供的,像萬網,新網等)發起請求(請問www.linux178.com這個網域名稱的ip位址是多少?),這個時候linux178.com域的dns伺服器一查,誒,果真在我這裡,於是就把找到的結果傳送給運營商的dns伺服器,這個時候運營商的dns伺服器就拿到了www.linux178.com這個網域名稱對應的ip位址,並返回給windows系統核心,核心又把結果返回給瀏覽器,終於瀏覽器拿到了www.linux178.com對應的ip位址,該進行一步的動作了。

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

為什麼http協議要基於tcp來實現?

tcp是乙個端到端的可靠的面向連線的協議,所以http基於傳輸層tcp協議不用擔心資料的傳輸的各種問題。

進過tcp3次握手之後,瀏覽器發起了http的請求,使用的http的方法 get 方法,請求的url是 / ,協議是http/1.0

上圖為3次握手的內容,並且發起get請求。http報文請求如下:

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

第32號包 是伺服器返回給客戶端http響應包(200 ok 響應的mime型別是text/html),代表這一次客戶端發起的http請求已成功響應。200 代表是的 響應成功的狀態碼。

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

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

網路基礎 Web請求與響應

瀏覽器得到主機網域名稱,舉例 www.baidu.com 瀏覽器將網域名稱解析成ip位址 瀏覽器快取 系統快取 路由器快取 isp dns快取 從根網域名稱伺服器遞迴搜尋 瀏覽器用ip和隨機埠號 預設80 連線伺服器 http報文分為請求報文和響應報文兩類。請求報文和響應報文都由三個部分組成。開始行...

Web請求和響應

webrequest是個抽象類 不能例項化。webrequest是類裡有個返回值為webrequest型別的靜態方法create string requesturistring webrequest request webrequest.create 發出乙個請求 webresponse respo...

一次完整的HTTP請求與響應

瀏覽器會查詢瀏覽器快取,系統快取,路由快取,如果沒有的話 繼續下一步,如果有的話,直接顯示 是否有這個 的快取 這個 的快取是否過期,具體看cache control 中快取的有效時間 跟伺服器進行協商是否使用快取,如果上次快取的時候有last modified 和 etag 字段,本次請求就會加上...