上善若水
          In general the OO style is to use a lot of little objects with a lot of little methods that give us a lot of plug points for overriding and variation. To do is to be -Nietzsche, To bei is to do -Kant, Do be do be do -Sinatra
          posts - 146,comments - 147,trackbacks - 0
          在計(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沒有對(duì)應(yīng)的資源,則HTTP服務(wù)器可以通過該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è)不可訪問的位置。成功的響應(yīng)碼為200(OK),并且響應(yīng)消息實(shí)體中可以包含一些描述信息;202(Accept)表明這個(gè)操作還沒被完全執(zhí)行;204(No Content)表示這個(gè)操作已經(jīng)執(zhí)行完成,但是沒有響應(yīng)消息實(shí)體。該方法的響應(yīng)消息不可被緩存。

          TRACE:
          請(qǐng)求服務(wù)器會(huì)送收到的請(qǐng)求信息,主要用于測試或診斷。

          該方法以200返回標(biāo)識(shí)成功。該請(qǐng)求消息不可包含請(qǐng)求消息實(shí)體。該方法的Response必須在響應(yīng)消息實(shí)體中包含所有的請(qǐng)求消息,其相應(yīng)消息的Content-Type值為:message/http,該Response不可被緩存。

          CONNECT:
          保留將來使用。

          擴(kuò)展的方法:
          用戶自定義擴(kuò)展方法。


          如果Server能識(shí)別某個(gè)請(qǐng)求方法但是不允許該請(qǐng)求方法,則應(yīng)該返回405(Method Not Allowed)響應(yīng)狀態(tài)。如果Server無法識(shí)別某個(gè)請(qǐng)求方法或者當(dāng)前Server沒有實(shí)現(xiàn)這個(gè)請(qǐng)求方法,則應(yīng)該返回501(Not Implemented)狀態(tài)碼。

          Request-URI支持的值有:*|absoluteURI|abs_path|authority

          1. 表示請(qǐng)求不應(yīng)用于某個(gè)特定的資源,并且只對(duì)于某些不需要應(yīng)用于特定資源的請(qǐng)求方法,如:OPTIONS * HTTP/1.1
          2. 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ù)器,但是為了在將來的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
          3. authority只在CONNECT請(qǐng)求方法中使用。
          4. abs_path:用于表示Server的資源,而Server本身的信息在Host消息頭中表示:

            GET /put/www/TheProject.html HTTP/1.1

            Host: www.w3.org

          Resource Identification rules:

          1. 如果Request-URI是absoluteURI,并且這個(gè)absolute的host和server的host相同,則忽略Host頭。
          2. 如果Request-URI不是absoluteURI,并且請(qǐng)求消息包含Host頭,host由Host消息頭決定。
          3. 如果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)短語、回車、換行。版本號(hào)可以是:HTTP/1.0、HTTP/1.1。狀態(tài)號(hào)和狀態(tài)短語由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)求有語法錯(cuò)誤或請(qǐng)求無法實(shí)現(xiàn)。
          5xx:服務(wù)器端錯(cuò)誤--服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求。
          常見的狀態(tài)號(hào)和狀態(tài)短語有:
          200 OK --請(qǐng)求成功。
          304 Not Modified --資源沒有改變。
          400 Bad Request --客戶端請(qǐng)求有語法錯(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)消息的長度、編碼方式、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í)候消息體的長度是0。

          雜記

          協(xié)議本身,最終要的在于消息格式,HTTP協(xié)議的請(qǐng)求消息和響應(yīng)消息已經(jīng)詳細(xì)說明了,剩下的就是一些具體細(xì)節(jié)的問題,比如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ò)格式,而且它是固定長度的。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í)體主體以確保通過網(wǎng)絡(luò)“安全傳輸”的編碼轉(zhuǎn)換。這與內(nèi)容編碼不同,傳輸編碼是消息而非原始實(shí)體的屬性。所有傳輸編碼值大小寫無關(guān),它類似于MINE編碼中的Content-Transfer-Encoding。可用的值為:chunked,identity,gzip,compress,deflat。HTTP/1.0不支持。

          媒體類型:HTTP通過Content-Type和Accept頭部域以提供可擴(kuò)展的數(shù)據(jù)類型。值格式:
          ${type}/${subtype};${paramName}=${paramValue};....

          Product符號(hào):用于允許通信應(yīng)用程序通過軟件名稱和版本號(hào)來標(biāo)識(shí)它自己,比如:
          User-Agent: CERN-LineMode/2.15 libwww/2.17b3
          Server: Apache/0.84

          qvalue:使用[0-1]的值來表達(dá)參數(shù)的重要性,0表示不可接受,該值的小數(shù)部分不可操作三位。

          語言標(biāo)簽:用于表達(dá)消息實(shí)體的自然語言,用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大小寫無關(guān),以一個(gè)空行(只包含回車和換行)結(jié)束。header-value可以以任意數(shù)量的LWS開頭(一般是一個(gè)空格)。消息頭可以以至少一個(gè)SP或HT開頭的方式擴(kuò)展成多行(原文:header fields can be extended over multiple lines by preceding each extra line with at least one SP or HT,感覺理解的有問題....)。相同的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:
          客戶端通過發(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,定義自然語言的限制。如“da, en-gb; q=0.8, en; q=0.7”等。

          Authorization: 

          客戶端向服務(wù)器傳遞認(rèn)證信息。

          Expect:
          客戶端發(fā)送一個(gè)包含100-continue值的Expect字段頭,以在不發(fā)送真正消息實(shí)體的情況下測試服務(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)沒有發(fā)生改變。

          If-None-Match: 

          請(qǐng)求頭,用于條件請(qǐng)求方法。

          If-Range: 

          表示如果實(shí)體沒有變法,則發(fā)送給客戶端指定部分的實(shí)體。

          If-Unmodified-Since: 

          如果實(shí)體在指定時(shí)間內(nè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)過多少時(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可以用于接下來的響應(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)容的自然語言。如da、en、mi等。

          Content-Length: 

          實(shí)體頭,用于指定實(shí)體內(nèi)容的長度。

          Content-Location: 

          實(shí)體頭,用于指定資源所在的URI。

          Content-MD5: 

          實(shí)體頭,用于表示實(shí)體內(nèi)容的數(shù)字摘要。

          Content-Range: 

          實(shí)體頭,用于指定實(shí)體內(nèi)容的范圍。如bytes 0-499/1234(即單位 范圍/總長度)。

          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),即使它并沒有預(yù)計(jì)會(huì)收到1xx響應(yīng)。該響應(yīng)碼只有狀態(tài)行和可選的響應(yīng)消息頭,沒有響應(yīng)消息實(shí)體。
          1. 100 - Continue
            客戶端應(yīng)該繼續(xù)它的請(qǐng)求,這個(gè)暫時(shí)的響應(yīng)用于通知客戶端初始的請(qǐng)求已經(jīng)被服務(wù)器接受,并且暫時(shí)沒有被拒絕。此時(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)。
          2. 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)成功的接收并處理。
          1. 200 - OK
            請(qǐng)求成功處理。
          2. 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í)還沒來得及創(chuàng)建新的資源,服務(wù)器應(yīng)該返回202(Accepted)響應(yīng)。
            201響應(yīng)還可以包含“ETag”響應(yīng)頭,表示實(shí)體標(biāo)簽的當(dāng)前值。
          3. 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ì)值。
          4. 203 - Non-Authoritative Information
            響應(yīng)消息實(shí)體頭部返回的元信息不是在原始服務(wù)器有效的集合,而是從本地或第三方中拷貝收集。當(dāng)前的集合可能是原始集合的子集或超集,這個(gè)響應(yīng)碼不是必須的,可以使用200(OK)替代。
          5. 204 - No Content
            服務(wù)器已經(jīng)成功的完成請(qǐng)求,該請(qǐng)求沒有消息實(shí)體,只是返回一些最新的元信息。
          6. 205 - Reset Content
            服務(wù)器已經(jīng)成功的完成請(qǐng)求,客戶端必須重置由該請(qǐng)求引起的文檔視圖。該響應(yīng)主要用于清除用于之前輸入的表單。該響應(yīng)不可以包含消息實(shí)體。
          7. 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)一步的處理。如果接下來的請(qǐng)求方法是GET或者HEAD,客戶端可以自行發(fā)送接下來的請(qǐng)求,而不需要用于干預(yù)。并且客戶端應(yīng)該能檢測到死循環(huán)以減少網(wǎng)絡(luò)的堵塞。
          1. 300 - Multiple Choices
            當(dāng)前請(qǐng)求包含多個(gè)資源,并且在返回消息中包含每個(gè)資源的location信息。客戶端可以根據(jù)一定的算法自行選擇使用那個(gè)資源(沒有定義算法)。服務(wù)器也可以指定一個(gè)推薦的選擇(在Location頭中),客戶端可能會(huì)使用這個(gè)值重定向。
          2. 301 - Moved Permanently
            請(qǐng)求的資源已經(jīng)被永久的移動(dòng)到一個(gè)新的URI上。客戶端可以自動(dòng)跳轉(zhuǎn)到新的URI上。新的URI需要在響應(yīng)消息的Location頭中包含。
          3. 302 - Found
            請(qǐng)求的資源臨時(shí)的存在于另一個(gè)URI中。因?yàn)檫@個(gè)重定向還可能會(huì)改變,客戶端需要繼續(xù)使用舊的URI。臨時(shí)的URI需要包含在響應(yīng)消息的Location頭中。
          4. 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)頭中給出。
          5. 304 - Not Modified
            如果客戶端發(fā)送一個(gè)“Conditional GET”請(qǐng)求,并且該請(qǐng)求是被允許的,但是它所對(duì)應(yīng)的文檔沒有改變,則服務(wù)器返回該響應(yīng)。該響應(yīng)不能包含消息體,但必須包含一些消息頭:Date、ETag、Content-Location、Expires、Cache-Control、Vary。
          6. 305 - Use Proxy
            請(qǐng)求的資源必須通過Proxy使用Location響應(yīng)頭中的URI訪問。
          7. 306 - Unused
            以前版本使用,現(xiàn)在已經(jīng)不使用,但是響應(yīng)碼保留。
          8. 307 - Temporary Redirect
            請(qǐng)求的資源臨時(shí)的指向另一個(gè)URI,但是由于這個(gè)重定向可能會(huì)在將來被更改,因而客戶端需要繼續(xù)使用原來的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)除外)。
          1. 400 - Bad Request
            語法錯(cuò)誤,請(qǐng)求不能被服務(wù)器理解。
          2. 401 - Unauthorized
            請(qǐng)求需要包含用于認(rèn)證。響應(yīng)必須包含WWW-Authenticate頭,包含請(qǐng)求認(rèn)證需要的信息。客戶端可以使用包含Authorization頭重新發(fā)送請(qǐng)求。
          3. 402 - Payment Required
            為將來使用保留。
          4. 403 - Forbidden
            服務(wù)器拒絕該請(qǐng)求。如果服務(wù)器希望讓客戶端知道拒絕的原因,可以將原因放在響應(yīng)消息體重,如果服務(wù)器想暴露該原因,則可以返回404(Not Found)響應(yīng)。
          5. 404 - Not Found
            服務(wù)器沒有發(fā)現(xiàn)任何匹配的請(qǐng)求URI。如果服務(wù)器知道某些資源已經(jīng)永久的被移出,并且沒有重定向地址,則需要返回410(Gone)響應(yīng)。該響應(yīng)也可以用于服務(wù)器不想暴露客戶請(qǐng)求被拒絕的原因。
          6. 405 - Method Not Allowed
            請(qǐng)求方法不被對(duì)請(qǐng)求的資源允許。在響應(yīng)消息中必須包含Allow頭,指定請(qǐng)求資源允許的請(qǐng)求方法。
          7. 406 - Not Acceptable
            請(qǐng)求的資源產(chǎn)生的響應(yīng)包含了不被Accept請(qǐng)求頭指定的特性。
          8. 407 - Proxy Authentication Required
            類似401(Unauthorized),表示客戶端必須在Proxy中通過認(rèn)證。Proxy必須返回Proxy-Authenticate頭,包含請(qǐng)求認(rèn)證需要的信息。
          9. 408 - Request Time-out
            服務(wù)器已經(jīng)準(zhǔn)備好并在等待,但是客戶端在指定的時(shí)間里沒有發(fā)送請(qǐng)求。
          10. 409 - Conflict
            因?yàn)楹唾Y源當(dāng)前狀態(tài)沖突而導(dǎo)致請(qǐng)求沒有完成。該響應(yīng)碼只有在用戶知道任何解決這個(gè)沖突,并且重新提交請(qǐng)求時(shí)產(chǎn)生。
          11. 410 - Gone
            請(qǐng)求的資源已經(jīng)不在服務(wù)器上,并且沒有更進(jìn)一步的重定向地址。
          12. 411 - Length Required
            請(qǐng)求消息必須包含Content-Length消息頭。
          13. 412 - Precondition Failed
            服務(wù)器對(duì)一個(gè)或多個(gè)請(qǐng)求消息頭的測試失敗。
          14. 413 - Request Entity Too Large
            請(qǐng)求消息太大。如果這個(gè)條件是臨時(shí)的,則服務(wù)器需要包含Retry-After響應(yīng)頭,表示這個(gè)響應(yīng)時(shí)臨時(shí)的,并在指定的時(shí)間以后重試。
          15. 414 - Request-URI Too Large
            請(qǐng)求的URI太長。
          16. 415 - Unsupported Media Type
            請(qǐng)求消息格式不被支持。
          17. 416 - Request range not satisfiable
            在請(qǐng)求包含Range頭,不包含If-Range頭,并且請(qǐng)求的資源不在Range指定的范圍中。響應(yīng)頭中需要包含Content-Range表示指定資源當(dāng)前的長度。
          18. 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ò)的描述信息。
          1. 500 - Internal Server Error
            服務(wù)器內(nèi)部錯(cuò)誤。
          2. 501 - Not Implemented
            服務(wù)器沒有實(shí)現(xiàn)當(dāng)前請(qǐng)求。如沒有實(shí)現(xiàn)對(duì)應(yīng)的請(qǐng)求方法。
          3. 502 - Bad Gateway
            代理或網(wǎng)關(guān)服務(wù)器從上游服務(wù)器中接收到一個(gè)不合法的響應(yīng)。
          4. 503 - Service Unavailable
            服務(wù)器因?yàn)榕R時(shí)負(fù)載過重或處于維護(hù)狀態(tài)而不能處理請(qǐng)求。該響應(yīng)暗示服務(wù)器當(dāng)前的狀態(tài)是臨時(shí)的,如果服務(wù)器知道什么時(shí)候恢復(fù)可用狀態(tài),則可以包含Retry-After響應(yīng)頭,如果沒有包含Retry-After頭,則客戶端可以把它視為500(Internal Server Error)來處理。
          5. 504 - Gateway Time-out
            代理服務(wù)器或網(wǎng)關(guān)服務(wù)器在指定的時(shí)間內(nèi)沒有收到上游服務(wù)器的響應(yīng)。
          6. 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 閱讀(5787) 評(píng)論(0)  編輯  收藏 所屬分類: Jetty
          主站蜘蛛池模板: 新昌县| 镇康县| 阿合奇县| 绵阳市| 睢宁县| 阿瓦提县| 全椒县| 府谷县| 宁波市| 昭通市| 宁安市| 绥棱县| 吴桥县| 盘锦市| 宁南县| 大足县| 广东省| 浦北县| 宜城市| 上饶市| 宁波市| 黔东| 罗江县| 新密市| 安徽省| 通海县| 潍坊市| 盐池县| 密山市| 谢通门县| 交城县| 陆良县| 繁峙县| 阳春市| 都兰县| 平罗县| 桃园县| 景宁| 隆德县| 商南县| 从江县|