2013.08
場景:最近,將做一個SSO單點登錄的功能,在本地實現(xiàn)本地認(rèn)證,服務(wù)器遠程認(rèn)證,遠程訪問認(rèn)證等功能。其中涉及HTTP消息頭,大量的消息頭字符串讓我頭暈眼花,不明白具體指什么東西,所以總結(jié)HTTP消息頭,為自己充電。好了,不多說了開始說正題... ...
HTTP 頭參考
HTTP 請求和 HTTP 響應(yīng)都使用頭發(fā)送有關(guān) HTTP 消息的信息。頭由一系列行組成,每行都包含名稱,然后依次是冒號、空格、值。字段可按任何順序排列。某些頭字段既能用于請求頭也能用于響應(yīng)頭,而另一些頭字段只能用于其中之一。
許多請求頭字段都允許客戶端在值部分指定多個可接受的選項,有時甚至可以對這些選項的首選項進行排名。多個項以逗號分隔。例如,客戶端可以發(fā)送包含“Content-Encoding: gzip, compress,”的請求頭,表示可以接受各種壓縮類型。如果服務(wù)器的響應(yīng)正文使用 gzip 編碼,其響應(yīng)頭中將包含“Content-Encoding: gzip”。
有些字段可以在單個頭中出現(xiàn)多次。例如,頭可以有多個“Warning”字段。
下表列出了 HTTP 1.1 頭字段。注意:有些頭字段是 MIME 字段。MIME 字段在 Internet Engineering Task Force (IETF) 文檔 RFC 2045 中進行了定義,但也可用于 HTTP 1.1 協(xié)議。有關(guān) MIME 和 HTTP 1.1 規(guī)范的詳細信息,請參閱 IEIF 頁。
一般頭字段
一般頭字段可用于請求消息和響應(yīng)消息。
名稱
示例值
Cache-Control
"max-age=10"
Connection
"close"
Date
"Tue, 11 Jul 2000 18:23:51 GMT"
Pragma
"no-cache"
Trailer
"Date"
Transfer-Encoding
"chunked"
Upgrade
"SHTTP/1.3"
Via
"HTTP/1.1 Proxy1, HTTP/1.1 Proxy2"
Warning
"112 Disconnected Operation"
請求頭字段
請求頭字段僅用于請求消息。
名稱
示例值
Accept
"text/html, image/*"
Accept-Charset
"iso8859-5"
Accept-Encoding
"gzip, compress"
Accept-Language
"en, fr"
Authorization
[credentials]
Content-Encoding
"gzip"
Expect
"100-continue"
From
"user@microsoft.com"
Host
"www.microsoft.com"
If-Match
"entity_tag001"
If-Modified-Since
"Tue, 11 Jul 2000 18:23:51 GMT"
If-None-Match
"entity_tag001"
If-Range
"entity_tag001" or "Tue, 11 Jul 2000 18:23:51 GMT"
If-Unmodified-Since
"Tue, 11 Jul 2000 18:23:51 GMT"
Max-Forwards
"3"
Proxy-Authorization
[credentials]
Range
"bytes=100-599"
Referer
"http://www.microsoft.com/resources.asp"
TE
"trailers"
User-Agent
"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)"
響應(yīng)頭字段
響應(yīng)頭字段僅用于響應(yīng)消息。
名稱
示例值
Accept-Ranges
"none"
Age
"2147483648(2^31)"
ETag
"b38b9-17dd-367c5dcd"
Last-Modified
"Tue, 11 Jul 2000 18:23:51 GMT"
Location
"http://localhost/redirecttarget.asp"
Proxy-Authenticate
[challenge]
Retry-After
"Tue, 11 Jul 2000 18:23:51 GMT" or "60"
Server
"Microsoft-IIS/5.0"
Vary
"Date"
WWW-Authenticate
[challenge]
實體頭字段
實體頭字段可以用于請求消息或響應(yīng)消息。實體頭字段中包含消息實體正文的有關(guān)信息,如使用的編碼格式。
名稱
示例值
Allow
"GET, HEAD"
Content-Encoding
"gzip"
Content-Language
"en"
Content-Length
"8445"
Content-Location
"http://localhost/page.asp"
Content-MD5
[md5-digest]
Content-Range
"bytes 2543-4532/7898"
Content-Type
"text/html"
Expires
"Tue, 11 Jul 2000 18:23:51 GMT"
Last-Modified
"Tue, 11 Jul 2000 18:23:51 GMT"
請求頭示例
以下是 HTTP 請求的簡單示例。
GET /articles/news/today.asp HTTP/1.1
Accept: */*
Accept-Language: en-us
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/links.asp
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Accept-Encoding: gzip, deflate
該請求具有請求行,其中包括方法 (GET)、資源路徑 (/articles/news/today.asp) 和 HTTP 版本 (HTTP/1.1)。由于該請求沒有正文,故所有請求行后面的內(nèi)容都是頭的一部分。緊接著頭之后是一個空行,表示頭已結(jié)束。
響應(yīng)頭示例
Web 服務(wù)器可以通過多種方式響應(yīng)前一個請求。假設(shè)文件是可以訪問的,并且用戶具有查看該文件的權(quán)限,則響應(yīng)類似于:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 13 Jul 2000 05:46:53 GMT
Content-Length: 2291
Content-Type: text/html
Set-Cookie: ASPSESSIONIDQQGGGNCG=LKLDFFKCINFLDMFHCBCBMFLJ; path=/
Cache-control: private
<HTML>
<BODY>
...
響應(yīng)的第一行稱為狀態(tài)行。它包含響應(yīng)所用的 HTTP 版本、狀態(tài)編碼 (200) 和原因短語。示例中包含一個頭,其中具有五個字段,接著是一個空行(回車和換行符),然后是響應(yīng)正文的頭兩行。
HTTP請求頭概述
HTTP客戶程序(例如瀏覽器),向服務(wù)器發(fā)送請求的時候必須指明請求類型(一般是GET或者POST)。如有必要,客戶程序還可以選擇發(fā)送其他的請求頭。大多數(shù)請求頭并不是必需的,但Content- Length除外。對于POST請求來說Content-Length必須出現(xiàn)。
下面是一些最常見的請求頭
Accept:瀏覽器可接受的MIME類型。
Accept-Charset:瀏覽器可接受的字符集。
Accept-Encoding:瀏覽器能夠進行解碼的數(shù)據(jù)編碼方式,比如gzip。Servlet能夠向支持gzip的瀏覽器返回經(jīng)gzip編碼的HTML頁面。許多情形下這可以減少5到10倍的下載時間。
Accept-Language:瀏覽器所希望的語言種類,當(dāng)服務(wù)器能夠提供一種以上的語言版本時要用到。
Authorization:授權(quán)信息,通常出現(xiàn)在對服務(wù)器發(fā)送的WWW-Authenticate頭的應(yīng)答中。
Connection:表示是否需要持久連接。如果Servlet看到這里的值為"Keep-Alive",或者看到請求使用的是HTTP 1.1 (HTTP 1.1默認(rèn)進行持久連接),它就可以利用持久連接的優(yōu)點,當(dāng)頁面包含多個元素時(例如Applet,圖片),顯著地減少下載所需要的時間。要實現(xiàn)這一點,Servlet需要在應(yīng)答中發(fā)送一個Content-Length頭,最簡單的實現(xiàn)方法是:先把內(nèi)容寫入 ByteArrayOutputStream,然后在正式寫出內(nèi)容之前計算它的大小。
Content-Length:表示請求消息正文的長度。
Cookie:這是最重要的請求頭信息之一
From:請求發(fā)送者的email地址,由一些特殊的Web客戶程序使用,瀏覽器不會用到它。
Host:初始URL中的主機和端口。
If-Modified-Since:只有當(dāng)所請求的內(nèi)容在指定的日期之后又經(jīng)過修改才返回它,否則返回304"Not Modified"應(yīng)答。
Pragma:指定"no-cache"值表示服務(wù)器必須返回一個刷新后的文檔,即使它是代理服務(wù)器而且已經(jīng)有了頁面的本地拷貝。
Referer:包含一個URL,用戶從該URL代表的頁面出發(fā)訪問當(dāng)前請求的頁面。
User-Agent:瀏覽器類型,如果Servlet返回的內(nèi)容與瀏覽器類型有關(guān)則該值非常有用。
UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE瀏覽器所發(fā)送的非標(biāo)準(zhǔn)的請求頭,表示屏幕大小、顏色深度、操作系統(tǒng)和CPU類型。
有關(guān)HTTP頭完整、詳細的說明,請參見
http://www.w3.org/Protocols/的HTTP規(guī)范。——————————————————————————————————————————————
HTTP應(yīng)答頭概述(HttpServletResponse)
Web服務(wù)器的HTTP應(yīng)答一般由以下幾項構(gòu)成:一個狀態(tài)行,一個或多個應(yīng)答頭,一個空行,內(nèi)容文檔。設(shè)置HTTP應(yīng)答頭往往和設(shè)置狀態(tài)行中的狀態(tài)代碼結(jié)合起來。例如,有好幾個表示"文檔位置已經(jīng)改變"的狀態(tài)代碼都伴隨著一個Location頭,而401(Unauthorized)狀態(tài)代碼則必須伴隨一個WWW-Authenticate頭。
然而,即使在沒有設(shè)置特殊含義的狀態(tài)代碼時,指定應(yīng)答頭也是很有用的。應(yīng)答頭可以用來完成:設(shè)置Cookie,指定修改日期,指示瀏覽器按照指定的間隔刷新頁面,聲明文檔的長度以便利用持久HTTP連接,……等等許多其他任務(wù)。
設(shè)置應(yīng)答頭最常用的方法是HttpServletResponse的setHeader,該方法有兩個參數(shù),分別表示應(yīng)答頭的名字和值。和設(shè)置狀態(tài)代碼相似,設(shè)置應(yīng)答頭應(yīng)該在發(fā)送任何文檔內(nèi)容之前進行。
setDateHeader方法和setIntHeadr方法專門用來設(shè)置包含日期和整數(shù)值的應(yīng)答頭,前者避免了把Java時間轉(zhuǎn)換為GMT時間字符串的麻煩,后者則避免了把整數(shù)轉(zhuǎn)換為字符串的麻煩。
HttpServletResponse還提供了許多設(shè)置
setContentType:設(shè)置Content-Type頭。大多數(shù)Servlet都要用到這個方法。
setContentLength:設(shè)置Content-Length頭。對于支持持久HTTP連接的瀏覽器來說,這個函數(shù)是很有用的。
addCookie:設(shè)置一個Cookie(Servlet API中沒有setCookie方法,因為應(yīng)答往往包含多個Set-Cookie頭)。
另外,如上節(jié)介紹,sendRedirect方法設(shè)置狀態(tài)代碼302時也會設(shè)置Location頭。
有關(guān)HTTP頭詳細和完整的說明,請參見
http://www.w3.org/Protocols/規(guī)范。HTTP應(yīng)答頭 說明
Allow 服務(wù)器支持哪些請求方法(如GET、POST等)。
Content -Encoding 文檔的編碼(Encode)方法。只有在解碼之后才可以得到Content-Type頭指定的內(nèi)容類型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的下載時間。Java的GZIPOutputStream可以很方便地進行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ī)范的一部分,而是一個擴展,但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一般不進行這方面的處理,而是讓W(xué)eb服務(wù)器的專門機制來控制受密碼保護頁面的訪問(例如.htaccess)。
HTTP請求模型
一、連接至Web服務(wù)器
一個客戶端應(yīng)用(如Web瀏覽器)打開到Web服務(wù)器的HTTP端口的一個套接字(缺省為80)。
例如:
http://www.myweb.com:8080/index.html在Java中,這將等同于代碼:
Soceet socket=new Socket("www.myweb.com",8080);
InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();
二、發(fā)送HTTP請求
通過連接,客戶端寫一個ASCII文本請求行,后跟0或多個HTTP頭標(biāo),一個空行和實現(xiàn)請求的任意數(shù)據(jù)。
一個請求由四個部分組成:請求行、請求頭標(biāo)、空行和請求數(shù)據(jù)
1.請求行:請求行由三個標(biāo)記組成:請求方法、請求URI和HTTP版本,它們用空格分隔。
例如:GET /index.html HTTP/1.1
HTTP規(guī)范定義了8種可能的請求方法:
GET 檢索URI中標(biāo)識資源的一個簡單請求
HEAD 與GET方法相同,服務(wù)器只返回狀態(tài)行和頭標(biāo),并不返回請求文檔
POST 服務(wù)器接受被寫入客戶端輸出流中的數(shù)據(jù)的請求
PUT 服務(wù)器保存請求數(shù)據(jù)作為指定URI新內(nèi)容的請求
DELETE 服務(wù)器刪除URI中命名的資源的請求
OPTIONS 關(guān)于服務(wù)器支持的請求方法信息的請求
TRACE Web服務(wù)器反饋Http請求和其頭標(biāo)的請求
CONNECT 已文檔化但當(dāng)前未實現(xiàn)的一個方法,預(yù)留做隧道處理
2.請求頭標(biāo):由關(guān)鍵字/值對組成,每行一對,關(guān)鍵字和值用冒號(:)分隔。
請求頭標(biāo)通知服務(wù)器有關(guān)于客戶端的功能和標(biāo)識,典型的請求頭標(biāo)有:
User-Agent 客戶端廠家和版本
Accept 客戶端可識別的內(nèi)容類型列表
Content-Length 附加到請求的數(shù)據(jù)字節(jié)數(shù)
3.空行:最后一個請求頭標(biāo)之后是一個空行,發(fā)送回車符和退行,通知服務(wù)器以下不再有頭標(biāo)。
4.請求數(shù)據(jù):使用POST傳送數(shù)據(jù),最常使用的是Content-Type和Content-Length頭標(biāo)。
三、服務(wù)端接受請求并返回HTTP響應(yīng)
Web服務(wù)器解析請求,定位指定資源。服務(wù)器將資源副本寫至套接字,在此處由客戶端讀取。
一個響應(yīng)由四個部分組成;狀態(tài)行、響應(yīng)頭標(biāo)、空行、響應(yīng)數(shù)據(jù)
1.狀態(tài)行:狀態(tài)行由三個標(biāo)記組成:HTTP版本、響應(yīng)代碼和響應(yīng)描述。
HTTP版本:向客戶端指明其可理解的最高版本。
響應(yīng)代碼:3位的數(shù)字代碼,指出請求的成功或失敗,如果失敗則指出原因。
響應(yīng)描述:為響應(yīng)代碼的可讀性解釋。
例如:HTTP/1.1 200 OK
HTTP響應(yīng)碼:
1xx:信息,請求收到,繼續(xù)處理
2xx:成功,行為被成功地接受、理解和采納
3xx:重定向,為了完成請求,必須進一步執(zhí)行的動作
4xx:客戶端錯誤:
2.響應(yīng)頭標(biāo):像請求頭標(biāo)一樣,它們指出服務(wù)器的功能,標(biāo)識出響應(yīng)數(shù)據(jù)的細節(jié)。
3.空行:最后一個響應(yīng)頭標(biāo)之后是一個空行,發(fā)送回車符和退行,表明服務(wù)器以下不再有頭標(biāo)。
4.響應(yīng)數(shù)據(jù):HTML文檔和圖像等,也就是HTML本身。
四、服務(wù)器關(guān)閉連接,瀏覽器解析響應(yīng)
1.瀏覽器首先解析狀態(tài)行,查看表明請求是否成功的狀態(tài)代碼。
2.然后解析每一個響應(yīng)頭標(biāo),頭標(biāo)告知以下為若干字節(jié)的HTML。
3.讀取響應(yīng)數(shù)據(jù)HTML,根據(jù)HTML的語法和語義對其進行格式化,并在瀏覽器窗口中顯示它。
4.一個HTML文檔可能包含其它需要被載入的資源引用,瀏覽器識別這些引用,對其它的資源再進行額外的請求,此過程循環(huán)多次。
五、無狀態(tài)連接
HTTP模型是無狀態(tài)的,表明在處理一個請求時,Web服務(wù)器并不記住來自同一客戶端的請求。
六、實例
1.瀏覽器發(fā)出請求
GET /index.html HTTP/1.1
服務(wù)器返回響應(yīng)
HTTP /1.1 200 OK
Date: Apr 11 2006 15:32:08 GMT
Server: Apache/2.0.46(win32)
Content-Length: 119
Content-Type: text/html
<HTML>
<HEAD>
<LINK REL="stylesheet" HREF="index.css">
</HEAD>
<BODY>
<IMG SRC="image/logo.png">
</BODY>
</HTML>
2.瀏覽器發(fā)出請求
GET /index.css HTTP/1.1
服務(wù)器返回響應(yīng)
HTTP /1.1 200 OK
Date: Apr 11 2006 15:32:08 GMT
Server: Apache/2.0.46(win32)
Connection: Keep-alive, close
Content-Length: 70
Content-Type: text/plane
h3{
font-size:20px;
font-weight:bold;
color:#005A9C;
}
3.瀏覽器發(fā)出請求
GET image/logo.png HTTP/1.1
服務(wù)器返回響應(yīng)
HTTP /1.1 200 OK
Date: Apr 11 2006 15:32:08 GMT
Server: Apache/2.0.46(win32)
Connection: Keep-alive, close
Content-Length: 1280
Content-Type: text/plane
{Binary image data follows}
(附錄)
1.HTTP規(guī)范:Internet工程制定組織(IETF)發(fā)布的RFC指定Internet標(biāo)準(zhǔn),這些RFC被Internet研究發(fā)展機構(gòu)廣泛接受。因為它們是標(biāo)準(zhǔn)文檔,故一般用正規(guī)語言編寫,如立法文標(biāo)一樣。
2.RFC:RFC一旦被提出,就被編號且不會再改變,當(dāng)一個標(biāo)準(zhǔn)被修改時,則給出一個新的RFC。作為標(biāo)準(zhǔn),RFC在Internet上被廣泛采用。
3.HTTP的幾個重要RFC:
RFC1945 HTTP 1.0 描述
RFC2068 HTTP 1.1 初步描述
RFC2616 HTTP 1.1 標(biāo)準(zhǔn)
4.資源標(biāo)識符URI(Uniform Resource Identifter,URI)
HTTP參考
一、HTTP碼應(yīng)碼
響應(yīng)碼由三位十進制數(shù)字組成,它們出現(xiàn)在由HTTP服務(wù)器發(fā)送的響應(yīng)的第一行。
響應(yīng)碼分五種類型,由它們的第一位數(shù)字表示:
1.1xx:信息,請求收到,繼續(xù)處理
2.2xx:成功,行為被成功地接受、理解和采納
3.3xx:重定向,為了完成請求,必須進一步執(zhí)行的動作
4.4xx:客戶端錯誤,請求包含語法錯誤或者請求無法實現(xiàn)
5.5xx:服務(wù)器錯誤,服務(wù)器不能實現(xiàn)一種明顯無效的請求
下表顯示每個響應(yīng)碼及其含義:
100 繼續(xù)
101 分組交換協(xié)
200 OK
201 被創(chuàng)建
202 被采納
203 非授權(quán)信息
204 無內(nèi)容
205 重置內(nèi)容
206 部分內(nèi)容
300 多選項
301 永久地傳送
302 找到
303 參見其他
304 未改動
305 使用代理
307 暫時重定向
400 錯誤請求
401 未授權(quán)
402 要求付費
403 禁止
404 未找到
405 不允許的方法
406 不被采納
407 要求代理授權(quán)
408 請求超時
409 沖突
410 過期的
411 要求的長度
412 前提不成立
413 請求實例太大
414 請求URI太大
415 不支持的媒體類型
416 無法滿足的請求范圍
417 失敗的預(yù)期
500 內(nèi)部服務(wù)器錯誤
501 未被使用
502 網(wǎng)關(guān)錯誤
503 不可用的服務(wù)
504 網(wǎng)關(guān)超時
505 HTTP版本未被支持
二、HTTP頭標(biāo)
頭標(biāo)由主鍵/值對組成。它們描述客戶端或者服務(wù)器的屬性、被傳輸?shù)馁Y源以及應(yīng)該實現(xiàn)連接。
四種不同類型的頭標(biāo):
1.通用頭標(biāo):即可用于請求,也可用于響應(yīng),是作為一個整體而不是特定資源與事務(wù)相關(guān)聯(lián)。
2.請求頭標(biāo):允許客戶端傳遞關(guān)于自身的信息和希望的響應(yīng)形式。
3.響應(yīng)頭標(biāo):服務(wù)器和于傳遞自身信息的響應(yīng)。
4.實體頭標(biāo):定義被傳送資源的信息。即可用于請求,也可用于響應(yīng)。
頭標(biāo)格式:<name>:<value><CRLF>
下表描述在HTTP/1.1中用到的頭標(biāo)
Accept 定義客戶端可以處理的媒體類型,按優(yōu)先級排序;
在一個以逗號為分隔的列表中,可以定義多種類型和使用通配符。例如:Accept: image/jpeg,image/png,*/*
Accept-Charset定義客戶端可以處理的字符集,按優(yōu)先級排序;
在一個以逗號為分隔的列表中,可以定義多種類型和使用通配符。例如:Accept-Charset: iso-8859-1,*,utf-8
Accept-Encoding定義客戶端可以理解的編碼機制。例如:Accept-Encoding:gzip,compress
Accept-Language 定義客戶端樂于接受的自然語言列表。例如:Accept-Language: en,de
Accept-Ranges一個響應(yīng)頭標(biāo),它允許服務(wù)器指明:將在給定的偏移和長度處,為資源組成部分的接受請求。
該頭標(biāo)的值被理解為請求范圍的度量單位。例如Accept-Ranges: bytes或Accept-Ranges: none
Age 允許服務(wù)器規(guī)定自服務(wù)器生成該響應(yīng)以來所經(jīng)過的時間長度,以秒為單位。
該頭標(biāo)主要用于緩存響應(yīng)。例如:Age: 30
Allow 一個響應(yīng)頭標(biāo),它定義一個由位于請求URI中的次源所支持的HTTP方法列表。例如:Allow: GET,PUT
aUTHORIZATION 一個響應(yīng)頭標(biāo),用于定義訪問一種資源所必需的授權(quán)(域和被編碼的用戶ID與口令)。
例如:Authorization: Basic YXV0aG9yOnBoaWw=
Cache-Control 一個用于定義緩存指令的通用頭標(biāo)。例如:Cache-Control: max-age=30
Connection 一個用于表明是否保存socket連接為開放的通用頭標(biāo)。例如:Connection: close或Connection: keep-alive
Content-Base 一種定義基本URI的實體頭標(biāo),為了在實體范圍內(nèi)解析相對URLs。
如果沒有定義Content-Base頭標(biāo)解析相對URLs,使用Content-Location URI(存在且絕對)或使用URI請求。
例如:Content-Base: Http://www.myweb.com
Content-Encoding 一種介質(zhì)類型修飾符,標(biāo)明一個實體是如何編碼的。例如:Content-Encoding: zip
Content-Language 用于指定在輸入流中數(shù)據(jù)的自然語言類型。例如:Content-Language: en
Content-Length 指定包含于請求或響應(yīng)中數(shù)據(jù)的字節(jié)長度。例如:Content-Length:382
Content-Location 指定包含于請求或響應(yīng)中的資源定位(URI)。
如果是一絕。對URL它也作為被解析實體的相對URL的出發(fā)點。
例如:Content-Location:
www.myweb.com/newsContent-MD5 實體的一種MD5摘要,用作校驗和。
發(fā)送方和接受方都計算MD5摘要,接受方將其計算的值與此頭標(biāo)中傳遞的值進行比較。
例如:Content-MD5:
Content-Range 隨部分實體一同發(fā)送;標(biāo)明被插入字節(jié)的低位與高位字節(jié)偏移,也標(biāo)明此實體的總長度。
例如:Content-Range: 1001-2000/5000
Contern-Type標(biāo)明發(fā)送或者接收的實體的MIME類型。例如:Content-Type: text/html
Date 發(fā)送HTTP消息的日期。例如:Date: Mon,10PR 18:42:51 GMT
ETag 一種實體頭標(biāo),它向被發(fā)送的資源分派一個唯一的標(biāo)識符。
對于可以使用多種URL請求的資源,ETag可以用于確定實際被發(fā)送的資源是否為同一資源。
例如:ETag: "208f-419e-30f8dc99"
Expires 指定實體的有效期。例如:Expires: Mon,05 Dec 2008 12:00:00 GMT
Form 一種請求頭標(biāo),給定控制用戶代理的人工用戶的電子郵件地址。例如:From: webmaster@myweb.com
Host 被請求資源的主機名。對于使用HTTP/1.1的請求而言,此域是強制性的。例如:Host: www.myweb.com
If-Modified-Since 如果包含了GET請求,導(dǎo)致該請求條件性地依賴于資源上次修改日期。
如果出現(xiàn)了此頭標(biāo),并且自指定日期以來,此資源已被修改,應(yīng)該反回一個304響應(yīng)代碼。
例如:If-Modified-Since: Mon,10PR 18:42:51 GMT
If-Match 如果包含于一個請求,指定一個或者多個實體標(biāo)記。只發(fā)送其ETag與列表中標(biāo)記區(qū)配的資源。
例如:If-Match: "208f-419e-308dc99"
If-None-Match 如果包含一個請求,指定一個或者多個實體標(biāo)記。資源的ETag不與列表中的任何一個條件匹配,操作才執(zhí)行。
例如:If-None-Match: "208f-419e-308dc99"
If-Range 指定資源的一個實體標(biāo)記,客戶端已經(jīng)擁有此資源的一個拷貝。必須與Range頭標(biāo)一同使用。
如果此實體自上次被客戶端檢索以來,還不曾修改過,那么服務(wù)器只發(fā)送指定的范圍,否則它將發(fā)送整個資源。
例如:Range: byte=0-499If-Range:"208f-419e-30f8dc99"
If-Unmodified-Since 只有自指定的日期以來,被請求的實體還不曾被修改過,才會返回此實體。
例如:If-Unmodified-Since:Mon,10PR 18:42:51 GMT
Last-Modified 指定被請求資源上次被修改的日期和時間。例如:Last-Modified: Mon,10PR 18:42:51 GMT
Location 對于一個已經(jīng)移動的資源,用于重定向請求者至另一個位置。
與狀態(tài)編碼302(暫時移動)或者301(永久性移動)配合使用。
例如:Location:
www2.myweb.com/index.jspMax-Forwards 一個用于TRACE方法的請求頭標(biāo),以指定代理或網(wǎng)關(guān)的最大數(shù)目,該請求通過網(wǎng)關(guān)才得以路由。
在通過請求傳遞之前,代理或網(wǎng)關(guān)應(yīng)該減少此數(shù)目。例如:Max-Forwards: 3
Pragma 一個通用頭標(biāo),它發(fā)送實現(xiàn)相關(guān)的信息。例如:Pragma: no-cache
Proxy-Authenticate 類似于WWW-Authenticate,便是有意請求只來自請求鏈(代理)的下一個服務(wù)器的認(rèn)證。
例如:Proxy-Authenticate: Basic realm-admin
Proxy-Proxy-Authorization 類似于授權(quán),但并非有意傳遞任何比在即時服務(wù)器鏈中更進一步的內(nèi)容。
例如:Proxy-Proxy-Authorization: Basic YXV0aG9yOnBoaWw=
Public 列表顯示服務(wù)器所支持的方法集。例如:Public: OPTIONS,MGET,MHEAD,GET,HEAD
Range 指定一種度量單位和一個部分被請求資源的偏移范圍。例如:Range: bytes=206-5513
Refener 一種請求頭標(biāo)域,標(biāo)明產(chǎn)生請求的初始資源。對于HTML表單,它包含此表單的Web頁面的地址。
例如:Refener:
www.myweb.com/news/search.htmlRetry-After 一種響應(yīng)頭標(biāo)域,由服務(wù)器與狀態(tài)編碼503(無法提供服務(wù))配合發(fā)送,以標(biāo)明再次請求之前應(yīng)該等待多長時間。
此時間即可以是一種日期,也可以是一種秒單位。例如:Retry-After: 18
Server 一種標(biāo)明Web服務(wù)器軟件及其版本號的頭標(biāo)。例如:Server: Apache/2.0.46(Win32)
Transfer-Encoding 一種通用頭標(biāo),標(biāo)明對應(yīng)被接受方反向的消息體實施變換的類型。例如:Transfer-Encoding: chunked
Upgrade 允許服務(wù)器指定一種新的協(xié)議或者新的協(xié)議版本,與響應(yīng)編碼101(切換協(xié)議)配合使用。
例如:Upgrade: HTTP/2.0
User-Agent定義用于產(chǎn)生請求的軟件類型(典型的如Web瀏覽器)。
例如:User-Agent: Mozilla/4.0(compatible; MSIE 5.5; Windows NT; DigExt)
Vary 一個響應(yīng)頭標(biāo),用于表示使用服務(wù)器驅(qū)動的協(xié)商從可用的響應(yīng)表示中選擇響應(yīng)實體。例如:Vary: *
Via 一個包含所有中間主機和協(xié)議的通用頭標(biāo),用于滿足請求。例如:Via: 1.0 fred.com, 1.1 wilma.com
Warning 用于提供關(guān)于響應(yīng)狀態(tài)補充信息的響應(yīng)頭標(biāo)。例如:Warning: 99 www.myweb.com Piano needs tuning
www-Authenticate 一個提示用戶代理提供用戶名和口令的響應(yīng)頭標(biāo),與狀態(tài)編碼401(未授權(quán))配合使用。響應(yīng)一個授權(quán)頭標(biāo)。
例如:www-Authenticate: Basic realm=zxm.mgmt
<!--EndFragment-->