HTTP協議詳解

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是因特網上應用最爲廣泛的一種網絡傳輸協議,所有的WWW文件都必須遵守這個標準。HTTP是一個基於TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等),是Web的核心。HTTP協議由兩部分程序實現:客戶程序和服務程序,兩者通過HTTP報文會話。

HTTP是媒體獨立的:這意味着,只要客戶端和服務器知道如何處理的數據內容,任何類型的數據都可以通過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型。HTTP是無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。


HTTP請求報文格式:


HTTP 請求報文的第一行 叫做請求行 (request line) ,其後繼的行叫做首部行( header line) 。 

請求行有 3 個字段:方法字段、 URL 字段和 HTTP 版本字段。 方法宇段可以取幾種 不同的值,包括 GET、 POST、 HEAD、 PUT 和 DELETE。絕大部分的 HTTP 請求報文使用 GET 方法。 當瀏覽器請求一個對象時,使用 GET 方法,在 URL 字段帶有請求對象的標識。 在本例中,該瀏覽器正在請求對象/somedirl page. html。 其版本字段是自解釋的;在本例 中,瀏覽輯實現的是 HTTP/l. 1 版本。 

首部行 Host: www. someschool. edu 指明瞭對象所在的主機。

 User-agent: 用來 指明用戶代理,即向服務器發送請求的瀏覽器的類型。 這裏瀏覽器類型是 Mozilla/5. 0 , 即 Firefox 瀏覽器。 

ConnecLion: 用來選擇開啓或者關閉TCP持續連接,這裏close表示關閉。

 Accept-language : 表示用戶想得到該對象的語言版本。


HTTP報文字段的通用格式如下:



HTTP響應報文格式:



 它有三個部分:一個初始狀態行 (sLatus line) , 6 個 首部行 (header 1ine) ,然後是實體體 (enLity body) 。 

實體體部分是報文的主要部分,即它 包含了所請求的對象本身(表示爲 dala dala data data... ) 。 

狀態行有 3 個字段:協議版本 宇段、狀態碼和相應狀態信息。 在這個例子中,狀態行指示服務器正在使用 HTTP/l. 1, 並且一切正常。

首部行:Connection: close 首部行告訴客戶,發送完報文後 將關閉該 TCP 連接

 Date: 響應報文產生的日期和時間

 Server: 首部行指示該報文 是由一臺 Apache Web 服務器產生的.它類似於 HTTP 請求報文中的 User-agent

Last- Moclified: 首部行指示了對象創建或者最後修改的日期和時間。 

Conlenl-Length: 首部行指示了被髮送對象中的字節數

 Conlent-Type: 首部行指示了實體體中的對象是 HTML文本


持久連接和非持久連接:

每個請求 /響應對是經一個單獨的 TCP 連接發送,該應用程序被稱爲使用非持續連接( non- persistent connection) ;

所有的請求及其響應經相同的 TCP 連接發送,採用前一種方法採 用後一種方法,該應用程序被稱爲使用持續連接( persistent connection) 。 

下面我們舉一個例子來比較HTTP的持久連接和非持久連接。

假設我們現在需要訪問一個網頁,該頁面包含1個基本HTML文件和10張jpg圖片文件,一共11個對象。

如果採用非持久連接,每個TCP連接只能傳輸1個請求報文和1個響應報文。那麼需要建立11個TCP連接來傳輸。

如果採用持久連接,一個TCP連接能傳輸多個請求報文和多個響應報文。那麼只需建立1個TCP連接來傳輸。

兩種情況比較,持久連接相對於非持久連接大大減少了TCP連接建立的時間,當頁面的對象數目達到一定值時,兩者時間差異非常大。

當然,持久連接也是缺點的,由於持久連接的性質,會給服務器帶來負擔。

瀏覽器一般默認選擇持久連接。

用戶與服務器的交互技術:cookie

基於Internet的各種服務系統應運而生,建立商業站點或者功能比較完善的個人站點,常常需要記錄訪問者的一些信息;在用戶瀏覽網頁時,一些信息會自動保存爲cookie,存放於瀏覽器對應目錄下。當下一次訪問網頁時,網站會通過cookie來得到訪問者的信息。

Web緩存服務器

