在計(jì)算機(jī)網(wǎng)絡(luò)中,如果兩臺(tái)機(jī)器要通信,他們首先要定義通信數(shù)據(jù)的格式,這樣在服務(wù)器收到客戶端的請(qǐng)求消息時(shí),它才能正確的解析請(qǐng)求的內(nèi)容,然后根據(jù)請(qǐng)求內(nèi)容處理邏輯,并將相應(yīng)消息傳遞會(huì)客戶端;此時(shí),客戶端也要根據(jù)已定義的響應(yīng)數(shù)據(jù)格式解析響應(yīng)消息。在瀏覽器和HTTP服務(wù)器之間的通信數(shù)據(jù)格式使用HTTP協(xié)議定義。
請(qǐng)求消息
其中請(qǐng)求消息的格式為:

例子:
POST /index.jsp?articleId=1234&articleName=GoodArticle HTTP/1.1
Host: www.blogjava.com
Content-Length: 74
Content-Type: application/x-www-form-urlencoded
myText1=hello+world&myText2=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C
請(qǐng)求消息由三部分組成:
請(qǐng)求行、消息報(bào)頭、請(qǐng)求正文。
請(qǐng)求行格式為:請(qǐng)求方法、空格、URL、版本號(hào)、回車、換行。請(qǐng)求方法集:GET、POST、HEAD、PUT、DELETE、TRACE、CONNECT、OPTIONS。URL中'?'之后的值用于表達(dá)請(qǐng)求參數(shù)。版本號(hào)可以是:HTTP/1.0、HTTP/1.1。
消息報(bào)頭格式為:報(bào)頭名字、冒號(hào)(':')、空格、報(bào)頭值、回車、換行。消息報(bào)頭用于傳遞元數(shù)據(jù)信息,用于表達(dá)消息正文的類型、編碼格式、緩存等,以回車換行結(jié)束。當(dāng)遇到一個(gè)空行(只有回車換行),表示消息報(bào)頭結(jié)束。
消息正文,可以是任意定義的格式,它接在消息報(bào)頭后(空行之后)。
請(qǐng)求消息是否包含消息體由Content-Length或Transfer-Encoding決定,如果規(guī)范定義的請(qǐng)求方法不允許包含消息體,則在請(qǐng)求消息中不可以包含消息體。Server在解析時(shí),如果請(qǐng)求方法不支持消息體,則在請(qǐng)求消息中包含的消息體會(huì)被忽略。
請(qǐng)求方法:
HTTP1.1定義的請(qǐng)求方法有
OPTIONS:
請(qǐng)求查詢服務(wù)器的性能,或查詢與資源相關(guān)的選項(xiàng)和需求。
該方法的Response不可緩存。當(dāng)前版本HTTP不支持該請(qǐng)求方法包含消息實(shí)體。如果該請(qǐng)求包含請(qǐng)求消息體,HTTP服務(wù)器將會(huì)拋棄這些信息。如果Request-URI為*,該請(qǐng)求類似“ping”或“no-op”操作。
GET:
請(qǐng)求獲取Request-URI所標(biāo)識(shí)的資源。
響應(yīng)消息可緩存。在GET請(qǐng)求消息中,如果包含If-Modified-Since、If-Unmodified-Since、If-Match、If-None-Match、If-Range字段,則該請(qǐng)求稱為“條件GET”。
HEAD:
請(qǐng)求獲取由Request-URI所標(biāo)識(shí)的資源的響應(yīng)消息報(bào)頭。
響應(yīng)消息可緩存。
POST:
在Request-URI所標(biāo)識(shí)的資源后附加新的數(shù)據(jù)。
如果在HTTP服務(wù)器中有創(chuàng)建新的資源,則該方法的響應(yīng)狀態(tài)碼必須是201(Created),并且響應(yīng)消息實(shí)體包含描述請(qǐng)求的狀態(tài),以及一個(gè)Location響應(yīng)消息頭。該方法的響應(yīng)消息不可被緩存。
PUT:
請(qǐng)求服務(wù)器存儲(chǔ)一個(gè)資源,并用Request-URI作為其標(biāo)識(shí)。
如果Request-URI指向一個(gè)已存在的資源,那么包含的消息實(shí)體被視為已存在資源的新版本,如果Request-URI沒(méi)有對(duì)應(yīng)的資源,則HTTP服務(wù)器可以通過(guò)該URI創(chuàng)建相應(yīng)資源,此時(shí)HTTP服務(wù)器響應(yīng)201(Created)狀態(tài)碼。如果修改了已存在的資源,則返回200(OK)或204(No Content)。HTTP服務(wù)器不可以忽略Content-*消息頭(如Content-Range),如果HTTP服務(wù)器不能理解該消息頭,則返回501(Not Implemented)響應(yīng)消息碼。
DELETE:
請(qǐng)求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源。
即使該方法的返回狀態(tài)碼表明該操作以執(zhí)行成功,客戶端還是不能保證該方法需要?jiǎng)h除的操作已經(jīng)被執(zhí)行了。但是HTTP服務(wù)器必須保證在返回響應(yīng)給客戶端的時(shí)候,HTTP服務(wù)器已經(jīng)打算刪除這個(gè)資源或把它移動(dòng)到一個(gè)不可訪問(wèn)的位置。成功的響應(yīng)碼為200(OK),并且響應(yīng)消息實(shí)體中可以包含一些描述信息;202(Accept)表明這個(gè)操作還沒(méi)被完全執(zhí)行;204(No Content)表示這個(gè)操作已經(jīng)執(zhí)行完成,但是沒(méi)有響應(yīng)消息實(shí)體。該方法的響應(yīng)消息不可被緩存。
TRACE:
請(qǐng)求服務(wù)器會(huì)送收到的請(qǐng)求信息,主要用于測(cè)試或診斷。
該方法以200返回標(biāo)識(shí)成功。該請(qǐng)求消息不可包含請(qǐng)求消息實(shí)體。該方法的Response必須在響應(yīng)消息實(shí)體中包含所有的請(qǐng)求消息,其相應(yīng)消息的Content-Type值為:message/http,該Response不可被緩存。
CONNECT:
保留將來(lái)使用。
擴(kuò)展的方法:
用戶自定義擴(kuò)展方法。
如果Server能識(shí)別某個(gè)請(qǐng)求方法但是不允許該請(qǐng)求方法,則應(yīng)該返回405(Method Not Allowed)響應(yīng)狀態(tài)。如果Server無(wú)法識(shí)別某個(gè)請(qǐng)求方法或者當(dāng)前Server沒(méi)有實(shí)現(xiàn)這個(gè)請(qǐng)求方法,則應(yīng)該返回501(Not Implemented)狀態(tài)碼。
Request-URI支持的值有:*|absoluteURI|abs_path|authority
- *表示請(qǐng)求不應(yīng)用于某個(gè)特定的資源,并且只對(duì)于某些不需要應(yīng)用于特定資源的請(qǐng)求方法,如:OPTIONS * HTTP/1.1
- absoluteURI:當(dāng)客戶端是向一個(gè)代理發(fā)送請(qǐng)求時(shí)需要使用absoluteURI,然后這個(gè)代理會(huì)轉(zhuǎn)發(fā)這個(gè)請(qǐng)求,并返回響應(yīng)。雖然按規(guī)范,HTTP1.1客戶端只發(fā)送absoluteURI到代理服務(wù)器,但是為了在將來(lái)的HTTP版本中可以允許請(qǐng)求都轉(zhuǎn)換成absoluteURI,所有HTTP1.1 Server必須可以解析absoluteURI風(fēng)格的請(qǐng)求:GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
- authority只在CONNECT請(qǐng)求方法中使用。
- abs_path:用于表示Server的資源,而Server本身的信息在Host消息頭中表示:
GET /put/www/TheProject.html HTTP/1.1
Host: www.w3.org
Resource Identification rules:
- 如果Request-URI是absoluteURI,并且這個(gè)absolute的host和server的host相同,則忽略Host頭。
- 如果Request-URI不是absoluteURI,并且請(qǐng)求消息包含Host頭,host由Host消息頭決定。
- 如果1或2中的host不是一個(gè)合法的host,則返回400(Bad Request)響應(yīng)消息。
響應(yīng)消息
響應(yīng)消息的格式定義為:
例子:
HTTP/1.1 200 OK //請(qǐng)求成功
Server: Microsoft-IIS/5.0 //web服務(wù)器
Date: Thu,08 Mar 200707:17:51 GMT
Connection: Keep-Alive
Content-Length: 23330
Content-Type: text/html
Expries: Thu,08 Mar 2007 07:16:51 GMT
Set-Cookie: ASPSESSIONIDQAQBQQQB=BEJCDGKADEDJKLKKAJEOIMMH; path=/
Cache-control: private
響應(yīng)消息也有三部分組成:
狀態(tài)行、消息報(bào)頭、響應(yīng)正文。
狀態(tài)行格式:版本號(hào)、空格、狀態(tài)、空格、狀態(tài)短語(yǔ)、回車、換行。版本號(hào)可以是:HTTP/1.0、HTTP/1.1。狀態(tài)號(hào)和狀態(tài)短語(yǔ)由HTTP協(xié)議定義,狀態(tài)號(hào)有5中取值可能:
1xx:指示信息--表示請(qǐng)求已經(jīng)接收,繼續(xù)處理。
2xx:成功--表示請(qǐng)求已經(jīng)被成功接收、理解、處理。
3xx:重定向--要完成請(qǐng)求,必須進(jìn)行更進(jìn)一步操作。
4xx:客戶端錯(cuò)誤--請(qǐng)求有語(yǔ)法錯(cuò)誤或請(qǐng)求無(wú)法實(shí)現(xiàn)。
5xx:服務(wù)器端錯(cuò)誤--服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求。
常見(jiàn)的狀態(tài)號(hào)和狀態(tài)短語(yǔ)有:
200 OK --請(qǐng)求成功。
304 Not Modified --資源沒(méi)有改變。
400 Bad Request --客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤,不能被服務(wù)器理解。
401 Unauthorized --請(qǐng)求未經(jīng)授權(quán)(和WWW-Authenticate報(bào)頭一起使用)。
403 Forbidden --服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)。
404 Not Found --請(qǐng)求資源不存在。
500 Internal Server Error --服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤。
503 Server Unavailable --服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常。
響應(yīng)報(bào)頭和請(qǐng)求報(bào)頭格式一樣:報(bào)頭名、冒號(hào)(':')、空格、報(bào)頭值、回車、換行。用于記錄響應(yīng)消息的元數(shù)據(jù),表達(dá)響應(yīng)消息的長(zhǎng)度、編碼方式、Cookiee等信息。遇到一個(gè)空行(只有回車換行)表示響應(yīng)消息報(bào)頭結(jié)束。
響應(yīng)消息正文緊隨響應(yīng)消息報(bào)頭(在空行后),它可以是任意的內(nèi)容,由客戶端解析。
在響應(yīng)消息中是否包含消息體是由請(qǐng)求方法和響應(yīng)狀態(tài)碼決定,所有對(duì)HEAD請(qǐng)求方法的響應(yīng)消息不能包含任何消息體,即使在響應(yīng)消息中可能會(huì)包含實(shí)體消息頭,以至于有人會(huì)認(rèn)為這個(gè)響應(yīng)消息包含消息體。所有1XX(informational)、204(no content)、304(not modified)響應(yīng)消息不能包含消息體。所有其他的響應(yīng)消息都包含消息體,即使有些時(shí)候消息體的長(zhǎng)度是0。
雜記
協(xié)議本身,最終要的在于消息格式,HTTP協(xié)議的請(qǐng)求消息和響應(yīng)消息已經(jīng)詳細(xì)說(shuō)明了,剩下的就是一些具體細(xì)節(jié)的問(wèn)題,比如URI的格式、各種消息報(bào)頭代表的含義、響應(yīng)狀態(tài)號(hào)對(duì)應(yīng)的含義等。因?yàn)闀r(shí)間有限,不做整理,所以只是一些閱讀協(xié)議的雜記。
URI(Uniform Resource Identifiers),又名:UDI(Universal Document Identifiers),是URL(Uniform Resource Locators)和URN(Unifrom Resource Names)的組合。從HTTP協(xié)議的角度,URL只是一個(gè)由字符串組成的用于名稱、位置等的標(biāo)識(shí)符。在HTTP協(xié)議中使用URL作為定位符,它的格式為:http://${host}[:${port}][${abs_path}[?${query}]]
Date/Time格式:因?yàn)闅v史原因,HTTP支持三種日期、時(shí)間格式:
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsolted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
其中第一種格式是推薦的網(wǎng)絡(luò)格式,而且它是固定長(zhǎng)度的。HTTP1.1客戶端和服務(wù)器端需要能接收所有以上三種日期格式,但是只生成第一種日期格式。所有HTTP日期、時(shí)間都必須是格林威治時(shí)間(GMT,Greenwich Mean Time),在HTTP中,GMT和UTC(Coordinated Universal Time)時(shí)間相同。
編碼集:同MINE格式規(guī)范定義。在Cotent-Type頭中定義。
內(nèi)容編碼:主要用于對(duì)消息實(shí)體是否壓縮、采用什么壓縮算法的表示。在HTTP1.1中使用Accept-Encoding和Content-Encoding頭中定義,支持的值有:gzip、compress(廢棄)、deflate(zlib格式)、identity(默認(rèn)不壓縮,只能用于Accept-Encoding中,不能用于Content-Encoding)。這些支持的格式在IANA(Internet Assigned Numbers Authority)中注冊(cè)。
傳輸編碼(transfer-coding):用表示可以、需要應(yīng)用到實(shí)體主體以確保通過(guò)網(wǎng)絡(luò)“安全傳輸”的編碼轉(zhuǎn)換。這與內(nèi)容編碼不同,傳輸編碼是消息而非原始實(shí)體的屬性。所有傳輸編碼值大小寫無(wú)關(guān),它類似于MINE編碼中的Content-Transfer-Encoding。可用的值為:chunked,identity,gzip,compress,deflat。HTTP/1.0不支持。
媒體類型:HTTP通過(guò)Content-Type和Accept頭部域以提供可擴(kuò)展的數(shù)據(jù)類型。值格式:
${type}/${subtype};${paramName}=${paramValue};....
Product符號(hào):用于允許通信應(yīng)用程序通過(guò)軟件名稱和版本號(hào)來(lái)標(biāo)識(shí)它自己,比如:
User-Agent: CERN-LineMode/2.15 libwww/2.17b3
Server: Apache/0.84
qvalue:使用[0-1]的值來(lái)表達(dá)參數(shù)的重要性,0表示不可接受,該值的小數(shù)部分不可操作三位。
語(yǔ)言標(biāo)簽:用于表達(dá)消息實(shí)體的自然語(yǔ)言,用Accept-Language和Content-Language字段表達(dá)。它的值可以是:en、en-US、en-cockney、i-cherokee、x-pig-latin等。
實(shí)體標(biāo)簽:用于比較相同請(qǐng)求資源的兩個(gè)或多個(gè)實(shí)體的比較。如If-Match、If-None-Match、If-Range等頭部域名。
范圍標(biāo)簽:HTTP/1.1允許客戶端值請(qǐng)求響應(yīng)實(shí)體的某部分(范圍)作為響應(yīng)消息,如Range、Content-Range頭部域,他們的單位在HTTP/1.1中只支持byte。
消息報(bào)頭詳解
在請(qǐng)求消息和響應(yīng)消息中都有消息報(bào)頭,消息報(bào)頭在HTTP1.1協(xié)議中(RFC2616)有三種類型的頭:
通用頭(General Header)、請(qǐng)求頭(Request Header)、響應(yīng)頭(Response Header)、實(shí)體頭(Entity Header)。其格式為:header-name: header-value。其中header-name大小寫無(wú)關(guān),以一個(gè)空行(只包含回車和換行)結(jié)束。header-value可以以任意數(shù)量的LWS開(kāi)頭(一般是一個(gè)空格)。消息頭可以以至少一個(gè)SP或HT開(kāi)頭的方式擴(kuò)展成多行(原文:header fields can be extended over multiple lines by preceding each extra line with at least one SP or HT,感覺(jué)理解的有問(wèn)題....)。相同的header-name可以重復(fù)出現(xiàn)。
通用消息頭:
Cache-Control:
指定緩存指令。如請(qǐng)求相關(guān)的指令:no-cache、no-store、max-age、max-stale、min-fresh、no-transform、only-if-cached、cache-extension,響應(yīng)相關(guān)的指令:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage、cache-extension。
Connection:
客戶端通過(guò)發(fā)送包含close值的Connection頭,表達(dá)在這次請(qǐng)求結(jié)束后,Server可以關(guān)閉這個(gè)連接,此時(shí)Server如果選擇發(fā)送響應(yīng)后關(guān)閉連接,則在響應(yīng)消息中需要包含值為close的Connection頭。
允許發(fā)送者指定當(dāng)前Connection的一些選項(xiàng)。HTTP/1.1只定義了close的值,表示響應(yīng)返回后,當(dāng)前Connection將會(huì)被關(guān)閉。
Date:
表示消息發(fā)送的時(shí)間,你的描述格式由RFC822定義。例如Mon, 31 Dec 2001 04:25:57GMT
Pragma:
用于包含實(shí)現(xiàn)相關(guān)的指令。如no-cache
Trailer:
表示指定的頭在chunked消息的尾部。
Transfer-Encoding:
消息在傳輸時(shí)使用的編碼。如chunked。
Upgrade:
允許客戶端指定它額外支持的傳輸協(xié)議,如果服務(wù)器發(fā)現(xiàn)更新的傳輸協(xié)議更合適當(dāng)前請(qǐng)求,則它可以將當(dāng)前傳輸協(xié)議轉(zhuǎn)換成更新的傳輸協(xié)議。如HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11等。
Via:
用于網(wǎng)關(guān)或代理服務(wù)器,以指示客戶端和服務(wù)器之間的中間協(xié)議和接收者。
Warning:
用于添加一些額外的狀態(tài)或轉(zhuǎn)換信息。
請(qǐng)求消息頭:
請(qǐng)求消息頭允許客戶端傳遞一些額外關(guān)乎客戶端信息給Server,這些字段類似在方法調(diào)用中的參數(shù)。
Accept:
指定當(dāng)前請(qǐng)求響應(yīng)可以接受的媒體類型,以逗號(hào)間隔。如:“audio/*; q=0.2, audio/basic, text/html, */*”。
Accept-Charset:
指定當(dāng)前請(qǐng)求響應(yīng)可以接受的字符編碼集,以逗號(hào)間隔。如“iso-8859-5, Unicode-1-1; q=0.8”。
Accept-Encoding:
類似Accept,定義消息實(shí)體的編碼方式。如“compress, gzip, *, identity; q=0.5”等。
Accept-Language:
類似Accept,定義自然語(yǔ)言的限制。如“da, en-gb; q=0.8, en; q=0.7”等。
Authorization:
客戶端向服務(wù)器傳遞認(rèn)證信息。
Expect:
客戶端發(fā)送一個(gè)包含100-continue值的Expect字段頭,以在不發(fā)送真正消息實(shí)體的情況下測(cè)試服務(wù)器是否能接收這個(gè)消息。此時(shí)Server響應(yīng)417(Expectation Failed)或100(Continue),然后客戶端決定是否要繼續(xù)發(fā)送請(qǐng)求消息體。
請(qǐng)求消息頭,用于指定客戶端對(duì)服務(wù)器端響應(yīng)行為的需求。如100-continue、102-processing等。
From:
請(qǐng)求頭,指定用戶的email地址。
Host:
請(qǐng)求頭,指定服務(wù)器的主機(jī)名和端口。如:www.w3.org:8080
If-Match:
請(qǐng)求頭,用于條件請(qǐng)求方法。
If-Modified-Since:
請(qǐng)求頭,用于條件請(qǐng)求方法:請(qǐng)求變體自從指定的時(shí)間內(nèi)沒(méi)有發(fā)生改變。
If-None-Match:
請(qǐng)求頭,用于條件請(qǐng)求方法。
If-Range:
表示如果實(shí)體沒(méi)有變法,則發(fā)送給客戶端指定部分的實(shí)體。
If-Unmodified-Since:
如果實(shí)體在指定時(shí)間內(nèi)沒(méi)有發(fā)生變化,則直接發(fā)送響應(yīng),否則返回412(Precondition Failed)的響應(yīng)。
Max-Forwards:
請(qǐng)求頭,指定最大可以被代理、網(wǎng)關(guān)服務(wù)器轉(zhuǎn)發(fā)的次數(shù)。
Proxy-Authorization:
請(qǐng)求頭,用于客戶端包含對(duì)代理服務(wù)器的認(rèn)證信息。
Range:
指示范圍,如bytes=0-499
Referer:
請(qǐng)求頭,允許客戶端指定當(dāng)前URI是從哪個(gè)URI中獲得的。
TE:
請(qǐng)求頭,用于指示在響應(yīng)中希望接收的擴(kuò)展傳輸編碼。如deflate、trailers, deflate;q=0.5等。
User-Agent:
請(qǐng)求頭,用于添加客戶端軟件信息。
響應(yīng)消息頭
響應(yīng)消息頭允許Server傳遞一些關(guān)于響應(yīng)的額外信息給客戶端。
Accept-Ranges:
響應(yīng)頭,允許服務(wù)器指定它可接受的請(qǐng)求范圍。如“bytes”、“none”等。
Age:
響應(yīng)頭,當(dāng)代理服務(wù)器用自己緩存的實(shí)體去響應(yīng)請(qǐng)求時(shí),該頭部表示該實(shí)體從產(chǎn)生到現(xiàn)在經(jīng)過(guò)多少時(shí)間了。該數(shù)值的代為秒。
ETag:
響應(yīng)消息頭,用于指定請(qǐng)求變體中的實(shí)體標(biāo)簽的當(dāng)前值。如xyzzy,W/xyzzy等。
Location:
響應(yīng)頭,用于指示接收方重定向。
Proxy-Authenticate:
響應(yīng)頭,在407(Proxy Authenticate Required)響應(yīng)中,它包含代理服務(wù)器需要的驗(yàn)證模式和參數(shù)。
Retry-After:
響應(yīng)頭,通503(Service Unavailable)響應(yīng)一起使用,用于指定服務(wù)器預(yù)計(jì)不可用時(shí)間;或者3xx,用于指定客戶端在重定向之前等待的時(shí)間。
Server:
響應(yīng)頭,用于添加服務(wù)器軟件信息。
Vary:
用于指示用于決定當(dāng)響應(yīng)是最新時(shí),是否cache可以用于接下來(lái)的響應(yīng)并且不用驗(yàn)證的請(qǐng)求字段集合。
WWW-Authenticate:
響應(yīng)頭,用于401(Unauthorized)響應(yīng)消息中,用于指定服務(wù)器需要的認(rèn)證模式和參數(shù)。
實(shí)體消息頭
實(shí)體消息頭屬于實(shí)體的一部分,是實(shí)體的元數(shù)據(jù)。
Allow:
實(shí)體頭,列出所有對(duì)當(dāng)前Request-URI指定資源支持的方法。
Content-Encoding:
實(shí)體頭,用于指定實(shí)體內(nèi)容的編碼方式。如gzip、identity等。
Content-Language:
實(shí)體頭,用于定義實(shí)體內(nèi)容的自然語(yǔ)言。如da、en、mi等。
Content-Length:
實(shí)體頭,用于指定實(shí)體內(nèi)容的長(zhǎng)度。
Content-Location:
實(shí)體頭,用于指定資源所在的URI。
Content-MD5:
實(shí)體頭,用于表示實(shí)體內(nèi)容的數(shù)字摘要。
Content-Range:
實(shí)體頭,用于指定實(shí)體內(nèi)容的范圍。如bytes 0-499/1234(即單位 范圍/總長(zhǎng)度)。
Content-Type:
實(shí)體頭,用于指定實(shí)體內(nèi)容的媒體類型。如text/html; charset=ISO-8859-4等。
Expires:
實(shí)體頭,用于響應(yīng)在多少時(shí)間后在Cache中失效。
Last-Modified:
實(shí)體頭,用于指定服務(wù)器認(rèn)為當(dāng)前變體的修改時(shí)間。
響應(yīng)狀態(tài)碼詳解
1xx: Informational - Request received, continuing process
這是一個(gè)臨時(shí)性的響應(yīng),在HTTP/1.0協(xié)議中不存在,因而不可以向HTTP/1.0的客戶端發(fā)送該狀態(tài)碼響應(yīng)。客戶端必須在獲得正常響應(yīng)之前能接收一個(gè)或多個(gè)1xx響應(yīng),即使它并沒(méi)有預(yù)計(jì)會(huì)收到1xx響應(yīng)。該響應(yīng)碼只有狀態(tài)行和可選的響應(yīng)消息頭,沒(méi)有響應(yīng)消息實(shí)體。
- 100 - Continue
客戶端應(yīng)該繼續(xù)它的請(qǐng)求,這個(gè)暫時(shí)的響應(yīng)用于通知客戶端初始的請(qǐng)求已經(jīng)被服務(wù)器接受,并且暫時(shí)沒(méi)有被拒絕。此時(shí)客戶端會(huì)繼續(xù)發(fā)送剩余的請(qǐng)求,或者當(dāng)所有請(qǐng)求已經(jīng)發(fā)送完成時(shí)忽略該響應(yīng)碼。服務(wù)器必須在請(qǐng)求結(jié)束時(shí)發(fā)送一個(gè)最終的響應(yīng)。
- 101 - Switching Protocols
服務(wù)器理解并打算執(zhí)行客戶端的請(qǐng)求,并且使用“Upgrade”字段頭用戶表示服務(wù)器會(huì)在這個(gè)連接中的協(xié)議升級(jí)到“Upgrade”頭標(biāo)識(shí)的版本號(hào)。
2xx: Success - The action was successfully received, understood, and accepted
這個(gè)系列的響應(yīng)狀態(tài)碼表示客戶端的請(qǐng)求已經(jīng)成功的接收并處理。
- 200 - OK
請(qǐng)求成功處理。
- 201 - Created
請(qǐng)求成功處理并且新的資源被創(chuàng)建。新創(chuàng)建的資源可以使用URI標(biāo)識(shí),并且該URI在響應(yīng)消息的Location頭中。服務(wù)器在返回201響應(yīng)時(shí)必須保證新的資源已經(jīng)被創(chuàng)建,如果服務(wù)器在返回響應(yīng)時(shí)還沒(méi)來(lái)得及創(chuàng)建新的資源,服務(wù)器應(yīng)該返回202(Accepted)響應(yīng)。
201響應(yīng)還可以包含“ETag”響應(yīng)頭,表示實(shí)體標(biāo)簽的當(dāng)前值。
- 202 - Accepted
請(qǐng)求被接受并處理,但是處理還未完成。這個(gè)請(qǐng)求不一定被成功執(zhí)行,并且也不會(huì)在有結(jié)果后重新異步發(fā)送響應(yīng)消息。該響應(yīng)狀態(tài)主要用于一些類似batch的操作,當(dāng)客戶發(fā)送請(qǐng)求以后,不需要繼續(xù)保持和服務(wù)器的連接。返回的消息實(shí)體需要包含請(qǐng)求當(dāng)前的狀態(tài)以及一個(gè)指向狀態(tài)監(jiān)視器或客戶能得到結(jié)果的估計(jì)值。
- 203 - Non-Authoritative Information
響應(yīng)消息實(shí)體頭部返回的元信息不是在原始服務(wù)器有效的集合,而是從本地或第三方中拷貝收集。當(dāng)前的集合可能是原始集合的子集或超集,這個(gè)響應(yīng)碼不是必須的,可以使用200(OK)替代。
- 204 - No Content
服務(wù)器已經(jīng)成功的完成請(qǐng)求,該請(qǐng)求沒(méi)有消息實(shí)體,只是返回一些最新的元信息。
- 205 - Reset Content
服務(wù)器已經(jīng)成功的完成請(qǐng)求,客戶端必須重置由該請(qǐng)求引起的文檔視圖。該響應(yīng)主要用于清除用于之前輸入的表單。該響應(yīng)不可以包含消息實(shí)體。
- 206 - Partial Content
服務(wù)器已經(jīng)成功完成“Partial GET”的請(qǐng)求。該響應(yīng)的請(qǐng)求必須包含“Range”頭,以及可選的“If-Range”頭。響應(yīng)必須包含以下頭:Content-Range(或值為multipart/byteranges的Content-Type頭)、Date、ETag或Content-Location、Expires、Cache-Control、Vary等。
3xx: Redirection - Further action must be taken in order to complete the request
這個(gè)系列的狀態(tài)碼表示為了完成當(dāng)前請(qǐng)求,客戶端必須要有進(jìn)一步的處理。如果接下來(lái)的請(qǐng)求方法是GET或者HEAD,客戶端可以自行發(fā)送接下來(lái)的請(qǐng)求,而不需要用于干預(yù)。并且客戶端應(yīng)該能檢測(cè)到死循環(huán)以減少網(wǎng)絡(luò)的堵塞。
- 300 - Multiple Choices
當(dāng)前請(qǐng)求包含多個(gè)資源,并且在返回消息中包含每個(gè)資源的location信息。客戶端可以根據(jù)一定的算法自行選擇使用那個(gè)資源(沒(méi)有定義算法)。服務(wù)器也可以指定一個(gè)推薦的選擇(在Location頭中),客戶端可能會(huì)使用這個(gè)值重定向。
- 301 - Moved Permanently
請(qǐng)求的資源已經(jīng)被永久的移動(dòng)到一個(gè)新的URI上。客戶端可以自動(dòng)跳轉(zhuǎn)到新的URI上。新的URI需要在響應(yīng)消息的Location頭中包含。
- 302 - Found
請(qǐng)求的資源臨時(shí)的存在于另一個(gè)URI中。因?yàn)檫@個(gè)重定向還可能會(huì)改變,客戶端需要繼續(xù)使用舊的URI。臨時(shí)的URI需要包含在響應(yīng)消息的Location頭中。
- 303 - See Other
請(qǐng)求的響應(yīng)可以使用另一個(gè)URI中獲得,并且必須使用GET方法獲取另一個(gè)URI上的響應(yīng)。該響應(yīng)碼主要用于將一個(gè)POST產(chǎn)生的輸出重定向到一個(gè)新選擇的資源上。新的URI需要在Location響應(yīng)頭中給出。
- 304 - Not Modified
如果客戶端發(fā)送一個(gè)“Conditional GET”請(qǐng)求,并且該請(qǐng)求是被允許的,但是它所對(duì)應(yīng)的文檔沒(méi)有改變,則服務(wù)器返回該響應(yīng)。該響應(yīng)不能包含消息體,但必須包含一些消息頭:Date、ETag、Content-Location、Expires、Cache-Control、Vary。
- 305 - Use Proxy
請(qǐng)求的資源必須通過(guò)Proxy使用Location響應(yīng)頭中的URI訪問(wèn)。
- 306 - Unused
以前版本使用,現(xiàn)在已經(jīng)不使用,但是響應(yīng)碼保留。
- 307 - Temporary Redirect
請(qǐng)求的資源臨時(shí)的指向另一個(gè)URI,但是由于這個(gè)重定向可能會(huì)在將來(lái)被更改,因而客戶端需要繼續(xù)使用原來(lái)的URI。臨時(shí)的URI在Location響應(yīng)頭中指定。
4xx: Client Error - The request contains bad syntax or connote be fulfilled
這個(gè)系列的響應(yīng)碼用于表示客戶端錯(cuò)誤請(qǐng)求,并且在響應(yīng)實(shí)體消息中需要包含出錯(cuò)原因的解釋(對(duì)HEAD的響應(yīng)除外)。
- 400 - Bad Request
語(yǔ)法錯(cuò)誤,請(qǐng)求不能被服務(wù)器理解。
- 401 - Unauthorized
請(qǐng)求需要包含用于認(rèn)證。響應(yīng)必須包含WWW-Authenticate頭,包含請(qǐng)求認(rèn)證需要的信息。客戶端可以使用包含Authorization頭重新發(fā)送請(qǐng)求。
- 402 - Payment Required
為將來(lái)使用保留。
- 403 - Forbidden
服務(wù)器拒絕該請(qǐng)求。如果服務(wù)器希望讓客戶端知道拒絕的原因,可以將原因放在響應(yīng)消息體重,如果服務(wù)器想暴露該原因,則可以返回404(Not Found)響應(yīng)。
- 404 - Not Found
服務(wù)器沒(méi)有發(fā)現(xiàn)任何匹配的請(qǐng)求URI。如果服務(wù)器知道某些資源已經(jīng)永久的被移出,并且沒(méi)有重定向地址,則需要返回410(Gone)響應(yīng)。該響應(yīng)也可以用于服務(wù)器不想暴露客戶請(qǐng)求被拒絕的原因。
- 405 - Method Not Allowed
請(qǐng)求方法不被對(duì)請(qǐng)求的資源允許。在響應(yīng)消息中必須包含Allow頭,指定請(qǐng)求資源允許的請(qǐng)求方法。
- 406 - Not Acceptable
請(qǐng)求的資源產(chǎn)生的響應(yīng)包含了不被Accept請(qǐng)求頭指定的特性。
- 407 - Proxy Authentication Required
類似401(Unauthorized),表示客戶端必須在Proxy中通過(guò)認(rèn)證。Proxy必須返回Proxy-Authenticate頭,包含請(qǐng)求認(rèn)證需要的信息。
- 408 - Request Time-out
服務(wù)器已經(jīng)準(zhǔn)備好并在等待,但是客戶端在指定的時(shí)間里沒(méi)有發(fā)送請(qǐng)求。
- 409 - Conflict
因?yàn)楹唾Y源當(dāng)前狀態(tài)沖突而導(dǎo)致請(qǐng)求沒(méi)有完成。該響應(yīng)碼只有在用戶知道任何解決這個(gè)沖突,并且重新提交請(qǐng)求時(shí)產(chǎn)生。
- 410 - Gone
請(qǐng)求的資源已經(jīng)不在服務(wù)器上,并且沒(méi)有更進(jìn)一步的重定向地址。
- 411 - Length Required
請(qǐng)求消息必須包含Content-Length消息頭。
- 412 - Precondition Failed
服務(wù)器對(duì)一個(gè)或多個(gè)請(qǐng)求消息頭的測(cè)試失敗。
- 413 - Request Entity Too Large
請(qǐng)求消息太大。如果這個(gè)條件是臨時(shí)的,則服務(wù)器需要包含Retry-After響應(yīng)頭,表示這個(gè)響應(yīng)時(shí)臨時(shí)的,并在指定的時(shí)間以后重試。
- 414 - Request-URI Too Large
請(qǐng)求的URI太長(zhǎng)。
- 415 - Unsupported Media Type
請(qǐng)求消息格式不被支持。
- 416 - Request range not satisfiable
在請(qǐng)求包含Range頭,不包含If-Range頭,并且請(qǐng)求的資源不在Range指定的范圍中。響應(yīng)頭中需要包含Content-Range表示指定資源當(dāng)前的長(zhǎng)度。
- 417 - Expectation Failed
Expect請(qǐng)求頭指定的值不能匹配服務(wù)器的邏輯。
5xx: Server Error - The server failed to fulfill an apparently valid request
這個(gè)系列的響應(yīng)碼用于表示服務(wù)器存在錯(cuò)誤,不能完成相應(yīng)的請(qǐng)求。服務(wù)器需要在響應(yīng)消息體中包含出錯(cuò)的描述信息。
- 500 - Internal Server Error
服務(wù)器內(nèi)部錯(cuò)誤。
- 501 - Not Implemented
服務(wù)器沒(méi)有實(shí)現(xiàn)當(dāng)前請(qǐng)求。如沒(méi)有實(shí)現(xiàn)對(duì)應(yīng)的請(qǐng)求方法。
- 502 - Bad Gateway
代理或網(wǎng)關(guān)服務(wù)器從上游服務(wù)器中接收到一個(gè)不合法的響應(yīng)。
- 503 - Service Unavailable
服務(wù)器因?yàn)榕R時(shí)負(fù)載過(guò)重或處于維護(hù)狀態(tài)而不能處理請(qǐng)求。該響應(yīng)暗示服務(wù)器當(dāng)前的狀態(tài)是臨時(shí)的,如果服務(wù)器知道什么時(shí)候恢復(fù)可用狀態(tài),則可以包含Retry-After響應(yīng)頭,如果沒(méi)有包含Retry-After頭,則客戶端可以把它視為500(Internal Server Error)來(lái)處理。
- 504 - Gateway Time-out
代理服務(wù)器或網(wǎng)關(guān)服務(wù)器在指定的時(shí)間內(nèi)沒(méi)有收到上游服務(wù)器的響應(yīng)。
- 505 - HTTP Version not supported
服務(wù)器不支持或拒絕支持請(qǐng)求消息中指定的HTTP版本。
參考:
RFC2616
RFC1867
http://blog.zhaojie.me/2011/03/html-form-file-uploading-programming.html
http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html
http://www.360doc.com/content/10/0930/17/3668821_57590979.shtml
posted on 2014-03-17 18:26
DLevin 閱讀(5779)
評(píng)論(0) 編輯 收藏 所屬分類:
Jetty