瀏覽器輸入 URL 之后發生了什么


1、步驟

(1)DNS 解析

(2)TCP 連接

(3)發送 HTTP 請求

(4)服務器處理請求並返回 HTTP 報文

(5)瀏覽器解析渲染頁面

(6)連接結束

2.詳細內容

(1)DNS解析

  1. 輸入 IP,此時電腦發送一個 DNS 請求到本地 DNS 服務器(一般是網絡接入服務商提供 eg:電信,移動);

  2. 本地 DNS 服務器會首先查詢它的緩存記錄,如果有,則直接返回結果,若沒有,本地 DNS 服務器還要向 DNS 根服務器進行查詢;

  3. DNS 根服務器沒有記錄具體域名和 IP 地址的對應關系,而是告訴本地 DNS 服務器,可到域服務器上繼續查詢,並給出域服務器地址;

  4. 本地服務器繼續向域服務器發出請求,返回域名的解析服務器地址;

  5. 本地 DNS 向域名解析服務器發出請求,收到域名與 IP 地址對應關系;

  6. 本地 DNS 服務器將 IP 地址返回電腦,且保存副本到緩存已備下次查詢。

(2)TCP連接

主要是三次握手:

  1. 建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SENT狀態,等待服務器確認; 

  2. 服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

  3. 客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。

(3)發送HTTP請求

發送HTTP請求的過程就是構建HTTP請求報文並通過TCP協議中發送到服務器指定端口(HTTP協議80/8080, HTTPS協議443)。HTTP請求報文是由三部分組成: 請求行, 請求頭和請求體

  1.請求行:Method Request-URL HTTP-Version CRLF ;常用的請求方法有: GET, POST, PUT, DELETE, OPTIONS, HEAD。

  2.請求頭:常見的請求頭有: Accept, Accept-Charset, Accept-Encoding, Accept-Language, Content-Type, Authorization, Cookie, User-Agent等。

  3.請求體:當使用POST, PUT等方法時,通常需要客戶端向服務器傳遞數據。這些數據就儲存在請求正文中。在請求包頭中有一些與請求正文相關的信息,例如: 現在的Web應用通常采用Rest架構,請求的數據格式一般為json。這時就需要設置Content-Type: application/json。

(4)服務器處理請求並返回HTTP報文

服務器在收到瀏覽器發送的HTTP請求之后,會將收到的HTTP報文封裝成HTTP的Request對象,並通過不同的Web服務器進行處理,處理完的結果以HTTP的Response對象返回,HTTP響應報文也是由三部分組成: 狀態碼, 響應報頭和響應報文。

  1. 1XX 信息性狀態碼

    • 100 繼續

    • 101 切換協議

  2. 2XX 成功狀態碼

    • 200 OK 成功處理了請求

    • 204 No Content 請求處理成功,但沒有資源可返回

    • 206 Partial Content 請求資源的某一部分

  3. 3XX 重定向狀態碼

    • 301 永久性重定向,表示請求的資源已被分配了新的 URI

    • 302 臨時性重定向,資源的 URL 已臨時定位到其他位置

    • 303 告訴客戶端應該用另一個 URL 獲取資源

    • 304 表示客戶端發送附帶條件的請求時,服務器端允許請求訪問資源,但未滿足條件的情況

  4. 4XX 客戶端錯誤狀態碼

    • 400 表示請求報文中存在語法錯誤

    • 401 未授權

    • 403 服務器拒絕了請求

    • 404 服務器無法找到所請求的 URL

  5. 5XX 服務器錯誤狀態碼

    • 500 內部服務器錯誤

    • 502 錯誤網關

    • 503 服務器暫時處於超負載或正在進行停機維護,現在無法處理請求。

    • 504 響應超時

(5)瀏覽器解析渲染頁面

瀏覽器是一個邊解析邊渲染的過程。首先瀏覽器解析HTML文件構建DOM樹,然后解析CSS文件構建渲染樹,等到渲染樹構建完成后,瀏覽器開始布局渲染樹並將其繪制到屏幕上。

  reflow(回流):也稱作Layout,中文叫回流,一般意味着元素的內容、結構、位置或尺寸發生了變化,需要重新計算樣式和渲染樹,這個過程稱為Reflow

  repain(重繪):當盒模型的位置,大小以及其他屬性,如顏色,字體,等確定下來之后,瀏覽器便開始繪制內容,這個過程稱為repain。

(6)連接結束

主要是四次揮手:

  1.客戶端發出連接釋放報文段(FIN=1,序號seq=u),並停止再發送數據,主動關閉TCP連接,進入FIN_WAIT1(終止等待1)狀態,等待服務端的確認。

  2.服務端收到連接釋放報文段后即發出確認報文段(ACK=1,確認號ack=u+1,序號seq=v),服務端進入CLOSE_WAIT(關閉等待)狀態,此時的TCP處於半關閉狀態,客戶端到服務端的連接釋放。客戶端收到服務端的確認后,進入FIN_WAIT2(終止等待2)狀態,等待服務端發出的連接釋放報文段。

  3.服務端沒有要向客戶端發出的數據,服務端發出連接釋放報文段(FIN=1,ACK=1,序號seq=w,確認號ack=u+1),服務端進入LAST_ACK(最后確認)狀態,等待客戶端確認。

  4.客戶端收到服務端的連接釋放報文段后,對此發出確認報文段(ACK=1,seq=u+1,ack=w+1),客戶端進入TIME_WAIT(時間等待)狀態。此時TCP未釋放掉,需要經過時間等待計時器設置的時間2MSL后,客戶端才進入CLOSED狀態。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM