http協議的構成及字段說明(請求頭、請求體、響應頭)

HTTP請求:Hyper Text Transfer Protocol的縮寫,即超文本傳輸協議。javascript

1、HTTP協議的結構html

HTTP報文由客戶機到服務器的請求和從服務器到客戶機的相應構成。前端

一、請求報文的組成:java

請求行 信息頭 請求頭 實體頭 報文主體

請求行的格式以下:json

Method [分隔符] Request - URL [分隔符] HTTP-Version CRLF瀏覽器

解釋說明:服務器

  (1)Method 表示完成Request - URL的方法,該字段是大小寫敏感的,據RFC2616標準(現行的HTTP/1.1)得知,一般有如下8種方法:網絡

OPTIONS 請求得到由Request-URI標識的資源在請求/響應的通訊過程當中可使用的功能選項
HEAD HEAD方法跟GET方法相同,只不過服務器響應時不會返回消息體
PUT 把消息本體中的消息發送到一個URL,跟POST相似
TRACE 是用來調用一個遠程的請求信息應用程序層的循環後退
CONNECT HTTP/1.1協議中預留給可以將鏈接改成管道方式的代理服務器。
DELETE 請求服務器刪除Request-URI所標識的資源
GET 由客戶端請求服務端獲取Request-URI所標識的資源的方法
POST 由客戶端向服務端提交Request-URI所標識的資源後附加新的數據

  (2)[分隔符]爲空格併發

  (3)Request - URL: 遵循URL格式,此字段爲星號(*)時,說明請求並不用於某個特定的資源地址,而是用於服務自己。app

  (4)HTTP-Version:表示支持的HTTP版本,如HTTP/1.1

  (5)CRLF:表示換行回車符

    HTTP的頭包括通用的信息頭、請求頭、響應頭、實體頭4部分,每一個頭域由一個域名、冒號和值域3部分組成。域名是大小寫無關的;域值前能夠添加任何數量的空格,每一個HTTP請求能夠包含多個HTTP頭域。

    HTTP報文主體則包含了HTTP請求的內容,對於get方法,報文主體爲空,對於post方法,報文主體則包含須要發送給服務器的數據。

二、響應報文的組成:

狀態行 信息頭 響應頭 實體頭 報文主體

解釋說明:

  (1)狀態行由狀態碼和緣由分析兩部分組成,其中,狀態碼由3位數字組成,表示請求是否被理解或被知足,用來支持自動操做;緣由分析是對原文的狀態碼做簡單的描述,用於供用戶使用。

三、不管是請求報文仍是響應報文,雖然分別由以上五個部分組成,可是在必定狀況下有些並非必需要的,可是對於:General-header(通用頭部)、請求頭(客戶端->服務器[Request  Header])、響應頭(服務端->客戶端[Response Header])  這三部分是必需要有的。因而我那一個實例來對這三部分的內容進行說明記錄:

(1)General-header(通用頭部)

1 Request URL: http://115.148.141.110:8980/v1/purchase/list     # 請求的URL地址(包含請求類型、請求域名、請求端口、請求地址)
2 Request Method: POST                               # 請求方式
3 Status Code: 200 OK                                            # 響應的狀態碼、結果 
4 Remote Address: 127.0.0.1:8899                                 # 請求的遠程地址 
5 Referrer Policy: no-referrer-when-downgrade                    # referrer策略(五種方法)

(2)請求頭(客戶端->服務器[Request  Header]) --如下數據是經過fidder抓取所得(關於Fidder基本說明的去這裏:http://www.javashuo.com/article/p-xsjufnop-ds.html)。

 1 POST /v1/purchase/list HTTP/1.1                      # 請求方式、請求地址、請求所使用的協議和版本
 2 Host: 115.157.151.673:8180                           # 目標主機地址和端口號
 3 Connection: keep-alive                                  # 維護客戶端和服務端的鏈接關係 
 4 Content-Length: 68                                      # 描述HTTP消息實體的傳輸長度
 5 Accept: application/json, text/javascript, */*; q=0.01         #發送端(客戶端)但願接受的數據類型、q 是權重係數,範圍 0 =< q <= 1,q 值越大,請求越傾向於得到其「;」以前的類型表示的內容
 6 Origin: http://apptest.zhidianlife.com:8007            # 瀏覽器在referrer字段中只顯示源網站的源地址(即協議、域名、端口),而不包括完整的路徑 
 7 Authorization: c81e7286507f4aa4b6179f4c381b4c64          # 請求所需的認證信息
 8 User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64)      AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36          # 客戶端版本號的名字
 9 Content-Type: application/json                     # 請求實體,文檔類型
10 Referer: http://apptest.zhidianlife.com:8007/procurement/order?_t=756512&_winid=w9290         # 歷來於哪裏
11 Accept-Encoding: gzip, deflate                        # 客戶端接收編碼類型,一些網絡壓縮格式: gzip, deflate
12 Accept-Language: zh-CN,zh;q=0.9                      # 客戶端接收的語言類型 、中文

(3)響應頭(服務端->客戶端[Response Header])

1 HTTP/1.1 200 OK                                       # 請求協議以及本版、請求狀態碼
2 Date: Tue, 02 Jul 2019 14:07:31 GMT                     # 服務端響應客戶端的內容過時時間
3 Content-Type: application/json; charset=utf-8                 # 服務端發送的類型及採用的編碼方式
4 Server: Kestrel                                   # WEB 服務器 服務端的Web服務端名
5 Vary: Origin                                   # WEB服務器用該頭部的內容告訴 Cache 服務器,在什麼條件下才能用本響應所返回的對象響應後續的請求
6 Access-Control-Allow-Credentials: true                  # 容許運行客戶端攜帶證書式訪問 
7 Access-Control-Allow-Origin: http://apptest.zhidianlife.com:8007
8 Content-Length: 33310                             # 容許指定的域名、地址訪問

 其中涉及到前端頁面性能問題的字段主要有如下:Accept-Encoding、Connection、Date

三、GET與POST請求過程

POST請求的過程:

  1. 瀏覽器請求tcp鏈接(第一次握手)
  2. 服務器答應進行tcp鏈接(第二次握手)
  3. 瀏覽器確認,併發送post請求頭(第三次握手,這個報文比較小,因此http會在此時進行第一次數據發送)
  4. 服務器返回100 Continue響應
  5. 瀏覽器發送數據
  6. 服務器返回200 OK響應

GET請求的過程:

  1. 瀏覽器請求tcp鏈接(第一次握手)
  2. 服務器答應進行tcp鏈接(第二次握手)
  3. 瀏覽器確認,併發送get請求頭和數據(第三次握手,這個報文比較小,因此http會在此時進行第一次數據發送)
  4. 服務器返回200OK響應

四、HTTP狀態碼的分類

分類 分類描述
1**  信息,服務器收到請求,須要請求者繼續執行操做
2**  成功,操做被成功接收並處理
3**  重定向,須要進一步的操做以完成請求
4** 客戶端錯誤,請求包含語法錯誤或沒法完成請求
5**  服務器錯誤,服務器在處理請求的過程當中發生了錯誤

 

 

-----時間不夠了,明天還要上班,還在公司加班,寫的粗糙,有什麼不對的以及能夠完善的但願各位大神留言---

相關文章
相關標籤/搜索