HTTP协议快速入门
一、定義
The Hypertext Transfer Protocol (HTTP) is an application protocol for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web. Hypertext is structured text that uses logical links (hyperlinks) between nodes containing text. HTTP is the protocol to exchange or transfer hypertext. -- wikipedia
從HTTP的定義可以看出,HTTP協議是互聯網上進行數據通信的基礎協議,用來交換或傳輸超文本。超文本是一種結構化的文本,在包含文本的節點之間使用邏輯鏈接(也叫超鏈接)。
二、概述
HTTP是基于TCP/IP協議的應用層協議。HTTP允許進行客戶端和服務器之間的通信。通過HTTP或HTTPS請求的資源由URI(統一資源標識符)或URL(統一資源定位符)來標識。
在客戶端-服務器的模式中,HTTP扮演著請求-響應協議的角色。客戶端(通常是瀏覽器)提交HTTP請求消息給服務器。服務器可以提供HTML文件或其他類型的資源,或者代表客戶端執行操作,返回響應消息給客戶端。響應包含關于請求的完整狀態信息。
三、歷史
1、HTTP/0.9
該版本于1991年發布。
- 只接受GET一種請求方法,沒有指定版本號,且不支持請求頭。
- 服務器只能返回HTML格式的字符串。
2、HTTP/1.0
該版本于1996年發布。
- 除了GET方法,還新增了POST和HEAD。任何格式的內容都可以發送。
- 請求和響應的格式,除了數據部分,還包括頭信息,用來描述元數據。
- 新增了狀態碼、多字符集支持、權限、緩存、內容編碼等功能。
3、HTTP/1.1
該版本于1997年發布。對1.0版本進行了修訂和完善,并一直沿用至今。
- 新增了PUT、PATCH、OPTIONS、DELETE等方法。
- 客戶端請求的頭信息新增了Host字段,用來指定服務器的域名,這樣就可以將請求發往同一臺服務器的不同網站。
- 新增了持久連接,可以被多個請求多次使用。
- 新增了管道機制,在同一個TCP連接里,客戶端可以同時發送多個請求,但服務器還是按照順序進行響應。
- 使用Content-Length聲明本次響應的數據長度,以區分多個響應。
4、HTTP/2
該版本于2015年發布。
- 頭信息和數據都是二進制,統稱為幀。對頭信息進行了壓縮。
- 在一個TCP連接中,客戶端可以同時發送多個請求或接收響應,不需要按照順序一一對應。
- 將每個請求或響應的所有數據包稱為一個數據流,在發送數據包的時候必須標記屬于哪個數據流。
- 允許服務器主動向客戶端推送,發送資源。
四、格式
每個HTTP請求和響應都遵循相同的格式,包含請求行/狀態行、消息頭(Header)和消息體(Body),其中消息體是可選的。
- 消息頭包含若干屬性,但要保證一行只有一個屬性,并且必須以\r\n(回車換行)結尾。
- 當遇到空行時,后面的數據全屬于消息體。
五、HTTP請求
1、請求行
GET / HTTP/1.1其中,GET表示請求方法;/表示請求資源的路徑;HTTP/1.1表示協議版本。
2、請求方法
用來表明對指定資源的操作方式。常用的請求方法有:
- OPTIONS,返回服務器針對特定資源所支持的HTTP請求方法。
- HEAD,與GET請求一致,只不過不會返回響應體。
- GET,請求指定的資源。
- POST,向指定資源提交數據進行處理請求,數據包含在請求體中,可能會導致新資源的創建或已有資源的修改。
- PUT,向指定資源位置上傳最新內容。
- DELETE,請求服務器刪除所標識的資源。
GET和POST方法的主要區別:
- GET提交的數據會放在URL之后,以?分割URL和傳輸數據,參數之間以&相連。POST把提交的數據放在Body中。
- GET提交的數據大小最多1024字節。POST提交的數據大小沒有限制。
- GET提交數據時,會出現在URL上。POST則不會出現在URL上。
3、請求頭
是對請求的一種限定,包含很多屬性。常用的屬性有:
- Accept,客戶端可以接受的MIME類型。
- Accept-Encoding,客戶端可以接受的數據壓縮格式。
- Accept-Charset,客戶端可以接受的字符集編碼。
- Accept-Language,客戶端可以接受的語言。
- User-Agent,客戶端的一些基本信息,如使用的操作系統和瀏覽器的名稱和版本等。
- Content-Type,表示請求中的媒體類型信息。
- Content-Length,表示請求消息體的長度。
- Connection,指定是否繼續保持連接。
- Host,指定要訪問的虛擬主機名和端口號。
- Cookie,將cookie值發送給服務器。
- If-Modified-Since,緩存資源的最后獲取時間。
六、HTTP響應
1、狀態行
HTTP/1.1 200 OK其中,HTTP/1.1表示協議版本;200表示狀態碼;OK是狀態說明。
2、狀態碼
根據響應結果的類型,大致分為以下幾類:
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版本。
3、響應頭
是對響應的一種限定,包含很多屬性。常用的屬性有:
- Location,實現請求重定向。
- Server,服務器的基本信息。
- Content-Encoding,服務器發送數據時使用的壓縮格式。
- Content-Language,發送的數據所用的語言。
- Content-Type,所發送的數據的類型。
- Content-Length,發送數據的大小。
- Set-Cookie,把cookie發送到客戶端。
- Last-Modified,指示資源的最后修改日期和時間。
轉載于:https://www.cnblogs.com/gefenghua/p/6289273.html
總結
以上是生活随笔為你收集整理的HTTP协议快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CMD、AMD、commonJs 规范的
- 下一篇: css sprite讲解与使用实例