1. 瞭解URL:
其中:登陸信息 查詢字符串 服務器端口號 文件路徑 片斷標識符可選, 若是沒有的就是默認配置。
2.DNS解析服務
計算機須要將域名理解爲IP地址, 這個時候就須要DNS解析服務來提供幫助,主要遵循以下查找過程:
瀏覽器緩存-瀏覽器會保存DNS記錄,每一個
系統緩存-若是再瀏覽器緩存裏面沒有找到記錄,則在系統緩存中獲取。
路由器緩存
DNS服務器 遞歸搜索
3. 創建TCP鏈接
由DNS服務解析的IP地址以後,經過IP地址創建TCP鏈接,這裏會有一個TCP三次握手的過程:
html
4. 生成HTTP報文
創建鏈接時,會生成HTTP報文, HTTP報文結構以下:
下面分別解釋一下各個組成部分:
請求行:由 請求方法 請求URI 和 請求HTTP版本構成 形如:
PUT example.html HTTP1.1
請求方法包括: GET 獲取資源, POST傳輸實體主體,PUT 傳輸文件等等
URI和HTTP版本沒什麼好說的
請求首部字段:(傳遞額外信息用,如下列舉一些首部字段)
Accept:用於通知服務器,用戶代理可以處理的媒體類型及媒體類型的相對優先級,後端
形如:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 意思就是, 優先返回 text/html,application/xhtml+xml,application/xml 類型的文件q 表示權重,默認且最大值爲1。
Accept-Charset :用來通知服務器用戶代理支持的字符集及字符集的相對優先順序。
Accept-Encoding :首部字段用來告知服務器用戶代理支持的內容編碼及內容編碼的優先級順序。
通用首部字段和實體首部字段都有各自的定義, 這裏再也不展開。
生成報文時,其中有一個概念是cookie:
HTTP是無狀態協議,不對以前的請求和響應狀態進行管理,也就是說,HTTP不保存我的登錄信息,那麼這裏就須要cookie來協助http協議來解決。瀏覽器
Cookie整個工做過程以下:
第一次http請求:
服務端會在響應中添加cookies來提示客戶端保存cookie:Server: Apache <Set-Cookie: sid=1342077140226724; path=/; expires=10-Oct-12 07:12:20 GMT>
第二次http請求:
客戶端在第二次請求時就會在報文中加入cookie:
Cookie: sid=1342077140226724
5.生成HTTP報文以後通過以下的過程:
一個HTTP報文通過各個層級的處理最後才被傳輸給服務端,下面描述一下各個層級的工做:
傳輸層:這裏會加上TCP首部,主要包含端口號, 以及TCP的各類信息。同時, 他會將HTTP的報文請求分爲多個報文段。
網絡層:待發送的數據送到網絡層,網絡層再進行封裝,這裏麪包含源目的地的ip地址。
鏈路層:將mac地址、鏈路層信息加到數據包裏,造成以太網首部,在鏈路協議下完成節點間的數據傳輸。
6.服務器接收到HTTP請求
服務器接收到數據以後,會通過鏈路層,網絡層,傳輸層逐層將該層對應的首部信息去掉,整個過程以下圖所示:
緩存
7. 服務器根據收到的HTTP數據,生成對應的響應報文,結構以下:
服務器
下面逐一介紹:
狀態行:由HTTP 版本 狀態碼 緣由短語構成
響應首部字段 通用首部字段 實體首部字段 均可以查手冊得知其具體內容以及含義這裏再也不展開
8. 客戶端接收到了響應報文以後,咱們以一個html文件來說述瀏覽器是如何渲染文檔的
先介紹一些背景知識:
瀏覽器一般的主要組件分爲如下幾部分:
1.用戶界面:如地址欄 書籤菜單等等
2.瀏覽器引擎:在用戶界面和呈現引擎之間傳送之類
3.呈現引擎:負責顯示請求的內容。例如HTMLhe CSS
4.JAVAScript解釋器:用於解釋和執行JavaScript 代碼
5.數據存儲
渲染文檔主要使用呈現引擎。
過程以下:
1.呈現引擎從網絡層獲取請求文檔的內容HTML文件,內容大小通常在8000個塊之內。
2.引擎解析HTML文檔 將各個標記轉化爲內容樹上的DOM 節點 ,同時解析CSS文件 樣式數據
3.樣式信息和 內容樹共同構建成爲 呈現樹
4.呈現樹構建完畢之後,進入佈局階段, 爲每個節點分配一個應該出如今屏幕上的確切座標
5.呈現引擎遍歷呈現樹 由用戶界面後端層將每一個節點繪製出來。cookie