Http 協議

1、HTTP 協議詳解瀏覽器

http (Hyper Text Transfer Protocol,超文本傳輸協議)協議是基於應用層的 通訊規範:雙方要進行通訊,你們都遵照一個規範——http協議。緩存

http協議從WWW服務器傳輸超文本到本地瀏覽器,可使瀏覽器更加高效。服務器

 

http協議 http/2 協議工具

http 是一個應用層協議,由 請求 和 響應 構成,是一個標準的客戶端服務器模型。spa

http 一般承載於 TCP 協議之上,有時也承載於 TSL 或 SSL 協議層之上,這個時候就成了常說的 https。設計

默認 http 的端口號爲 80, https 的端口號爲 443。blog

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

http 協議的模型就是客戶端發起請求,服務器回送響應。這種設計屬於典型的「問答式」交互,客戶端和服務器一問一答,使http協議模型異常簡單。io

可是也存在問題:如服務器端不會主動向客戶端PUSH,一問一答的輪詢也會使TCP鏈接頻繁創建和斷開,異常其交互效率不高。效率

 

http 協議如何工做

一、客戶機與服務器須要創建鏈接。單擊某個超連接,HTTP 協議的工做開始。

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

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

四、客戶端接收服務器返回的信息並顯示在用戶的顯示屏上,而後客戶機與服務器斷開鏈接。

注:若是以上過程當中的某一步出現錯誤,產生的錯誤信息將返回到客戶端,由顯示屏輸出。可使用抓包工具查看http協議。

 

http 的一些主要概念

一、請求

在發請求前,須要先創建鏈接

鏈接是傳輸層的實際環流,創建在兩個互相通訊的應用程序之間,

在 http/1.1 中,request 和 response 頭中都有可能出現一個 connection 的頭,其決定 Client 和 Server 通訊時對於長連接如何處理。

http/1.1 默認對方支持長鏈接。只要 request 或 response 的header 中包含值爲close 的 connection,都表名當前正在使用的 TCP 鏈接在請求處理完畢後會被斷掉,之後Client 再進行新的請求時必須建立新的 TCP 鏈接。

持久鏈接的好處在於減小了TCP鏈接的重複創建和斷開形成的額外開銷,減輕了服務器端的負載。另外,減小開銷的那部分時間,使HTTP請求和響應可以更早地結束,這樣Web頁面的顯示速度也就相應提升了。

持久鏈接使得多數請求以管線化方式發送稱爲可能,即不用等待響應亦可直接發送下一個請求。

http 請求由三部分組成:請求行、消息報文、請求正文。

請求行:以一個方法符號開頭,以空格分開,後面跟着請求的URI和協議的版本,

格式爲:Method Request-URI HTTP-Version CRLF

Method: 請求方法

Request-URI: 一個統一資源標識符

HTTP-Version: 請求的HTTP協議版本

CRLF: 回車和換行

 

 

二、響應

http 響應也由三部分組成,分別是:狀態行、消息報文、響應正文。

格式爲:HTTP-Version Status-Code Reason-Phrase CRLF

HTTP-Version: 服務器http協議的版本。

Status-Code: 服務器發回的響應狀態代碼。

Reason-Phrase: 狀態代碼的文本描述。

狀態碼由三位數字組成,第一個數字定義了響應的類型,有五種可能取值:

1xx:指示信息——請求已接收,繼續處理

2xx:成功——請求已被成功接收、理解、接收。

3xx:重定向——要完成請求必須進行進一步的操做。

4xx:客戶端錯誤——請求有語法錯誤或請求沒法實現。

5xx:服務器端錯誤——服務器未能實現合法的請求。

 經常使用的狀態碼大概只有14種。

200 OK:表示從客戶端發來的請求在服務器端被正常處理了。

204 No Content:表示服務器接收的請求已經成功處理,但在返回的響應報文中不含實體的主體部分。通常只須要從客戶端往服務器發送信息,而對客戶端不須要發送新的消息內容的狀況下使用。

206 Partial Content:表示客戶端進行了範圍請求,而服務器成功執行了這部分的GET請求。響應報文中包含由Content-Range指定範圍的實體內容。

301 Moved Permanently:永久重定向,表示請求的資源已經被分配了新的URI,之後應使用資源如今所指的URI。

302 Found:臨時重定向,表示請求的資源已被分配了新的URI,但願用戶(本次)能使用新的URI訪問。

303 See Other:表示因爲對應的資源存在另外一個URI,應使用GET方法定向獲取請求的資源。

304 Not Modified:表示客戶端發送附帶條件的請求(指採用GET方法的請求報文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一部首)時,服務器端容許請求訪問資源,但因發生請求未知足條件的狀況後,直接返回304 Not Modified(服務器端資源未改變,可直接使用客戶端未過時的緩存)。

307 Temporary Redirect:臨時重定向。

400 Bad Request:表示請求報文中存在語法錯誤。

401 Unauthorized:表示發送的請求須要有經過HTTP認證(BASIC認證、DIGEST認證)的認證信息。另外若以前已進行過1次請求,則表示用戶認證失敗。返回401的響應必須包含一個適用於被請求資源的WWW-Authenticate 首部用以諮詢用戶信息。當瀏覽器初次接收到401響應,會彈出認證用的對話窗口。

403 Forbidden:表示對請求資源的訪問被服務器拒絕了。未得到文件系統的訪問受權,訪問權限出現某些問題(從未受權的發送源IP地址視圖訪問)等列舉的狀況均可能是403發送的緣由。

404 Not Found:表示服務器上沒法找到請求的資源。

500 Internal Server Error:表示服務器端在執行請求時發生了錯誤。

503 Service Unavailable:表示服務器暫時處於超負荷或正在進行停機維護,如今沒法處理請求。能夠寫入Retry-After頭部字段返回給客戶端以通知解除所需的時間。

 

三、報頭

http消息報頭包括普通報頭、請求報頭、響應報頭、實體報頭。

每一個報頭域組成形式爲:名字 + : + 空格 + 值

消息報文域的名字是不區分英文大小寫的。報頭都是自解釋的。

相關文章
相關標籤/搜索