當你在瀏覽器輸入時發生了什麼
當朋友寄來了一個連結,於是我把它貼到chrome上並觀看他傳的連結是什麼。這件事是我們常做的,但有沒有思考過背後的原理,為什麼貼上網址,瀏覽器就能將網頁顯示出來呢。
當我們在瀏覽器輸入URL並按下Enter鍵時,背後發生了一系列複雜且高度協調的過程,這些過程涉及到瀏覽器、網絡協議、伺服器以及許多其他技術。這裡會簡單的介紹。
1. 瀏覽器接收URL並開啟一個新Process
瀏覽器是一個複雜的應用程式,本身由多個process和thread組成,並且透過這些process和thread協同工作以確保網頁的順利加載和顯示。當輸入URL並按下Enter鍵時,瀏覽器會啟動一個新的process來處理這次請求。這個新process專門負責網頁的載入和渲染,從而保證即使有一個process崩潰,其他網頁仍然可以正常運行。
2. 瀏覽器解析URL
該process將我們輸入的URL開始被解析為協定、網域名稱和路徑等資訊。以https://www.example.com/path
為例:
- 協定:
https
- 網域名稱:
www.example.com
- 路徑:
/path
瀏覽器會根據這些資訊決定接下來的行動。協定決定了瀏覽器將使用哪種網絡協議(如HTTP或HTTPS),而網域名稱和路徑則幫助瀏覽器找到具體的資源。
URL的組成
URL(統一資源定位符)是一種標識網絡資源的方法,通常由以下部分組成:
- 協定(protocol):如HTTP、HTTPS、FTP等,指定了如何訪問資源。
- 網域名稱(domain name):如www.example.com,用於標識伺服器的地址。
- 路徑(path):如/path,用於標識資源在伺服器上的位置。
- 查詢參數(query parameters):如?key=value,用於傳遞附加資訊。
- 片段識別符(fragment identifier):如#section,用於標識頁面內的某個部分。
3. DNS查詢
接下來,瀏覽器需要將網域名稱解析為對應的IP地址。這一過程稱為DNS查詢,主要分為以下幾步:
- 瀏覽器首先查詢本地(Browser)的DNS緩存,看看是否有對應的IP地址。
- 如果本地緩存中沒有,瀏覽器會請求作業系統(OS)進行DNS查詢。
- 操作系統查詢本地的
hosts
文件,看是否有對應的IP地址。 - 如果
hosts
文件中沒有,作業系統會向配置的DNS伺服器發送查詢請求。通常這些DNS伺服器是ISP(網際網路服務提供商)的伺服器。 - DNS伺服器如果本身沒有記錄,會進行遞歸查詢,逐層向上查詢直至獲得結果。
DNS查詢的結果是一個IP地址,瀏覽器將使用這個IP地址與伺服器建立連線。
4. 建立TCP連線
有了IP地址後,瀏覽器需要與伺服器建立一個TCP連線。這一步包括TCP的三次握手過程:
- 瀏覽器向伺服器發送一個SYN(同步)包,請求建立連線。
- 伺服器收到SYN包後,回覆一個SYN-ACK(同步-確認)包,表示同意建立連線。
- 瀏覽器收到SYN-ACK包後,再回覆一個ACK(確認)包,完成連線建立。
這個過程確保了瀏覽器和伺服器之間的連線是可靠且雙向的。