1. 程式人生 > >什麼是http請求和http響應?

什麼是http請求和http響應?

在上述通訊過程的另一端,是由Web Server來服務並提供客戶端所請求的文件。Server只是虛擬意義上代表一個機器:它可以是共享負載(負載均衡)的一組伺服器組成的計算機叢集,也可以是一種複雜的軟體,通過向其他計算機(如快取,資料庫伺服器,電子商務伺服器 ...)發起請求來獲取部分或全部資源。

什麼是代理?

在瀏覽器和伺服器之間,有許多計算機和其他裝置轉發了HTTP訊息。由於Web棧層次結構的原因,它們大多都出現在傳輸層、網路層和物理層上,對於HTTP應用層而言就是透明的,雖然它們可能會對應用層效能有重要影響。還有一部分是表現在應用層上的,被稱為代理(Proxies)。代理(Proxies)既可以表現得透明,又可以不透明(“改變請求”不會通過它們)。代理主要有如下幾種作用:

  • 快取(可以是公開的也可以是私有的,像瀏覽器的快取)
  • 過濾(像反病毒掃描,家長控制...)
  • 負載均衡(讓多個伺服器服務不同的請求)
  • 認證(對不同資源進行許可權管理)
  • 日誌記錄(允許儲存歷史資訊)

HTTP 報文

HTTP/1.1以及更早的HTTP協議報文都是語義可讀的。在HTTP/2中,這些報文被嵌入到了一個新的二進位制結構,幀。幀允許實現很多優化,比如報文頭部的壓縮和複用。即使只有原始HTTP報文的一部分以HTTP/2傳送出來,每條報文的語義依舊不變,客戶端會重組原始HTTP/1.1請求。因此用HTTP/1.1格式來理解HTTP/2報文仍舊有效。

有兩種HTTP報文的型別,請求與迴應,每種都有其特定的格式。

請求

HTTP請求的一個例子:

A basic HTTP request

請求由以下元素組成:

  • 一個HTTP的method,經常是由一個動詞像GETPOST 或者一個名詞像OPTIONSHEAD來定義客戶端的動作行為。通常客戶端的操作都是獲取資源(GET方法)或者傳送HTML form表單值(POST方法),雖然在一些情況下也會有其他操作。
  • 要獲取的資源的路徑,通常是上下文中就很明顯的元素資源的URL,它沒有protocolhttp://),domaindeveloper.mozilla.org),或是TCP的port(HTTP一般在80埠)。
  • HTTP協議版本號。
  • 為服務端表達其他資訊的可選頭部headers
  • 對於一些像POST這樣的方法,報文的body就包含了傳送的資源,這與迴應報文的body類似。

迴應

HTTP迴應的一個例子:

迴應報文包含了下面的元素:

  • HTTP協議版本號。
  • 一個狀態碼(status code),來告知對應請求執行成功或失敗,以及失敗的原因。
  • 一個狀態資訊,這個資訊是非權威的狀態碼描述資訊,可以由服務端自行設定。
  • HTTP headers,與請求頭部類似。
  • 可選項,比起請求報文,響應報文中更常見地包含獲取的資源body。
  • 常用的狀態碼




總結

HTTP是一種簡單可擴充套件的協議,其Client-Server的結構以及輕鬆擴充套件頭部資訊的能力使得HTTP可以和Web共同發展。

即使HTTP/2為了提高效能將HTTP報文嵌入到幀中這一舉措增加了複雜度,但是從Web應用的角度看,報文的基本結構沒有變化,從HTTP/1.0釋出起就是這樣的結構。會話流依舊簡單,通過一個簡單的 HTTP message monitor就可以檢視和糾錯。