天天看點

HTTP請求響應過程 與HTTPS差別

HTTP協定主要應用是在伺服器和用戶端之間,用戶端接受超文本。

HTTP是在七層網絡模型中的應用層的協定,由發送請求和接受響應構成,是一個标準的用戶端伺服器模型。與此同時,HTTP是一個無狀态的協定。也就是說,不能通過一個狀态判斷連接配接的狀态,是以有時候,計算機之間通信需要通過其他協定來協同工作,一起提供支援。

相對于其他網路傳輸協定,HTTP有着自己的特點,這也支撐了HTTP協定的基本職能。

(1)基于B/S 模式,即客戶/伺服器模式。同時可以提供登陸認證和網間安全傳輸,例如HTTP下加入SSL層,可以提供安全的HTTPS服務。

(2)通信開銷小,簡單快速,傳輸成本低。伺服器請求某些一定的服務時,浏覽者通常隻需在請求封包中添加請求路徑和方法。最一般的情形,例如GET、HEAD、POST等,這也是我們使用最多的。

每一種請求方法都有自己的适用範圍,在請求封包的内部,通過一些規則,說明了使用者與Web伺服器之間溝通的類型。同時,HTTP協定規則較為簡單,是以使用HTTP伺服器的系統,代碼和程式規模都會比較輕量級,但是通信的速度卻效率較高。

(3)使用靈活:超文本協定,允許伺服器和用戶端傳輸任意類型或者任意資料結構的資料對象。而且,通過一個簡單的頭資訊,例如将正在傳輸的類型由Content-Type加以标記,于是可以區分開。

(4)節省傳輸時間:最初版本的HTTP協定使用非持續連接配接,隻允許發送并處理一個連接配接,當請求響應完成,也就是伺服器完成用戶端的請求,同時收到了用戶端浏覽器的應答後,連接配接會立即斷開。有了這種特點,通信方式節省了大量用于資料傳輸和等待應答的時間,時間成本變得非常小。

同時,高版本HTTP協定,HTTP 1.1支援持續連接配接:多個對象可以通過一個連接配接可傳送,不需要每次傳輸一個web對象就去建立一個新的連接配接。

通常情況下,HTTP協定的工作原理很好了解,使用者通過用戶端向服務端發起一個請求,建立一個TCP連接配接,指定端口号,預設是80,然後連接配接到伺服器工作。在那個端口監聽浏覽器請求。一旦監聽到用戶端請求,分析請求類型後,伺服器會向用戶端傳回一個響應狀态,比如"HTTP/1.0 404 OK",同時會傳回特定的資料内容,如請求的資源,錯誤代碼,其它狀态資訊等等。

當浏覽器向伺服器發送一個請求到Web伺服器,它發送一個資料塊,或請求資訊,

HTTP請求資訊包括3部分:

請求方法URI協定/版本;

請求頭(Request Header);

請求正文;

下面是一個HTTP請求的示例:

  

(1)請求方法URI協定/版本

請求的第一行是“方法/内容 URL協定/協定版本名稱”:

上面的代碼中,“GET”說明請求方法,“/test.jsp”表示網絡資源,中間空格,最後說明協定和協定的版本。

根據HTTP标準,HTTP請求可以使用多種不同的請求方法。例如:HTTP1.1允許支援七種請求方法(也叫“動作”):GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。日常開發中, GET和POST是最常用的方法,主要在相關的Web開發中。

URL路徑指定了要通路的網絡資源。一般來說,我們需要的是相對路徑,因為确定資源位置,知道網絡資源相對于伺服器的根目錄的路徑就可以,是以以“/”開頭。在頭資訊結束時,聲明了通信過程中HTTP協定版本的使用版本。

需要注意,方法名稱很重要的一點是嚴格區分大小寫。有些時候,某個請求所針對的資源可能不支援對應的請求方法,會通過不同的狀态碼給出響應。例如,伺服器将傳回一個狀态碼405(方法不允許),當請求伺服器或方法不了解不支援相應的時間,傳回一個狀态碼501(沒有實作)。

(2)請求頭(Request Header)

請求頭包含了一些客戶環境和請求的内容資訊。例如,請求頭可以聲明浏覽器核心和語言使用,請求的長度等。

(3)請求正文

請求正文和請求頭要有空行。這個空行必須存在,說明結束請求頭傳輸,開始傳輸正文請求。請求正文中一般包含很多資訊,例如使用者送出的使用者名和密碼之類的登陸資訊:userlogin=bingyue&currentpwd=bingyue

在真實應用中,協定的請求正文可以包含大量的資訊,而不是如示例的HTTP請

求中一樣,請求正文隻有簡單的一行資料。

和請求封包類似,HTTP響應主要也是3個部分構成:

(1)協定狀态版本代碼描述

(2)響應頭(Response Header)

(3)響應正文

下面是一個HTTP響應的示例:

用戶端向伺服器發送請求,和請求封包類似,伺服器會以狀态行響應。

響應封包包括:HTTP協定的版本、結果編碼以及其他的必要資訊,如實體資訊等。響應類别不同,響應封包裡可以包含或者不含實體内容。

HTTP響應封包的首先是以狀态行開始,這些可以參考示例的代碼。

響應頭也就是封包首部,和請求頭首部一樣,包含重要的資訊,例子中我們可以看到,比如日期時間和伺服器類型以及内容長度和數量等。

更詳細的說明:

<a href="http://linux5588.blog.51cto.com/65280/1351007" target="_blank">一次完整的HTTP事務是怎樣一個過程?</a>

<a href="http://www.cnblogs.com/binyue/p/3766559.html">HTTP協定中狀态碼的應用</a>