HTTP簡介

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是因特網上應用最爲普遍的一種網絡傳輸協議,全部的WWW文件都必須遵照這個標準。瀏覽器

HTTP是一個基於TCP/IP通訊協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。服務器

HTTP 工做原理

HTTP協議工做於客戶端-服務端架構上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。網絡

Web服務器有:Apache服務器,IIS服務器(Internet Information Services)等。架構

Web服務器根據接收到的請求後,向客戶端發送響應信息。性能

HTTP默認端口號爲80,可是你也能夠改成8080或者其餘端口。測試

HTTP三點注意事項:網絡傳輸協議

  • HTTP是無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。
  • HTTP是媒體獨立的:這意味着,只要客戶端和服務器知道如何處理的數據內容,任何類型的數據均可以經過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型。
  • HTTP是無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。

如下圖表展現了HTTP協議通訊流程:spa

1.2 在TCP/IP協議棧中的位置

HTTP協議一般承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了咱們常說的HTTPS。以下圖所示:
代理

默認HTTP的端口號爲80,HTTPS的端口號爲443。code

1.3 HTTP的請求響應模型

HTTP協議永遠都是客戶端發起請求,服務器回送響應。見下圖:

這樣就限制了使用HTTP協議,沒法實如今客戶端沒有發起請求的時候,服務器將消息推送給客戶端。

HTTP協議是一個無狀態的協議,同一個客戶端的此次請求和上次請求是沒有對應關係。

1.4 工做流程

一次HTTP操做稱爲一個事務,其工做過程可分爲四步:

1)首先客戶機與服務器須要創建鏈接。只要單擊某個超級連接,HTTP的工做開始。

2)創建鏈接後,客戶機發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL)、協議版本號,後邊是MIME信息包括請求修飾符、客戶機信息和可能的內容。

3)服務器接到請求後,給予相應的響應信息,其格式爲一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是MIME信息包括服務器信息、實體信息和可能的內容。

4)客戶端接收服務器所返回的信息經過瀏覽器顯示在用戶的顯示屏上,而後客戶機與服務器斷開鏈接。

若是在以上過程當中的某一步出現錯誤,那麼產生錯誤的信息將返回到客戶端,有顯示屏輸出。對於用戶來講,這些過程是由HTTP本身完成的,用戶只要用鼠標點擊,等待信息顯示就能夠了。

 

HTTP 消息結構

HTTP是基於客戶端/服務端(C/S)的架構模型,經過一個可靠的連接來交換信息,是一個無狀態的請求/響應協議。

一個HTTP"客戶端"是一個應用程序(Web瀏覽器或其餘任何客戶端),經過鏈接到服務器達到向服務器發送一個或多個HTTP的請求的目的。

一個HTTP"服務器"一樣也是一個應用程序(一般是一個Web服務,如Apache Web服務器或IIS服務器等),經過接收客戶端的請求並向客戶端發送HTTP響應數據。

HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和創建鏈接。

一旦創建鏈接後,數據消息就經過相似Internet郵件所使用的格式[RFC5322]和多用途Internet郵件擴展(MIME)[RFC2045]來傳送。

HTTP格式

每一個HTTP鏈接,它的請求和響應都遵循相同的格式,包含Header和Body兩部分,其中Body是可選的。

HTTP GET請求的格式:

GET /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3

每一個Header一行一個,換行符是\r\n

HTTP POST請求的格式:

POST /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3

body data goes here...

當遇到連續兩個\r\n時,Header部分結束,後面的數據所有是Body。

HTTP響應的格式:

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的大小,加快網絡傳輸。

 

客戶端請求消息 message-request

客戶端發送一個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 回顯服務器收到的請求,主要用於測試或診斷。

服務器響應消息 message-response

HTTP響應消息也由四個部分組成,分別是:狀態行、消息報頭(response header)、空行和響應正文(response body)。

狀態行格式: HTTP版本號 狀態碼 緣由敘述<CRLF>
舉例:HTTP/1.1 200 OK
狀態碼用於表示服務器對請求的處理結果,它是一個三位的十進制數。響應狀態碼分爲5類,以下所示:

相關文章
相關標籤/搜索