1. 程式人生 > >HTTP協議及請求/響應模型

HTTP協議及請求/響應模型

1、上網的整個過程

  1. 瀏覽器分析連結指向頁面的URL
  2. 瀏覽器向DNS請求解析www.tsinghua.edu.cn的IP地址
  3. DNS系統解析出清華大學伺服器的地址是166.111.4.100
  4. 瀏覽器與伺服器建立TCP連線
  5. 瀏覽器發出取檔案命令:GET /chn/yxsz/index.html
  6. 伺服器www.tsinghua.edu.cn給出響應,把檔案index.html返回給瀏覽器
  7. 釋放TCP連線
  8. 瀏覽器解析並顯示“清華大學院系設定”檔案index.html中的內容

2、HTTP協議

  Internet的基本協議是TCP/IP協議,目前廣泛使用的FTP、HTTP協議都是基於TCP/IP的,HTTP是Web應用使用最主要的協議。

  HTTP基於請求響應模型。客戶端向伺服器傳送一個請求,請求頭包含請求的方法、URI、協議版本、以及包含請求修飾符、客戶端資訊和內容的類似MIME的訊息結果。伺服器則返回一個狀態行作為響應,內容包括訊息協議的版本、成功或失敗編碼加上包含伺服器資訊、實體元資訊以及可能的實體內容。

  HTTP協議是無狀態的,也就是說同一使用者在第二次訪問同一臺伺服器上的頁面時,伺服器的響應與第一次被訪問時相同。

  HTTP是無連線的,雖然HTTP是基於TCP的,但是HTTP本身是無連線的。客戶端和伺服器的連結是基於一種請求應答模式。及客戶端和伺服器建立一個連結,客戶端提交一個請求,伺服器端收到請求後返回一個響應,然後二者就斷開連結。

3、請求/響應過程

  把上面的上網過程抽象一下,得到下面的模型:


請求/響應模型

上面這個模型比較簡單,它描述的是HTTP1.0中的請求/響應過程。我們分析一下,整個過程中花費的時間包括:建立TCP三次握手的時間、客戶端傳送請求的時間、伺服器返回響應的時間。
下圖為請求一個全球資訊網文件所需的時間:


這樣一次成功的請求/響應就要花費2*RTT+傳輸文件的時間,另外還要考慮客戶端和伺服器為每一次建立TCP連線分配快取和變數的開銷,如果每次請求都這樣,顯然開銷太大。特別是當有很多使用者訪問同一臺伺服器時,這種非持續的連線會使得伺服器負擔很重。HTTP1.1通過引入持續連線較好的解決了這個問題。

  所謂持續連線

就是伺服器在傳送一次響應後不是立即斷開TCP連線,而是在一段時間內仍然保持連線,使同一使用者和該伺服器可以繼續在這條連線上傳送後續的請求和響應。持續連線有兩種工作方式:非流水線式流水線式

  • 非流水線式:客戶在收到一個響應後才能傳送下一個請求
  • 流水線式:客戶在收到HTTP的響應報文之前能夠接著傳送新的請求報文。於是一個接一個的請求到達伺服器後,伺服器就可以連續的返回響應報文。

4、代理伺服器

  代理伺服器是一種網路實體,它又稱為全球資訊網快取記憶體。代理伺服器把最近的一些請求和響應暫存在本地磁碟中。若一個網路中使用了代理伺服器,該網路中的主機瀏覽器向因特網的伺服器請求服務時,就先和代理伺服器建立TCP連線,並向代理伺服器發出HTTP請求報文。若代理伺服器中已經存放了所請求的物件,則把這個物件放入HTTP響應報文中返回給客戶瀏覽器;否則,代理伺服器就代表客戶瀏覽器與因特網上的源點伺服器建立TCP連線,併發送HTTP請求報文。源點伺服器把所請求的物件放在HTTP響應報文中返回給代理伺服器。代理伺服器收到這個物件後,先複製在自己的本地儲存器中,然後再把這個物件放在HTTP響應報文中,通過已經建立的TCP連線返回給客戶瀏覽器。

5、報文

HTTP有兩類報文:

  • 請求報文:從客戶向伺服器傳送請求報文。
  • 響應報文:從伺服器到客戶的回答。

由於HTTP是面向文字的,因此在報文中的每一個欄位都是一些ASCII碼串,因而各個欄位的長度都是不確定的。HTTP請求報文和響應報文都是由三個部分組成。這兩種報文格式的區別就是開始行不同。

  • 開始行:用於區分是請求報文還是響應報文。在請求報文中的開始行叫做請求行,而在響應報文中的開始行叫做狀態行。
  • 首部行:用來說明瀏覽器、伺服器或報文主體的一些資訊。首部可以有好幾行,但也可以不使用。
  • 實體主體:在請求報文中一般都不用這個欄位,而在響應報文中也可能沒有這個欄位。

請求報文

響應報文

請求:

GET/sample.jspHTTP/1.1
Accept:image/gif.image/jpeg,/
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate

上面是一個請求的例子。

6、請求方法和狀態碼

請求方法  

客戶端和伺服器之間互動會使用不同的方法。下表列出了HTTP請求報文的幾種方法:

方法(操作) 意義
OPTIOON 請求一些選項的資訊
GET 請求讀取由URL所標記的資訊
HEAD 請求讀取由URL所標記的資訊的首部
POST 向伺服器提交資訊
PUT 在指明的URL下儲存一個文件
DELETE 刪除指明的URL所標記的資源
TRACE 用來進行環回測試的請求報文
CONNECT 用於代理伺服器

狀態碼

狀態碼都是三位數字的:

  • 1xx 表示通知資訊,如請求收到或正在進行處理
  • 2xx 表示成功,如接受或知道了
  • 3xx 表示重定向,如要完成請求還必須採取進一步的行動
  • 4xx 表示客戶的差錯,如請求中有錯誤的語法或不能完成
  • 5xx 表示伺服器的差錯,如伺服器失效無法完成請求

參考資料