HTTP協議分析

一、簡介
  超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標準。Ted Nelson組織協調萬維網協會(World Wide Web Consortium)和互聯網工程工作小組(Internet Engineering Task Force )共同合作研究,最終發佈了一系列的RFC,其中著名的RFC 2616定義了HTTP 1.1。
  HTTP是一個客戶端和服務器端請求和應答的標準,是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分佈式超媒體信息系統。
  
二、主要特徵
1.支持客戶端/服務器模型。

2.是簡單快速:服務器當客戶端請求服務時,只需傳送請求方法和路徑。請求方法常用的GET,HEAD,POST。每種方法規定了客戶端與服務器聯繫的是不同的類型。

3.靈活。 HTTP允許任何類型的數據對象的傳輸。輸入被傳輸的內容類型進行標記。

5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的信息,它必須被重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

6.端口:默認HTTP的端口號爲80,HTTPS的端口號爲443。和TCP/IP進行通信

三、HTTP詳解

1.和TCP/IP的關係
  HTTP協議通常在TCP協議之上,如果在TLS或SSL協議層之上,就成了HTTPS。
這裏寫圖片描述
  HTTP(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的連接方式。當然,現在爲了安全大家都使在使用https。一般的Web開發,都是構建在HTTP協議之上的Web應用
  
  HTTP URL格式如下:

http://host[":"port][abs_path]

http表示要通過HTTP協議來定位網絡資源;host表示合法的Internet主機域名或者IP地址;port指定一個端口號,爲空則使用默認端口80;abs_path指定請求資源的URI。

2.HTTP請求響應機制
  HTTP協議是客戶端向服務器發送請求,服務器返回響應客戶端。
這裏寫圖片描述
HTTP有兩類報文:請求報文和響應報文

a.請求報文
  一般來說一個HTTP請求報文由請求行(request line)、請求報頭(header)、空行、和請求數據(實體內容)4個部分組成。
  請求行(request line):請求行用於描述客戶端的請求方式、請求的資源資源名稱、以及使用的HTTP協議版本號。
  請求報頭(header):用於描述客戶端請求那臺主機,以及一些客戶端的一些環境信息等。

HTTP請求方式有GET、POST、HEAD、PUT、DELETE、TRACE、CONNECT 、OPTIONS。PUT、DELETE、POST、GET分別對應着增刪改查,常用的就是POST和GET。

GET請求或POST請求,都用於向服務器請求數據資源,這倆種方式的區別主要表現在數據傳遞上:
GET請求:可以在請求的URL地址後以?的形式帶上交給服務器的數據,多個數據之間以&進行分割。
特點:在URL地址後附帶參數是有限制的,其數據容量通常不能超過1k。而且在瀏覽器連接請求地址中是可以看到的。
POST請求:可以在請求的實體內容中向服務器發送數據。
特點:傳送的數據量沒有限制。在瀏覽器連接請求地址中看不到

1.GET:請求獲取Request-URI所標識的資源
2.POST:在Request-URI所標識的資源後附加新的數據
3.HEAD:請求獲取由Request-URI所標識的資源的響應消息報頭
4.PUT: 請求服務器存儲一個資源,並用Request-URI作爲其標識
5.DELETE :請求服務器刪除Request-URI所標識的資源
6.TRACE : 請求服務器回送收到的請求信息,主要用於測試或診斷
7.CONNECT: HTTP/1.1協議中預留給能夠將連接改爲管道方式的代理服務器。
8.OPTIONS :請求查詢服務器的性能,或者查詢與資源相關的選項和需求

b.響應報文
  HTTP響應由三個部分組成,分別是:狀態行、響應報頭、一個空格,響應正文(實體內容)。
  狀態行:用於描述服務器對請求的處理結果。
  響應報頭:用於描述服務器的基本信息,以及數據的描述,服務器通過這些數據的描述信息,可以通知客戶端如何處理等一會它回送的數據。
  實體內容:代表服務器向客戶端回送的數據。
  
  HTTP響應的格式與請求的格式十分類似:

  <status-line>

  <headers>

  <blank line>

  [<response-body>]
  在響應中唯一真正的區別在於第一行中用狀態信息代替了請求信息。狀態行(status line)通過提供一個狀態碼來說明所請求的資源情況。

狀態行格式如下:

  HTTP-Version Status-Code Reason-Phrase CRLF
  HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。狀態代碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值,如下:
1xx:指示信息–表示請求已接收,要求客戶端繼續提交下一次請求才能完成整個處理過程。
2xx:成功–表示請求已被成功接收並已完成整個處理過程,常用200。
3xx:重定向–要完成請求必須進行更進一步的操作。
4xx:客戶端錯誤–請求有語法錯誤或請求無法實現。
5xx:服務器端錯誤–服務器未能實現合法的請求。

常見狀態代碼、狀態描述如下:
200 OK:客戶端請求成功。
400 Bad Request:客戶端請求有語法錯誤,不能被服務器所理解。
401 Unauthorized:請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用。
403 Forbidden:服務器收到請求,但是服務器拒絕提供服務。
404 Not Found:請求資源不存在,例如:輸入了錯誤的URL。
500 Internal Server Error:服務器發生不可預期的錯誤。
503 Server Unavailable:服務器當前不能處理客戶端的請求,過一段時間後可能恢復正常,例如:HTTP/1.1 200 OK(CRLF)。

3.工作機制流程
每一次HTTP操作稱爲一個事務。工作過程:
a. 客戶機與服務器需要建立連接。單擊某個超級鏈接,HTTP的就會開始工作。
b. 建立連接後,客戶端發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL)、協議版本號,後邊是MIME信息包括請求修飾符、客戶端信息和可能出現的其他內容。
d. 服務器接到請求後,返回相應的響應信息,其格式爲一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是MIME信息包括服務器信息、實體信息和可能出現的其他內容。
c. 客戶端接收服務器返回的信息通過瀏覽器或其他方式顯示在用戶的顯示屏上,然後客戶端與服務器斷開連接。
結論:如果上述執行過程中某一步出現錯誤,那麼產生錯誤的信息將返回到請求方(c端),c端可以收到返回的信息輸出顯示。以上過程對於用戶來說是看不到的。用戶只需要做相應的操作,等待客戶端的頁面顯示就可以了。

相關文章

HTTPS協議分析

發佈了83 篇原創文章 · 獲贊 93 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章