HTTP協議詳解

一、HTTP簡介

HTTP協議,即超文本傳輸協議(Hypertext transfer protocol)。是一種詳細規定了瀏覽器和萬維網(WWW = World Wide Web)服務器之間互相通信的規則,通過因特網傳送萬維網文檔的數據傳送協議。HTTP是一個基於TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。

二、 HTTP協議的特點

1、簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
2、靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
3、HTTP 0.9和1.0使用非持續連接:限制每次連接只處理一個請求,服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。HTTP 1.1使用持續連接:不必爲每個web對象創建一個新的連接,一個連接可以傳送多個對象,採用這種方式可以節省傳輸時間。
4、無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
5、支持B/S和C/S模式。

三、HTTP的工作流程

一次HTTP操作稱爲一個事務,其工作過程可分爲四步:
1、首先客戶機與服務器需要建立連接。只要單擊某個超級鏈接,HTTP的工作開始。
2、建立連接後,客戶機發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL)、協議版本號,後邊是MIME信息包括請求修飾符、客戶機信息和可能的內容。
3、服務器接到請求後,給予相應的響應信息,其格式爲一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是MIME信息包括服務器信息、實體信息和可能的內容。
4、客戶端接收服務器所返回的信息通過瀏覽器顯示在用戶的顯示屏上,然後客戶機與服務器斷開連接。如果在以上過程中的某一步出現錯誤,那麼產生錯誤的信息將返回到客戶端,有顯示屏輸出。對於用戶來說,這些過程是由HTTP自己完成的,用戶只要用鼠標點擊,等待信息顯示就可以了。

四、URI和URL的區別

1、URI

URI,是uniform resource identifier,統一資源標識符,用來唯一的標識一個資源。
Web上可用的每種資源如HTML文檔、圖像、視頻片段、程序等都是一個來URI來定位的。URI一般由三部組成:
(1)、訪問資源的命名機制;
(2)、存放資源的主機名;
(3)、資源自身的名稱,由路徑表示,着重強調於資源。

2、URL

URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL可以用來標識一個資源,而且還指明瞭如何定位這個資源。
URL是Internet上用來描述信息資源的字符串,主要用在各種WWW客戶程序和服務器程序上。採用URL可以用一種統一的格式來描述各種信息資源,包括文件、服務器的地址和目錄等。URL一般由三部組成:
(1)、協議(或稱爲服務方式);
(2)、存有該資源的主機IP地址(有時也包括端口號);
(3)、主機資源的具體地址。如目錄和文件名等。
HTTP URL的格式如下所示:
http://host[":"port][abs_path]
https://www.jianshu.com/u/72588c94a841
http表示要通過HTTP協議來定位網絡資源;host表示合法的Internet主機域名或者IP地址;port指定一個 端口號,爲空則使用默認端口80;abs_path指定請求資源的URI(Web上任意的可用資源)。

五、HTTP請求報文

HTTP 報文是面向文本的,報文中的每一個字段都是一些ASCII碼串,各個字段的長度是不確定的。一 般一個HTTP請求報文由請求行、請求報頭、空行和請求數據4個部分組成。如下圖:


1.請求行

請求行由請求方法、URL字段和HTTP協議的版本組成,格式如下:
Method Request-URI HTTP-Version CRLF 其中 Method表示請求方法;Request-URI是一個統一資源標識符;HTTP-Version表示請求的HTTP協議 版本;CRLF表示回車和換行(除了作爲結尾的CRLF外,不允許出現單獨的CR或LF字符)。

HTTP請求方法有8種,分別是GET、POST、HEAD、PUT、DELETE、TRACE、CONNECT、 OPTIONS。對於移動開發最常用的就是GET和POST了。
• GET:請求獲取Request-URI所標識的資源。
• POST:在Request-URI所標識的資源後附加新的數據。
• HEAD:請求獲取由Request-URI所標識的資源的響應消息報頭。
• PUT:請求服務器存儲一個資源,並用Request-URI作爲其標識。
• DELETE:請求服務器刪除Request-URI所標識的資源。
• TRACE:請求服務器回送收到的請求信息,主要用於測試或診斷。
• CONNECT:HTTP 1.1協議中預留給能夠將連接改爲管道方式的代理服務器。
• OPTIONS:請求查詢服務器的性能,或者查詢與資源相關的選項和需求。

2.請求報頭

