HTTP協議詳解

一、HTTP協議簡介

HTTP協議,即超文本傳輸協議(英文:HyperText Transfer Protocol,縮寫:HTTP)是互聯網上應用最爲廣泛的一種網絡協議。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。通過HTTP或者HTTPS協議請求的資源由統一資源標識符(Uniform Resource Identifiers,URI)來標識。HTTP是一個客戶端和服務器端請求和應答的標準。


HTTP的大致工作流程如下圖所示:


二、HTTP協議的報文結構

HTTP有兩類報文:

(1)請求報文——從客戶端向服務器發送請求報文

(2)響應報文——從服務器到客戶的應答。


如下圖所示,請求報文和響應報文都是由三個部分組成,兩種報文的區別主要就是開始行不同。

1、開始行

請求報文的開始行叫做請求行,主要有三個內容:方法、請求資源的URL以及HTPP協議的版本。

響應報文的開始行叫做狀態行,主要有三個內容:HTTP協議的版本、狀態碼以及解釋狀態碼的簡要短語。

2、首部行

首部行用來說明瀏覽器、服務器或報文主體的一些信息,可以有多行。

3、實體主體

在請求報文中一般都不使用這個字段;在響應報文中,實體主體用來包含響應內容,但響應報文中也有可能沒有這個字段。


三、HTTP協議的請求方法

HTTP/1.1協議中共定義了八種方法(也叫“動作”)來以不同方式操作指定的資源: 

(1)OPTIONS:

這個方法可使服務器傳回該資源所支持的所有HTTP請求方法。用'*'來代替資源名稱,向Web服務器發送OPTIONS請求,可以測試服務器功能是否正常運作。 

(2)HEAD:

與GET方法一樣,都是向服務器發出指定資源的請求。只不過服務器將不傳回資源的本文部分。它的好處在於,使用這個方法可以在不必傳輸全部內容的情況下,就可以獲取其中“關於該資源的信息”(元信息或稱元數據)。 

(3)GET

向指定的資源發出“顯示”請求。使用GET方法應該只用在讀取數據,而不應當被用於產生“副作用”的操作中,例如在Web Application中。其中一個原因是GET可能會被網絡蜘蛛等隨意訪問。

(4)POST:

向指定資源提交數據,請求服務器進行處理(例如提交表單或者上傳文件)。數據被包含在請求本文中。這個請求可能會創建新的資源或修改現有資源,或二者皆有。 

(5)PUT:

向指定資源位置上傳其最新內容。 

(6)DELETE:

請求服務器刪除Request-URI所標識的資源。 

(7)TRACE:

回顯服務器收到的請求,主要用於測試或診斷。 

(8)CONNECT:

HTTP/1.1協議中預留給能夠將連接改爲管道方式的代理服務器。通常用於SSL加密服務器的鏈接(經由非加密的HTTP代理服務器)。


四、HTTP協議的狀態碼

狀態代碼的第一個數字代表當前響應的類型:

1xx消息——請求已被服務器接收,繼續處理

2xx成功——請求已成功被服務器接收、理解、並接受

3xx重定向——需要後續操作才能完成這一請求

4xx請求錯誤——請求含有詞法錯誤或者無法被執行

5xx服務器錯誤——服務器在處理某個正確請求時發生錯誤


五、HTTP1.1和HTTP1.0的區別

HTTP1.0請求一個萬維網文檔所需時間如下圖所示:

HTTP1.0每請求一次文檔,就需要有兩倍的RTT開銷。另外,每一次請求都需要重新建立TCP連接,增加萬維網服務器的負擔。在HTTP1.0中,每對Request/Response都使用一個新的連接。


HTTP 1.1則支持持續連接(Persistent Connection), 並且默認使用持續連接。所謂持續連接,就是萬維網服務器在發送響應之後的一段時間內保持這條TCP連接,使同一個客戶和該服務器可以繼續在這條連接上傳送HTTP報文。

HTTP1.1工作方式分爲兩種:非流水線方式和流水線方式。非流水線方式在發送完一個請求之後需要收到響應才能繼續發送另外的請求。而流水線方式在同一個TCP的連接中可以傳送多個HTTP請求和響應.,多個請求和響應可以重疊,多個請求和響應可以同時進行。


HTTP1.0和HTTP1.1主要區別如下:

(1)同一個TCP的連接中可以傳送多個HTTP請求和響應,多個請求和響應可以重疊,多個請求和響應可以同時進行。

(2)更加多的請求頭和響應頭(比如HTTP1.0沒有host的字段)。Connection請求頭的值爲Keep-Alive時,客戶端通知服務器返回本次請求結果後保持連接;Connection請求頭的值爲close時,客戶端通知服務器返回本次請求結果後關閉連接。HTTP 1.1還提供了與身份認證、狀態管理和Cache緩存等機制相關的請求頭和響應頭。


六、HTTP怎麼處理長連接

HTTP1.1使用首部的Connection: Keep-alive來保持長連接,通過Keep-alive:20來時設置長連接時間,如下圖所示:


參考文獻:

1、HTTP協議解析 http://blog.csdn.net/daniel_ustc/article/details/17955005

2、HTTP協議簡介 

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832653051fd44e44e4f9e4ed08f3e5a5ab550358d000

3、HTTP詳解(3)-http1.0 和http1.1 區別 http://blog.csdn.net/hguisu/article/details/8608888

4、HTTP 1.1與HTTP 1.0的比較 http://blog.csdn.net/elifefly/article/details/3964766

5、HTTP的長連接和短連接 http://www.cnblogs.com/cswuyg/p/3653263.html



發佈了87 篇原創文章 · 獲贊 190 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章