天天看點

Http協定學習(很好的一篇文章)

轉載自:http://5ydycm.blog.51cto.com/115934/126893

(1)基本概念 HTTP(HyperTextTransferProtocol)是超文本傳輸協定的縮寫,它用于傳 送WWW方式的資料。HTTP協定采用了請求/響應模型。用戶端向伺服器發送一個請求,請求頭包含請求的方法、URI、協定版本、以及包含請求修飾符、客戶資訊和内容的類似于MIME的消息結構。伺服器以一個狀态行作為響應,相應的内容包括消息協定的版本,成功或者錯誤編碼加上包含伺服器資訊、實體元資訊以及可能的實體内容。 [ 我來分析] 在這一部分上說的的确很抽象,出現了很多專業名詞,隻要大家耐心的将其看完就能基本明白這裡說的東西了。 如:這一個請求頭中就有GET方法,URI,HTTP/1.1的協定版本還有用戶端的相關資訊,如User-Agent指出浏覽器的類型(用戶端的資訊)還有Accept可以接受的MIME……

Http協定學習(很好的一篇文章)

如:響應頭就包含消息協定的版本,如HTTP/1.1,狀态代碼為200,以及伺服器相關資訊如:Microsoft-IIS/5.0…..

Http協定學習(很好的一篇文章)

大家繼續…… [ 結束]

通常HTTP消息包括客戶機向伺服器的請求消息和伺服器向客戶機的響應消息。這兩種類型的消息由一個起始行,一個或者多個頭域組成。 HTTP的頭域包括通用頭,請求頭,響應頭和實體頭四個部分。 每個頭域由一個域名,冒号( : )和域值三部分組成。域名是大小寫無關的,域值前可以添加任何數量的空格符,頭域可以被擴充為多行,在每行開始處,使用至少一個空格或制表符。 [ 我來分析] 記住這兩種類型的格式和每個頭域的格式都是一緻的,還有這裡提到的幾個頭域,要知道它們的關系,在這裡我用一張“關系圖”表示出來了。在下面的資料中,這種關系還會展現出來的。  

Http協定學習(很好的一篇文章)

[ 結束] 接下來,我們要對每個頭域進行學習了……加油,小夥子們……..Come .! (2)通用頭域 通用頭域包含請求和響應消息都支援的頭域,通用頭域包含 Cache-Control 、 Connection 、 Date 、 Pragma 、 Transfer-Encoding 、 Upgrade 、 Via 。對通用頭域的擴充要求通訊雙方都支援此擴充,如果存在不支援的通用頭域,一般将會作為實體頭域處理。 [ 我來分析] 一開始就提出了:” 通用頭域包含請求和響應消息都支援的頭域 ” 看來通用頭域是包含在請求頭域和響應頭域中了。但它的要求絕對很高,因為它要求請求頭域和響應頭域都支援,才可以使用,而不能被兩個都支援的則淪為實體頭域中了。。。。。。。 [ 結束] 下面簡單介紹幾個在 UPnP 消息中使用的通用頭域。 Cache-Control頭域

Cache-Control 指定請求和響應遵循的緩存機制。 在請求消息或響應消息中設定Cache-Control并不會修改另一個消息處理過程中的緩存處理過程。請求時的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應消息中的指令包括public、 private、no-cache、no-store、no-transform、must-r.idate、proxy-r.idate、 max-age。各個消息中的指令含義如下:

(1) Public訓示響應可被任何緩存區緩存。

(2) Private訓示對于單個使用者的整個或部分響應消息,不能被共享緩存處理。這允許伺服器僅僅描述當使用者的部分響應消息,此響應消息對于其他使用者的請求無效。

(3) no-cache訓示請求或響應消息不能緩存

(4) no-store用于防止重要的資訊被無意的釋出。在請求消息中發送将使得請求和響應消息都不使用緩存。

(5) max-age訓示客戶機可以接收生存期不大于指定時間(以秒為機關)的響應。

(6) min-fresh訓示客戶機可以接收響應時間小于目前時間加上指定時間的響應。

(7) max-stale訓示客戶機可以接收超出逾時期間的響應消息。如果指定max-stale消息的值,那麼客戶機可以接收超出逾時期指定值之内的響應消息。

Date頭域

Date 頭域表示消息發送的時間,時間的描述格式由rfc822定義。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的時間表示世界标準時,換算成本地時間,需要知道使用者所在的時區。

Pragma頭域