請求報頭通知服務器關於客戶端請求的信息。在下文HTTP的消息報頭中詳細介紹

3.請求數據

請求數據不在GET方法中使用,而在POST方法中使用。POST方法適用於需要客戶填寫表單的場合, 與請求數據相關的最常用的請求報頭是Content-Type和Content-Length

4.示例

六、HTTP響應報文

在接收和解釋請求消息後,服務器返回一個HTTP響應消息。HTTP 的響應報文由狀態行、響應報頭、空行、響應正文組成。

1.狀態行

狀態行格式如下所示:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態碼;ReasonPhrase表示狀態碼的文本描述。狀態碼由3位數字組成,第一個數字定義了響應的類別,且有以下5種可能取值:
• 100~199:指示信息,收到請求,需要請求者繼續執行操作。
• 200~299:請求成功,請求已被成功接收並處理。
• 300~399:重定向,要完成請求必須進行更進一步的操作。
• 400~499:客戶端錯誤,請求有語法錯誤或請求無法實現。
• 500~599:服務器錯誤,服務器不能實現合法的請求。
常見的狀態碼如下:
• 200 OK:客戶端請求成功。
• 301: 請求永久重定向
• 400 Bad Request:客戶端請求有語法錯誤,服務器無法理解。
• 401 Unauthorized:請求未經授權,這個狀態碼必須和WWW-Authenticate報頭域一起使用。
• 403 Forbidden:服務器收到請求,但是拒絕提供服務。
• 500 Internal Server Error:服務器內部錯誤,無法完成請求。
• 503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間後可能恢復正常。

2.響應報頭

用於服務器傳遞自身信息的響應。在下文HTTP的消息報頭中詳細介紹

3.響應正文

響應正文就是服務器返回的資源的內容。

4.示例

七、HTTP的消息報頭

消息報頭分爲通用報頭、請求報頭、響應報頭、實體報頭等。消息報頭由鍵值對組成,每行一對,關鍵字和值用英文冒號“:”分隔。

1.通用報頭

它既可以出現在請求報頭,也可以出現在響應報頭中,如下所示:
• Date:表示消息產生的日期和時間。
• Connection:允許發送指定連接的選項。例如指定連接是連續的;或者指定“close”選項,通知服務 器,在響應完成後,關閉連接。
• Cache-Control:用於指定緩存指令,緩存指令是單向的(響應中出現的緩存指令在請求中未必會出現),且是獨立的(一個消息的緩存指令不會影響另一個消息處理的緩存機制)。

2.請求報頭

在請求行之後會有0個或者多個請求報頭,請求報頭通知服務器關於客戶端請求的信息。典型的請求報頭如下所示:
• Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機。
• User-Agent:發送請求的瀏覽器類型、操作系統等信息。
• Accept:客戶端可識別的內容類型列表,用於指定客戶端接收哪些類型的信息。
• Accept-Charset請求報頭域用於指定客戶端接受的字符集 。
• Accept-Encoding:客戶端可識別的數據編碼。
• Accept-Language:表示瀏覽器所支持的語言類型。
• Authorization請求報頭域主要用於證明客戶端有權查看某個資源。
• Connection:允許客戶端和服務器指定與請求/響應連接有關的選項。例如,這時爲Keep-Alive則表示 保持連接。
• Transfer-Encoding:告知接收端爲了保證報文的可靠傳輸,對報文采用了什麼編碼方式。

3.響應報頭

用於服務器傳遞自身信息的響應。常見的響應報頭如下所示:
• Location:用於重定向接收者到一個新的位置,常用在更換域名的時候。
• Server:包含服務器用來處理請求的系統信息,與User-Agent請求報頭是相對應的。

4.實體報頭

實體報頭用來定義被傳送資源的信息,其既可用於請求也可用於響應。請求和響應消息都可以傳送一 個實體。常見的實體報頭如下所示:
• Content-Type:發送給接收者的實體正文的媒體類型。
• Content-Lenght:實體正文的長度。
• Content-Language:描述資源所用的自然語言。
• Content-Encoding:實體報頭被用作媒體類型的修飾符。它的值指示了已經被應用到實體正文的附加 內容的編碼,因而要獲得Content-Type報頭域中所引用的媒體類型,必須採用相應的解碼機制。
• Last-Modified:實體報頭用於指示資源的最後修改日期和時間。
• Expires:實體報頭給出響應過期的日期和時間。

如理解有誤,還望指正,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章