網絡基本功(二十一):細說HTTP(上)

網絡基本功(二十一):細說HTTP(上)

 

轉載請在文首保留原文出處:EMC中文支持論壇https://community.emc.com/go/chinese p_w_picpath001.gif

 

 

介紹

 

HTTP是一個由請求與響應組成的客戶端與服務端交互協議。瀏覽器發送一個HTTP請求到指定的URL地址,持有此URL地址的WEB服務器將返回一個HTTP請求。請求的類型有GET, POST, HEAD, PUT, DELETE, OPTIONS和TRACE等。


更多信息

 

HTTP操作模式與客戶端/服務器通信:

 

HTTP只關心一個功能:從web服務器到web客戶端的超文本文件以及其他文件的傳輸。從通信的角度來看,客戶端主要負責發送請求給服務器,服務器對請求作出響應。相比FTP和SMTP這樣需要多個通信步驟和命令/響應序列的應用層協議,HTTP更像BOOTP和ARP。

 

基本的HTTP客戶端/服務器通信:

 

最簡單的HTTP操作包括一個使用web瀏覽器的HTTP客戶端,和一個HTTP服務器,通常稱爲web服務器。在TCP連接創建之後,以下兩步通信過程如下:

客戶端請求:HTTP客戶端根據HTTP協議標準發送HTTP請求信息,該信息指定客戶端想要獲取的資源或包括準備提供給服務器的信息。

服務器響應:服務器讀取並解釋該請求。對請求作出相應行爲並創建HTTP響應信息,發回給客戶端。響應信息包括該請求是否成功,也包括客戶端請求的資源內容。

 

HTTP消息格式:

 

使用HTTP的設備通信都是通過HTTP消息來完成,其中只有兩種類型:請求和響應。客戶端通常發送請求和接收響應,服務器接收請求和發送響應。信息使用的是文本的形式。

常規HTTP消息格式如下所示:

<起始行>

<首部字段>

<空白行>

[<主體>]

[<尾部>]

 

起始行包含消息的類型。請求消息中,這一行以方式的形式表明消息爲請求類型,並制定一個URI(Uniform Resource Identifier)指明請求的對象資源。響應通過起始行來表明請求響應的狀態信息。

首部字段HTTP定義了多種類型的首部字段。通過功能分組,除了主機頭以外,幾乎所有首部字段都是可選的。格式如下:<header-name>:<header-value>。

主體也是可選的,包含客戶端和服務器通信所需的一系列信息,如響應的詳細錯誤消息。更加常見的是承載文件或其他資源,HTTP標準中稱爲實體。由於大多數客戶端請求服務器發送文件或其他資源,實體在響應信息中最爲常見。

尾部,HTTP/1.1默認使用永久鏈接,消息在服務器與客戶端之間以流的形式傳輸,需要標記消息的結束點和開始點。

 

HTTP請求消息:

 

客戶端通過打開一個TCP連接發起與服務器的HTTP會話,之後發送HTTP請求信息

p_w_picpath002.jpg

 

起始行

主要有三個用途:

·         表明客戶端想要進行的命令或行爲

·         指定行爲想要獲取的資源

·         告知服務器客戶端使用的HTTP版本

起始行的語法爲:<METHOD><request-uri><HTTP-VERSION>

 

Method

method就是客戶端想要服務器做什麼,三種比較常用:GET,HEAD和POST。

         

GET

從服務器向客戶端發送發送命名資源

PUT

將來自客戶端的數據存儲到一個命名的服務器資源中去

DELETE

從服務器中刪除命名資源

POST

將客戶端數據發送到一個服務器網關應用程序

HEAD

僅發送命名資源響應中的HTTP首部

 

Request URI

Request URI是請求所申請資源的URI。目前URI通常值符合Web URL語法的HTTP URL。有趣的是,HTTP起始行所使用的URL形式通常與HTML文件或用戶輸入的不同。這是因爲一個完整URL中的部分信息是用來控制HTTP本身的。這是用戶和HTTP客戶端通信所需,而不包括在客戶端對服務器的請求中。在請求中指定資源的標準方式是在起始行中加入路徑和文件名(以及可選的查詢信息),同時在主機頭字段指定主機。

 

例如:假設用戶輸入URL:http://www.myfavoritewebsite.com:8080/chatware/chatroom.php,我們不需要發送http:到服務器。客戶端將餘下的信息拆分成URI /chatware/chatroom.php主機行會包括www.myfavoritewebsite.com:8080。因此,請求的開始內容如下:

GET /chatware/chatroom.php HTTP/1.1

Host: www.myfavoritewebsite.com:8080

這一準則的例外是當請求對象是代理服務器時。這時請求就要使用完整URL的形式,以使代理可以作爲初始客戶端來處理該請求。請求如下所示:

GET http://www.myfavoritewebsite.com:8080/chatware/chatroom.php HTTP/1.1


請求首部

在請求首部,提供給服務器關於請求的詳細信息。所有請求首部都使用相同的結構,但按照以下功能分類:

普通報頭普通報頭通常指消息本身,通常用於控制其處理過程或提供給接收方額外信息。這類報頭不限於請求或響應信息,所以兩者都可能出現。同樣,也與所承載的實體沒有特別關係。

請求報頭 這類報頭告知服務器關於客戶端請求的更多信息,給予客戶端更多關於請求處理的控制。例如,一些請求報頭用於指定條件請求,只有在特定條件時才執行。其他告訴服務器響應信息中客戶端能夠徐立的格式或編碼。如:

Accept 告訴服務器端,接受哪些類型的信息。

Accept-Encoding 可接受的內容編碼。

Accept-Lanague 指定一種自然語言。

Connection 表示是否需要持久連接。如果Servlet看到這裏的值爲“Keep-Alive”,或者看到請求使用的是HTTP 1.1(HTTP 1.1默認進行持久連接),它就可以利用持久連接的優點,當頁面包含多個元素時顯著地減少下載所需要的時間。

Cookie 最重要的請求頭信息之一, 每次請求時都會攜帶上Cookie以方便服務器端識別是否是同一個客戶端。

Host  host請求報頭域主要用於指定被請求資源的Internet主機和端口號,它通常從HTTP URL中提取出來。

User-Agent用戶代理,一般情況是瀏覽器。我們上網登陸論壇的時候,往往會看到一些歡迎信息,其中列出了客戶端操作系統的名稱和版本,所使用的瀏覽器的名稱和版本,實際上,服務器應用程序就是從User-Agent這個請求報頭域中獲取到這些信息。User-Agent請求報頭域允許客戶端將它的操作系統、瀏覽器和其它屬性告訴服務器。

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