HTTP報文如何連線
TCP/IP
HTTP 是個應用層協議。HTTP 無需操心網路通訊的具體細節;它把聯網的細節都 交給了通用、可靠的因特網傳輸協議 TCP/IP。 TCP 提供了:
• 無差錯的資料傳輸;
• 按序傳輸(資料總是會按照發送的順序到達);
• 未分段的資料流(可以在任意時刻以任意尺寸將資料傳送出去)。
HTTP 網路協議棧
連線、IP地址及埠號
在 HTTP 客戶端向伺服器傳送報文之前,需要用網際協議(Internet Protocol,IP) 地址和埠號在客戶端和伺服器之間建立一條 TCP/IP 連線。
在 TCP 中,你需要知道伺服器的 IP 地址,以及與伺服器上執行的特定軟體相關的 TCP 埠號。
這就行了,但最初怎麼獲得 HTTP 伺服器的 IP 地址和埠號呢?當然是通過 URL 了!我們前面曾提到過,URL 就是資源的地址,所以自然能夠為我們提供儲存資源 的機器的 IP 地址。
我們來看幾個 URL:
http://207.200.83.29:80/index.html
http://www.netscape.com:80/index.html
http://www.netscape.com/index.html
第一個 URL 使用了機器的 IP 地址,207.200.83.29 以及埠號 80。
第二個 URL 沒有使用數字形式的 IP 地址,它使用的是文字形式的域名,或者稱為 主機名(www.netscape.com)。主機名就是 IP 地址比較人性化的別稱。可以通過一 種稱為域名服務(Domain Name Service,DNS)的機制方便地將主機名轉換為 IP 地址,這樣所有問題就都解決了。
最後一個 URL 沒有埠號。HTTP 的 URL 中沒有埠號時,可以假設預設埠號是 80。
基本的瀏覽器連線處理
步驟如下:
(a) 瀏覽器從 URL 中解析出伺服器的主機名;
(b) 瀏覽器將伺服器的主機名轉換成伺服器的 IP 地址;
(c) 瀏覽器將埠號(如果有的話)從 URL 中解析出來;
(d) 瀏覽器建立一條與 Web 伺服器的 TCP 連線;
(e) 瀏覽器向伺服器傳送一條 HTTP 請求報文;
(f) 伺服器向瀏覽器回送一條 HTTP 響應報文;
(g) 關閉連線,瀏覽器顯示文件。