1. 程式人生 > >圖解HTTP權威指南 | HTTP報文

圖解HTTP權威指南 | HTTP報文

                                                                               

   

一、問題

1、報文流是如何流動的 2、HTTP報文的三個組成部分 3、請求和響應報文之間的區別 4、請求報文支援的各種方法 5、和響應報文一起返回的各種狀態碼 6、各種各樣的HTTP首部都是用來做什麼的    

二、報文流

1、什麼是HTTP報文   HTTP報文是在HTTP應用程式直接傳送的資料塊。這些資料塊以一些文字形式的元資訊(meta-information)開頭。這些資訊描述了報文的內容及含義,後面跟著可選的資料部分。這些報文在客戶端、伺服器和代理直接流動。   常用術語:流入、流出、上游、下游   2、報文流入源端伺服器   HTTP使用術語流入(inbound)和流出(outbound)來描述事務處理(transaction)的方向。報文流入源端伺服器,工作完成後,會流回使用者的Agent代理中。         3、報文向下遊流動   HTTP報文會像河水一樣流動。不管是請求報文還是響應報文,所有報文都會向下遊(downstream)流動。所有的報文的傳送者都在接收者的上游(upstream)。

 

 

  對於請求報文來說,代理1位於代理3的上游;但對於響應報文來說,它就位於代理3的下游。  

三、報文的組成

HTTP報文是簡單的格式化資料塊。每條報文都包含一條來自客戶端的請求,或者一條來自服務端的響應。他們由三個部分組成:對報文進行描述的起始行(start line),包含屬性的首部(header)塊,以及可選的、包含資料的主體(body)部分。     起始行和首部是由行分隔符的ASCII文字,每行都以一個由兩個字元組成的行終止序列作為結束,其中包含一個回車符(ASCII碼13)和一個換行符(ASCII碼10)。 實體的主體或報文的主體是一個可選的資料塊。與起始行和首部不同的是主體可以包含文字或二進位制資料,也可以為空。  

四、報文的語法

所有的HTTP報文都可以分為兩類:請求報文(request message)和響應報文(response massage)。請求報文會向Web伺服器請求一個動作。響應報文會將請求的結果返回給客戶端。請求和響應報文的基本報文機構相同。   請求報文的格式
<method> <request-URL> <version>
<headers>

<entity-body>

  響應報文的格式
<version> <status> <reason-phrase>
<headers>

<entity-body>

   

四、詳解

1、起始行   所有的HTTP報文都以一個起始行作為開始。請求報文的其實行說明了要做些什麼。響應報文的起始行說明了發生什麼。   1)請求行 請求報文請求伺服器對資源進行一些操作。請求報文的起始行,或稱為請求行,包含了一個方法和一個請求的URL,這個方法描述了伺服器應該執行的操作,請求URL描述了要對哪個資源執行這個方法。請求行中還包含了HTTP的版本,用來告知伺服器,客戶端使用的是哪種HTTP。   2)響應行 響應報文承載了狀態資訊和操作產生的所有結果資料,將其返回給客戶端。響應報文的起始行,或稱為響應行,包含了響應報文使用的HTTP版本、數字狀態碼,以及描述操作狀態的文字形式的原因短語。   2、方法   請求的起始行以方法作為開始,方法用來告知伺服器需要做些什麼。       3、版本號   報文所使用的HTTP版本,格式為:
HTTP/<major>.<minor>

其中主要版本號(major)和次要版本號(minor)都是整數。

  4、狀態碼(status code)   這三位數字描述了請求過程中所發生的情況。每個狀態碼的第一位數字都用於描述狀態的一般類別(“成功”、“出錯”等)。       5、原因短語(reason-phrase)   數字狀態的可讀版本,包含行終止序列之前的所有文字。   6、首部(header)   可以有零個或多個首部,每個首部都包含有個名字,後面跟著一個冒號(:),然後是一個可選的空格,接著是一個值,最後是一個CRLF。首部都是由一個空行(CRLF)結束的,表示了首部列表的結束和實體主體部分的開始。  

 

 

  7、實體的主體部分(entity-body)   實體的主題部分包含一個由任意資料組成的資料塊。並不是所有的報文都包含實體的主體部分,有時,報文只是以一個CRLF結束。  

四、交流學習

歡迎大家關注我的公眾號,一起交流、學習。 

 

文中的思維導圖以及各種總結的表格都可關注公眾號:運維汪,傳送“1”後下載原圖或原檔案。 &nbs