在前一篇文章裡
我們介紹了網絡應用和網絡協議的一些基礎知識
現在
讓我們來了解一下WWW服務應用和HTTP網絡協議
歷史上
先後問世了多個具有重大社會影響的電子通信技術
第一個這樣的技術是
世紀
年代發明的電話
電話使得不在同一物理位置的兩人得以實時地口頭交流
它對社會有重大的影響——有好的也有壞的
下一個電子通信技術是
世紀
年代及
年代問世的廣播收音機/電視機
廣播收音機/電視機使得人們能收聽收視大量的音頻和視頻信息
它對社會同樣有重大的影響——有好的也有壞的
改變了人們的生活與工作方式的第三個重大通信技術是web
web最吸引用戶的也許是它的隨選(on demand)操作性
用戶只在想要時收到所要的東西
這一點不同於廣播收音機/電視機
廣播收音機/電視機的用戶是在其內容供應商播出內容期間被迫收聽收視
除了隨選操作性
Web還有許多大家喜愛的其他精彩特性
任何個人都可以極其容易地在Web上公布任何信息;任何人都可能以極低的成本成為發行人
超鏈接和搜索引擎幫助我們在Web站點的海洋中導航
圖形和動畫刺激著我們的感官
表單
Java小應用程序
Activex控件以及其他許多設備使得我們能與Web頁面和站點交互
Web還越來越普遍地提供存放在因特網中的
可隨選訪問(即點播)的大量音頻和視頻材料的菜單接口
HTTP概貌 Web的應用層協議HTTP是Web的核心
HTTP在Web的客戶程序和服務器程序中得以實現
運行在不同端系統上的客戶程序和服務器程序通過交換HTTP消息彼此交流
HTTP定義這些消息的結構以及客戶和服務器如何交換這些消息
在詳細解釋HTTP之前
我們先來回顧一些web中的術語
Web頁面(web page
也稱為文檔)由多個對象構成
對象(object)僅僅是可由單個URL尋址的文件
例如HTML文件
JPG圖像
GIF圖像
JAVA小應用程序
語音片段等
大多數Web頁面由單個基本HIML文件和若干個所引用的對象構成
例如
如果一個Web頁面包含HTML文本和
個JPEG圖像
那麼它由
個對象構成
即基本H
ML文件加
個圖像
基本HTML文件使用相應的URL來引用本頁面的其他對象
每個URL由存放該對象的服務器主機名和該對象的路徑名兩部分構成
例如
在如下的URL中:
/urlpath/picture
qif
是一個主機名
/urlpath/picture
qif是一個路徑名
浏覽器是web的用戶代理
它顯示所請求的Web頁面
並提供大量的導航與配置特性
Web浏覽器還實現HTTP的客戶端
因此在web上下文中
我們會從進程意義上互換使用
浏覽器
和
客戶
兩詞
流行的Web浏覽器有Netscape Communicator
firefox和微軟的IE等
Web服務器存放可由URL尋址的Web對象
web服務器還實現HTTP的服務器端
流行的Web服務器有Apache
微軟的IIS以及Netscape Enterprise Server
Netcraft提供了web服務器的概要剖析[Netcrft
]
HTTP定義Web客戶(即浏覽器)如何從web服務器請求Web頁面
以及服務器如何把Web頁面傳送給客戶
下圖展示了這種請求—響應行為
當用戶請求一個Web頁面(譬如說點擊某個超鏈接)時
浏覽器把請求該頁面中各個對象的HTTP請求消息發送給服務器
服務器收到請求後
以運送含有這些對象HTTP響應消息作為響應
到
年底
基本上所有的浏覽器和Web服務器軟件都實現了在RFC
中定義的HTTP/
版本
年初
一些Web服務器軟件和浏覽器軟件開始實現在RFC
中定義的HTTP/
版本
H
TP/
與HTTP/
後向兼容;運行
版本的web服務器可以與運行
版本的浏覽器
對話
運行
版本的浏覽器也可以與運行
版本的Web服務器
對話
圖 HTTP請求與響應行為 HTTP/
和HTTP/
都把TCP作為底層的傳輸協議
HTTP客戶首先發起建立與服務器TCP連接
一旦建立連接
浏覽器進程和服務器進程就可以通過各自的套接字來訪問TCP
如前所述
客戶端套接字是客戶進程和TCP連接之間的
門
服務器端套接字是服務器進程和同一TCP連接之間的
門
客戶往自己的套接字發送HTTP請求消息
也從自己的套接字接收HTTP響應消息
類似地
服務器從自己的套接字接收HTTP請求消息
也往自己的套接字發送HTTP響應消息
客戶或服務器一旦把某個消息送入各自的套接字
這個消息就完全落入TCP的控制之中
TCP給HTTP提供一個可靠的數據傳輸服務;這意味著由客戶發出的每個HTTP請求消息最終將無損地到達服務器
由服務器發出的每個HTTP響應消息最終也將無損地到達客戶
我們可從中看到分層網絡體系結構的一個明顯優勢——HTTP不必擔心數據會丟失
也無需關心TCP如何從數據的丟失和錯序中恢復出來的細節
這些是TCP和協議棧中更低協議層的任務
TCP還使用一個擁塞控制機制
該機制迫使每個新的TCP連接一開始以相對緩慢的速率傳輸數據
然而只要網絡不擁塞
每個連接可以迅速上升到相對較高的速率
這個慢速傳輸的初始階段稱為緩啟動(slow start)
需要注意的是
在向客戶發送所請求文件的同時
服務器並沒有存儲關於該客戶的任何狀態信息
即便某個客戶在幾秒鐘內再次請求同一個對象
服務器也不會響應說:自己剛剛給它發送了這個對象
相反
服務器重新發送這個對象
因為它已經徹底忘記早先做過什麼
既然HTTP服務器不維護客戶的狀態信息
我們於是說HTTP是一個無狀態的協議(stateless protocol)
非持久連接和持久連接 HTTP既可以使用非持久連接(nonpersistent connection)
也可以使用持久連接(persistent connection)
HTTP/
使用非持久連接
HTTP/
默認使用持久連接
非持久連接 讓我們查看一下非持久連接情況下從服務器到客戶傳送一個Web頁面的步驟
假設該貝面由
個基本HTML文件和
個JPEG圖像構成
而且所有這些對象都存放在同一台服務器主機中
再假設該基本HTML文件的URL為:/somepath/l
下面是具體步騾:
HTTP客戶初始化一個與服務器主機中的HTTP服務器的TCP連接
HTTP服務器使用默認端口號
監聽來自HTTP客戶的連接建立請求
HTTP客戶經由與TCP連接相關聯的本地套接字發出—個HTTP請求消息
這個消息中包含路徑名/somepath/l
HTTP服務器經由與TCP連接相關聯的本地套接字接收這個請求消息
再從服務器主機的內存或硬盤中取出對象/somepath/l
經由同一個套接字發出包含該對象的響應消息
HTTP服務器告知TCP關閉這個TCP連接(不過TCP要到客戶收到剛才這個響應消息之後才會真正終止這個連接)
HTTP客戶經由同一個套接字接收這個響應消息
TCP連接隨後終止
該消息標明所封裝的對象是一個HTML文件
客戶從中取出這個文件
加以分析後發現其中有
個JPEG對象的引用
給每一個引用到的JPEG對象重復步騾
浏覽器在接收web頁面的同時把它顯示給用戶
不同的浏覽器可能會以略有不同的方式解釋(也就是向用戶顯示)同一個web頁面
HTTP與客戶如何解釋Web頁面沒有任何關系
其規范([RFC
]和[RFC
I)僅僅定義HTTP客戶程序和服務器程序之間的通信協議
上述步驟之所以稱為使用非持久連接
原因是每次服務器發出一個對象後
相應的TCP連接就被關閉
也就是說每個連接都沒有持續到可用於傳送其他對象
每個TCP連接只用於傳輸一個請求消息和一個響應消息
就上述例子而言
用戶每請求一次那個web頁面
就產生
個TCP連接
在上述步騾中
我們有意不說清客戶是通過
個串行的TCP連接先後取得所有JPEG對象
還是通過並行的TCP連接同時取得其中某些JPEG對象
實際上
現今的浏覽器允許用戶通過配置來控制並行連接的程度
大多數浏覽器默認可以打開
到
個並行的TCP連接
每個連接處理一個請求—響應事務
用戶要是喜歡
可以把最大並行連接數設為l
那樣的話這
個連接是串行地建立的
我們將在第
章看到
使用並行連接可以縮短響應時間
繼續介紹之前
先估算一下從客戶請求基本HTML文件到它收到該文件所經歷的時間
為此我們定義往返時間(round trip time
簡稱RTT)
它是一個小分組從客戶主機游動到服務器主機再返回客戶主機所花的時間
RTT包括分組傳播延遲
在中間路由器和交換機土的分組排隊延遲以及分組處理延遲
下面考慮用戶點擊某個超鏈接時會發生什麼
用戶的點擊導致浏覽器發起建立一個與Web服務器的TCP連接;這裡涉及·—次
三次握手
過程——首先是客戶向服務器發送一個小的冗余消息
接著是服務器向客戶確認並響應以一個小的TCP消息
最後是客戶向服務器回確認
三次握手過程的前兩次結束時
流逝的時間為
個RTT
此時客戶把HTTP請求消息發送到TCP連接中
客戶接著把三次握手過程最後一次中的確認捎帶在包含這個消息的數據分節中發送以去
服務器收到來自TCP連接的請求消息後
把相應的HTML文件發送到TCP連接中
服務器接著把對早先收到的客戶請求的確認捎帶在包含該HTML文件的數據分節中發送出去
這個HTTP請求順應交互也花去
個RTT時間
因此
總的響應時間粗略地算是
個RTT加上服務器發送這個HTMI文件的時間
持久連接 非持久連接有些缺點
首先
客戶得為每個待請求的對象建立並維護一個新的連接
對於每個這樣的連接
TCP得在客戶端和服務器端分配TCP緩沖區
並維持TCP變量
對於有可能同時為來自數百個不同客戶的請求提供服務的web服務器來說
這會嚴重增加其負擔
其次
如前所述
每個對象都有
個RTT的響應延長——一個RTT用於建立TCP連接
另—個RTT用於請求和接收對象
最後
每個對象都遭受TCP緩啟
From:http://tw.wingwit.com/Article/os/fwq/201311/10280.html