HTTP報文格式 -《HTTP權威指南》閱讀筆記

        HTTP報文是簡單的格式化數據塊,主要由三個部分組成:起始行、首部、主體。
        所有的HTTP報文都可以分爲兩類:請求報文、響應報文。

一.起始行

        所有的HTTP報文都以一個起始行作爲開始。請求報文的起始行說明了要做什麼,響應報文的起始行說明發生了什麼。
請求報文
        上圖是一個請求報文的截圖,它的第一行就是起始行,也被稱爲請求行,它包含了3個部分:方法、URL、HTTP版本號。
        1.方法。方法用來告知服務器要做些什麼,有些方法的請求報文中有主體,有些沒有。
        上圖請求報文使用是其中的GET方法,常用的HTTP方法如下:

方法 描述 是否包含主體
GET 從服務器獲取一份文檔,如訪問某個網站首頁
HEAD 只從服務器獲取文檔的首部,可以用來查看資源是否存在、是否被修改等
POST 向服務器發送需要處理的數據,如form表單數據
PUT 讓服務器用請求主體去修改對應URL的內容,如果URL不存在,就創建一個用請求URL命名的新文檔
TRACE 對報文進行追蹤,目的地服務器會返回一個TRACE響應,並在響應主體中攜帶原始請求報文
OPTIONS 用來查看服務器支持的通用於各種資源的方法,或者某個指定資源的方法
DELETE 讓服務器刪除請求URL所指定的資源。但HTTP規範允許服務器在不通知客戶端的情況下,撤銷請求。

        2.URL。告知服務器要對哪個資源執行請求方法。上圖請求報文告知服務器要對根目錄下的文件執行GET方法。
        3.HTTP版本號。告知服務器客戶端使用的是哪種HTTP。上圖請求報文告知服務器,客戶端使用的版本是HTTP/1.1。在HTTP/1.0之前,並不要求請求行中包含HTTP版本號。
響應報文
        上圖是一個響應報文的截圖,它的第一行就是起始行,也被成爲響應行,它包含了3個部分:HTTP版本號、狀態碼、原因短語。
        1.HTTP版本號。表明響應報文使用的是哪種HTTP。上圖響應報文表明使用的版本是HTTP/1.1。在HTTP/1.0之前,並不要求響應行中包含HTTP版本號。使用版本號是爲了給HTTP應用程序提供判斷條件:在與低版本的HTTP應用程序通信時,不能使用任何高版本的新特性。
        2.狀態碼。告知客戶端發生了什麼事情。上圖響應報文中的200狀態碼,表明響應成功。目前狀態碼分類如下:

整體範圍 已定義範圍 分類
100~199 100~101 信息提示
200~299 200~206 成功
300~399 300~305 重定向
400~499 400~415 客戶端錯誤
500~599 500~505 服務器端錯誤

        當前的HTTP版本只爲每類狀態碼定義了幾個代碼。如果收到不認識的狀態碼,可能是人爲基於當前協議的擴展定義。可以根據它所處範圍,作爲那個類別中一個普通成員來處理。
        3.原因短語。原因短語是響應起始行的最後一個組件。它爲狀態碼提供了文本形式的解釋,也是和狀態碼成對出現的,可以用來說明在請求期間發生了什麼。

二.首部

        跟在起始行後面的就是首部。HTTP首部字段向請求和響應報文中添加了一些附加信息,它們本質上來說就是一些名/值對的列表。首部和方法配合工作,共同決定了客戶端和服務器能做什麼事情。
        HTTP規範定義了幾種首部字段,應用程序也可以隨意發明自己所用的首部。HTTP首部可以分爲五個主要的類型:
        1.通用首部。有些首部提供了和報文相關的最基本的信息,它們被稱爲通用首部。HTTP/1.0後又引入了通用緩存首部,允許HTTP應用程序緩存對象本地副本,這樣就不用總是直接從源端服務器獲取了。
        2.請求首部。只在請求報文中有意義的首部,用於說明是誰或什麼在發送請求、請求源自何處,或者客戶端的喜好及能力。
        3.響應首部。只在響應報文中有意義的首部,爲客戶端提供了一些額外信息,比如誰在發送響應,響應者的功能,甚至與響應相關的一些特殊指令。
        4.實體首部。實體首部提供了有關實體及其內容的大量信息,從有關對象類型的信息,到能夠對資源使用的各種有效的請求方法。總之,實體首部可以告知報文的接收者它在對什麼進行處理。
        5.擴展首部。擴展首部是非標準的首部,由應用程序開發者創建,但還沒被添加到已批准的HTTP規範中去。即使不知道這些擴展首部的含義,HTTP程序也要接受它們並對其進行轉發。

三.主體

        HTTP報文的第三部分是可選的實體主體部分。實體的主體是HTTP報文的負荷,也就是HTTP要傳輸的內容。HTTP報文可以承載很多類型的數據:圖片、視頻、HTML文檔、軟件應用程序等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章