首先我們談到HTTP協議時,最多的最常見的是應用到瀏覽器的訪問過程,在《圖解HTTP》協議中 更多的只是涉及到HTTP的請求響應過程,再多點就加個代理服務器,那麼當你在你的瀏覽器輸入www.baidu.com到底發生了什麼呢?
接下來我將從網絡基礎的角度對這一問題進行說明。
說到這裡關於網絡通信的東西就更紛繁複雜了,以下是涉及的網絡通信的主要協議棧。
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過程也是必須符合電信規範要求的,首部字段等部分都是規定死的
更細節的說的話,就是從各個層來說了。在客戶端的傳輸層,會將HTTP會話請求分成報文段,添加源和目的端口。在客戶端的網絡層,主要任務是通過路由表確定如何到達服務器,客戶端的鏈路層主要是查找IP對應MAC,然後發送ARP請求目的地址。
就像我在上篇所介紹的,網絡交流的過程是IP之間的通信溝通。對於通信來說,也可以很簡單的理解為發——收。專業一點的說法就是調製解調的過程。
閱讀更多 何五雜談 的文章