HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是因特網上應用最爲普遍的一種網絡傳輸協議,全部的WWW文件都必須遵照這個標準。瀏覽器
HTTP是一個基於TCP/IP通訊協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。服務器
HTTP協議工做於客戶端-服務端架構上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。網絡
Web服務器有:Apache服務器,IIS服務器(Internet Information Services)等。架構
Web服務器根據接收到的請求後,向客戶端發送響應信息。性能
HTTP默認端口號爲80,可是你也能夠改成8080或者其餘端口。測試
HTTP三點注意事項:網絡傳輸協議
如下圖表展現了HTTP協議通訊流程:spa
HTTP協議一般承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了咱們常說的HTTPS。以下圖所示:
代理
默認HTTP的端口號爲80,HTTPS的端口號爲443。code
HTTP協議永遠都是客戶端發起請求,服務器回送響應。見下圖:
這樣就限制了使用HTTP協議,沒法實如今客戶端沒有發起請求的時候,服務器將消息推送給客戶端。
HTTP協議是一個無狀態的協議,同一個客戶端的此次請求和上次請求是沒有對應關係。
一次HTTP操做稱爲一個事務,其工做過程可分爲四步:
1)首先客戶機與服務器須要創建鏈接。只要單擊某個超級連接,HTTP的工做開始。
2)創建鏈接後,客戶機發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL)、協議版本號,後邊是MIME信息包括請求修飾符、客戶機信息和可能的內容。
3)服務器接到請求後,給予相應的響應信息,其格式爲一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是MIME信息包括服務器信息、實體信息和可能的內容。
4)客戶端接收服務器所返回的信息經過瀏覽器顯示在用戶的顯示屏上,而後客戶機與服務器斷開鏈接。
若是在以上過程當中的某一步出現錯誤,那麼產生錯誤的信息將返回到客戶端,有顯示屏輸出。對於用戶來講,這些過程是由HTTP本身完成的,用戶只要用鼠標點擊,等待信息顯示就能夠了。
HTTP是基於客戶端/服務端(C/S)的架構模型,經過一個可靠的連接來交換信息,是一個無狀態的請求/響應協議。
一個HTTP"客戶端"是一個應用程序(Web瀏覽器或其餘任何客戶端),經過鏈接到服務器達到向服務器發送一個或多個HTTP的請求的目的。
一個HTTP"服務器"一樣也是一個應用程序(一般是一個Web服務,如Apache Web服務器或IIS服務器等),經過接收客戶端的請求並向客戶端發送HTTP響應數據。
HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和創建鏈接。
一旦創建鏈接後,數據消息就經過相似Internet郵件所使用的格式[RFC5322]和多用途Internet郵件擴展(MIME)[RFC2045]來傳送。
每一個HTTP鏈接,它的請求和響應都遵循相同的格式,包含Header和Body兩部分,其中Body是可選的。
GET /path HTTP/1.1 Header1: Value1 Header2: Value2 Header3: Value3
每一個Header一行一個,換行符是\r\n
。
POST /path HTTP/1.1 Header1: Value1 Header2: Value2 Header3: Value3 body data goes here...
當遇到連續兩個\r\n
時,Header部分結束,後面的數據所有是Body。
200 OK Header1: Value1 Header2: Value2 Header3: Value3 body data goes here...
HTTP響應若是包含body,也是經過\r\n\r\n
來分隔的。
請再次注意,Body的數據類型由Content-Type
頭來肯定,若是是網頁,Body就是文本,若是是圖片,Body就是圖片的二進制數據。
當存在Content-Encoding
時,Body數據是被壓縮的,最多見的壓縮方式是gzip,因此,看到Content-Encoding: gzip
時,須要將Body數據先解壓縮,才能獲得真正的數據。壓縮的目的在於減小Body的大小,加快網絡傳輸。
客戶端發送一個HTTP請求到服務器的請求消息包括如下格式:請求行(request line)、請求頭部(request header)、空行和請求數據(request body?)四個部分組成,下圖給出了請求報文的通常格式。
請求行中的GET稱之爲請求方式。根據HTTP標準,HTTP請求可使用多種請求方法。
HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
序號 | 方法 | 描述 |
---|---|---|
1 | GET | 請求指定的頁面信息,並返回實體主體。 |
2 | HEAD | 相似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭 |
3 | POST | 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會致使新的資源的創建和/或已有資源的修改。 |
4 | PUT | 從客戶端向服務器傳送的數據取代指定的文檔的內容。 |
5 | DELETE | 請求服務器刪除指定的頁面。 |
6 | CONNECT | HTTP/1.1協議中預留給可以將鏈接改成管道方式的代理服務器。 |
7 | OPTIONS | 容許客戶端查看服務器的性能。 |
8 | TRACE | 回顯服務器收到的請求,主要用於測試或診斷。 |
HTTP響應消息也由四個部分組成,分別是:狀態行、消息報頭(response header)、空行和響應正文(response body)。
狀態行格式: HTTP版本號 狀態碼 緣由敘述<CRLF>
舉例:HTTP/1.1 200 OK
狀態碼用於表示服務器對請求的處理結果,它是一個三位的十進制數。響應狀態碼分爲5類,以下所示: