HTTP協(xié)議header標(biāo)頭詳解

通常HTTP消息包括客戶機(jī)向服務(wù)器的請求消息和服務(wù)器向客戶機(jī)的響應(yīng)消息平绩。這兩種類型的消息由一個起始行文兢,一個或者多個頭域,一個只是頭域結(jié)束的空行和可 選的消息體組成餐弱。HTTP的頭域包括通用頭宴霸,請求頭,響應(yīng)頭和實體頭四個部分膏蚓。每個頭域由一個域名瓢谢,冒號(:)和域值三部分組成。域名是大小寫無關(guān)的驮瞧,域 值前可以添加任何數(shù)量的空格符氓扛,頭域可以被擴(kuò)展為多行,在每行開始處,使用至少一個空格或制表符采郎。

通用頭域 (通用首部)

通用頭域包含請求和響應(yīng)消息都支持的頭域千所,提供了與報文相關(guān)的最基本的信息,通用頭域包含

Connection 允許客戶端和服務(wù)器指定與請求/響應(yīng)連接有關(guān)的選項

Date 提供日期和時間標(biāo)志,說明報文是什么時間創(chuàng)建的

MIME-Version 給出發(fā)送端使用的MIME版本

Trailer 如果報文采用了分塊傳輸編碼(chunked transfer encoding) 方式,就可以用這個首部列出位于報文拖掛(trailer)部分的首部集合

Transfer-Encoding 告知接收端為了保證報文的可靠傳輸,對報文采用了什么編碼方式

Upgrade 給出了發(fā)送端可能想要"升級"使用的新版本和協(xié)議

Via 顯示了報文經(jīng)過的中間節(jié)點(代理,網(wǎng)嘎un)

對通用頭域的擴(kuò)展要求通訊雙方都支持此擴(kuò) 展,如果存在不支持的通用頭域蒜埋,一般將會作為實體頭域處理淫痰。下面簡單介紹幾個在UPnP消息中使用的通用頭域。

Cache-Control頭域

Cache -Control指定請求和響應(yīng)遵循的緩存機(jī)制整份。在請求消息或響應(yīng)消息中設(shè)置 Cache-Control并不會修改另一個消息處理過程中的緩存處理過程待错。請求時的緩存指令包括no-cache、no-store烈评、max-age朗鸠、 max-stale、min-fresh础倍、only-if-cached烛占,響應(yīng)消息中的指令包括public、private沟启、no-cache忆家、no- store、no-transform德迹、must-revalidate芽卿、proxy-revalidate、max-age胳搞。各個消息中的指令含義如 下:

Public指示響應(yīng)可被任何緩存區(qū)緩存卸例。

Private指示對于單個用戶的整個或部分響應(yīng)消息,不能被共享緩存處理肌毅。這允許服務(wù)器僅僅描述當(dāng)用戶的部分響應(yīng)消息筷转,此響應(yīng)消息對于其他用戶的請求無效。

no-cache指示請求或響應(yīng)消息不能緩存

no-store用于防止重要的信息被無意的發(fā)布悬而。在請求消息中發(fā)送將使得請求和響應(yīng)消息都不使用緩存呜舒。

max-age指示客戶機(jī)可以接收生存期不大于指定時間(以秒為單位)的響應(yīng)。

min-fresh指示客戶機(jī)可以接收響應(yīng)時間小于當(dāng)前時間加上指定時間的響應(yīng)笨奠。

max-stale指示客戶機(jī)可以接收超出超時期間的響應(yīng)消息袭蝗。如果指定max-stale消息的值,那么客戶機(jī)可以接收超出超時期指定值之內(nèi)的響應(yīng)消息般婆。

Date頭域

Date頭域表示消息發(fā)送的時間到腥,時間的描述格式由rfc822定義。例如蔚袍,Date:Mon,31Dec200104:25:57GMT乡范。Date描述的時間表示世界標(biāo)準(zhǔn)時,換算成本地時間,需要知道用戶所在的時區(qū)篓足。

Pragma頭域

Pragma頭域用來包含實現(xiàn)特定的指令,最常用的是Pragma:no-cache闰蚕。在HTTP/1.1協(xié)議中栈拖,它的含義和Cache- Control:no-cache相同。

請求消息

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

