從輸入url地址後瀏覽器發生了什麼

從輸入url地址後瀏覽器發生了什麼-網絡篇

假如輸入了https://www.baidu.com/

一:網絡請求:

1. 構建請求

瀏覽器會構建請求行:

//請求方法是GET,路徑是根路徑,HTTP協議版本爲1.2
GET/HTTP/1.2

2. 查找強緩存
瀏覽器會先檢查強緩存,如果命中直接使用,沒有則進入下一步。

3.DNS解析
由於輸入的是域名,數據包是通過IP地址傳給對方的。因此我們需要得到域名對應的Ip地址。這個過程需要依賴一個服務系統,這個系統將域名和IP 一 一映射,我們稱這個系統爲DNS(域名系統)。得到具體IP的過程就是DNS解析。
注意:瀏覽器自帶DNS數據緩存功能,即如果一個域名已經解析過了,會被緩存下來,下次直接走緩存,不走DNS解析 ,另外如果不指定端口號的話 瀏覽器默認IP爲80的端口號。

4.建立TCP連接
*提醒:Chrome在一個域名下要求同時最多隻能有6個TCP連接,超過6個其他的就要等待。

TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議。用

建立TCP連接經歷了下面三個階段:
1.通過三次握手(即發送3個數據包確認已經建立連接)建立客戶端和服務器之間的連接
2.進行數據傳輸。這裏有一個機制,就是接收到數據包後必須要向發送方確認,如果發送方沒有接收到這個確認的消息,就會被判定爲數據包丟失,並重新發送改數據包。當然發送過程中有一個優化策略,就是把大的數據包拆成小的數據包,依次傳輸到接收方,接收方按照小包的順序把它們組裝成完整的數據包。
3.斷開連接的階段。數據傳輸完成。通過四次揮手來斷開連接
這裏有詳細的計算機網絡基礎知識,關於三次握手,四次揮手…大家有空可以看看推薦文章

5.發送HTTP請求
現在TCP連接建立完成,瀏覽器和服務器可以開始通信,即開始發送HTTP請求。瀏覽器發送HTTP請求要攜帶三樣東西,請求行,請求頭和請求體

首先,瀏覽器會向服務器器發送請求行,關於請求行,我們已經寫過,
// 請求方法是GET,路徑爲根路徑,HTTP協議版本爲1.1 GET / HTTP/1.1

由請求方法,請求URL和HTTP版本協議組成。
同時也要帶上請求頭,比如我們之前說的Cache-Control、If-Modified-Since、If-None-Match都由可能被放入請求頭中作爲緩存的標識信息。當然了還有一些其他的屬性,列舉如下:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: no-cache
Connection: keep-alive
Cookie: /* 省略cookie信息 */
Host: www.baidu.com
Pragma: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1

最後是請求體,請求體只有在POST方法下存在,常見的是表單提交。

網絡響應

HTTP請求到達服務器,服務器進行對應的處理,最後要把數據傳給瀏覽器,也就是返回網絡響應。
跟請求部分很像,有:響應行,響應頭和響應體
響應行類似下面

HTTP/1.1 200 OK

HTTP協議版本、狀態碼和狀態描述組成響應頭包含了服務器及返回數據的一些信息,服務器生成數據的時間,返回的數據類型以及是否寫入的Cookie信息。
如:

Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Wed, 04 Dec 2019 12:29:13 GMT
Server: apache
Set-Cookie: rsv_i=f9a0SIItKqzv7kqgAAgphbGyRts3RwTg%2FLyU3Y5Eh5LwyfOOrAsvdezbay0QqkDqFZ0DfQXby4wXKT8Au8O7ZT9UuMsBq2k; path=/; domain=.baidu.com

響應完成後,TCP連接就斷開?
不一定。這時候要判斷Connection字段,如果請求頭或者響應頭包含Connection:keep-alive,表示建立了持久連接,這樣TCP連接會一直保持。之後請求統一站點的資源會複用這個資源。
否則斷開TCP連接,請求-響應流程結束。
總結:網絡請求過程如下:
在這裏插入圖片描述