發送一個url請求到頁面渲染完成經歷的流程

訪問順序

1.在瀏覽器輸入url(應用層)
2.DNS域名解析(應用層)
3.TCP建立連接 (傳輸層)
4.瀏覽器向服務器發送http請求 (應用層)
5.服務器接收請求
6.頁面渲染

一:在瀏覽器輸入網址(url)

在瀏覽器地址欄輸入網址

二:域名解析

DNS解析:域名到IP地址的轉換過程。域名的解析工作由DNS服務器完成。解析後可以獲取域名相應的IP地址
DNS解析過程:
1. 先去本地hosts文件中讀取對應ip映射,如果找到跳到第3步
2. 如果沒有,則向外部的DNS服務器查詢
3. 通過ip地址,發出請求
在這裏插入圖片描述

三:TCP建立連接

TCP協議是面向連接的,所以在傳輸數據前必須建立連接

TCP三次握手過程:
1.客戶端向服務器發送請求連接報文(SYN, seq=x)
2.服務器收到請求連接報文後,向客戶端發送確認報文(SYN+ACK,seq=y,ack=x+1),服務器併爲這次連接分配資源
3.客戶端收到確認報文之後,向服務器發送確認報文(ACK,seq=x+1,ack=y+1)
建立tcp連接之後就可以發送數據了。
在這裏插入圖片描述

四:瀏覽器向服務器發送http請求

請求信息包括請求頭和請求體
在這裏插入圖片描述

五:服務器接收請求

  1. Http請求被髮送到服務器對應端口,被在那裏偵聽的Coyote HTTP/1.1 Connector獲得。
  2. Connector把該請求交給它所在的Service的Engine來處理,並等待來自Engine的迴應。
  3. Engine匹配到名爲localhost的Host
  4. Host匹配到它所擁有的所以Context
  5. Context通過它的 mapping table 找到對應的Servlet類,構造HttpServletRequest對象和HttpServletResponse對象,作爲參數調用對應的Servlet類
  6. 執行完請求後再逐層返回,處理後得到的HttpServletResponse對象
六:頁面渲染

瀏覽器收到服務器發送的響應頭和響應體,進行客戶端渲染,生成Dom樹、解析css樣式、js交互。


注:

1.持久連接:既然維持 TCP 連接好處這麼多,HTTP/1.1 就把 Connection 頭寫進標準,並且默認開啓持久連接,除非請求中寫明 Connection: close,那麼瀏覽器和服務器之間是會維持一段時間的 TCP 連接,不會一個請求結束就斷掉。

所以第一個問題的答案是:默認情況下建立 TCP 連接不會斷開,只有在請求報頭中聲明 Connection: close 纔會在請求完成後關閉連接。
2.一個 TCP 連接是可以發送多個 HTTP 請求的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章