學習web開發需要對http協議熟悉,下面直接進入主題。
一、什麼是報文
報文,是網路中交換和傳輸的資料單元,即站點一次性要傳送的資料塊。報文包含了將要傳送的完整的資料資訊,其長短很不一致,長度不限且可變。
http報文是由一行一行簡單的字串組成的。http報文都是純文字,不是二進位制**,所以人們可以很方便地對其進行讀寫。如果說http是網際網路的信使,那麼http報文就是它用來搬東西的包裹了。
二、報文的流動
報文會流入源端伺服器,工作完成之後,會流會使用者的agent**。
http報文會像河水一樣流動,不管是請求報文還是響應報文,所有報文都會向下游流動。所有報文的傳送者都在接受者的上游。如下圖所示,對請求報文來說,**1位於**3的上游,但對響應報文來說,它就位於**3的下游。
三、報文的組成部分
http報文是簡單的格式化文字。如下圖所示。每條報文都包含一條來自客戶端的請求或者一條來自伺服器的響應。它們由三部分組成:對報文進行描述的起始行、包含屬性的首部塊以及可選的、包含資料的主體部分。
所有的http報文都可以分為兩類:請求報文和響應報文。請求報文會向web伺服器請求乙個動作。響應報文會將請求的結果返回給客戶端。請求報文和響應報文的基本報文結構相同。
1、報文的語法
請求報文的格式:
[plain]view plain
copy
響應報文的格式
[plain]view plain
copy
下面是對報文格式各部分的解釋:
method(方法)
客戶端希望伺服器對資源執行的動作。是乙個單獨的詞,如:get、head、post。
request-url(請求url)
命名了所請求資源,或者url路徑元件的完整url。
version(版本)
報文所使用的http版本,其格式:http/.
其中major(主要版本號)和minor(次要版本號)都是整數。
status(狀態碼)
由三位數字組成,描述了請求過程中所發生的情況。
reason-phrase(原因短語)
上面數字狀態碼的可讀版本包含行終止序列之前的所有文字。
headers(首部)
可以有零個或多個首部,每個首部都包含乙個名字,後面跟著乙個冒號(:),然後是乙個可選的空格,接著是乙個值,最後是乙個crlf。首部是由乙個空行(crlf)結束的,表示了首部列表的結束和實體主體部分的開始,
entity-body(實體的主體部分)
包含乙個由任意資料組成的資料塊。並不是所有的報文都包含實體的主體部分。有時,報文只是以乙個crlf結束。
2、起始行
所有的http報文都以乙個起始行作為開始。請求報文的起始行說明了要做些什麼。響應報文的起始行說明發生了什麼。
請求行。請求報文請求伺服器對資源進行一些操作。請求報文的起始行,稱為請求行,包含乙個方法和乙個請求url,方法描述了伺服器應該執行的操作,請求url描述了要對哪個資源執行這個方法。請求行還包含http的版本,用來告知伺服器,客戶端使用的是哪種版本的http。所有的這些欄位都由空格符分隔。在http/1.0之前,並不要求請求行中包含http版本號。
響應行。響應報文承載了狀態資訊和操作產生的所有結果資料,將其返回給客戶端。響應報文的起始行,稱為響應行,包含了響應報文使用的http版本、數字狀態碼,以及描述狀態碼的文字資訊的原因短語。所有的這些欄位都由空格符分隔。在http/1.0之前,並不要求響應行中包含http版本號。
方法。請求的起始行以方法作為開始,方法用來告知伺服器要做些什麼。
http規範中定義了一組常用的請求方法。
注:並不是所有伺服器都實現了上面列出的7種方法。而且,由於http設計得易於擴充套件,所以除了這些方法以外,其他伺服器可能還會是實現一些自己的請求方法,稱為擴充套件方法。
狀態碼。
用來告訴客戶端,發生了什麼事情。
客戶端向乙個http伺服器傳送請求報文時,會發生很多事情。狀態碼是在每條響應報文的起始行中返回的。
下面是狀態碼的分類
原因短語。是響應起始行中最後乙個元件。為狀態碼提供了文字形式的解釋。例:200 ok中,ok就是原因短語。
版本號。為http應用程式提供了一種將自己所遵循的協議版本告知對方的方式。版本號說明了應用程式支援的最高版本。版本好不會被當作小數來處理。版本的每個數字都回被當成乙個單獨的數字來處理。因此,每個數字都必須單獨進行比較,以便確定哪個版本更高。比如,http/2.22就比http/2.3的版本更高,因為22比3大。
3、首部
首部欄位向請求和響應報文中新增一些附加資訊。從本質上來說,它們只是一些名/值對的列表。
首部分類:
通用首部
既可以出現在請求報文中,也可以出現在響應報文中
請求首部
提供更多有關請求的資訊
響應首部
提供更多有關響應的資訊
實體首部
描述主體的長度和內容,或者資源自身
擴充套件首部
規範中沒有定義的新首部
常見首部例項:
4、實體的主體部分
http報文的負荷。就是http要傳輸的內容。
HTTP協議之報文詳解
學習web開發需要對http協議熟悉,下面直接進入主題。一 什麼是報文 報文,是網路中交換和傳輸的資料單元,即站點一次性要傳送的資料塊。報文包含了將要傳送的完整的資料資訊,其長短很不一致,長度不限且可變。http報文是由一行一行簡單的字串組成的。http報文都是純文字,不是二進位制 所以人們可以很方...
HTTP協議之報文詳解
學習web開發需要對http協議熟悉,下面直接進入主題。一 什麼是報文 報文,是網路中交換和傳輸的資料單元,即站點一次性要傳送的資料塊。報文包含了將要傳送的完整的資料資訊,其長短很不一致,長度不限且可變。http報文是由一行一行簡單的字串組成的。http報文都是純文字,不是二進位制 所以人們可以很方...
HTTP協議之報文詳解
學習web開發需要對http協議熟悉,下面直接進入主題。一 什麼是報文 報文,是網路中交換和傳輸的資料單元,即站點一次性要傳送的資料塊。報文包含了將要傳送的完整的資料資訊,其長短很不一致,長度不限且可變。http報文是由一行一行簡單的字串組成的。http報文都是純文字,不是二進位制 所以人們可以很方...