談談HTTP的請求和響應

banner

HTTP是HyperText Transfer Protocol的縮寫,意思是超文本傳輸協議。它是一種應用層協議,容許基於WEB的應用程序進行通訊和交換數據。html

你能夠把HTTP看做是網絡的信使。git

HTTP是基於TCP/IP協議的,可使用http進行內容的傳輸,好比圖片,視頻,音頻,文檔等等。github

客戶端和服務端須要進行通訊的話,一般會使用request response cycle的形式。web

客戶端須要發送request請求,這樣服務端才知道要通訊;以後,服務端對請求進行response響應服務器

在進入話題以前,咱們順便了解下HTTP比較重要的三個知識點:網絡

  1. HTTP是無鏈接的:在發出請求後,客戶端和服務端斷開鏈接,而後當響應準備就緒的時候,服務端再次從新創建鏈接併發送響應。併發

  2. HTTP能夠提供任何類型的數據,只要客戶端和服務端兩邊的電腦可以讀取理解它。tcp

  3. HTTP是無狀態的:客戶端和服務器只是在當前請求期間瞭解彼此。若是它關閉了,而且兩臺電腦想要再次鏈接,它們須要從新提供信息。url

下面說說request-response鏈接😄code

request請求

假設你要鏈接一個url--http://mywebsite/products/myproduct.html,會先經過tcp/ip創建網絡的鏈接,這會進行三次握手,具體的狀況就不在這裏說了。

客戶端和服務端創建的鏈接,爲它們經過HTTP協議進行通訊提供了環境。

在創建鏈接以後,客戶端會發送一個請求,由於HTTP是無鏈接的,客戶端會斷開和服務器端的鏈接,等待服務器端的響應。服務器端處理了響應以後,會從新創建鏈接,而後發送響應信息給客戶端。

HTTP信息

一個典型的HTTP信息包含三部分:起始行、頭部和主體。以下圖:

http-msg

請求信息和響應信息大致是相同的,可是具體到裏面的信息就有所差別了,以下圖:

http-msg-diff

request請求信息

那麼發送請求信息包含哪些呢?

咱們先來看一張示例圖:

request-msg

在上圖的起始行中包含三部分的信息:方法、URI和HTTP版本號

其中方法GET, POST, DELETE等,不一樣的方法表明的意思會另開一篇文章說明;URI是你要請求資源的路徑;HTTP版本號是你通訊時使用的版本號。

URI:Uniform Resource Identifier,即統一資源標誌符,用來惟一的標識一個資源。

而後就是請求頭了,請求頭是鍵值對的形式。

嗯~咦咦,示例中沒有主體?🤔️

是的,請求體並非必須的,示例中的GET請求不用帶,可是在POST請求中請求體就須要帶上了,其是表單的提交數據。

response響應

上面已經講到了,服務器端接受了請求後,處理完請求,就會將信息返回給客戶端。那麼,響應信息都包含哪些呢?

response響應信息

如圖:

response-msg

圖上內容分三大塊,自上而下依次是起始行、響應頭和響應體

響應的起始行包括http的版本號和響應的狀態碼

響應的狀態碼是客戶端和服務器端交流的信息,經過狀態碼能知道二者的交流狀態。我在小結HTTP狀態碼這篇文章中有講解了下。

響應頭也是鍵值對的形式。

以後就是響應體了,服務器端響應客服端的需求,在響應體中帶上客戶端請求的資源。

總結

  • web上的request response cycle是經過http信息造成。

  • 一個http信息包含三部分-起始行、頭部和主體

  • request信息和response信息有所差別;body主體在request信息中非必須。

後話

  • 圖片資源來自網絡,侵刪

  • 能夠戳嘉明的博客瞭解更多內容,能留個star✨就更好了。逃:)

喬巴
相關文章
相關標籤/搜索