HTTP協議(整理)

一、HTTP協議

1http協議特點

1.支持客戶/服務器模式。 
2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GETHEADPOST。每種方法規定了客戶與服務器聯繫的類型不同。 
由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。 
3.靈活HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。 
4.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。 
5.無狀態HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

2http協議的幾個重要概念:連接、消息、請求、響應、資源、用戶代理、緩存、服務器等

1.連接(Connection):一個傳輸層的實際環流,它是建立在兩個相互通訊的應用程序之間。 
2.消息(Message)HTTP通訊的基本單位,包括一個結構化的八元組序列並通過連接傳輸。 
3.請求(Request):一個從客戶端到服務器的請求信息包括應用於資源的方法、資源的標識符和協議的版本號 
4.響應(Response):一個從服務器返回的信息包括HTTP協議的版本號、請求的狀態(例如"成功""沒找到")和文檔的MIME類型 
5.資源(Resource):由URI標識的網絡數據對象或服務 
6.實體(Entity):數據資源或來自服務資源的回映的一種特殊表示方法,它可能被包圍在一個請求或響應信息中。一個實體包括實體頭信息和實體的本身內容。 
8.用戶代理(User agent)初始化一個請求的客戶機。它們是瀏覽器、編輯器或其它用戶工具。 
10.源服務器(Origin server):是一個給定資源可以在其上駐留或被創建的服務器。 
11.代理(Proxy):一箇中間程序,它可以充當一個服務器,也可以充當一個客戶機,爲其它客戶機建立請求。請求是通過可能的翻譯在內部或經過傳遞到其它的服務器中。一個代理在發送請求信息之前,必須解釋並且如果可能重寫它。 
代理經常作爲通過防火牆的客戶機端的門戶,代理還可以作爲一個幫助應用來通過協議處理沒有被用戶代理完成的請求。 
12.網關(Gateway):一個作爲其它服務器中間媒介的服務器。與代理不同的是,網關接受請求就好象對被請求的資源來說它就是源服務器;發出請求的客戶機並沒有意識到它在同網關打交道。 
網關經常作爲通過防火牆的服務器端的門戶,網關還可以作爲一個協議翻譯器以便存取那些存儲在非HTTP系統中的資源。 
13.通道(Tunnel):是作爲兩個連接中繼的中介程序。一旦激活,通道便被認爲不屬於HTTP通訊,儘管通道可能是被一個HTTP請求初始化的。當被中繼的連接兩端關閉時,通道便消失。當一個門戶(Portal)必須存在或中介(Intermediary)不能解釋中繼的通訊時通道被經常使 用。 
14.緩存(Cache)反應信息的局域存儲

3http協議的運作方式

 

4http協議請求頭格式分析

http協議的請求頭分爲10個部分。 

1.From

internet郵件的形式,這一字段給出了正在請求的用戶的名字。這一字段也許被用來登陸和一種存取保護的不安全形式。這一字段的解釋是代表被給定用戶的要求正在被執行,這個用戶接受被執行方法的迴應。 

這一字段裏的因特網郵件地址並非一定要對發出請求的主機迴應.例如,當一個請求正通過一個網關時,開始的發佈者的地址應該被使用。 

假如能的話,郵件地址應該時一個有效的郵件地址而不管它實際上是否是一個internet郵件地址。 

2.Accept

這一字段包含了一個分隔的請求方案列表,它將在這個請求的迴應中被接受。這一字段可能會根據RCFC822被包裝成幾行,並且這個字段不僅僅一次的發生也是被接受的,好像所有的入口已經在一個域種了。列表中每個入口的模式如下: 

<field> =   Accept: <entry> *[ , <entry> ] 

<entry> =   <content type> *[ ; <param> ] 

<param> =   <attr> = <float> 

<attr>   =   q / mxs / mxb 

<float> =   <ANSI-C floating point text represntation> 

注意在上述語法中分號的優先級高於逗號,這是爲了符合多用途的忘記郵件擴充協議。 

記入沒有Accept字段出現,那麼假定無格式正文和html正文被接受。 

Example 

Accept: text/plain, text/html 

Accept: text/x-dvi; q=.8; mxb=100000; mxt=5.0, text/x-c 

爲了節省時間,並且也允許客戶接受他們可能不會意識到的content type一個星號也許被使用在下面的地方,either the second half of the content-type value, or both halves。這僅僅被應用於Accept,而且不是對於content-type field of course的。 

Example 

Accept: *.*, q=0.1 

Accept: audio/*, q=0.2 

Accept: audio/basic q=1 

上面的例子可以這樣解釋:假如你有基本音頻,那麼傳送它,否則傳送給我一些其他的聲音,或者不能那樣作,那麼僅僅給我你所得到的。 

Type parameters 

  在(content type)中參數對於描述決議,顏色深度等等是特別重要的。他們將允許一個客戶來在Accept字段中指定它的設備的決議。這也許允許server在傳輸 時通過減少一個圖片的resultion來大大的節約。並且使一個更適合的用戶時間的黑白圖象被選中而不是給客戶一個彩色圖片來轉換成單色的。 

These parameters are to be specified when types are registered.. @@ TBS.Sugestions include the following. Please feed back any references to existing improved abbreviations for these: 

下面這些參數是當類型被註冊時而被具體詳細說明的。 

  Dpi 

  Dots per inch: pixels per inch [cm?!]  

  pxmax  

  Maximum width in pixels (image or video)  

  pymax  

  Maximum height in pixels  

  bits  

  Bits per sample (sound) or pixels (graphics)  

  mchrome  

  Grayscale or black and white (no value)  

  sps  

  Samples (sound) or frames (video) per second  

  Length  

  Total size of object in bytes [bits?]  

 

3.Accept-Encoding: 

Accept一樣,但是僅列出了在響應中是可接受的Content-Encoding types 

<field> =   Accept-Encoding: <entry> *[ , <entry> ] 

<entry> =   <content transfer encoding> *[ , <param> ] 

Example: 

Accept-Encoding: x-compress; x-zip 

 

4Accept-Language: 

Accept一樣但是列出了在響應中更好的Language values。在一個未詳細說明的語言中一個響應不是非法的。 

 

5User-Agent: 

假如存在的話,這一行給出了被原始用戶使用的軟件程序。這是爲了統計和protocol violations的追蹤而給出的。第一個白色空格劃定了單詞必須是軟件產品名有一個可選的斜線和版本說明。其他形成了用戶代理的部分產品也許被作爲分開的單詞被安排。 

<field>   =   User-Agent: <product>+ 

<product> =   <word> [/<version>] 

<version> =   <word> 

Example: 

User-Agent: LII-Cello/1.0 libwww/2.5 

 

6Referer: 

這個可選的header field允許客戶詳細說明,爲了server的好處,文檔的地址或者文檔中的元素,URI通過文檔的地址或者文檔中的元素在請求中被獲得。 

這允許一個服務器來產生向後對文檔的鏈接,它允許壞鏈接爲了維護而被跟蹤。 

假如一個部分的URI被給出那麼它應該被解析到相應的請求對象的URI。 

Example: 

Referer: http://www.w3.org/hypertext/DataSources/Overview.html 

 

7Authorization: 

假如這一行存在的話它包含了授權信息。格式也是被指定的。這一字段的格式是在可擴展的形式。第一個單詞是一個使用中的被授權的系統的規範。 

Basic 

Specification for current one implemented by AL Sep 1993. 

  PGP/PEM Encryptionpgp/增強的加密電子郵件 密碼術) 

  People at NCSA are designing a PGP/PEM based protection system. 

  User/Password scheme 

  Authorization: user fred:mypassword 

  設計名是"user"。第二個單詞是一個用戶名,有一個被冒號分開的可選的密碼,就好像在ftpURL語法一樣。沒有密碼的話這提供了一個非常低級的安全保證,有了密碼,它提供了一個低級安全保證作爲未定義的FTP,Telnet等等。 

  Koreros 

  Authorization: kerberos kerberos authentications parameters 

  Kerberos的確認參數格式被具體指定。 

 

  8ChargeTo: 

  假如這一行存在地話,它包括了被請求的方法的程序的帳戶信息。格式是TBS 

  (To Be Specified)這個字段的格式必須是在擴展模式的。第一個單詞以一個namespaces的說明開始。這和擴展URLㄒ搴芟瘛5鼻懊揮衝amespaces被定義。Namespaces見被隨着註冊確認而註冊。 

  這行的其餘部分的格式是一個系統有關的函數但是它被推薦這包含了一個被用戶確認得本次事務的最大花費和一個花費單元。 

  If-Modified-Since: date 

  這個請求頭被隨着get方法使用使之有條件。假如請求文檔直到被定義還沒改變得花那麼文檔不會被髮送,但是會有一個Not Modified 304 迴應。 

  這個字段的格式和日期的一樣。 

   

  9.Pragma: 

  語法和其它的http中的多值字段一樣,就像Accept字段,名以上是一個冒號分開的入口列表對他來說可選的參數是被漢歐摯摹

  Pragma 指示應該被服務器理解,對它來說是相對的,例如,一個代理服務器當前僅僅一個pragma被定義:no-cache  

  噹噹前的代理不應該從緩存返回一個文檔時,即使它還沒有被到期,但是它總應該從實際存在地服務器請求文檔。 

  Pragma應該被通過代理實現,甚至他們也許對代理本身有意義。當請求不得不通過許多代理時,這在事件中是必須的,而且pragma應該隊所有的他們有效。 

5、服務器返回的各種狀態碼

① 客戶方錯誤  

100  繼續  

101  交換協議  

② 成功  

200 OK  

201  已創建  

202  接收  

203  非認證信息  

204  無內容  

205  重置內容  

206  部分內容  

③ 重定向  

300  多路選擇  

301  永久轉移  

302  暫時轉移  

303  參見其它  

304  未修改(Not Modified)  

305  使用代理  

④ 客戶方錯誤  

400  錯誤請求(Bad Request)  

401  未認證  

402  需要付費  

403  禁止(Forbidden)  

404  未找到(Not Found)  

405  方法不允許  

406  不接受  

407  需要代理認證  

408  請求超時  

409  衝突  

410  失敗  

411  需要長度  

412  條件失敗  

413  請求實體太大  

414  請求URI太長  

415  不支持媒體類型  

⑤ 服務器錯誤  

500  服務器內部錯誤  

501  未實現(Not Implemented)  

502  網關失敗  

504  網關超時  

505 HTTP版本不支持  

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