訪問乙個網頁的全過程詳解!

2021-08-28 13:57:17 字數 2595 閱讀 1632

開啟乙個網頁的過程中,瀏覽器會因頁面上的css/js/image等靜態資源會多次發起連線請求,所以我們暫且把這個網頁載入過程分成兩部分:

(1)html(jsp/php/aspx) 頁面載入(假設存在簡單的nginx負載均衡)

(2)css/js/image等 網頁靜態資源載入(假設使用cdn)

什麼是dns解析?當使用者輸入乙個**並按下回車鍵的時候,瀏覽器得到了乙個網域名稱。而在實際通訊過程中,我們需要的是乙個ip位址。因此我們需要先把網域名稱轉換成相應的ip位址,這個過程稱作dns解析。

(1)瀏覽器首先搜尋瀏覽器自身快取的dns記錄。

瀏覽器自身也帶有一層dns快取。chrome 快取1000條dns解析結果,快取時間大概在一分鐘左右。

(chrome瀏覽器通過輸入:chrome://net-internals/#dns 開啟dns快取頁面)

(2)如果瀏覽器快取中沒有找到需要的記錄或記錄已經過期,則搜尋hosts檔案。

(linux系統的hosts檔案在/etc/hosts下。)

(3)如果在hosts檔案中沒有找到需要的記錄或記錄已經過期,則向網域名稱解析伺服器傳送解析請求。

系統會向dns伺服器正式發出解析請求。這裡是真正意義上開始解析乙個未知的網域名稱。

(4)如果網域名稱解析伺服器也沒有該網域名稱的記錄,則開始遞迴+迭代解析。

這裡我們舉個例子,如果我們要解析的是mail.google.com。

1)首先我們的網域名稱解析伺服器會向根域伺服器(全球只有13臺)發出請求。顯然,僅憑13臺伺服器不可能把全球所有ip都記錄下來。所以根域伺服器記錄的是com域伺服器的ip、cn域伺服器的ip、org域伺服器的ip。如果我們要查詢.com結尾的網域名稱,那麼我們可以到com域伺服器去進一步解析。根域伺服器告訴我們com域伺服器的ip。

2)接著我們的網域名稱解析伺服器會向com域伺服器發出請求。根域伺服器並沒有mail.google.com的ip,但是卻有google.com域伺服器的ip。我們的網域名稱解析伺服器會向google.com域伺服器發出請求。如此重複,直到獲得mail.google.com的ip位址。

為什麼是遞迴:問題由一開始的本機要解析mail.google.com變成網域名稱解析伺服器要解析mail.google.com,這是遞迴。

為什麼是迭代:問題由向根域伺服器發出請求變成向com域伺服器發出請求再變成向google.com域發出請求,這是迭代。

(5)獲取網域名稱對應的ip後,一步步向上返回,直到返回給瀏覽器。

瀏覽器會選擇乙個大於1024的本機埠向目標ip位址的80埠發起tcp連線請求。經過標準的tcp握手流程,建立tcp連線。

其本質是在建立起的tcp連線中,按照http協議標準傳送乙個索要網頁的請求。

(1)什麼是負載均衡?當一台伺服器無法支援大量的使用者訪問時,將使用者分攤到兩個或多個伺服器上的方法叫負載均衡。

(2)負載均衡的方法很多,nginx負載均衡、lvs-nat、lvs-dr等。這裡,我們以簡單的nginx負載均衡為例。

(3)什麼是nginx?nginx是一款面向效能設計的http伺服器,相較於apache、lighttpd具有占有記憶體少,穩定性高等優勢。nginx有4種型別的模組:core、handlers、filters、load-balancers。我們這裡討論其中的2種,分別是負責負載均衡的模組load-balancers和負責執行一系列過濾操作的filters模組。

(1)如果我們的平台配備了負載均衡的話,前一步dns解析獲得的ip位址應該是我們nginx負載均衡伺服器的ip位址。所以,我們的瀏覽器將我們的網頁請求傳送到了nginx負載均衡伺服器上。

(2)nginx根據我們設定的分配演算法和規則,選擇一台後端的真實web伺服器,與之建立tcp連線、並**我們瀏覽器發出去的網頁請求。

(3)web伺服器收到請求,產生響應,並將網頁傳送給nginx負載均衡伺服器。

(4)nginx負載均衡伺服器將網頁傳遞給filters鏈處理,之後發回給我們的瀏覽器.

(1)瀏覽器根據頁面內容,生成dom tree。根據css內容,生成css rule tree(規則樹)。呼叫js執行引擎執行js**。

(2)根據dom tree和css rule tree生成render tree(呈現樹)。

(3)根據render tree渲染網頁。

在瀏覽器解析頁面內容的時候,發現頁面引用了其他未載入的image、css檔案、js檔案等靜態內容,因此開始了第二部分。

以阿里巴巴的**網首頁的logo為例,其url位址為img.alicdn.com/tps/i2/tb1bne7lf***xaoxfxxwfsa1***-292-116.png_145x145.jpg

我們清楚地看到了url中有cdn字樣。

什麼是cdn?如果我在廣州訪問杭州的**網,跨省的通訊必然造成延遲。如果**網能在廣東建立乙個伺服器,靜態資源我可以直接從就近的廣東伺服器獲取,必然能提高整個**的開啟速度,這就是cdn。cdn叫內容分發網路,是依靠部署在各地的邊緣伺服器,使使用者就近獲取所需內容,降低網路擁塞,提高使用者訪問響應速度。

接下來的流程就是瀏覽器根據url載入該url下的內容。本質上是瀏覽器重新開始第一部分的流程,所以這裡不再重複闡述。區別只是負責均衡伺服器後端的伺服器不再是應用伺服器,而是提供靜態資源的伺服器。

訪問乙個網頁的全過程

前言 訪問目標位址有兩種方式 使用目標ip位址訪問。由於ip位址是一堆數字不方便記憶,於是有了網域名稱這種字元型標識。使用網域名稱訪問。網域名稱解析就是網域名稱到ip位址的轉換過程,網域名稱的解析工作由dns伺服器完成。比如說訪問 baidu.com 1.如果是網域名稱,首先將網域名稱解析成ip 計...

乙個網頁開啟的全過程

從使用者在瀏覽器輸入網域名稱開始,到web頁面載入完畢,這是乙個說複雜不複雜,說簡單不簡單的過程,下文暫且把這個過程稱作網頁載入過程。下面我將依靠自己的經驗,總結一下整個過程。如有錯漏,歡迎指正。閱讀本文需要讀者已有一定的計算機知識,了解tcp dns等。眾所周知,開啟乙個網頁的過程中,瀏覽器會因頁...

訪問乙個網頁的全過程(根據7層協議分析)

應用層 1.瀏覽器向dns伺服器發起dns請求,進行網域名稱解析,獲得相應的ip位址 2.根據http協議生成http報文請求 在應用層將要傳送的資料內容形成了應用層的報文data,傳送到傳輸層 傳輸層 3.tcp的三次握手 把處理的資料段傳送到網路層 資料在網路層被打包,這樣封裝上了網路層的包頭,...