輸入url以後發生了什麼
參考連結
請求資源型別
靜態資源
如果請求的是靜態資源,那麼流量有可能到達 CDN 伺服器,利用中間伺服器作快取
動態資源
如果請求的是動態資源,流量可能依次經過代理/閘道器、Web 伺服器、應用伺服器、資料庫
DNS 解析過程
- 先檢查 host 檔案是否有相應對映,若沒有,檢查本地 DNS 伺服器是否有快取;
- 若沒有,瀏覽器向 本地 DNS 伺服器 發起請求,採用 遞迴或者迭代查詢 的方式依次向 根域名伺服器、頂級域名伺服器、權威域名伺服器 發起查詢請求,直至找到一個或一組 IP 地址,返回給瀏覽器
HTTP 請求過程
- DNS 解析拿到伺服器 IP 地址後,瀏覽器再通過系統 呼叫 Socket 介面與伺服器 443 埠進行通訊
- 整個過程可以分解為建立連線、傳送 HTTP 請求、返回 HTTP 響應、維持連線、釋放連線五個部分
建立連線(三次握手)
- 在連線建立之前,
伺服器
必須做好接受連線的準備,通過 呼叫 socket、bind、listen 和 accept 四個函式來完成 繫結公網 IP、監聽 443 埠和接受請求 的任務 客戶端
通過 socket 和 connect 兩個函式 主動開啟連線,給伺服器傳送帶有 SYN 標誌位 的分組,隨機生成一個 初始序列號 x,以及附帶 MSS(Maximum Segment Size,最大段大小)等額外資訊伺服器
必須 確認收到客戶端的分組 ,傳送帶有 SYN+ACK 標誌位的分組,隨機生成一個 初始序列號 y,確認號為 x+1,以及附帶 MSS 等額外資訊。當一端收到另外一端的 MSS 值時,會根據兩者的 MSS 取最小值來決定隨後的 TCP 最大報文段大小客戶端
確認收到伺服器的分組,傳送帶有 ACK 標誌位的分組,確認號為 y+1,從而建立 TCP 連線
傳送 HTTP 請求
- 建立起安全的加密通道後,瀏覽器開始傳送 HTTP 請求
- 請求報文 由 請求行、請求頭、空行、實體(Get 請求沒有)組成
- 請求頭:由通用首部、請求首部、實體首部、擴充套件首部組成
- 通用首部:無論是請求報文還是響應報文都可以使用,比如 Date;
- 請求首部:只有在請求報文中才有意義,分為 Accept 首部、條件請求首部、安全請求首部和代理請求首部這四類
- 實體首部作用於實體內容,分為內容首部和快取首部這兩類
- 擴充套件首部表示使用者自定義的首部,通過 X- 字首來新增
- 注意:HTTP 請求頭是不區分大小寫的,它基於 ASCII 進行編碼,而實體可以基於其它編碼方式,由 Content-Type 決定
- 請求頭:由通用首部、請求首部、實體首部、擴充套件首部組成
返回 HTTP 響應
- 伺服器接受並處理完請求,返回 HTTP 響應
- 響應報文 格式基本等同於請求報文,由 響應行、響應頭、空行、實體 組成
- 區別於請求頭:響應頭有自己的響應首部集,比如 Vary、Set-Cookie,其它的通用首部、實體首部、擴充套件首部則共用
- 此外,瀏覽器和伺服器必須保證 HTTP 的傳輸順序,各自維護的佇列中請求/響應順序必須一一對應,否則會出現亂序而出錯的情況。
維持連線
- 完成一次 HTTP 請求後,伺服器並不是馬上斷開與客戶端的連線
- 在 HTTP/1.1 中,Connection: keep-alive 是預設啟用的,表示 持久連線 ,以便處理不久後到來的新請求,無需重新建立連線而增加慢啟動開銷,提高網路的吞吐能力
斷開連線(四次揮手)
- 伺服器向客戶端傳送 Alert 報文,型別為 Close Notify,通知客戶端不再傳送資料,即將關閉連線,同樣,這條報文也是經過加密處理的
伺服器
通過呼叫 close 函式 主動關閉連線,向客戶端傳送帶有 FIN 標誌位的分組,序列號為 m客戶端
確認收到該分組 ,向伺服器傳送帶有 ACK 標誌位的分組,確認號為 m+1客戶端
傳送完所有資料後,向伺服器傳送帶有 FIN 標誌位 的分組,序列號為 n伺服器
確認收到該分組 ,向客戶端傳送帶有 ACK 標誌位的分組,序列號為 n+1客戶端
收到確認分組後,立即進入 CLOSED 狀態- 同時,
伺服器
等待 2 個 MSL (Maximum Segment Lifetime,最大報文生存時間) 的時間後,進入 CLOSED 狀態
相關文章
- 譯文:瀏覽器輸入URL發生了什麼?瀏覽器
- 網路程式設計(四):輸入一個URL後發生了什麼?程式設計
- 從輸入URL到頁面載入到底發生了什麼
- 從輸入url到傳送請求發生了什麼
- 從輸入url到顯示網頁發生了什麼網頁
- 注意看,她叫小美,在位址列輸入URL地址後發生了什麼?
- 瀏覽器位址列輸入url回車之後發生了些什麼瀏覽器
- “天龍八步”細說瀏覽器輸入URL後發生了什麼瀏覽器
- 經典面試題—在瀏覽器中輸入URL之後發生了什麼?面試題瀏覽器
- 一個頁面從輸入URL到載入顯示完成,發生了什麼?
- 從在瀏覽器中輸 URL 網址之後到底發生了什麼?瀏覽器
- 在瀏覽器輸入 URL 回車之後發生了什麼(流程圖,超詳細版)瀏覽器流程圖
- 網紅面試題:從輸入 url 到看到頁面發生了什麼面試題
- 在瀏覽器位址列輸入url到按下回車發生了什麼?瀏覽器
- 【瀏覽器】從URL輸入到頁面展現到底發生了什麼?瀏覽器
- 經典面試題:在瀏覽器位址列輸入一個 URL 後回車,背後發生了什麼面試題瀏覽器
- (詳解)從瀏覽器輸入 URL 到頁面展示過程發生了什麼?瀏覽器
- 從輸入 URL 到瀏覽器接收的過程中發生了什麼事情----轉載瀏覽器
- 在瀏覽器輸入一個網址回車後,發生了什麼?瀏覽器
- 在瀏覽器中輸入url到頁面顯示出來的過程發生了什麼?瀏覽器
- 史上最詳細的經典面試題 從輸入URL到看到頁面發生了什麼?面試題
- 一個頁面從輸入 URL 到頁面載入顯示完成,這個過程中都發生了什麼
- 一個頁面從輸入 URL 到頁面載入顯示完成,這個過程中都發生了什麼?
- 當你在瀏覽器中輸入URL回車後會發生什麼?瀏覽器
- 前端工程師必須知道系列之:從使用者輸入URL到頁面載入完成到底發生了什麼?前端工程師
- 當你在瀏覽器輸入一個網址,回車後究竟發生了什麼?瀏覽器
- 終極解密輸入網址按回車到底發生了什麼解密
- 深入淺出經典面試題:從瀏覽器中輸入URL到頁面載入發生了什麼 - Part 2面試題瀏覽器
- 深入淺出經典面試題:從瀏覽器中輸入URL到頁面載入發生了什麼 - Part 3面試題瀏覽器
- docker container run 背後發生了什麼?DockerAI
- 從URL輸入到頁面展現到底發生什麼?
- [] == ![]發生了什麼?
- 輸入URL發生了啥?希望你順便懂這15個知識點
- System.gc 之後到底發生了什麼 ?GC
- 【Django】runserver 0.0.0.0:0 後,究竟發生了什麼DjangoServer
- 瀏覽器從輸入網址到顯示都發生了些什麼?瀏覽器
- Android Studio點選Run背後發生了什麼?Android
- SAP CRM settype的建立,背後發生了什麼