1. 程式人生 > >從URL輸入到頁面展示都發生了什麼?

從URL輸入到頁面展示都發生了什麼?

總的來說分為以下過程:

DNS解析

TCP三次握手

傳送HTTP請求

伺服器端處理請求並返回HTTP保文

瀏覽器渲染頁面

斷開連線:TCP的四次揮手

URL到底是什麼?

URL(Uniform Resource Locator),統一資源定位符,使用者定位網際網路上資源,俗稱網站。

語法規則:scheme://host.domain.port/path/filename

schme:定義因特爾網際網路服務的型別。常見協議有 http,https,ftp,file。

host:定義域主機(http 預設主機是 www)

域名解析(DNS)

DNS協議提供通過域名查詢IP地址,或逆向從IP地址反查域名的服務。DNS是一個網路伺服器,我們的域名簡單來說就是在DNS上記錄一條資訊記錄。

如何通過域名去查詢URL對應的IP呢?

瀏覽器快取:瀏覽器會按照一定頻率快取DNS記錄。

作業系統快取:如果在瀏覽器快取中沒有找到,那就會去作業系統中找。

ISP的DNS伺服器:ISP是網際網路服務提供商(Internet Service Provider)的簡稱,ISP有專門的DNS伺服器應對DNS的查詢請求。

根伺服器:如果ISP的DNS伺服器還沒找到,就會向根伺服器傳送請求,進行遞迴查詢(DNS伺服器先問根域名伺服器 .com域名伺服器 的IP地址,然後再問.baidu 域名伺服器,依次類推)

TCP三次握手

在客戶端傳送請求之前,會發送TCP三次握手用以同步客戶端和服務端的序列號和確認號,並交換TCP視窗大小資訊。

第一次握手,由瀏覽器傳送請求,告訴伺服器我要傳送請求了。

第二次握手,由伺服器發起,告訴瀏覽器我準備接受了,你趕緊發吧。

第三次握手,由瀏覽器傳送,告訴瀏覽器,我馬上要發了,你準備接受吧。

為什麼需要三次握手?

“為了防止已失效的連線請求報文突然又傳送到了服務端,因而產生錯誤” -- 謝希人《計算機網路》

傳送HTTP請求

TCP三次握手結束後,開始傳送HTTP請求報文。

請求報文由 請求行(request line)、請求頭(header)、請求體

請求行包含請求方法、URL、協議版本

請求方法包含8種:GET、POST、PUT、DELETE、TRACE、OPTIONS、HEAD、PATCH

URL:即請求地址,由 協議://主機:埠/路徑?引數 組成。

協議版本即http版本號

POST /app/bscron/baseext.html?AppID=5211394&ajax=json&r=0.6853821113886356 HTTP/1.1

請求頭包含請求的附加資訊,由關鍵字、值對組成,每行一對,關鍵字和值用英文冒號:分割。

請求頭部通知伺服器有關客戶端請求的資訊。它包含許多有關的客戶端環境和請求正文的有用資訊。

Connection: keep-alive
Content-Length: 34
Accept: */*
Origin: http://app.huicui.me
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://app.huicui.me/app/bscron/edit.html?AppID=5211394&id=100153
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: UM_distinctid=1676d855f-0d0045fe32f2c6-35617600-1fa400-1676264dd87274; PHPSESSID=pcvbojcnb7vdo9q9mhpab1; CNZZDATA1261434238=298008907-15435792-http%253A%252F%252Fapp.huicui.me%252F%7C4440878

請求體,可以承載多個請求引數的資料,包含回車符、換行符和請求資料,並不是所有請求都具有請求資料。

AppID=123&ajax=json

伺服器處理請求並返回HTTP報文

伺服器,每臺伺服器都會安裝處理請求的應用-web serve。常見的web serve 產品有 apache,nginx, IIS, Lighttpd等。

http響應報文

響應報文由響應行(request line)、響應頭部(header)、響應主體組成。

響應行包含:協議版本、狀態碼、狀態碼描述

狀態碼規則如下:

1xx:指示資訊-表示請求已接收,繼續處理

2xx:成功-表示請求已被成功接收、理解、接受。

3xx:重定向-要完成請求必須進行更進一步的操作。

4xx:客戶端錯誤-請求有語法錯誤或請求無法實現。

5xx:伺服器端錯誤-伺服器未能實現合法的請求。

瀏覽器解析渲染頁面

根據HTML解析出DOM數

根據CSS解析生成CSS規則書

結合DOM數和CSS規則樹,生成渲染樹

根據渲染樹計算每一個節點的資訊

根據計算好的資訊繪製頁面

斷開連線

當資料傳送完畢,需斷開TCP連線,此時發起TCP四次揮手。

第一次揮手:由瀏覽器發起,傳送給伺服器,我請求報文傳送玩了,你準備關閉吧。

第二次揮手:由伺服器發起,告訴瀏覽器,我請求報文接受完了,我準備關閉了,你也準備吧。

第三次揮手:由伺服器發起,告訴瀏覽器,我響應報文傳送完了,你準備關閉吧。

第四次揮手:有瀏覽器發起,告訴伺服器,我響應報文接受完了,我準備關閉了,你也準備吧。