Pragma 頭域用來包含實作特定的指令,最常用的是 Pragma:no-cache 。在HTTP/1.1協定中,它的含義和Cache-Control:no-cache相同。 [ 我來分析] 首先這些頭域在請求頭域和響應頭域下都是可以用的。讀了下,感覺都說的很清楚了,Cache-control這部分是很有用的,主要用在響應消息中。大家可以在自己的程式上試驗一把(不過一般我會在Apache加mod_expires子產品,或者用squid。不過,這些不在我這課的範圍,哈哈!)。貼個meta的資料。(個人覺得這部分還是很有用的,就都COPY下來了。。。。。。HOHO)   meta是用來在HTML文檔中模拟HTTP協定的響應頭封包。meta   标簽用于網頁的<head>與</head>中,meta   标簽的用處很多。meta   的屬性有兩種:name和http-equiv。name屬性主要用于描述網頁,對應于content(網頁内容),以便于搜尋引擎機器人查找、分類(目前幾乎所有的搜尋引擎都使用網上機器人自動查找meta值來給網頁分類)。這其中最重要的是de.ion(站點在搜尋引擎上的描述)和keywords(分類關鍵詞),是以應該給每頁加一個meta值。比較常用的有以下幾個:     

       name   屬性   

       1、<meta   name="Generator"   content="">用以說明生成工具(如Microsoft   FrontPage   4.0)等;   

       2、<meta   name="KEYWords"   content="">向搜尋引擎說明你的網頁的關鍵詞;   

       3、<meta   name="DE.ion"   content="">告訴搜尋引擎你的站點的主要内容;   

       4、<meta   name="Author"   content="你的姓名">告訴搜尋引擎你的站點的制作的作者;   

       5、<meta   name="Robots"   content="all|none|index|noindex|follow|nofollow">   

       其中的屬性說明如下:   

       設定為all:檔案将被檢索,且頁面上的連結可以被查詢;   

       設定為none:檔案将不被檢索,且頁面上的連結不可以被查詢;   

       設定為index:檔案将被檢索;   

       設定為follow:頁面上的連結可以被查詢;   

       設定為noindex:檔案将不被檢索,但頁面上的連結可以被查詢;   

       設定為nofollow:檔案将不被檢索,頁面上的連結可以被查詢。   

       http-equiv屬性   

       1、<meta   http-equiv="Content-Type"   content="text/html";charset=gb_2312-80">   

       和   <meta   http-equiv="Content-Language"   content="zh-CN">用以說明首頁制作所使用的文字以及語言;   

       又如英文是ISO-8859-1字元集,還有BIG5、utf-8、shift-Jis、Euc、Koi8-2等字元集;     2、<meta   http-equiv="Refresh"   content="n;url=http://yourlink">定時讓網頁在指定的時間n内,跳轉到頁面http;//yourlink;   

       3、<meta   http-equiv="Expires"   content="Mon,12   May   2001   00:20:00   GMT">可以用于設定網頁的到期時間,一旦過期則必須到伺服器上重新調用。需要注意的是必須使用GMT時間格式;   

       4、<meta   http-equiv="Pragma"   content="no-cache">是用于設定禁止浏覽器從本地機的緩存中調閱頁面内容,設定後一旦離開網頁就無法從Cache中再調出;   <meta   http-equiv="Cache-Control"   CONTENT="no-cache">  

       5、<meta   http-equiv="set-cookie"   content="Mon,12   May   2001   00:20:00   GMT">cookie設定,如果網頁過期,存盤的cookie将被删除。需要注意的也是必須使用GMT時間格式;   

       6、<meta   http-equiv="Pics-label"   content="">網頁等級評定,在IE的internet選項中有一項内容設定,可以防止浏覽一些受限制的網站,而網站的限制級别就是通過meta屬性來設定的;   

       7、<meta   http-equiv="windows-Target"   content="_top">強制頁面在目前視窗中以獨立頁面顯示,可以防止自己的網頁被别人當作一個frame頁調用;   

       8、<meta   http-equiv="Page-Enter"   content="revealTrans(duration=10,transtion=50)">和<meta   http-equiv="Page-Exit"   contect="revealTrans(duration=20,transtion=6)">設定進入和離開頁面時的特殊效果,這個功能即FrontPage中的“格式/網頁過渡”,不過所加的頁面不能夠是一個frame頁面。 補充資料: 網頁的緩存是由 HTTP 消息頭中的 “Cache-control” 來控制的,常見的取值有 private 、 no-cache 、 max-age 等,預設為 private 。其作用根據不同的重新浏覽方式分為以下幾種情況:

(1) 打開新視窗

如果指定 cache-control 的值為 private 、 no-cache ,那麼打開新視窗通路時都會重新通路伺服器。而如果指定了 max-age 值,那麼在此值内的時間裡就不會重新通路伺服器,例如:

Cache-control: max-age=5

表示當通路此網頁後的 5 秒内再次通路不會去伺服器

(2) 在位址欄回車

如果值為 private ,則隻有第一次通路時會通路伺服器,以後就不再通路。如果值為 no-cache ,那麼每次都會通路。如果值為 max-age ,則在過期之前不會重複通路。

(3) 按後退按扭

如果值為 private 、 max-age ,則不會重通路,而如果為 no-cache ,則每次都重複通路

(4) 按重新整理按扭

無論為何值,都會重複通路 [ 結束] (3)請求頭域

請求消息的第一行為下面的格式:

MethodSPRequest-URISPHTTP-VersionCRLF 

Method表示對于Request-URI完成的方法,這個字段是大小寫敏感的, 包括 OPTIONS 、 GET 、 HEAD 、 POST 、 PUT 、 DELETE 、 TRACE 。方法GET和HEAD應該被所有的通用WEB伺服器支援,其他所有方法的實作是可選的。 GET方法 取回由 Request-URI 辨別的資訊。HEAD方法也是取回由Request-URI辨別的資訊,隻是可以在響應時,不傳回消息體。 POST方法 可以請求伺服器接收包含在請求中的實體資訊,可以用于送出表單,向新聞討論區、 BBS 、郵件群組和資料庫發送消息。

SP表示空格。

Request-URI遵循URI格式,在此字段為星号(*)時,說明請求并不用于某個特定的資源位址,而是用于伺服器本身。

HTTP-Version表示支援的HTTP版本,例如為HTTP/1.1。

CRLF表示換行回車符。

請求頭域允許用戶端向伺服器傳遞關于請求或者關于客戶機的附加資訊。請求頭域可能包含下列字段 Accept 、 Accept-Charset 、 Accept- Encoding 、 Accept-Language 、 Authorization 、 From 、 Host 、 If-Modified-Since 、 If- Match 、 If-None-Match 、 If-Range 、 If-Range 、 If-Unmodified-Since 、 Max-Forwards 、  Proxy-Authorization 、 Range 、 Referer 、 User-Agent 。對請求頭域的擴充要求通訊雙方都支援,如果存在不支援的請求頭域,一般将會作為實體頭域處理。

典型的請求消息:

GET [url]http://class/download.microtool.de:80/somedata.exe[/url]

Host:download.microtool.de

