HTTP協議系列——網頁搜索的全過程

首先我們談到HTTP協議時,最多的最常見的是應用到瀏覽器的訪問過程,在《圖解HTTP》協議中 更多的只是涉及到HTTP的請求響應過程,再多點就加個代理服務器,那麼當你在你的瀏覽器輸入www.baidu.com到底發生了什麼呢?

HTTP協議系列——網頁搜索的全過程

接下來我將從網絡基礎的角度對這一問題進行說明。

說到這裡關於網絡通信的東西就更紛繁複雜了,以下是涉及的網絡通信的主要協議棧。

HTTP協議系列——網頁搜索的全過程

F1.協議棧


HTTP具體過程:你訪問百度的全過程解析

第一步:

你輸入的URL(www.baidu.com)是百度的域名,而互聯網中進行信息傳輸的是IP封裝的 報文或字節流。所以互聯網並不認識你 的www.baidu.com,這時它就需要DNS(Domain Name System)域名解析系統,支持UDP和TCP的訪問,端口號均是53,主要基於UDP,簡單點說DNS就是用於TCP/IP的分佈式的數據庫,它提供主機名字和IP地址之間的轉換及有關電子郵件的選路信息。這裡提到的分佈式是指在 I n t e r n e t 上的單個站點不能擁有所有的信息。每個站點(如大學中的系、校園、公司或公司中的部門)保留它自己的信息數據庫,並運行一個服務器程序供 I n t e r n e t上的其他系統(客戶程序)查詢。 D N S提供了允許服務器和客戶程序相互通信的協議。好了,當你輸完URL,DNS協議已經將你的(www.baidu.com)解析為某個IP(因為百度的訪問量實在太大,所以他們使用了服務器集群分流,所以當你和外地的老王在命令窗口Ping完顯示的IP不同也不用擔心。)

第二步:

當你已經解析到IP地址了,那麼根據你的目的IP,你的計算機會通過網絡(期間不知道經過多少交換機、路由器,可在個人PC的cmd窗口輸入netstat -r 去查看路由表,不知道有多少次的封裝報文、解析報文)為你的IP地址找到瀏覽器客戶端到服務器的路徑。主要通過傳輸層TCP的封裝成數據包,在客戶端的傳輸層,會將HTTP會話請求分成報文段,添加源和目的端口。TCP會給在這一步裡面最重要的就是於WEB服務器建立TCP連接。

第三步:

與應用層 的HTTP進行會話(在應用層就是我們具體學習到的協議相關)此時會HTTP請求,這就需要回顧請求的全過程了,最主要的方法是GET。

重要的首部字段需要了解的比如HEADER裡面涉及到的

user-agent:產生請求的瀏覽器類型

accept :客戶端可識別的內容類型列表

host: 請求的主機,允許多個域名同個IP,即虛擬主機

Accept-Language:客戶端可接收的自然語言

Accept-Encoding:客戶端可接收的編碼方式

Accept-Charset :可接收的應答字符集

connection :連接方式(close or keep alive)

Cookie : 存儲客戶端可擴展字段,向同一域名的服務端發送屬於該域的cookie

第四步:

服務器的永久重定向響應(301)

是否帶www

響應內容

Location

Connection

第五步:

瀏覽器跟蹤重定向地址

再發一個HTTP get

第六步:

服務器處理請求

第七步

服務器返回個HTML響應

第八步:

釋放TCP連接。connection 模式為close,則服務器主動關閉TCP 連接,客戶端被動關閉連接,釋放TCP 連接;若connection 模式為keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求;

第九步:

客戶端解析HTML內容

HTTP報文解析:

網絡智能機頂盒開機認證全過程就是典型的HTTP協議

給大家展現一下具體報文:

(在這裡又不得不安利一下,我日常使用的wireshark,網絡協議與報文相關的真好用)

HTTP協議系列——網頁搜索的全過程

F2.WireShark抓取

請求與響應部分:

HTTP協議系列——網頁搜索的全過程

F3.請求響應報文

不過一般設備商的機頂盒,網關一般是面向運營商的定製版本,所以HTTP過程也是必須符合電信規範要求的,首部字段等部分都是規定死的

更細節的說的話,就是從各個層來說了。在客戶端的傳輸層,會將HTTP會話請求分成報文段,添加源和目的端口。在客戶端的網絡層,主要任務是通過路由表確定如何到達服務器,客戶端的鏈路層主要是查找IP對應MAC,然後發送ARP請求目的地址。

就像我在上篇所介紹的,網絡交流的過程是IP之間的通信溝通。對於通信來說,也可以很簡單的理解為發——收。專業一點的說法就是調製解調的過程。


分享到:


相關文章: