国产视频app如果我們訪問一個網站,只需要在瀏覽器中輸入網站的域名,就可以請求到網站的服務器,得到我們想要的頁面。這個過程很是短暫,但你知道他的過程是怎么的么?

今天就說一說一次完整的HTML請求的過程是怎么樣的

解析URL

一次完整的http請求過程是怎樣的?

我向瀏覽器中輸入網址后,瀏覽器會效驗網址的合法性,如果網址不合法,會傳給默認的搜索引擎。

如果網址合法并通過驗證,瀏覽器會解析,得到協議(http或https),域名,資源頁面(比如首面等)

DNS查詢

国产视频app瀏覽器會先檢查域名信息是否在緩存中。

国产视频app再檢查域名是否在本地的Hosts文件中。

国产视频app如果還不在,那么瀏覽器會向DNS服務器發送一個查詢請求,獲得目標服務器的IP地址。

TCP封包及傳輸

一次完整的http請求過程是怎樣的?

国产视频app瀏覽器獲得了目標服務器的IP(DNS返回)、端口(URL中包含,沒有就使用默認),瀏覽器會調用庫函數socket,生成一個TCP流套接字,也就是完成了TCP的封包。

得到服務器IP地址后,User-Agent(一般是指瀏覽器)會以一個隨機端口(1024 < 端口 < 65535)向服務器的WEB程序的80端口發起TCP的連接請求。這個連接請求(原始的http請求經過TCP/IP4層模型的層層封包)到達服務器端后還有可能要經過防火墻的過濾,最終到達WEB程序,最終建立了TCP/IP的連接。

TCP封包完成之后,就可以傳輸了,在完成“你瞅啥”,“瞅你咋地”,“來,過來嘮嘮”一系列操作之后,瀏覽器和服務器就完成了TCP的三次握手,建立了連接,后面就可以請求服務器資源了。

建立TCP連接后發起HTTP請求

TCP3次握手后,瀏覽器發起了http的請求

国产视频appHTTP請求報文格式,報文由3部分組成(請求行+請求頭+請求體)

1、請求行:

①請求方法,GET、POST最常見,還有DELETE、HEAD、OPTIONS、PUT、TRACE。

②URL地址,它和報文頭的Host屬性組成完整的請求URL。

③協議名稱及版本號。

2、請求頭:

国产视频appHTTP的報文頭,報文頭包含若干個屬性,格式為“屬性名:屬性值”,服務端據此獲取客戶端的信息。與緩存相關的規則信息,均包含在header中

3、請求體:

它將一個頁面表單中的組件值通過param1=value1&param2=value2的鍵值對形式編碼成一個格式化串,它承載多個請求參數的數據。不但報文體可以傳遞請求參數,請求URL也可以通過類似于“tuotiao.com?param1=value1&param2=value2”的方式傳遞請求參數。

服務器接收請求并相應

国产视频app服務器端WEB程序接收到http請求后,開始處理該請求,返回給瀏覽器html

一些常見狀態碼

200:成功

301:永久重定向, Location響應首部的值仍為當前URL,為隱藏重定向

302:臨時重定向,顯式重定向, Location響應首部的值為新的URL

304:Not Modified 未修改,本地緩存的資源文件

国产视频app404:Not Found 請求的URL資源并不存在

500:Internal Server Error 服務器內部錯誤

国产视频app502:Bad Gateway 連接不到服務器

国产视频app504:Gateway Timeout 能連接服務器,但服務器未在規定時間內給響應

瀏覽器解析并渲染

一次完整的http請求過程是怎樣的?

国产视频app瀏覽器從服務器拿到了想要訪問的資源,大多數時候,這個資源就是HTML頁面,當然也可能是一個其他類型的文件。

国产视频app瀏覽器先對HTML文檔進行解析,生成解析樹(以DOM元素為節點的樹)。

国产视频app加載頁面的外部資源,比如JS、CSS、圖片。

国产视频app遍歷DOM樹,并計算每個節點的樣式,最終完成渲染,變成我們看到的頁面。