1、定義
從HTTP的定義能夠看出,HTTP協議是互聯網上進行數據通訊的基礎協議,用來交換或傳輸超文本。超文本是一種結構化的文本,在包含文本的節點之間使用邏輯連接(也叫超連接)。git
2、概述
HTTP是基於TCP/IP協議的應用層協議。HTTP容許進行客戶端和服務器之間的通訊。經過HTTP或HTTPS請求的資源由URI(統一資源標識符)或URL(統一資源定位符)來標識。github
在客戶端-服務器的模式中,HTTP扮演着請求-響應協議的角色。客戶端(一般是瀏覽器)提交HTTP請求消息給服務器。服務器能夠提供HTML文件或其餘類型的資源,或者表明客戶端執行操做,返回響應消息給客戶端。響應包含關於請求的完整狀態信息。瀏覽器
3、歷史
一、HTTP/0.9
該版本於1991年發佈。緩存
- 只接受GET一種請求方法,沒有指定版本號,且不支持請求頭。
- 服務器只能返回HTML格式的字符串。
二、HTTP/1.0
該版本於1996年發佈。服務器
- 除了GET方法,還新增了POST和HEAD。任何格式的內容均可以發送。
- 請求和響應的格式,除了數據部分,還包括頭信息,用來描述元數據。
- 新增了狀態碼、多字符集支持、權限、緩存、內容編碼等功能。
三、HTTP/1.1
該版本於1997年發佈。對1.0版本進行了修訂和完善,並一直沿用至今。cookie
- 新增了PUT、PATCH、OPTIONS、DELETE等方法。
- 客戶端請求的頭信息新增了Host字段,用來指定服務器的域名,這樣就能夠將請求發往同一臺服務器的不一樣網站。
- 新增了持久鏈接,能夠被多個請求屢次使用。
- 新增了管道機制,在同一個TCP鏈接裏,客戶端能夠同時發送多個請求,但服務器仍是按照順序進行響應。
- 使用Content-Length聲明本次響應的數據長度,以區分多個響應。
四、HTTP/2
該版本於2015年發佈。網站
- 頭信息和數據都是二進制,統稱爲幀。對頭信息進行了壓縮。
- 在一個TCP鏈接中,客戶端能夠同時發送多個請求或接收響應,不須要按照順序一一對應。
- 將每一個請求或響應的全部數據包稱爲一個數據流,在發送數據包的時候必須標記屬於哪一個數據流。
- 容許服務器主動向客戶端推送,發送資源。
4、格式
每一個HTTP請求和響應都遵循相同的格式,包含請求行/狀態行、消息頭(Header)和消息體(Body),其中消息體是可選的。編碼
- 消息頭包含若干屬性,但要保證一行只有一個屬性,而且必須以\r\n(回車換行)結尾。
- 當遇到空行時,後面的數據全屬於消息體。
5、HTTP請求
一、請求行
GET / HTTP/1.1
其中,GET表示請求方法;/表示請求資源的路徑;HTTP/1.1表示協議版本。spa
二、請求方法
用來代表對指定資源的操做方式。經常使用的請求方法有:操作系統
- OPTIONS,返回服務器針對特定資源所支持的HTTP請求方法。
- HEAD,與GET請求一致,只不過不會返回響應體。
- GET,請求指定的資源。
- POST,向指定資源提交數據進行處理請求,數據包含在請求體中,可能會致使新資源的建立或已有資源的修改。
- PUT,向指定資源位置上傳最新內容。
- DELETE,請求服務器刪除所標識的資源。
GET和POST方法的主要區別:
- GET提交的數據會放在URL以後,以?分割URL和傳輸數據,參數之間以&相連。POST把提交的數據放在Body中。
- GET提交的數據大小最多1024字節。POST提交的數據大小沒有限制。
- GET提交數據時,會出如今URL上。POST則不會出如今URL上。
三、請求頭
是對請求的一種限定,包含不少屬性。經常使用的屬性有:
- Accept,客戶端能夠接受的MIME類型。
- Accept-Encoding,客戶端能夠接受的數據壓縮格式。
- Accept-Charset,客戶端能夠接受的字符集編碼。
- Accept-Language,客戶端能夠接受的語言。
- User-Agent,客戶端的一些基本信息,如使用的操做系統和瀏覽器的名稱和版本等。
- Content-Type,表示請求中的媒體類型信息。
- Content-Length,表示請求消息體的長度。
- Connection,指定是否繼續保持鏈接。
- Host,指定要訪問的虛擬主機名和端口號。
- Cookie,將cookie值發送給服務器。
- If-Modified-Since,緩存資源的最後獲取時間。
6、HTTP響應
一、狀態行
HTTP/1.1 200 OK
其中,HTTP/1.1表示協議版本;200表示狀態碼;OK是狀態說明。
二、狀態碼
根據響應結果的類型,大體分爲如下幾類:
2.1 1XX(信息類)
該類型狀態碼錶示接收到請求而且繼續處理。
- 100,客戶端必須繼續發出請求。
- 101,客戶端要求服務器根據請求轉換HTTP協議版本。
2.2 2XX(響應成功)
該類型狀態碼錶示動做被成功接收、理解和接受。
- 200,代表該請求被成功地完成,所請求的資源發送到客戶端。
- 201,提示知道新文件的URL。
- 202,接受並處理,但處理未完成。
- 203,返回信息不肯定或不完整。
- 204,收到請求,但返回信息爲空。
- 205,服務器完成了請求,用戶必須復位當前已經瀏覽過的文件。
- 206,服務器已經完成了部分用戶的GET請求。
2.3 3XX(重定向類)
該類型狀態碼錶示爲了完成指定的動做,必須接受進一步處理。
- 300,請求的資源可在多處得到。
- 301,本網頁被永久性轉移到另外一個URL。
- 302,請求的網頁被重定向到新的地址。
- 303,建議用戶訪問其餘URL或訪問方式。
- 304,自從上次請求後,請求的網頁未修改過。
- 305,請求的資源必須從服務器指定的地址得到。
- 306,前一版本HTTP中使用的代碼,現已再也不使用。
- 307,聲明請求的資源臨時性刪除。
2.4 4XX(客戶端錯誤類)
該類型狀態碼錶示請求包含錯誤語法或不能正確執行。
- 400,客戶端請求有語法錯誤。
- 401,請求未經受權。
- 402,保留有效ChargeTo頭響應。
- 403,禁止訪問,服務器收到請求,但拒絕提供服務。
- 404,可鏈接服務器,但服務器沒法取得所請求的網頁,請求資源不存在。
- 405,用戶在Request-Line字段定義的方法不被容許。
- 406,根據用戶發送的Accept,請求資源不可訪問。
- 407,相似401,用戶必須首先在代理服務器上取得受權。
- 408,客戶端沒有在用戶指定的時間內完成請求。
- 409,對當前資源狀態,請求不能完成。
- 410,服務器上再也不有此資源。
- 411,服務器拒絕用戶定義的Content-Length屬性請求。
- 412,一個或多個請求頭字段在當前請求中錯誤。
- 413,請求的資源大於服務器容許的大小。
- 414,請求的資源URL長於服務器容許的長度。
- 415,請求資源不支持請求項目格式。
- 416,請求中包含Range請求頭字段,在當前請求資源範圍內沒有range指示值。
- 417,服務器不知足請求Expect頭字段指定的指望值。
2.5 5XX(服務器錯誤類)
該類型狀態碼錶示服務器或網關錯誤。
- 500,服務器錯誤。
- 501,服務器不支持請求的功能。
- 502,網關錯誤。
- 503,沒法得到服務。
- 504,網關超時。
- 505,不支持的http版本。
三、響應頭
是對響應的一種限定,包含不少屬性。經常使用的屬性有:
- Location,實現請求重定向。
- Server,服務器的基本信息。
- Content-Encoding,服務器發送數據時使用的壓縮格式。
- Content-Language,發送的數據所用的語言。
- Content-Type,所發送的數據的類型。
- Content-Length,發送數據的大小。
- Set-Cookie,把cookie發送到客戶端。
- Last-Modified,指示資源的最後修改日期和時間。