這是關於網路系列的第四篇文章,接下來會有更多精彩內容.敬請期待! 讓我們一起乘風破浪!
前言
前面我們通過以下文章
分別對網際層的IP協議,運輸層的UDP和TCP協議進行了簡單的學習.從該篇開始, 我們學習應用層的HTTP協議.HTTP協議本身內容較為豐富, 希望你能通過該系列文章有所收穫.
本篇旨在理解HTTP客戶端伺服器互動過程,對其模型有大體瞭解,不做深入瞭解。你可以瞭解到一下內容:
- Web客戶端於伺服器是如何通訊的
- 表示Web內容的資源來自何方
- Web事務是怎樣工作的
- HTTP通訊所使用的報文格式
- 底層TCP網路傳輸
- HTTP協議演變
- Web結構元件
內容
Web客戶端於伺服器是如何通訊的
先看下面一張通訊草圖:
可見,該通訊方式是,客戶端向伺服器傳送請求(Request),伺服器回送請求資料(Response),也就是請求應答模式。表示Web內容的資源來自何方
資源可以是儲存在伺服器上的靜態檔案,如文字檔案、圖片檔案、影視檔案等;也可以是根據使用者身份生成的動態檔案,如個人的照片,線上商店購物訂單。
-
媒體型別 在如此眾多的資源中,HTTP為了解每種資源的型別,會對資源打上標籤,稱之為
MIME type
,在Web伺服器回送的資料中包含該內容。客戶端可以根據資源型別決定如何處理該資源。常見的MIME type
有:text/html
HTML
格式的文字型別text/plain
普通的ASCII
文字型別image/jpeg
JPEG
格式圖片型別image/gif
GIF
格式的圖片型別video/quicktime
Apple
公司QuickTime
電影型別application/vnd.ms-powerpoint
微軟PowerPoint
檔案型別
-
URI
伺服器上的每一個資源,都會有自己的標識,稱為統一資源識別符號(Uniform Resource Identifier, URI)
,它可以在世界範圍內標識並定位資訊資源。 -
URL
URL
是URI
最常見的形式(另一種是下面討論的URN
),稱為統一資源定位符
。它描述了一臺伺服器上某資源的特定位置,可以精確的定位一個資源。如,http://www.baidu.com/image/girl.gif
。大部分URL
都遵循該格式,它包括下面幾個部分:http://
稱為方案(scheme),說明了訪問資源使用的協議型別,這裡通常是http://
www.baidu.com
伺服器地址(說為域名更為合適),也可以使IP
地址- 其餘部分指定了資源在伺服器的位置和名稱,也可以包含引數在最後,用
?
隔開。
-
URN
URN
是統一資源名,也是URI
的一種。作為特定資源的唯一名稱使用,與資源的所在地無關。現階段,URN
並未大範圍使用。 -
在實際應用中,並沒有對
URI
和URL
進行特定區分。
Web事務是怎樣工作的
一個HTTP事務是由一條請求命令和一個響應結果組成。這種通訊通過HTTP報文的格式化資料塊進行。
-
方法
HTTP支援幾種不同的請求命令,這些命令稱為HTTP方法。每個HTTP請求都會包含一個方法,負責告訴伺服器執行什麼動作。常見的方法如下:HTTP方法 描述 GET 告知伺服器,需要從伺服器向客戶端傳送命名資源 PUT 將客戶端的資料儲存的命名的伺服器資源中 DELETE 從伺服器刪除資源 POST 將客戶端資料傳送到一個伺服器應用程式 HEAD 僅傳送命名資源響應中的HTTP首部 更詳細的介紹在後續文章中。
-
狀態碼
每條HTTP響應報文返回時都會攜帶狀態碼,告知客戶端是否請求成功,或者是否需要採取其他動作。常見的狀態碼:HTTP狀態碼 描述 200 請求成功 302 Redirect,重定向。到其他地方獲取資源 404 Not Found,沒找到。無法找到資源 通常,和狀態碼一起的還有一條解釋性的短語,對該狀態進行描述。更詳細的介紹在後續文章中。
-
複合頁面 看下面一個例子:
該頁面中的每一個資源都要使用一個單獨的HTTP事務。
HTTP通訊所使用的報文格式
HTTP報文是由一行一行的簡單字串組成。都是純文字,不是二進位制。客戶端傳送給伺服器的稱為請求報文(request message)
,伺服器發往客戶端的稱為響應報文(response message)
。HTTP報文組成:
-
起始行
報文的第一行,請求報文
中用來說明要做什麼,在響應報文
中說明出現的情況。 -
首部欄位
起始行之後可以有零個或多個首部欄位。每個首部欄位是一個鍵值對。首部以一個空行結束。 -
主體
首部的空行之後是主體。請求主體中包括要傳送給伺服器的資料,響應主體中包括返回給客戶端的資料。主體的資料不具有結構化,可以包含任意二進位制資料和文字。下面是一個請求和響應報文示例:
底層TCP網路傳輸
HTTP是應用層協議,它無需關係網路通訊的具體細節,把聯網的細節都交給了通用可靠的TCP/IP。相關內容,請檢視該篇起始位置給出的連結.
下面是一個建立連結請求資料的過程:
總結步驟如下:
- 從
URL
解析主機名(或稱為域名) - 通過主機名獲取IP地址
- 解析埠號(如果有的話),沒有使用預設的
80
- 建立於伺服器的
TCP
連結 - 向伺服器傳送HTTP請求報文
- 伺服器返回HTTP響應報文
- 關閉連結
HTTP協議演變(瞭解)
HTTP/0.9
HTTP的1991原型版。有很多嚴重的設計缺陷,只支援GET方法,不支援多媒內容的MIME型別,各種HTTP首部或版本號。其初衷是為了獲取HTML物件,很快就被1.0版本取代。HTTP/1.0
1.0是一個廣泛使用的版本。新增了版本號,各種首部,一些額外方法,已經對多媒體物件的處理。它使得包含生動圖片的Web頁面和互動式表格成為可能。HTTP/1.0+
在20實際90年代中葉,為了滿足快速擴張的網際網路需要,流行的客戶端和伺服器在HTTP中新增了各種特性,包含keep-alive
,虛擬主機支援,以及代理連結支援。帶有這種非官方的HTTP版本通常稱為HTTP/1.0+
。HTTP/1.1
HTTP/1.1
重點是校正HTTP設計中的結構性缺陷,明確語義,引入重要的效能優化措施,刪除不好的特性。HTTP/NG(HTTP/2.0)
2.0版注重效能的大幅優化,以及更強大的服務邏輯遠端執行框架。更具體的HTTP/2.0介紹看這裡。
Web結構元件
主要了解概念,更細緻的討論在後續文章中。
-
代理
客戶端和伺服器之間的HTTP中間實體。接收所有客戶端的HTTP請求,並轉發給伺服器(可能對請求進行修改)。對於使用者來說,這些中介軟體就是代理,代表使用者訪問伺服器。 -
快取
Web快取
或代理快取
是一種特殊的HTTP代理伺服器,可以將經過代理傳送的常用檔案複製儲存起來,下一個請求同一檔案的客戶端就可以使用該快取。 -
閘道器
閘道器也是一種特殊的伺服器,作為其他伺服器的中間實體使用,具有特定的功能。如下,HTTP/FTP
閘道器,負責將HTTP客戶端的HTTP請求,在響應客戶端之前,閘道器會去FTP伺服器請求對應資料。實現了客戶端HTTP協議到FTP協議的轉換。 -
隧道
HTTP隧道通常用來在一條或多條HTTP連結上轉發非HTTP資料,轉發時不會窺探資料。比如通過HTTP連結承載加密的安全套接字層(SSL)流量,這樣SSL流量就可以穿過只允許Web流量通過的防火牆。 -
Agent代理
使用者Agent代理
簡稱為Agent代理
,是代表使用者發起HTTP請求的客戶端應用程式(瀏覽器)。在HTTP請求報文的首部中存在User-agent
欄位,表示了傳送當前請求的代理資訊。使用者代理不僅包含瀏覽器,還有一些其他的程式,指令碼等,如“網路蜘蛛”,“Web機器人”,它們專門在網際網路上收集資訊。
結語
通過該篇,我們瞭解了HTTP的通訊模型(請求應答模式),事務的定義,還簡單的瞭解了HTTP的報文結構以及Web結構元件等.後序文章將會分塊介紹HTTP的相關知識,關注我你就能及時看到哈.
注
- 部分圖片來源於網路,如有侵權,請告知。
- 如有錯誤,還請指出。共勉!
- 您的喜歡是最大的讚賞。