MethodSPRequest-URISPHTTP-VersionCRLFMethod 表示對于Request-URI完成的方法没陡,這個字段是大小寫敏感的涩哟,包括OPTIONS、GET盼玄、HEAD贴彼、POST、PUT埃儿、DELETE器仗、 TRACE。方法GET和HEAD應(yīng)該被所有的通用WEB服務(wù)器支持童番,其他所有方法的實現(xiàn)是可選的精钮。GET方法取回由Request-URI標(biāo)識的信息。 HEAD方法也是取回由Request-URI標(biāo)識的信息剃斧,只是可以在響應(yīng)時轨香,不返回消息體。POST方法可以請求服務(wù)器接收包含在請求中的實體信息幼东,可 以用于提交表單臂容,向新聞組、BBS根蟹、郵件群組和數(shù)據(jù)庫發(fā)送消息脓杉。

SP表示空格。Request-URI遵循URI格式简逮,在此字段為星 號(*)時丽已,說明請求并不用于某個特定的資源地址,而是用于服務(wù)器本身买决。HTTP- Version表示支持的HTTP版本沛婴,例如為HTTP/1.1。CRLF表示換行回車符督赤。請求頭域允許客戶端向服務(wù)器傳遞關(guān)于請求或者關(guān)于客戶機(jī)的附加 信息嘁灯。請求頭域可能包含下列字段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翰苫。對請求頭域的擴(kuò)展要求通訊雙方都支持止邮,如果存在不支持的請 求頭域,一般將會作為實體頭域處理奏窑。

典型的請求消息:

GET http://download.google.com/somedata.exe

Host: download.google.com

