第 1 部分 生成 HTTP 請求訊息
1.1探索之旅從輸入網址開始
我們的探索之旅從在瀏覽器中輸入網址開始。網址,準確來說應該叫 URL。常見的網址開頭有:http:、ftp:、file:、mailto:等等。
之所以有各種各樣的 URL,是因為儘管我們通常是使用瀏覽器來訪問 Web 伺服器的,但實際上瀏覽器並不只有這一個功能,它也可以用來在 FTP 伺服器上下載和上傳檔案,同時也具備電子郵件客戶端的功能。可以說,瀏覽器是一個具備多種客戶端功能的綜合性客戶端軟體,因此它需要一些東西來判斷應該使用其中哪種功能來訪問相應的資料,而各種不同的 URL 就是用來幹這個的,比如訪問 Web 伺服器時用 “http:”,而訪問 FTP 伺服器時用“ftp:”等。
下圖列舉了仙子阿網際網路中常見的幾種 URL, 根據訪問目標的不同, URL 的寫法也會不同。例如在訪問 Web 伺服器和 FTP 伺服器時,URL 中會包含伺服器的域名和要訪問的檔案的路徑名等,而發郵件的 URL 則包含收件人的郵件地址。此外,根據需要, URL 中還會包含使用者名稱、密碼、伺服器埠號等資訊。
1.2.瀏覽器先要解析 URL
瀏覽器要做的第一步工作就是對 URL 進行解析,從而生成傳送給 Web 伺服器的請求訊息。URL 的格式會隨著協議的不同而不同,因此下面我們以訪問 Web 伺服器的情況為例進行講解。
根據 HTTP 的規格, URL 包含圖 1.2(a)中的幾種元素。當對 URL 進行解析時,首先需要按照圖 1.2(a)的格式將其中的各個元素拆分出來,例如圖 1.2(b)中的 URL 會拆分成圖 1.2(c)的樣子。然後,通過拆分出來的這些元素,我們就能夠明白 URL 代表的含義。例如,我們來看拆分結果圖1.2(c),其中包含 Web 伺服器名稱
1.3. HTTP 的基本思路
解析完 URL 之後,我們就知道應該要訪問的目標在哪裡了。接下來,瀏覽器會使用 HTTP 協議來訪問 Web 伺服器,不過在介紹這一環節之前,我們先來講一講 HTTP 協議到底是怎麼回事。 HTTP 協議定義了客戶端和伺服器之間互動的訊息內容和步驟,其基本思路非常簡單。首先,客戶端會想伺服器傳送請求訊息(圖1.4)。請求訊息中包含的內容是“對什麼”和“進行怎樣的操作”兩個部分。其中相當於“對什麼” 的部分稱為 URI。一般來說, URI 的內容是一個存放網頁資料的檔案或者是一個 CGI 程式的檔名,例如 “/dir1/file1.html”“/dir1/program1.cgi”等等。不過,URI 不僅限於此,也可以直接使用 “http:” 開頭的 URL 來作為 URI。換句話說就是,這裡可以寫各種訪問目標,而這些訪問目標統稱為 URI。 相當於接下來“進行怎樣的操作”的部分稱為方法。方法表示需要讓 Web 伺服器完成怎樣的工作,其中典型的例子包括讀取 URI 表示的資料、將客戶端輸入的資料傳送給 URI 表示的程式等。表 1.1 列舉了主要的方法,通過這張表大家應該能夠理解通過方法可以執行怎樣的操作。