Web 緩存器 (Web cache) 也叫代 理服務器 (proxy server) ,它是能夠代表初始 Web 服務器來滿足HTTP請求的網絡實體。Web緩存器有自己的磁盤存儲空間,並在存儲空間中保存最近請求過的對象的副本。 Web 緩存器通常由 ISP 購買並安裝。 例如, 一所大學可能在它的校園網上安裝一臺緩存器,並且將所有校園網上的用戶瀏覽器配置爲指向它。 或者,一個主要的住宅 ISP (例 如 AOL) 可能在它的網絡上安裝一臺或多臺 Weh 緩存器,並且預先配置其配套的瀏覽器指向這些緩存器。

Web緩存服務器工作原理如下:

假設瀏覽器正在請求對象 http://www.someschool. edu/campus.giI,步驟如下:

1.瀏覽器建立一個到 Web 緩存器的 TCP 連接,並向 Web 緩存器中的對象發送一個 HTTP 請求。

2.Web 緩存器進行檢查,看看本地是否存儲了該對象副本。如果有,Web 緩存器就向客戶瀏覽器用 HTTP 響應報文返回該對象。 

3.如果 Web 緩存器中沒有該對象,它就打開一個與該對象的初始服務器(如 www. someschool. edu) 的 TCP 連接。Web 緩存器則在這個緩存器到服務器的 TCP 連接上發送一個對該對象的 HTTP 請求。 在收到該請求後,初始服務器向該Web 緩存器發送具有該對象的 HT'迴響應。 

4.當 Web 緩存器接收到該對象時,它在本地存儲空間存儲一份副本,並向客戶的瀏覽器用盯TP 響應報文發送該副本(通過現有的客戶瀏覽器和Web 緩存器之間的 TCP 連接) 

在internet上部署 Web 緩存器有兩個原因。首先,Web 緩存器可以大大減少對客戶請求的響應時間,特別是當客戶與初始服務器之間的瓶頸帶寬遠低於客戶與 Web 緩存器之 間的瓶頸帶寬時更是如此。 如果在客戶與 Web 緩存器之間有一個高速連接(情況常常如此) ,並且如果用戶所請求的對象在 Web 緩存器上,則 Web 緩存器可以迅速將該對象交付給用戶。其次,如我們馬上用例子說明的那樣,Web 緩存器能夠大大減少一個機構的接入 鏈路到閒特網的通信量。通過減少通信量,該機構(如一家公司或者一所大學)就不必急於增加帶寬,因此降低了費用。此外, Web 緩存器能從整體上大大減低因特網上的 Web 流量,從而改善了所有應用的性能。 

條件 GET 方法:

儘管高速緩存能減少用戶感受到的響應時間,但也引人了一個新的問題,即存 放在緩存器中的對象副本可能是陳舊的。換句話說,保存在服務器中的對象自該副本緩存在客戶上以後可能已經被修改了。幸運的是, HTTP 協議有一種機制,允許緩存器證實它的對象是最新的。這種機制就是條件 GET (conditional GET) 方法。 如果:①請求報文使用 GET 方法;並且②請求報文中包 含一個"If-Modified -Since"首部行。那麼,這個 HTTP 請求報文就是一個條件GET請求報文。 

條件GET請求包含下面兩個特性:使用GET方法;報文中包含一個If-modified-since首部行。其工作流程如下:

  • 【1】緩存器向服務器發送一個請求報文
  • 【2】服務器向緩存器發送具有被請求對象的響應報文,其中包含Last-Modified首部行
  • 【3】緩存器存儲該對象同時也存儲了Last-Modified中描述的最後修改時間
  • 【4】一段時間過後,客戶機向緩存器發送請求報文來請求對象
  • 【5】緩存器接收到客戶機的報文之後,向服務器發送一個條件GET方法確認對象是否最新
  • 【6】服務器檢查,發送緩存的對象還是最新的之後,向緩存發送一個狀態爲304(Not Modified)的響應
  • 【7】緩存器接收到響應確認最新之後再將對象發送給客戶機
  • 【8】如果服務器檢查發現緩存對象不是最新的,則向緩存器發送響應報文同時把最新的對象附在報文的實體主體中傳送
  • 【9】緩存器接受響應報文之後更新緩存對象併發送給客戶機

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章