HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。 它的發展是萬維網協會(World Wide Web Consortium)和Internet工做小組IETF(Internet Engineering Task Force)合做的結果。 它可使瀏覽器更加高效,使網絡傳輸減小。它不只保證計算機正確快速地傳輸超文本文檔,還肯定傳輸文檔中的哪一部分,以及哪部份內容首先顯示(如文本先於圖形)等。
最經常使用的是HTTP1.0/1.1 最新版本是HTTP2.0,與1.0/1.1相比,有了更高的性能、安全性和靈活性 之前的版本0.9等
在TCP/IP模型中,全部的網絡鏈接都要使用方案,方案定義使用什麼協議,好比http、ftp、telnethtml
一個標準的網絡請求包括:json
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
但在實際使用過程當中,對於不一樣協議能夠缺乏某些信息,好比瀏覽器
ftp://192.168.169.121 http://www.baidu.com/index.html
對於http協議,主要的包括scheme(協議)、host(主機)和path(資源路徑)緩存
URI:統一資源標識符,包括URL和URN URL:統一資源標識符,好比http://www.baidu.com/index.html就是一個URL URN:統一資源名,它是無關物理位置的資源名定義,例子urn:ieft:rfc:2141
目前URN處於試驗階段,實際應用還很困難,在沒有特別說明時,通常咱們說的URI就表明URL安全
在HTTP中,無論是word文件、js文件或者圖片都是資源,通能夠經過URL進行請求,但每種不一樣的文件都要進行區分,以便服務端和客戶端進行正確處理,好比播放聲音、顯示文字。
所以,HTTP仔細地給每種要經過http請求響應傳輸的對象都打上名爲MIME類型的數據格式標籤。服務器
MIME: Multipurpose Internet Mail Extension 多用途因特網郵件擴展
最開始是爲了解決電子郵件系統之間的問題,後來用於定義更多類型的多謀體內容。常見的MIME:網絡
html:text/html Ascii: text/plain Json:text/json Jpg:image/jpeg Gif:image/gif Ppt: application/vnd.ms-powerpoint Quicktime:video/quicktime
HTTP在TCP/IP協議棧中的位置app
HTTP是基於TCP/IP的應用,所以HTTP無須關心網絡尋址、數據傳輸和拓撲結構ide
在HTTP1.0/1.1中,HTTP採用請求響應模型來處理HTTP事務 HTTP事務有一條請求命令和一個響應結果組成,它們經過HTTP報文進行數據傳輸post
注意:請求是從客戶端發往服務端,而響應是從服務端發回客戶端
HTTP的工做過程
HTTP1.0/1.1報文由三部分組成:起始行、首部以及可選、包含數據的主體
其中起始行和首部是由行分隔的ASCII文本
主體是一個可選的數據塊,主體中能夠包含文本也能夠包含二進制數據,也能夠爲空,與首部經過空一行進行區分
請求報文的格式:
<method> <request-url> <version> <headers> <entity-body>
響應報文的格式:
<version> <status> <reason-phrase> <headers> <entity-body>
具體例子:
全部的HTTP報文都以一個起始行作爲開始 請求報文:<method> <request-url> <version> 說明要作什麼 響應報文:<version> <status> <reason-phrase> 說明結果怎樣
HTTP首部字段向請求和響應報文中添加了一些附加信息,是一系列 key-value的列表,好比Content-Type:image/jpeg 表示類型是jpeg圖片
首部的分類包括
通用首部:在請求和響應中都出現的信息 請求首部:只在請求報文中出現的信息 響應首部:只在響應報文中出現的信息 實體首部:描述主題的長度、內容等的信息 擴展首部:在HTTP規範中沒有定義的其餘信息
HTTP實體是HTTP報文的負荷,是HTTP要傳輸的數據內容。
HTTP基本的方法包括:GET/POST/HEAD/PUT/TRACE/OPTIONS,用來告訴服務端要作什麼操做
GET是最經常使用的方法,一般用於請求服務器發送某個資源
POST是經常使用的方法之一,用於向服務端提交數據,有主體
與GET相似,但在響應中只有首部,不返回具體數據,能夠用來查看資源是否存在
PUT:用於向服務端寫入文檔 TRACE:用於跟蹤某個請求 OPTIONS:用於查詢服務端支持的方法 DELETE:用於刪除服務端某個資源
HTTP在設計之初就被設計成可擴展的,這樣就能夠適應新的特性。 擴展方法是在HTTP規範中沒有定義的方法,它們有特別的用處,但須要服務端進行實現: LOCK:鎖定某個資源 COPY:拷貝某個資源 MOVE:移動某個資源
狀態碼是響應報文中對請求所作事情的處理結果,以方便客戶端處理響應數據
狀態碼分爲五大類:
信息性狀態碼:100~199 成功狀態碼:200~299 重定向狀態碼:300~399 客戶端錯誤狀態碼:400~499 服務端錯誤狀態碼:500~599
HTTP1.1引入的狀態碼,目前存在一些爭議
客戶端發起的請求大部分是成功,但成功也有不一樣的區別,因此用一組狀態來區分不一樣的信息
重定向狀態碼告訴客戶端使用替代請求來訪問資源,或者返回一個請求以便客戶端使用這個請求訪問所需資源
主要的狀態碼:
客戶端錯誤狀態碼標識客戶端發送了一些錯誤的信息給服務端
好比:
標識服務端自身錯誤
好比:
首部和方法配合工做,共同決定了客戶端和服務端能作什麼事情 主要包括:通用首部、請求首部、響應首部、實體首部
通用首部是提供了報文的最基本信息,不論報文的類型,都爲其提供一些有用信息
如上圖的Connection就是通用首部,在請求和響應報文中提供了鏈接的相關信息
請求首部只在請求報文中出現,用於輔助說明誰在發送請求,請求來自何處等等
好比:
響應首部只在響應報文中出現,用於說明客戶端應該怎麼去處理的一些額外信息
好比:
實體首部用於標識實體的信息
好比: