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

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

 

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

 

 

介紹

 

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


更多信息

 

HTTP操做模式與客戶端/服務器通訊:服務器

 

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

 

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

 

最簡單的HTTP操做包括一個使用web瀏覽器的HTTP客戶端,和一個HTTP服務器,一般稱爲web服務器。在TCP鏈接建立以後,如下兩步通訊過程以下:編碼

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

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

 

HTTP消息格式:3d

 

使用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請求報頭域容許客戶端將它的操做系統、瀏覽器和其它屬性告訴服務器。

相關文章
相關標籤/搜索