1. 程式人生 > >網絡是怎樣連接的-第一章-生成HTTP請求消息(下)

網絡是怎樣連接的-第一章-生成HTTP請求消息(下)

顯示圖片 大致 相關 有效 1.5 文件內容 ctu 怎樣 消息頭

1.1.5 生成 HTTP 請求消息

理解了 HTTP 的基本知識之後,讓我們回到對瀏覽器本身的探索中來。

對 URL 進行解析之後,瀏覽器確定了 Web 服務器和文件名,接下來就是根據這些信息來生成 HTTP 請求消息了。實際上,HTTP 消息在格式上是有嚴格規定的,因此瀏覽器會按照規定的格式來生成請求消息,如下圖所示:

技術分享圖片

請求行

請求消息的第一行稱為請求行,這裏的重點是最開頭的方法,方法可以告訴 Web 服務器它應該進行怎樣的操作。

不過這裏必須先解決一個問題,那就是方法有很多種,我們必須先判斷應該選用其中的哪一種,解決這個問題的關鍵在於瀏覽器的工作狀態。

這次探索之旅是從在瀏覽器頂部的地址欄中輸入網址開始的,但瀏覽器並非只有在這一種場景下才會向 Web 服務器發送請求消息。

比如點擊網頁中的超級鏈接或者在表單中填寫信息後點擊“提交”按鈕,這些場景都會觸發瀏覽器的工作,而選用哪種方法也是根據場景來確定的。

三種場景

我們的場景是在地址欄中輸入網址並顯示網頁,因此這裏應該使用GET方法。

點擊超級鏈接的場景中也是使用 GET 方法。

如果是表單,在 HTML源代碼中會在表單的屬性中指定使用哪種方法來發送請求,可能是 GET 也可能是 POST,如下圖所示

註意

GET 方法能夠發送的數據只有幾百個字節,如果表單中的數據超過這一長
度,則必須使用 POST 方法來發送。

技術分享圖片

寫好方法之後,加一個空格,然後寫 URI。

URI 部分的格式如下,一般是文件和程序的路徑名。

 /< 目錄名 >/…/< 文件名 >

前面已經講過,路徑名一般來說已經包含在 URL 中了,因此只要從URL 中提取出來原封不動地寫上去就好了。

第一行的末尾需要寫上 HTTP 的版本號,這是為了表示該消息是基於哪個版本的 HTTP 規格編寫的。到此為止,第一行就結束了。

消息頭

第二行開始為消息頭。盡管通過第一行我們就可以大致理解請求的內容,但有些情況下還需要一些額外的詳細信息,而消息頭的功能就是用來存放這些信息。

消息頭的規格中定義了很多項目,如日期、客戶端支持的數據類型、語言、壓縮格式、客戶端和服務器的軟件名稱和版本、數據有效期和最後更新時間等。

這些項目表示的都是非常細節的信息,不必全部弄明白。大多數情況下消息頭的長度為幾行到十幾行不等。

消息體

寫完消息頭之後,還需要添加一個完全沒有內容的空行,然後寫上需要發送的數據。

這一部分稱為消息體,也就是消息的主體。

在使用GET 方法的情況下,僅憑方法和 URI,Web 服務器就能夠判斷需要進行怎樣的操作,因此消息體中不需要填寫任何數據。消息體結束之後,整個消息也就結束了。

當使用 POST 方法時,需要將表單中填寫的信息寫在消息體中。到此為止,請求消息的生成操作就全部完成了。

1.1.6 發送請求後會收到響應

當我們將上述請求消息發送出去之後,Web 服務器會返回響應消息。

關於響應消息我們將在第 6 章詳細介紹,這裏先粗略地了解一下。

響應消息的格式以及基本思路和請求消息是相同的,如1.15中圖b所示,差別只在第一行上。

在響應消息中,第一行的內容為狀態碼和響應短語,用來表示請求的執行結果是成功還是出錯。

狀態碼和響應短語表示的內容一致,但它們的用途不同。

狀態碼是一個數字,它主要用來向程序告知執行的結果,如下表所示。

相對地,響應短語則是一段文字,用來向人們告知執行的結果。

技術分享圖片

返回響應消息之後,瀏覽器會將數據提取出來並顯示在屏幕上,我們就能夠看到網頁的樣子了。

如果網頁的內容只有文字,那麽到這裏就全部處理完畢了,但如果網頁中還包括圖片等資源,則還有下文。

遇到圖片時的處理

當網頁中包含圖片時,會在網頁中的相應位置嵌入表示圖片文件的標簽的控制信息。

瀏覽器會在顯示文字時搜索相應的標簽,當遇到圖片相關的標簽時,會在屏幕上留出用來顯示圖片的空間,然後再次訪問 Web 服務器,按照標簽中指定的文件名向 Web 服務器請求獲取相應的圖片並顯示在預留的空間中。

這個步驟和獲取網頁文件時一樣,只要在 URI 部分寫上圖片的文件名並生成和發送請求消息就可以了。

需要多少文件發送多少請求

1 條請求消息中只能寫 1 個 URI。如果需要獲取多個文件,必須對每個文件單獨發送 1 條請求。

瀏覽器與 Web 服務器之間交互消息的一個完整實例

這個例子中,我們需要獲取一張名為 sample1.htm 的網頁,網頁中包含一張名為 picture.jpg 的圖片,圖中展示了這個過程中產生的消息。

技術分享圖片

①請求消息的內容

技術分享圖片

②將文件內容返回給客戶端的響應消息

技術分享圖片

③用於獲取圖片文件的請求消息

技術分享圖片

④圖片文件內容返回給客戶端的響應消息

技術分享圖片

網絡是怎樣連接的-第一章-生成HTTP請求消息(下)