HTTP 請求/響應報文結構


請求報文和響應報文都是由以下4部分組成:

1.請求行/響應行

2.請求頭/響應頭

3.空行

4.消息主體(請求體/響應體)

請求報文結構

請求行

格式為:Method Request-URI HTTP-Version 結尾符

結尾符一般用\r\n

根據HTTP標准,HTTP請求可以使用多種請求方法。

序號

方法

描述

1

GET

請求指定的頁面信息,並返回實體主體。

2

HEAD

類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭

3

POST

向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求主體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。

4

PUT

從客戶端向服務器傳送的數據取代指定的文檔的內容。

5

DELETE

請求服務器刪除指定的頁面。

6

CONNECT

HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。

7

OPTIONS

允許客戶端查看服務器的性能。

8

TRACE

回顯服務器收到的請求,主要用於測試或診斷。

請求頭

通用頭:

既可以出現在請求報頭,也可以出現在響應報頭中

Date:表示消息產生的日期和時間

Connection:允許發送指定連接的選項,例如指定連接是連續的,或者指定“close”選項,通知服務器,在響應完成后,關閉連接

Cache-Control:用於指定緩存指令,緩存指令是單向的(響應中出現的緩存指令在請求中未必會出現),且是獨立的(一個消息的緩存指令不會影響另一個消息處理的緩存機制)

請求頭:

請求報頭通知服務器關於客戶端請求的信息,典型的請求頭有:

Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機

User-Agent:發送請求的瀏覽器類型、操作系統等信息

Accept:客戶端可識別的內容類型列表,用於指定客戶端接收那些類型的信息

Accept-Encoding:客戶端可識別的數據編碼

Accept-Language:表示瀏覽器所支持的語言類型

Connection:允許客戶端和服務器指定與請求/響應連接有關的選項,例如這是為Keep-Alive則表示保持連接。

Transfer-Encoding:告知接收端為了保證報文的可靠傳輸,對報文采用了什么編碼方式。

實體頭:

實體報頭用來定義被傳送資源的信息,既可以用於請求也可用於響應。請求和響應消息都可以傳送一個實體,常見的實體報頭為:

Content-Type:發送給接收者的實體正文的媒體類型。HTTP content-type 對照表

Content-Lenght:實體正文的長度

Content-Language:描述資源所用的自然語言,沒有設置則該選項則認為實體內容將提供給所有的語言閱讀

Content-Encoding:實體報頭被用作媒體類型的修飾符,它的值指示了已經被應用到實體正文的附加內容的編碼,因而要獲得Content-Type報頭域中所引用的媒體類型,必須采用相應的解碼機制。

Last-Modified:實體報頭用於指示資源的最后修改日期和時間

Expires:實體報頭給出響應過期的日期和時間

注意:

Content-Type和Content-Encoding用於定義網絡文件的類型和網頁的編碼,決定瀏覽器將以什么形式、什么編碼讀取這個文件。

Accept-Encoding 和Content-Encoding是HTTP中用來對采用哪種編碼格式傳輸正文進行協定的一對頭部字段。工作原理如下:

1.首先瀏覽器(也就是客戶端)發送請求時,通過Accept-Encoding帶上自己支持的內容編碼格式列表;

2.服務端在接收到請求后,從中挑選出一種用來對響應信息進行編碼,並通過Content-Encoding來說明服務端選定的編碼信息;

3.瀏覽器在拿到響應正文后,依據Content-Encoding進行解壓。服務端也可以返回未壓縮的正文,但這種情況不允許返回Content-Encoding.

空行

http協議規定的格式,一般采用\r\n

消息主體

一般用於http的post方法,通過實體報頭Content-Type規定消息主體的格式內容。

普通post請求頭中Content-Type字段值為:

Content-Type: application/x-www-form-urlencoded

上傳有文件控件的表單的請求頭中Content-Type字段值要添加 boundary=${bound}(${bound}規定了請求體中的內容分隔符)。

Content-Type:multipart/form-data;boundary=----WebKitFormBoundaryZpsWTsOiRHI0TBW7

multipart/form-data:

1. 該格式是post的常見提交方式,它會將表單的數據處理為一條消息,以標簽為單元,用分隔符分開。既可以上傳鍵值對,也可以上傳文件;

2. Content-Disposition,用來說明字段的一些信息;當上傳的字段是文件時,會有Content-Type來表名文件類型;

3. 所有的數據請求頭和數據之間都用\r\n\r\n分開,兩個數據間用 ----${bound}\r\n分開。

4. 請求體最后添加----${bound}\r\n

------WebKitFormBoundaryjUVXJ3PslTEBh9as Content-Disposition: form-data; name="param1" AAAA ------WebKitFormBoundaryjUVXJ3PslTEBh9as Content-Disposition: form-data; name="param2"

123456
------WebKitFormBoundaryjUVXJ3PslTEBh9as Content-Disposition: form-data; name="fileparam"; filename="test.txt" Content-Type: text/plain contents of file
------WebKitFormBoundaryjUVXJ3PslTEBh9as

 

響應報文結構

響應行

響應行一般由協議版本、狀態碼及其描述組成 比如 HTTP/1.1 200 OK

HTTP狀態碼:

當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在服務器發出請求。當瀏覽器接收並顯示網頁前,此網頁所在的服務器會返回一個包含HTTP狀態碼Status Code的響應頭(server header)用以響應瀏覽器的請求。

下面是常見的HTTP狀態碼:

200 - 請求成功

301 - 資源(網頁等)被永久轉移到其它URL

404 - 請求的資源(網頁等)不存在

500 - 內部服務器錯誤

HTTP狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,HTTP狀態碼共分為5種類型:

①1** 信息,服務器收到請求,需要請求者繼續執行操作;

②2** 成功,操作被成功接收並處理;

③3** 重定向,需要進一步的操作以完成請求;

④4** 客戶端錯誤,請求包含語法錯誤或無法完成請求;

⑤5** 服務器錯誤,服務器在處理請求的過程中發生了錯誤。

HTTP狀態碼列表

響應頭

響應頭:

用於服務器傳遞自身信息的響應,常見的響應報頭:

Allow:服務器支持哪些請求方法(如GET、POST等)。

Location:用於重定向接受者到一個新的位置,常用在更換域名的時候

Server:包含可服務器用來處理請求的系統信息,與User-Agent請求報頭是相對應的

Transfer-Encoding:告訴瀏覽器數據的傳送格式。

Refresh:告訴瀏覽器隔多久刷新一次,以秒計。

Set-Cookie:設置和頁面關聯的Cookie。

Access-Control-Allow-Origin:指定哪些站點可以參與跨站資源共享。

Age:對象在代理緩存中暫存的秒數。

 

參考:https://blog.csdn.net/shouwang666666/article/details/70232053

HTTP請求頭響應頭中常用字段


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM