HTTP 報文結構和內容

HuDu發表於2020-09-04

HTTP 報文內容

首先通過思維導圖大致瞭解以下 HTTP 報文內容

HTTP 報文結構和內容

HTTP請求報文格式如下:

HTTP 報文結構和內容

HTTP 報文結構和內容

1.1 請求行

請求行由三部分組成:請求方法,請求URL(不包括域名),HTTP協議版本
請求方法比較多:GETPOSTHEADPUTDELETEOPTOINSTRACECONNECT
最常用的是GETPOST

1.1.1 請求方法

  • 1、GET
請求獲取Request-URIURI:統一資源識別符號,URL:統一資源定位符,是其子集,URI注重的是標識,而URL強調的是位置,可以看成原始的URI)所標識的資源。
傳遞引數長度受限制,因此傳遞的引數是直接表示在位址列中,而特定的瀏覽器和伺服器對 url 的長度是有限制的。
因此,GET 不適合用來傳遞私密資料,也不適合傳遞大量資料。
一般的HTTP請求大多都是GET
  • 2、POST
在Request-URI所標識的資源後附加新的資料,POST 把傳遞的資料封裝在 HTTP 請求資料中,以名稱/值的形式出現,可以傳輸大量資料,對資料沒有限制,也不會顯示在 URL 中。
表單提交用的是 POST
  • 3、HEAD
HEADGET 相似,不過服務端接收到 HEAD 請求時只返回響應頭,不傳送響應內容。所以,如果是需要檢視某個頁面的狀態時,用 HEAD 更高效,因為省去了傳輸頁面內容的時間。
  • 4、DELETE
刪除某一個資源,請求刪除URL指向的資源
  • 5、OPTIONS
請求查詢伺服器的效能,或者查詢與資源相關的選項,用於獲取當前URL所支援的方法,若請求成功,會在HTTP頭中包含一個名為"Allow"的頭,值是所支援的方法,如"GET,POST"
  • 6、PUT
把一個資源放在指定的位置上。
本質上來講,PUTPOST極為相似,都是向伺服器傳送資料,但它們之間有一個重要的區別,PUT通常制定了資源的存放位置,而POST則沒有,POST的資料存放位置由伺服器自己決定。
關於POSTPUT的區別以及請求方法的冪等性
  • 7、TRACE
跟蹤請求要經過的防火牆、代理或閘道器等,主要用於測試或診斷
  • 8、CONNECT
保留將來使用,CONNECT方法是HTTP/1.1協議預留的,能夠將連線改為管道方式的代理伺服器。通常用於SSL加密伺服器的連結與非加密的HTTP代理伺服器的通訊。

1.1.2 HTTP 協議版本

  • 1、HTTP/1.0
HTTP/1.0支援:GETPOSTHEAD 三種請求方法。
  • 2、HTTP/1.1
HTTP/1.1 是當前正在使用的版本。該版本預設採用持久連線,並能很好的配合代理伺服器工作。還支援以管道的方式同時傳送多個請求,以便降低路線負載,提高傳輸速度。
HTTP/1.1 新增了:OPTIONSPUTDELETETRACECONNECT五種HTTP請求方法
  • 3、請求頭部
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: keep-alive
Content-Length: 18
Content-Type: application/json;charset=UTF-8
Host: 127.0.0.1:8080
Origin: http://localhost:1234
Referer: http://localhost:1234/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36 Edg/85.0.564.44
請求頭部由 關鍵字/值 組成,每行一對
1.User-Agent:產生請求的瀏覽器的型別
2.Accept:客戶端希望瀏覽器接受的資料的型別,如Accept: application/json, text/plain, */* 表示希望接受的是json型別和文字型別,*/* 表示接受所有型別。
3.Content-Type:傳送端傳送的實體資料的型別,比如Content-Type: application/json;charset=UTF-8,說就json格式的資料。
4.Host:請求的主機名,允許多個域名同處於一個IP地址,即虛擬主機
  • Content-Type
    常見的Content-Type:
Content-Type 解釋
text/html html格式
text/plain 純文字格式
text/css CSS格式
text/javascript js格式
image/gif gif圖片格式
image/jpeg jpg圖片格式
image/png png圖片格式
application/x-www-form-urlencoded POST專用:普通的表單提交預設是通過這種方式。form表單資料被編碼為key/value格式傳送到伺服器。
application/json POST專用:用來告訴服務端訊息主體是序列化後的 JSON 字串
text/xml POST專用:傳送xml資料
multipart/form-data POST專用:下面講解
  • 空行
請求頭之後是一個空行,通知伺服器以下不再有請求頭
  • 請求體
GET沒有請求資料,POST有。
與請求資料相關的最常使用的請求頭是 Content-Type 和 Content-Length 。

響應報文

HTTP響應報文和請求報文的結構差不多,也是由四個部分組成:

<status-line>   //狀態行

<headers>   //訊息報頭

<blank line>   //空行

<response-body>    //響應體
  • 狀態行
狀態行也由三部分組成:伺服器HTTP協議版本,響應狀態碼,狀態碼的文字描述

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

  比如:HTTP/1.1 200 OK

狀態碼:由3位數字組成,第一個數字定義了響應的類別

1xx:指示資訊,表示請求已接收,繼續處理
2xx:成功,表示請求已被成功接受,處理。
200 OK:客戶端請求成功
204 No Content:無內容。伺服器成功處理,但未返回內容。一般用在只是客戶端向伺服器傳送資訊,而伺服器不用向客戶端返回什麼資訊的情況。不會重新整理頁面。
206 Partial Content:伺服器已經完成了部分GET請求(客戶端進行了範圍請求)。響應報文中包含Content-Range指定範圍的實體內容
3xx:重定向
301 Moved Permanently:永久重定向,表示請求的資源已經永久的搬到了其他位置。

302 Found:臨時重定向,表示請求的資源臨時搬到了其他位置

303 See Other:臨時重定向,應使用GET定向獲取請求資源。303功能與302一樣,區別只是303明確客戶端應該使用GET訪問

307 Temporary Redirect:臨時重定向,和302有著相同含義。POST不會變成GET

304 Not Modified:表示客戶端傳送附帶條件的請求(GET方法請求報文中的IF…)時,條件不滿足。返回304時,不包含任何響應主體。雖然304被劃分在3XX,但和重定向一毛錢關係都沒有
一個304的使用場景:
快取伺服器向伺服器請求某一個資源的時候,伺服器返回的響應報文具有這樣的欄位:Last-Modified:Wed,7 Sep 2011 09:23:24,快取器會儲存這個資源的同時,儲存它的最後修改時間。下次使用者向快取器請求這個資源的時候,快取器需要確定這個資源是新的,那麼它會向原始伺服器傳送一個HTTP請求(GET方法),並在請求頭部中包含了一個欄位:If-Modified-Since:Wed,7 Sep 2011 09:23:24,這個值就是上次伺服器傳送的響應報文中的最後修改時間。

假設這個資源沒有被修改,那麼伺服器返回一個響應報文:

HTTP/1.1 304 Not Modified
    Date:Sat, 15 Oct 2011 15:39:29
    (空行)                                      
    (空響應體)304告訴快取器資源沒有被修改,並且響應體是空的,不會浪費頻寬。

4xx:客戶端錯誤
    -   400 Bad Request:客戶端請求有語法錯誤,伺服器無法理解。
    -   401 Unauthorized:請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用。
    -   403 Forbidden:伺服器收到請求,但是拒絕提供服務
    -   404 Not Found:請求資源不存在。比如,輸入了錯誤的url
    -   415 Unsupported media type:不支援的媒體型別
5xx:伺服器端錯誤,伺服器未能實現合法的請求。
    -   500 Internal Server Error:伺服器發生不可預期的錯誤。
    -   503 Server Unavailable:伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常,
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章