Accept:*/*

Pragma: no-cache

Cache-Control: no-cache

Referer: http://download.google.com/

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

Range:bytes=554554-

上例第一行表示HTTP客戶端(可能是瀏覽器农尖、下載程序)通過GET方法獲得指定URL下的文件。棕色的部分表示請求頭域的信息良哲,綠色的部分表示通用頭部分盛卡。

Host頭域

Host頭域指定請求資源的Intenet主機(jī)和端口號,必須表示請求url的原始服務(wù)器或網(wǎng)關(guān)的位置筑凫。HTTP/1.1請求必須包含主機(jī)頭域滑沧,否則系統(tǒng)會以400狀態(tài)碼返回。

Referer頭域

Referer 頭域允許客戶端指定請求uri的源資源地址巍实,這可以允許服務(wù)器生成回退鏈表滓技,可用來登陸、優(yōu)化cache等棚潦。他也允許廢除的或錯誤的連接由于維護(hù)的目的被 追蹤令漂。如果請求的uri沒有自己的uri地址,Referer不能被發(fā)送丸边。如果指定的是部分uri地址叠必,則此地址應(yīng)該是一個相對地址。

Range頭域

Range頭域可以請求實體的一個或者多個子范圍妹窖。例如纬朝,

表示頭500個字節(jié):bytes=0-499

表示第二個500字節(jié):bytes=500-999

表示最后500個字節(jié):bytes=-500

表示500字節(jié)以后的范圍:bytes=500-

第一個和最后一個字節(jié):bytes=0-0,-1

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

但是服務(wù)器可以忽略此請求頭,如果無條件GET包含Range請求頭骄呼,響應(yīng)會以狀態(tài)碼206(PartialContent)返回而不是以200 (OK)共苛。

User-Agent頭域

User-Agent頭域的內(nèi)容包含發(fā)出請求的用戶信息判没。

響應(yīng)消息

響應(yīng)消息的第一行為下面的格式:

HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF

HTTP -Version表示支持的HTTP版本,例如為HTTP/1.1隅茎。Status- Code是一個三個數(shù)字的結(jié)果代碼澄峰。Reason-Phrase給Status-Code提供一個簡單的文本描述。Status-Code主要用于機(jī)器自 動識別辟犀,Reason-Phrase主要用于幫助用戶理解俏竞。Status-Code的第一個數(shù)字定義響應(yīng)的類別,后兩個數(shù)字沒有分類的作用踪蹬。第一個數(shù)字可 能取5個不同的值:

1xx:信息響應(yīng)類,表示接收到請求并且繼續(xù)處理

2xx:處理成功響應(yīng)類臣咖,表示動作被成功接收跃捣、理解和接受

3xx:重定向響應(yīng)類,為了完成指定的動作夺蛇,必須接受進(jìn)一步處理

4xx:客戶端錯誤疚漆,客戶請求包含語法錯誤或者是不能正確執(zhí)行

5xx:服務(wù)端錯誤,服務(wù)器不能正確執(zhí)行一個正確的請求

響應(yīng)頭域允許服務(wù)器傳遞不能放在狀態(tài)行的附加信息刁赦,這些域主要描述服務(wù)器的信息和 Request-URI進(jìn)一步的信息娶聘。響應(yīng)頭域包含Age、Location甚脉、Proxy-Authenticate丸升、Public、Retry- After牺氨、Server狡耻、Vary简烤、Warning界轩、WWW-Authenticate。對響應(yīng)頭域的擴(kuò)展要求通訊雙方都支持茬贵,如果存在不支持的響應(yīng)頭 域郊霎,一般將會作為實體頭域處理沼头。

典型的響應(yīng)消息:

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服務(wù)端響應(yīng)一個GET方法。棕色的部分表示響應(yīng)頭域的信息书劝,綠色的部分表示通用頭部分进倍,紅色的部分表示實體頭域的信息。

Location響應(yīng)頭

Location響應(yīng)頭用于重定向接收者到一個新URI地址购对。

Server響應(yīng)頭

Server響應(yīng)頭包含處理請求的原始服務(wù)器的軟件信息背捌。此域能包含多個產(chǎn)品標(biāo)識和注釋,產(chǎn)品標(biāo)識一般按照重要性排序洞斯。

實體

請求消息和響應(yīng)消息都可以包含實體信息毡庆,實體信息一般由實體頭域和實體組成坑赡。實體頭域包含關(guān)于實體的原信息,實體頭包括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允許客戶端定義新的實體 頭助被,但是這些域可能無法未接受方識別。實體可以是一個經(jīng)過編碼的字節(jié)流切诀,它的編碼方式由Content-Encoding或Content-Type定 義揩环,它的長度由Content-Length或Content-Range定義。

Content-Type實體頭

Content-Type實體頭用于向接收方指示實體的介質(zhì)類型幅虑,指定HEAD方法送到接收方的實體介質(zhì)類型丰滑,或GET方法發(fā)送的請求介質(zhì)類型 Content-Range實體頭

Content-Range實體頭用于指定整個實體中的一部分的插入位置,他也指示了整個實體的長度倒庵。在服務(wù)器向客戶返回一個部分響應(yīng)吨枉,它必須描述響應(yīng)覆蓋的范圍和整個實體長度。一般格式:

Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth

例如哄芜,傳送頭500個字節(jié)次字段的形式:Content-Range:bytes0- 499/1234如果一個http消息包含此節(jié)(例如貌亭,對范圍請求的響應(yīng)或?qū)σ幌盗蟹秶闹丿B請求),Content-Range表示傳送的范圍认臊, Content-Length表示實際傳送的字節(jié)數(shù)圃庭。

Last-modified實體頭

應(yīng)答頭 說明

Allow 服務(wù)器支持哪些請求方法(如GET、POST等)失晴。

Content-Encoding 文 檔的編碼(Encode)方法剧腻。只有在解碼之后才可以得到Content-Type頭指定的內(nèi)容類型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的 下載時間涂屁。Java的GZIPOutputStream可以很方便地進(jìn)行g(shù)zip壓縮书在,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它拆又。因此儒旬,Servlet應(yīng)該通過查看Accept-Encoding頭(即request.getHeader("Accept- Encoding"))檢查瀏覽器是否支持gzip栏账,為支持gzip的瀏覽器返回經(jīng)gzip壓縮的HTML頁面,為其他瀏覽器返回普通頁面栈源。

Content-Length 表 示內(nèi)容長度挡爵。只有當(dāng)瀏覽器使用持久HTTP連接時才需要這個數(shù)據(jù)。如果你想要利用持久連接的優(yōu)勢甚垦,可以把輸出文檔寫入 ByteArrayOutputStram茶鹃,完成后查看其大小,然后把該值放入Content-Length頭艰亮,最后通過 byteArrayStream.writeTo(response.getOutputStream()發(fā)送內(nèi)容闭翩。

Content-Type 表示后面的文檔屬于什么MIME類型。Servlet默認(rèn)為text/plain迄埃,但通常需要顯式地指定為text/html疗韵。由于經(jīng)常要設(shè)置Content-Type,因此HttpServletResponse提供了一個專用的方法setContentTyep调俘。

Date 當(dāng)前的GMT時間伶棒。你可以用setDateHeader來設(shè)置這個頭以避免轉(zhuǎn)換時間格式的麻煩旺垒。

Expires 應(yīng)該在什么時候認(rèn)為文檔已經(jīng)過期彩库,從而不再緩存它?

Last-Modified 文 檔的最后改動時間先蒋『眨客戶可以通過If-Modified-Since請求頭提供一個日期,該請求將被視為一個條件GET竞漾,只有改動時間遲于指定時間的文檔 才會返回眯搭,否則返回一個304(Not Modified)狀態(tài)。Last-Modified也可用setDateHeader方法來設(shè)置业岁。

Location 表示客戶應(yīng)當(dāng)?shù)侥睦锶ヌ崛∥臋n鳞仙。Location通常不是直接設(shè)置的,而是通過HttpServletResponse的sendRedirect方法笔时,該方法同時設(shè)置狀態(tài)代碼為302棍好。

Refresh 表示瀏覽器應(yīng)該在多少時間之后刷新文檔,以秒計允耿。除了刷新當(dāng)前文檔之外借笙,你還可以通過setHeader("Refresh", "5; URL=http://host/path")讓瀏覽器讀取指定的頁面。

注 意這種功能通常是通過設(shè)置HTML頁面HEAD區(qū)的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">實現(xiàn)较锡,這是因為业稼,自動刷新或重定向?qū)τ谀切┎荒苁褂肅GI或Servlet的 HTML編寫者十分重要。但是蚂蕴,對于Servlet來說低散,直接設(shè)置Refresh頭更加方便俯邓。

注意Refresh的意義是“N秒之后 刷新本頁面或訪問指定頁面”,而不是“每隔N秒刷新本頁面或訪問指定頁面”谦纱。因此看成,連續(xù)刷新要求每次都發(fā)送一個Refresh頭,而發(fā)送204狀態(tài)代碼則 可以阻止瀏覽器繼續(xù)刷新跨嘉,不管是使用Refresh頭還是<META HTTP-EQUIV="Refresh" ...>川慌。

注意Refresh頭不屬于HTTP 1.1正式規(guī)范的一部分,而是一個擴(kuò)展祠乃,但Netscape和IE都支持它梦重。

Server 服務(wù)器名字。Servlet一般不設(shè)置這個值亮瓷,而是由Web服務(wù)器自己設(shè)置琴拧。

Set-Cookie 設(shè)置和頁面關(guān)聯(lián)的Cookie。Servlet不應(yīng)使用response.setHeader("Set-Cookie", ...)嘱支,而是應(yīng)使用HttpServletResponse提供的專用方法addCookie蚓胸。參見下文有關(guān)Cookie設(shè)置的討論。

WWW-Authenticate 客 戶應(yīng)該在Authorization頭中提供什么類型的授權(quán)信息除师?在包含401(Unauthorized)狀態(tài)行的應(yīng)答中這個頭是必需的沛膳。例如, response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")汛聚。

注意Servlet一般不進(jìn)行這方面的處理锹安,而是讓W(xué)eb服務(wù)器的專門機(jī)制來控制受密碼保護(hù)頁面的訪問(例如.htaccess)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倚舀,一起剝皮案震驚了整個濱河市叹哭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌痕貌,老刑警劉巖风罩,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舵稠,居然都是意外死亡超升,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門柱查,熙熙樓的掌柜王于貴愁眉苦臉地迎上來廓俭,“玉大人,你說我怎么就攤上這事唉工⊙衅梗” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵淋硝,是天一觀的道長雹熬。 經(jīng)常有香客問我宽菜,道長,這世上最難降的妖魔是什么竿报? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任铅乡,我火速辦了婚禮,結(jié)果婚禮上烈菌,老公的妹妹穿的比我還像新娘阵幸。我一直安慰自己,他們只是感情好芽世,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布挚赊。 她就那樣靜靜地躺著,像睡著了一般济瓢。 火紅的嫁衣襯著肌膚如雪荠割。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天旺矾,我揣著相機(jī)與錄音蔑鹦,去河邊找鬼。 笑死箕宙,一個胖子當(dāng)著我的面吹牛嚎朽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扒吁,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼火鼻,長吁一口氣:“原來是場噩夢啊……” “哼室囊!你這毒婦竟也來了雕崩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤融撞,失蹤者是張志新(化名)和其女友劉穎盼铁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尝偎,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡饶火,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了致扯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肤寝。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抖僵,靈堂內(nèi)的尸體忽然破棺而出鲤看,到底是詐尸還是另有隱情,我是刑警寧澤耍群,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布义桂,位于F島的核電站找筝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏慷吊。R本人自食惡果不足惜袖裕,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望溉瓶。 院中可真熱鬧急鳄,春花似錦、人聲如沸堰酿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胞锰。三九已至灾锯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嗅榕,已是汗流浹背顺饮。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留凌那,地道東北人兼雄。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像帽蝶,于是被迫代替她去往敵國和親赦肋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容