HTTP是HyperText Transfer Protocol的縮寫,意思是超文本傳輸協議。它是一種應用層
協議,容許基於WEB
的應用程序進行通訊和交換數據。html
你能夠把HTTP看做是網絡的信使。git
HTTP
是基於TCP/IP協議的,可使用http
進行內容的傳輸,好比圖片,視頻,音頻,文檔等等。github
客戶端和服務端須要進行通訊的話,一般會使用request response cycle
的形式。web
客戶端須要發送request請求,這樣服務端才知道要通訊;以後,服務端對請求進行response響應。服務器
在進入話題以前,咱們順便了解下HTTP
比較重要的三個知識點:網絡
HTTP是無鏈接的:在發出請求後,客戶端和服務端斷開鏈接,而後當響應準備就緒的時候,服務端再次從新創建鏈接併發送響應。併發
HTTP能夠提供任何類型的數據,只要客戶端和服務端兩邊的電腦可以讀取理解它。tcp
HTTP是無狀態的:客戶端和服務器只是在當前請求期間瞭解彼此。若是它關閉了,而且兩臺電腦想要再次鏈接,它們須要從新提供信息。url
下面說說request-response
鏈接😄code
假設你要鏈接一個url--http://mywebsite/products/myproduct.html
,會先經過tcp/ip
創建網絡的鏈接,這會進行三次握手,具體的狀況就不在這裏說了。
客戶端和服務端創建的鏈接,爲它們經過HTTP
協議進行通訊提供了環境。
在創建鏈接以後,客戶端會發送一個請求,由於HTTP是無鏈接的,客戶端會斷開和服務器端的鏈接,等待服務器端的響應。服務器端處理了響應以後,會從新創建鏈接,而後發送響應信息給客戶端。
一個典型的HTTP信息包含三部分:起始行、頭部和主體。以下圖:
請求信息和響應信息大致是相同的,可是具體到裏面的信息就有所差別了,以下圖:
那麼發送請求信息包含哪些呢?
咱們先來看一張示例圖:
在上圖的起始行中包含三部分的信息:方法、URI和HTTP版本號
。
其中方法有GET, POST, DELETE等
,不一樣的方法表明的意思會另開一篇文章說明;URI是你要請求資源的路徑;HTTP版本號是你通訊時使用的版本號。
URI:Uniform Resource Identifier,即統一資源標誌符,用來惟一的標識一個資源。
而後就是請求頭了,請求頭是鍵值對的形式。
嗯~咦咦,示例中沒有主體?🤔️
是的,請求體並非必須的,示例中的GET
請求不用帶,可是在POST
請求中請求體就須要帶上了,其是表單的提交數據。
上面已經講到了,服務器端接受了請求後,處理完請求,就會將信息返回給客戶端。那麼,響應信息都包含哪些呢?
如圖:
圖上內容分三大塊,自上而下依次是起始行、響應頭和響應體
。
響應的起始行包括http的版本號和響應的狀態碼。
響應的狀態碼是客戶端和服務器端交流的信息,經過狀態碼能知道二者的交流狀態。我在小結HTTP狀態碼這篇文章中有講解了下。
響應頭也是鍵值對的形式。
以後就是響應體了,服務器端響應客服端的需求,在響應體中帶上客戶端請求的資源。
web上的request response cycle
是經過http信息造成。
一個http信息包含三部分-起始行、頭部和主體
。
request
信息和response
信息有所差別;body主體在request
信息中非必須。
圖片資源來自網絡,侵刪
能夠戳嘉明的博客瞭解更多內容,能留個star✨就更好了。逃:)