Accept:*/*

Pragma:no-cache

Cache-Control:no-cache

Referer: [url]http://class/download.microtool.de/[/url]

User-Agent:Mozilla/4.04[en](Win95;I;Nav)

Range:bytes=554554-

上例第一行表示HTTP用戶端(可能是浏覽器、下載下傳程式)通過GET方法獲得指定URL下的檔案。

Host頭域

Host 頭域指定請求資源的 Intenet 主機和端口号,必須表示請求 url 的原始伺服器或網關的位置。HTTP/1.1請求必須包含主機頭域,否則系統會以400狀态碼傳回。

Referer頭域

Referer 頭域允許用戶端指定請求 uri 的源資源位址,這可以允許伺服器生成回退連結清單,可用來登陸、優化cache等。他也允許廢除的或錯誤的連接配接由于維護的目的被追蹤。如果請求的uri沒有自己的uri位址,Referer不能被發送。如果指定的是部分uri位址,則此位址應該是一個相對位址。

Range頭域

Range 頭域可以請求實體的一個或者多個子範圍。例如,

表示頭500個位元組:bytes=0-499

表示第二個500位元組:bytes=500-999

表示最後500個位元組:bytes=-500

表示500位元組以後的範圍:bytes=500-

第一個和最後一個位元組:bytes=0-0,-1

同時指定幾個範圍:bytes=500-600,601-999

但是伺服器可以忽略此請求頭,如果無條件GET包含Range請求頭,響應會以狀态碼206(PartialContent)傳回而不是以200(OK)。

User-Agent頭域

User-Agent頭域的内容包含送出請求的使用者資訊。 [ 我來分析] 這一部分是請求頭資訊,大家需要多用些HTTP分析工具去浏覽些網站來對比學習,給大家推薦兩款軟體,一款是IE支援的HTTPWATCH,另一款是firefox的httpfox插件. [ 結束] (4)響應頭資訊 響應消息的第一行為下面的格式:

HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF

HTTP-Version表示支援的HTTP版本,例如為HTTP/1.1。

Status-Code是一個三個數字的結果代碼。

Reason-Phrase給Status-Code提供一個簡單的文本描述。Status-Code主要用于機器自動識别,Reason-Phrase主要用于幫助使用者了解。 Status-Code 的第一個數字定義響應的類别,後兩個數字沒有分類的作用。第一個數字可能取5個不同的值:

1xx:資訊響應類,表示接收到請求并且繼續處理

2xx:處理成功響應類,表示動作被成功接收、了解和接受

3xx:重定向響應類,為了完成指定的動作,必須接受進一步處理

4xx:用戶端錯誤,客戶請求包含文法錯誤或者是不能正确執行

5xx:服務端錯誤,伺服器不能正确執行一個正确的請求

響   應頭域允許伺服器傳遞不能放在狀态行的附加資訊,這些域主要描述伺服器的資訊和 Request-URI 進一步的資訊。響應頭域包含 Age 、  Location 、 Proxy-Authenticate 、 Public 、 Retry-After 、 Server 、 Vary 、 Warning 、 WWW- Authenticate 。對響應頭域的擴充要求通訊雙方都支援,如果存在不支援的響應頭域,一般将會作為實體頭域處理。

典型的響應消息:

HTTP/1.0200OK

Date:Mon,31Dec200104:25:57GMT

Server:Apache/1.3.14(Unix)

Content-type:text/html

Last-modified:Tue,17Apr200106:46:28GMT

Etag:"a030f020ac7c01:1e9f"

Content-length:39725426

Content-range:bytes554554-40279979/40279980

上例第一行表示HTTP服務端響應一個GET方法。棕色的部分表示響應頭域的資訊,綠色的部分表示通用頭部分,紅色的部分表示實體頭域的資訊。

Location響應頭

Location 響應頭用于重定向接收者到一個新 URI 位址。

Server響應頭

Server 響應頭包含處理請求的原始伺服器的軟體資訊。此域能包含多個産品辨別和注釋,産品辨別一般按照重要性排序。 (5)實體頭域 請求消息和響應消息都可以包含實體資訊, 實體資訊一般由實體頭域和實體組成。 實體頭域包含關于實體的原資訊,實體頭包括 Allow 、 Content-Base 、 Content-Encoding 、 Content-Language 、  Content-Length 、 Content-Location 、 Content-MD5 、 Content-Range 、 Content-Type 、  Etag 、 Expires 、 Last-Modified 、 extension-header。extension-header允許用戶端定義新的實體頭,但是這些域可能無法未接受方識别。 實體可以是一個經過編碼的位元組流,它的編碼方式由 Content-Encoding 或 Content-Type 定義,它的長度由 Content-Length 或 Content-Range 定義。

Content-Type實體頭

Content-Type   實體頭用于向接收方訓示實體的媒體類型,指定HEAD方法送到接收方的實體媒體類型,或GET方法發送的請求媒體類型Content-Range實體頭

Content-Range實體頭

用于指定整個實體中的一部分的插入位置,他也訓示了整個實體的長度。在伺服器向客戶傳回一個部分響應,它必須描述響應覆寫的範圍和整個實體長度。一般格式:

Content-Range:bytes-unit SP first-byte-pos - last-byte-pos/entity-legth

例 如,傳送頭500個位元組次字段的形式:Content-Range:bytes0-499/1234如果一個http消息包含此節(例如,對範圍請求的響 應或對一系列範圍的重疊請求),Content-Range表示傳送的範圍,Content-Length表示實際傳送的位元組數。 Last-modified實體頭

Last-modified 實體頭指定伺服器上儲存内容的最後修訂時間。 [ 我來分析] 我覺得從請求頭資訊,響應頭資訊,還有現在的實體頭域上面說到的這些都是一些特有的,大家需要的不是強行記憶,而是多加練習分析,以達到記住,唉,我就是差這個,這篇文章都看了好幾遍了,可現在還要拿出來看。以後,沒事做浏覽網站就學學。。。。。。HOHO [ 結束] [總結]我們将其學習完,并不是說我們就完全掌握了,這才是剛剛開始,我們隻是懂了點HTTP的一角,我們還需要在以後多多練習,多多分析,掌握了這門知識在以後學習squid,還有些其他的web伺服器上配置上是有一定的好處的。大家一起學習吧!這份資料,我以後還會陸續修改添加的。。。

這是一篇結合網上的教程寫的,希望對大家學習有幫助!如果牽涉到版權問題,請告訴我,我會及時處理的。謝謝!

繼續閱讀