1.5 報文
現在我們來快速瀏覽一下http 請求和響應報文的結構。第3 章會深入研究http
報文。http 報文是由一行一行的簡單字串組成的。http 報文都是純文字,不是二進
制**,所以人們可以很方便地對其進行讀寫1。圖1-7 顯示了乙個簡單事務所使用
的http 報文。
起始行首部
主體(a) 請求報文(b) 響應報文
圖1-7 由一行行的簡單文字結構組成的http 報文
注1: 有些程式設計師會抱怨http 的語法解析太困難了,這項工作需要很多技巧,而且很容易出錯,尤其是在
設計高速軟體的時候更是如此。二進位制格式或更嚴格的文字格式可能更容易處理,但大多數http 程
序員都很欣賞http 的可擴充套件性以及可除錯性。
912 | 第1 章
從web 客戶端發往web 伺服器的http 報文稱為請求報文(request message)。從
伺服器發往客戶端的報文稱為響應報文(response message),此外沒有其他型別的
http 報文。http 請求和響應報文的格式很類似。
http 報文包括以下三個部分。
• 起始行
報文的第一行就是起始行,在請求報文中用來說明要做些什麼,在響應報文中說
明出現了什麼情況。
• 首部字段
起始行後面有零個或多個首部字段。每個首部欄位都包含乙個名字和乙個值,為
了便於解析,兩者之間用冒號(:)來分隔。首部以乙個空行結束。新增乙個首
部字段和新增新行一樣簡單。
• 主體
空行之後就是可選的報文主體了,其中包含了所有型別的資料。請求主體中包括
了要傳送給web 伺服器的資料;響應主體中裝載了要返回給客戶端的資料。起
始行和首部都是文字形式且都是結構化的,而主體則不同,主體中可以包含任意
文字。簡單的報文例項
圖1-8 顯示了可能會作為某個簡單事務的一部分傳送的http 報文。瀏覽器請求資
源在圖1-8 中,瀏覽器傳送了一條http 請求報文。這條請求的起始行中有乙個get
命令,且本地資源為/tools.html。這條請求說明它使用的是1.0 版的http 協議。請
求報文沒有主體,因為從伺服器上get 乙個簡單的文件不需要請求資料。
伺服器會回送一條http 響應報文。這條響應中包含了http 的版本號(http/1.0)、
乙個成功狀態碼(200)、乙個描述性的原因短語(ok), 以及一塊響應首部字
段,在所有這些內容之後跟著包含了所請求文件的響應主體。content-length
首部說明了響應主體的長度,content-type 首部說明了文件的mime 型別。
10http概述 | 13
...客戶端www.joes-hardware.com
(a)請求報文
(b)響應報文
請求起始行(命令)
請求首部
沒有請求主體
響應起始行
(狀態)
響應首部
響應主體
圖1-8 的get 事務例項
1.6 連線
概要介紹了http 報文的構成之後,我們來討論一下報文是如何通過傳輸控制協議
(transmission control protocol,tcp)連線從乙個地方搬移到另乙個地方去的。
1.6.1 tcp/ip
http 是個應用層協議。http 無需操心網路通訊的具體細節;它把聯網的細節都
交給了通用、可靠的網際網路傳輸協議tcp/ip。
tcp 提供了:
1114 | 第1 章
• 無差錯的資料傳輸;
• 按序傳輸(資料總是會按照傳送的順序到達);
• 未分段的資料流(可以在任意時刻以任意尺寸將資料傳送出去)。
網際網路自身就是基於tcp/ip 的,tcp/ip 是全世界的計算機和網路裝置常用的層次
化分組交換網路協議集。tcp/ip 隱藏了各種網路和硬體的特點及弱點,使各種型別
的計算機和網路都能夠進行可靠地通訊。
只要建立了tcp 連線,客戶端和伺服器之間的報文交換就不會丟失、不會被破壞,
也不會在接收時出現錯序了。
用網路術語來說,http 協議位於tcp 的上層。http 使用tcp 來傳輸其報文數
據。與之類似,tcp 則位於ip 的上層(參見圖1-9)。
http 應用層
tcp 傳輸層
ip 網路層
網路特有的鏈路介面 資料鏈路層
物理網路硬體物理層
圖1-9 http 網路協議棧
1.6.2 連線、ip位址及埠號
在http 客戶端向伺服器傳送報文之前,需要用網際協議(internet protocol,ip)
位址和埠號在客戶端和伺服器之間建立一條tcp/ip 連線。
建立一條tcp 連線的過程與給公司辦公室的某個人打**的過程類似。首先,要撥
打公司的**號碼。這樣就能進入正確的機構了。其次,撥打要聯絡的那個人的分
機號。tcp 埠號。
這就行了,但最初怎麼獲得http 伺服器的ip 位址和埠號呢?當然是通過url
了!我們前面曾提到過,url 就是資源的位址,所以自然能夠為我們提供儲存資源
12http概述 | 15
第乙個url 使用了機器的ip 位址,207.200.83.29 以及埠號80。
第二個url 沒有使用數字形式的ip 位址,它使用的是文字形式的網域名稱,或者稱為
主機名(www.netscape.com)。主機名就是ip 位址比較人性化的別稱。可以通過一
種稱為網域名稱服務(domain name service,dns)的機制方便地將主機名轉換為ip
最後乙個url 沒有埠號。http 的url 中沒有埠號時,可以假設預設埠號是80。
有了ip 位址和埠號,客戶端就可以很方便地通過tcp/ip 進行通訊了。圖1-10 顯
示了瀏覽器是怎樣通過http 顯示位於遠端伺服器中的某個簡單html 資源的。
(d)連線到161.58.228.45的埠80
(e)傳送一條http get請求
(f)從伺服器讀取http響應
客戶端伺服器
客戶端伺服器
客戶端伺服器
網際網路網際網路
網際網路客戶端伺服器
網際網路(g)關閉連線
screen shot needed
使用者輸入url
(c)獲取埠號(80)
www.joes-hardware.com
(a)獲取主機名
(b)dns
瀏覽器顯示頁面
圖1-10 基本的瀏覽器連線處理
13
HTTP權威指南 HTTP報文
在開始學習本章之前,先來提一些問題,什麼是報文?如何建立報文?怎麼去理解報文?以及報文的用處有哪些?什麼是報文?可以這麼去理解,如果說http是網際網路的信使,那麼http報文就是它用來搬東西的包裹了。一 報文流 http報文是在http應用程式之間傳送的資料塊。這些資料塊以一些文字形式的元資訊開頭...
《HTTP權威指南》學習筆記 HTTP報文
http 網際網路的信使 http報文 信使用來搬東西的包裹 http報文 http應用程式之間傳送的資料塊 組成 元資訊開頭 文字形式,描述報文的內容和含義 可選的資料部分。三部分組成 報文的語法 兩類 請求報文和響應報文 請求報文格式 響應報文格式 起始行 請求行 說明要做些什麼 響應行 說明發...
《HTTP權威指南》學習筆記 HTTP報文
http 網際網路的信使 http報文 信使用來搬東西的包裹 http報文 http應用程式之間傳送的資料塊 組成 元資訊開頭 文字形式,描述報文的內容和含義 可選的資料部分。三部分組成 報文的語法 兩類 請求報文和響應報文 請求報文格式 響應報文格式 起始行 請求行 說明要做些什麼 響應行 說明發...