作者:位元組流動
來源:
https://blog.csdn.net/Kennethdroid/article/details/102082964輸入域名
在浏覽器輸入網址時,浏覽器會根據曆史記錄、書簽智能比對補全域名或者 url 。
例如 chrome 浏覽器,甚至會根據比對結果直接把網頁加載出來。
解析域名
請求發起時,浏覽器首先解析域名,一般會首先檢視本地的 hosts 檔案,查找相關域名與 ip 位址的對應規則,若查找到的話,就直接使用 hosts 檔案裡面的 ip 位址。
若在本地 hosts 檔案中,未找到目标域名與 ip 位址的對應關系,浏覽器便會向本地 DNS 伺服器發起一個 DNS 請求,本地 DNS 伺服器收到請求之後,便會查詢其緩存記錄,若查詢到此記錄便直接傳回結果。
若本地 DNS 伺服器緩存中未查詢到相關記錄,便向 DNS 根伺服器進行查詢,根 DNS 伺服器沒有記錄具體的域名與 ip 位址的映射關系,而是傳回域伺服器的位址。
本地 DNS 繼續向域伺服器發起請求,域伺服器收到請求之後,傳回域名解析伺服器的位址。最後本地 DNS 伺服器向域名解析伺服器發送請求,域名解析伺服器收到請求之後,傳回域名與 ip 映射關系資訊,然後本地 DNS 伺服器将映射資訊儲存到其緩存中,同時也将 ip 位址傳回給使用者電腦。

浏覽器發起 http 請求
浏覽器擷取到域名對應的 ip 位址之後,便會以一個随機端口(1024< port < 65535)向服務端 web 程式 80 端口發起 TCP 連接配接請求。
浏覽器與服務端經過 3 次 TCP 握手之後,建立 TCP 連接配接,然後浏覽器發起一個 http 請求。一般的浏覽器隻能發起 GET 或者 POST 請求。
請求信格式包含四個部分:
- 請求行(請求方法 URI 協定/版本)
- 請求頭(緩存、用戶端身份資訊等)
- 空行
- 消息體
http 請求格式示例:
GET /index.html HTTP/1.1
Cache-Control:max-age=0
Cookie:gsScrollPos=; _ga=GA1.2.329038035.1465891024; _gat=1
If-Modified-Since:Sun, 01 May 2016 23:59:59 GMT
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36
//消息體
PS:
常用的請求方法有 GET/POST/DELETE/PUT/HEAD 。
TCP 三次握手的目的是:為了防止已經失效的連接配接請求封包發送到服務端,服務端因而産生不必要的響應開銷。
在謝希仁著《計算機網絡》第四版中講“三次握手”的目的是“為了防止已失效的連接配接請求封包段突然又傳送到了服務端,因而産生錯誤”。在另一部經典的《計算機網絡》一書中講“三次握手”的目的是為了解決“網絡中存在延遲的重複分組”的問題。
TCP 四次揮手的目的是:為確定收發雙方資料傳輸的完整性。
那四次分手又是為何呢?TCP協定是一種面向連接配接的、可靠的、基于位元組流的運輸層通信協定。TCP是全雙工模式,這就意味着,當主機1發出FIN封包段時,隻是表示主機1已經沒有資料要發送了,主機1告訴主機2,它的資料已經全部發送完畢了;但是,這個時候主機1還是可以接受來自主機2的資料;當主機2傳回ACK封包段時,表示它已經知道主機1沒有資料發送了,但是主機2還是可以發送資料到主機1的;當主機2也發送了FIN封包段時,這個時候就表示主機2也沒有資料要發送了,就會告訴主機1,我也沒有資料要發送了,之後彼此就會愉快的中斷這次TCP連接配接。如果要正确的了解四次分手的原理,就需要了解四次分手過程中的狀态變化。
伺服器傳回 http 響應
服務端傳回 http 響應的格式包含四個部分:
- 響應行(狀态行)(協定/版本号 狀态碼 狀态說明)
- 響應頭(響應頭是伺服器傳遞給用戶端用于說明伺服器的一些資訊,以及将來繼續通路該資源時的政策。)
- 消息體(響應體是服務端傳回給用戶端的 HTML 文本内容,或者其他格式的資料,比如:視訊流、圖檔或者音頻資料。)
http 響應格式示例:
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2016 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 113
<html>
<head>
<title>Haohao</title>
</head>
<body>
Hello World!
</body>
</html>
伺服器在傳回響應之前可能會經過重定向、反向代理伺服器請求等過程。
浏覽器處理響應
以服務端響應消息體為 HTML 文本為例,浏覽器解析 HTML 文本時,會”自上而下“加載,并在加載過程中進行解析渲染展現給使用者。在解析過程中,如果遇到請求外部資源時,如圖檔、外鍊的 CSS 、 js 等,請求過程是異步的,并不會影響整個 HTML 文檔的加載。
「視訊雲技術」你最值得關注的音視訊技術公衆号,每周推送來自阿裡雲一線的實踐技術文章,在這裡與音視訊領域一流工程師交流切磋。