這是關於網絡系列的第四篇文章,接下來會有更多精彩內容.敬請期待! 讓咱們一塊兒乘風破浪!html
前面咱們經過如下文章瀏覽器
分別對網際層的IP協議,運輸層的UDP和TCP協議進行了簡單的學習.從該篇開始, 咱們學習應用層的HTTP協議.HTTP協議自己內容較爲豐富, 但願你能經過該系列文章有所收穫.緩存
本篇旨在理解HTTP客戶端服務器交互過程,對其模型有大致瞭解,不作深刻了解。你能夠了解到一下內容:安全
先看下面一張通訊草圖:性能優化
可見,該通訊方式是,客戶端向服務器發送請求(Request),服務器回送請求數據(Response),也就是請求應答模式。資源能夠是存儲在服務器上的靜態文件,如文本文件、圖片文件、影視文件等;也能夠是根據用戶身份生成的動態文件,如我的的照片,在線商店購物訂單。服務器
媒體類型 在如此衆多的資源中,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
都遵循該格式,它包括下面幾個部分:ide
http://
稱爲方案(scheme),說明了訪問資源使用的協議類型,這裏一般是http://
www.baidu.com
服務器地址(說爲域名更爲合適),也可使IP
地址?
隔開。URN
URN
是統一資源名,也是URI
的一種。做爲特定資源的惟一名稱使用,與資源的所在地無關。現階段,URN
並未大範圍使用。
在實際應用中,並無對URI
和URL
進行特定區分。
一個HTTP事務是由一條請求命令和一個響應結果組成。這種通訊經過HTTP報文的格式化數據塊進行。
方法
HTTP支持幾種不一樣的請求命令,這些命令稱爲HTTP方法。每一個HTTP請求都會包含一個方法,負責告訴服務器執行什麼動做。常見的方法以下:
HTTP方法 | 描述 |
---|---|
GET | 告知服務器,須要從服務器向客戶端發送命名資源 |
PUT | 將客戶端的數據存儲的命名的服務器資源中 |
DELETE | 從服務器刪除資源 |
POST | 將客戶端數據發送到一個服務器應用程序 |
HEAD | 僅發送命名資源響應中的HTTP首部 |
更詳細的介紹在後續文章中。
狀態碼
每條HTTP響應報文返回時都會攜帶狀態碼,告知客戶端是否請求成功,或者是否須要採起其餘動做。常見的狀態碼:
HTTP狀態碼 | 描述 |
---|---|
200 | 請求成功 |
302 | Redirect,重定向。到其餘地方獲取資源 |
404 | Not Found,沒找到。沒法找到資源 |
一般,和狀態碼一塊兒的還有一條解釋性的短語,對該狀態進行描述。更詳細的介紹在後續文章中。
複合頁面 看下面一個例子:
該頁面中的每個資源都要使用一個單獨的HTTP事務。HTTP報文是由一行一行的簡單字符串組成。都是純文本,不是二進制。客戶端發送給服務器的稱爲請求報文(request message)
,服務器發往客戶端的稱爲響應報文(response message)
。HTTP報文組成:
起始行
報文的第一行,請求報文
中用來講明要作什麼,在響應報文
中說明出現的狀況。
首部字段
起始行以後能夠有零個或多個首部字段。每一個首部字段是一個鍵值對。首部以一個空行結束。
主體
首部的空行以後是主體。請求主體中包括要發送給服務器的數據,響應主體中包括返回給客戶端的數據。主體的數據不具備結構化,能夠包含任意二進制數據和文本。
下面是一個請求和響應報文示例:
HTTP是應用層協議,它無需關係網絡通訊的具體細節,把聯網的細節都交給了通用可靠的TCP/IP。相關內容,請查看該篇起始位置給出的連接.
下面是一個創建連接請求數據的過程:
總結步驟以下:
URL
解析主機名(或稱爲域名)80
TCP
連接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介紹看這裏。主要了解概念,更細緻的討論在後續文章中。
代理
客戶端和服務器之間的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的相關知識,關注我你就能及時看到哈.