報文流web
http 報文是在 Http 應用程序之間發送的數據塊。這些數據塊以一些文本形式的元信息(meta-information)開頭,這些信息描述了報文的內容及含義,後面跟着可選的數據部分。這些報文在客戶端、服務器和代理之間流動。術語"流入"、「流出」、「上游」及「下游」都是用來描述報文方向的。服務器
http 報文會像河水同樣流動,無論是請求報文仍是響應報文,全部報文都會向下遊流動。全部報文的發送者都在接收者的上游。post
報文的組成部分url
Http 報文是簡單的格式化數據塊。每條報文都包含一條來自客戶端的請求,或者一條來自服務器的響應。有三部分組成:對報文進行描述的起始行(start line)、包含屬性的首部(header)塊 以及 可選的 包含數據的 主體(body)部分。spa
起始行代理
起始行和首部就是由行分隔的 ASCII 文本,每行都以一個由兩個字符組成的行終止序列做爲結束。實體的主體或者報文的主體 是 一個可選的數據塊,能夠包含文本或者二進制,能夠爲 空。code
全部的 HTTP 報文都以一個起始行做爲開始,請求報文的起始行說明了要作些什麼,響應報文的起始行說明發生了什麼。orm
請求報文的起始行又稱之爲請求行,包含了一個方法和一個請求的 url,這個方法描述了服務器應該執行的操做,請求url 描述了 要對 哪一個資源執行 這個方法。請求行中還包含了 http 的版本,用來告知服務器,客戶端使用的是哪一種 http。資源
響應報文承載了狀態信息和操做產生的全部結果數據,將其返回給客戶端。響應報文的起始行,又稱之爲響應行,包含了響應報文使用的 http 版本、數字狀態碼,以及描述操做狀態的文本形式的緣由短語。文檔
全部的 http 報文均可以分爲 兩類:請求報文(request message) 和 響應報文(response message)。請求報文會向 web 服務器請求一個動做,響應報文會將請求的結果返回客戶端。
請求報文格式:
<method> <request-url> <version> <headers> <entity-body>
響應報文格式:(注意,只有起始行的語法會有所不一樣)
<version> <status> <reason-phrase><headers> <entity-body>
方法(method)
客戶端但願服務器對資源執行的動做。eg: get、head 或者 post。
GET : 從服務器獲取一份文檔; HEAD : 只從服務器獲取文檔的首部; POST : 向服務器發送須要處理的數據; PUT : 將請求的主體部分存儲在服務器上; TRACE : 對可能通過代理服務器傳送到服務器上去的報文進行追蹤; OPTIONS : 決定能夠在服務器上執行哪些方法; DELETE : 從服務器上刪除一份文檔;
請求url(request-url)
命名了所請求資源或者url 路徑組件的完整 url。
版本(version)
報文所使用的 http 版本,格式 如: HTTP/<major>.<minor>,major 主版本號,minor 次版本號,都爲整數。
狀態碼(status-code)
狀態碼是在每條響應報文的起始行中返回的,會返回一個數字狀態,通常是三位數,這三位數字描述了請求過程當中所發生的狀況。每一個狀態碼的第一位數字都用於描述狀態的通常類別(「成功」、「出錯」等)。
緣由短語(reason-phrase)
緣由短語和狀態碼是成對出現的,是響應起始行中的最後一個組件,爲狀態碼提供了文本形式的解釋,即以短語文本描述 數字狀態碼。
首部(header)
能夠有 0個 或者 多個首部,每一個首部 都包含一個名字,後面跟着一個冒號(:),而後跟着一個空格,接着跟着一個值 和換行。
實體的主體部分(entity-body)
實體的主體是 http 報文的負荷,就是 http 要傳輸的內容。實體的主體部分包含一個由任意數據組成的數據塊。並非全部的報文都包含實體的主體部分。