HTTP報文是什麼樣子的?

2022-06-16 05:24:10 字數 2418 閱讀 2131

一、報文結構

http請求報文和響應報文結構基本相同,都是由以下三個部分組成:

1. 起始行:描述請求或者響應頭的基本資訊

2. 頭部字段集合:使用key-value形式描述報文

規定:http協議必須要有heaher,可以沒有body,而且再header和正文之間要用乙個空行隔開。

所以,乙個完整的http報文是這樣的:

起始行和頭部字段集合對應人的頭,空格對應人的脖子,訊息正文對應人的身體。

在其中我們標出了起始行和頭部字段集合,但是並沒有訊息正文部分,因此我們就發現這個http報文是乙個大頭兒子,身子小頭部大,在很多時候header頭不宜過大,會影響閱讀。

現在我們對http報文三個部分分別進行詳細學習。

1. 起始行,也被稱為請求行,它的作用是描述了客戶端要如何操作服務端資源,它由三個部分組成:

(1)請求方法:表示對資源的操作,例如get、post等,上面起始行中用的方法是get

(3)版本號:表示報文使用的http版本, 上面起始行中用的版本號是http/1.1

2. 狀態行,現在來介紹起始行的孿生兄弟——狀態行,表示伺服器響應的狀態

(1)版本號:表示報文使用的http版本

(2)狀態碼:乙個三位數,表示伺服器的響應結果,這裡返回了304,表示瀏覽器要訪問的資源通過快取查詢到了,因此從快取中返回

(3)原因:作為狀態嗎的補充,更詳細的解釋數字。這裡是not modified,表示「沒有修改」

3. 頭部字段

請求頭或者響應頭加上頭部資訊欄位和空格就組成了請求或者響應頭部字段。

頭部字段使用注意事項:

(1)欄位名不區分大小寫,例如「host」也可以寫成「host」,但首字母大寫的可讀性更好;

(2)欄位名裡不允許出現空格,可以使用連字元「-」,但不能使用下劃線「_」。例如,「test-name」是合法的欄位名,而「test name」「test_name」是不正確的欄位名;

(3)欄位名後面必須緊接著「:」,不能有空格,而「:」後的字段值前可以有多個空格;

(4)欄位的順序是沒有意義的,可以任意排列不影響語義;

我們這裡來簡單測試一下頭部資訊正確或者錯誤會返回什麼資訊,可以在實驗環境裡用 telnet 連線 openresty 伺服器試一下,手動傳送 http 請求頭,試驗各種正確和錯誤的情況。

首先將web伺服器開啟,www下的start點選後list開啟伺服器,接著win+r開啟命令列視窗,輸入telnet,進入初始化頁面:

然後輸入指令:open www.chrono.com 80連線上了伺服器。

接下來輸入如下資訊:

首先模擬第乙個http請求,輸入後點選兩次enter鍵,得到相應結果,如下所示:

訪問成功,說明主機位址前加入空格對http請求沒有影響。

然後再來試一下第二種再host後面加入請求:

訪問失敗,說明host後面不能加任何空格。驗證了上面的說法。

二、課後習題

1. 如果拼 http 報文的時候,在頭字段後多加了乙個 crlf,導致出現了乙個空行,會發生什麼?

答:空行後面的內容被當成了報文主體

講頭字段時說「:」後的空格可以有多個,那為什麼絕大多數情況下都只使用乙個空格呢?

答:這時約定俗成的預設用法,按照rfc標準,空格可以是零個或多個,但乙個空格已經成了約定俗成的習慣。

至此,結束。

未來的電視是什麼樣子?

未來的電視是什麼樣子?假設現在是2030年,那麼此時的電視是什麼樣子呢?電視的外觀 1.兩級分化 未來的電視外觀將走向兩個極端 乙個極端是越來越大。這個是很容易看到的趨勢,現有電視也是遵循這這個思路在發展。乙個極端是越來越小。未來電視的另外一種外表可能是一副眼鏡,你帶上它就可以收看了 就像周星星在國...

未來的無盤網咖是什麼樣子?

昨天下午,我去一間不大的網咖了解情況 我確實不知道這間網咖算不算是一間規模較大的,因為,在此以前,我從未進過網咖大門 這間網咖大概有3 4百台電腦,內部裝修得很華麗,給人的感覺不錯。他們使用什麼作業系統?上網咖的人,在玩什麼?我一進去,就問網咖前台收費的管理員 女 多少錢一小時?回答 3塊。她接著向...

10年之後的PC是什麼樣子

十年之後的pc將會只有乙個cpu 應該叫做pt personal quanta terminal 這個pt也是需要能量來執行的,你可以選擇多吃點飯然後將多餘能量share給它,或者將它放到太陽下曬曬,說不定還可以將多餘的能量share給你。你就可以高興的時候多吃點飯,不高興的時候多和幾個外星球美女談...