Http的狀態(tài)碼:
狀態(tài)代碼有三位數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類(lèi)別,共分五種類(lèi)別:
- 1xx:指示信息--表示請(qǐng)求已接收,繼續(xù)處理
- 2xx:成功--表示請(qǐ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)碼:
- 200 OK //客戶端請(qǐng)求成功
- 202 Accepted //已接受。已經(jīng)接受請(qǐng)求,但未處理完成
- 305 Use Proxy//使用代理。所請(qǐng)求的資源必須通過(guò)代理訪問(wèn)
- 400 Bad Request //客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤,不能被
服務(wù)器所理解- 401 Unauthorized //請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用
- 403 Forbidden //服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)
- 404 Not Found //請(qǐng)求資源不存在,eg:輸入了錯(cuò)誤的URL
- 500 Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
- 503 Server Unavailable //服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常
- 505 HTTP Version not supported //服務(wù)器不支持請(qǐng)求的HTTP協(xié)議的版本,無(wú)法完成處理
HTTP請(qǐng)求方法
HTTP 1.0定義了三種請(qǐng)求方法:GET,POST,和HEAD方法。
HTTP 1.1新增了五種請(qǐng)求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法;
| 序號(hào) | 方法 | 描述 |
|---|---|---|
| 1 | GET | 請(qǐng)求指定的頁(yè)面信息,并返回實(shí)體主體。 |
| 2 | HEAD | 類(lèi)似于get請(qǐng)求,只不過(guò)返回的響應(yīng)中沒(méi)有具體的內(nèi)容,用于獲取報(bào)頭 |
| 3 | POST | 向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請(qǐng)求體中。POST請(qǐng)求可能會(huì)導(dǎo)致新的資源的建立和/或已有資源的修改。 |
| 4 | PUT | 從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容。 |
| 5 | DELETE | 請(qǐng)求服務(wù)器刪除指定的頁(yè)面。 |
| 6 | CONNECT | HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。 |
| 7 | OPTIONS | 允許客戶端查看服務(wù)器的性能。 |
| 8 | TRACE | 回顯服務(wù)器收到的請(qǐng)求,主要用于測(cè)試或診斷。 |
HTTP響應(yīng)頭信息
| 應(yīng)答頭 | 說(shuō)明 |
|---|---|
| Allow | 服務(wù)器支持哪些請(qǐng)求方法(如GET、POST等)。 |
| Content-Encoding | 文檔的編碼(Encode)方法。只有在解碼之后才可以得到Content-Type頭指定的內(nèi)容類(lèi)型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的下載時(shí)間。Java的GZIPOutputStream可以很方便地進(jìn)行g(shù)zip壓縮,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet應(yīng)該通過(guò)查看Accept-Encoding頭(即request.getHeader("Accept-Encoding"))檢查瀏覽器是否支持gzip,為支持gzip的瀏覽器返回經(jīng)gzip壓縮的HTML頁(yè)面,為其他瀏覽器返回普通頁(yè)面。 |
| Content-Length | 表示內(nèi)容長(zhǎng)度。只有當(dāng)瀏覽器使用持久HTTP連接時(shí)才需要這個(gè)數(shù)據(jù)。如果你想要利用持久連接的優(yōu)勢(shì),可以把輸出文檔寫(xiě)入 ByteArrayOutputStream,完成后查看其大小,然后把該值放入Content-Length頭,最后通過(guò)byteArrayStream.writeTo(response.getOutputStream()發(fā)送內(nèi)容。 |
| Content-Type | 表示后面的文檔屬于什么MIME類(lèi)型。Servlet默認(rèn)為text/plain,但通常需要顯式地指定為text/html。由于經(jīng)常要設(shè)置Content-Type,因此HttpServletResponse提供了一個(gè)專用的方法setContentType。 |
| Date | 當(dāng)前的GMT時(shí)間。你可以用setDateHeader來(lái)設(shè)置這個(gè)頭以避免轉(zhuǎn)換時(shí)間格式的麻煩。 |
| Expires | 應(yīng)該在什么時(shí)候認(rèn)為文檔已經(jīng)過(guò)期,從而不再緩存它? |
| Last-Modified | 文檔的最后改動(dòng)時(shí)間??蛻艨梢酝ㄟ^(guò)If-Modified-Since請(qǐng)求頭提供一個(gè)日期,該請(qǐng)求將被視為一個(gè)條件GET,只有改動(dòng)時(shí)間遲于指定時(shí)間的文檔才會(huì)返回,否則返回一個(gè)304(Not Modified)狀態(tài)。Last-Modified也可用setDateHeader方法來(lái)設(shè)置。 |
| Location | 表示客戶應(yīng)當(dāng)?shù)侥睦锶ヌ崛∥臋n。Location通常不是直接設(shè)置的,而是通過(guò)HttpServletResponse的sendRedirect方法,該方法同時(shí)設(shè)置狀態(tài)代碼為302。 |
| Refresh | 表示瀏覽器應(yīng)該在多少時(shí)間之后刷新文檔,以秒計(jì)。除了刷新當(dāng)前文檔之外,你還可以通過(guò)setHeader("Refresh", "5; URL=http://host/path")讓瀏覽器讀取指定的頁(yè)面。注意這種功能通常是通過(guò)設(shè)置HTML頁(yè)面HEAD區(qū)的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">實(shí)現(xiàn),這是因?yàn)?,自?dòng)刷新或重定向?qū)τ谀切┎荒苁褂肅GI或Servlet的HTML編寫(xiě)者十分重要。但是,對(duì)于Servlet來(lái)說(shuō),直接設(shè)置Refresh頭更加方便。注意Refresh的意義是"N秒之后刷新本頁(yè)面或訪問(wèn)指定頁(yè)面",而不是"每隔N秒刷新本頁(yè)面或訪問(wèn)指定頁(yè)面"。因此,連續(xù)刷新要求每次都發(fā)送一個(gè)Refresh頭,而發(fā)送204狀態(tài)代碼則可以阻止瀏覽器繼續(xù)刷新,不管是使用Refresh頭還是<META HTTP-EQUIV="Refresh" ...>。 注意Refresh頭不屬于HTTP 1.1正式規(guī)范的一部分,而是一個(gè)擴(kuò)展,但Netscape和IE都支持它。 |
| Server | 服務(wù)器名字。Servlet一般不設(shè)置這個(gè)值,而是由Web服務(wù)器自己設(shè)置。 |
| Set-Cookie | 設(shè)置和頁(yè)面關(guān)聯(lián)的Cookie。Servlet不應(yīng)使用response.setHeader("Set-Cookie", ...),而是應(yīng)使用HttpServletResponse提供的專用方法addCookie。 |
| WWW-Authenticate | 客戶應(yīng)該在Authorization頭中提供什么類(lèi)型的授權(quán)信息?在包含401(Unauthorized)狀態(tài)行的應(yīng)答中這個(gè)頭是必需的。例如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。注意Servlet一般不進(jìn)行這方面的處理,而是讓W(xué)eb服務(wù)器的專門(mén)機(jī)制來(lái)控制受密碼保護(hù)頁(yè)面的訪問(wèn)(例如.htaccess)。 |
2. 常用的HTTP請(qǐng)求頭
| 協(xié)議頭 | 說(shuō)明 | 示例 | 狀態(tài) |
|---|---|---|---|
| Accept | 可接受的響應(yīng)內(nèi)容類(lèi)型(Content-Types) | Accept: text/plain | 固定 |
| Accept-Charset | 可接受的字符集 | Accept-Charset: utf-8 | 固定 |
| Accept-Encoding | 可接受的響應(yīng)內(nèi)容的編碼方式。 | Accept-Encoding: gzip, deflate | 固定 |
| Accept-Language | 可接受的響應(yīng)內(nèi)容語(yǔ)言列表。 | Accept-Language: en-US | 固定 |
| Accept-Datetime | 可接受的按照時(shí)間來(lái)表示的響應(yīng)內(nèi)容版本 | Accept-Datetime: Sat, 26 Dec 2015 17:30:00 GMT | 臨時(shí) |
| Authorization | 用于表示HTTP協(xié)議中需要認(rèn)證資源的認(rèn)證信息 | Authorization: Basic OSdjJGRpbjpvcGVuIANlc2SdDE== | 固定 |
| Cache-Control | 用來(lái)指定當(dāng)前的請(qǐng)求/回復(fù)中的,是否使用緩存機(jī)制。 | Cache-Control: no-cache | 固定 |
| Connection | 客戶端(瀏覽器)想要優(yōu)先使用的連接類(lèi)型 | Connection: keep-alive Connection: Upgrade | 固定 |
| Cookie | 由之前服務(wù)器通過(guò)Set-Cookie(見(jiàn)下文)設(shè)置的一個(gè)HTTP協(xié)議Cookie | Cookie: $Version=1; Skin=new; | 固定:標(biāo)準(zhǔn) |
| Content-Length | 以8進(jìn)制表示的請(qǐng)求體的長(zhǎng)度 | Content-Length: 348 | 固定 |
| Content-MD5 | 請(qǐng)求體的內(nèi)容的二進(jìn)制 MD5 散列值(數(shù)字簽名),以 Base64 編碼的結(jié)果 | Content-MD5: oD8dH2sgSW50ZWdyaIEd9D== | 廢棄 |
| Content-Type | 請(qǐng)求體的MIME類(lèi)型 (用于POST和PUT請(qǐng)求中) | Content-Type: application/x-www-form-urlencoded | 固定 |
| Date | 發(fā)送該消息的日期和時(shí)間(以RFC 7231中定義的"HTTP日期"格式來(lái)發(fā)送) | Date: Dec, 26 Dec 2015 17:30:00 GMT | 固定 |
| Expect | 表示客戶端要求服務(wù)器做出特定的行為 | Expect: 100-continue | 固定 |
| From | 發(fā)起此請(qǐng)求的用戶的郵件地址 | From: user@itbilu.com | 固定 |
| Host | 表示服務(wù)器的域名以及服務(wù)器所監(jiān)聽(tīng)的端口號(hào)。如果所請(qǐng)求的端口是對(duì)應(yīng)的服務(wù)的標(biāo)準(zhǔn)端口(80),則端口號(hào)可以省略 | Host: www.itbilu.com:80Host: www.itbilu.com | 固定 |
| If-Match | 僅當(dāng)客戶端提供的實(shí)體與服務(wù)器上對(duì)應(yīng)的實(shí)體相匹配時(shí),才進(jìn)行對(duì)應(yīng)的操作。主要用于像 PUT 這樣的方法中,僅當(dāng)從用戶上次更新某個(gè)資源后,該資源未被修改的情況下,才更新該資源。 | If-Match: "9jd00cdj34pss9ejqiw39d82f20d0ikd" | 固定 |
| If-Modified-Since | 允許在對(duì)應(yīng)的資源未被修改的情況下返回304未修改 | If-Modified-Since: Dec, 26 Dec 2015 17:30:00 GMT | 固定 |
| If-None-Match | 允許在對(duì)應(yīng)的內(nèi)容未被修改的情況下返回304未修改( 304 Not Modified ),參考 超文本傳輸協(xié)議 的實(shí)體標(biāo)記If-None-Match: "9jd00cdj34pss9ejqiw39d82f20d0ikd" | 固定 | |
| If-Range | 如果該實(shí)體未被修改過(guò),則向返回所缺少的那一個(gè)或多個(gè)部分。否則,返回整個(gè)新的實(shí)體 | If-Range:"9jd00cdj34pss9ejqiw39d82f20d0ikd" | 固定 |
| If-Unmodified-Since | 僅當(dāng)該實(shí)體自某個(gè)特定時(shí)間以來(lái)未被修改的情況下,才發(fā)送回應(yīng)。 | If-Unmodified-Since: Dec, 26 Dec 2015 17:30:00 GMT | 固定 |
| Max-Forwards | 限制該消息可被代理及網(wǎng)關(guān)轉(zhuǎn)發(fā)的次數(shù)。 | Max-Forwards: 10 | 固定 |
| Origin | 發(fā)起一個(gè)針對(duì)跨域資源共享的請(qǐng)求(該請(qǐng)求要求服務(wù)器在響應(yīng)中加入一個(gè)Access-Control-Allow-Origin | ||
| 的消息頭,表示訪問(wèn)控制所允許的來(lái)源)。 | Origin: http://www.itbilu.com | 固定: 標(biāo)準(zhǔn) | |
| Pragma | 與具體的實(shí)現(xiàn)相關(guān),這些字段可能在請(qǐng)求/回應(yīng)鏈中的任何時(shí)候產(chǎn)生。 | Pragma: no-cache | 固定 |
| Proxy-Authorization | 用于向代理進(jìn)行認(rèn)證的認(rèn)證信息。 | Proxy-Authorization: Basic IOoDZRgDOi0vcGVuIHNlNidJi2== | 固定 |
| Range | 表示請(qǐng)求某個(gè)實(shí)體的一部分,字節(jié)偏移以0開(kāi)始。 | Range: bytes=500-999 | 固定 |
| Referer | 表示瀏覽器所訪問(wèn)的前一個(gè)頁(yè)面,可以認(rèn)為是之前訪問(wèn)頁(yè)面的鏈接將瀏覽器帶到了當(dāng)前頁(yè)面。Referer其實(shí)是Referrer這個(gè)單詞,但RFC制作標(biāo)準(zhǔn)時(shí)給拼錯(cuò)了,后來(lái)也就將錯(cuò)就錯(cuò)使用Referer了。 | Referer: http://itbilu.com/nodejs | 固定 |
| TE | 瀏覽器預(yù)期接受的傳輸時(shí)的編碼方式:可使用回應(yīng)協(xié)議頭Transfer-Encoding中的值(還可以使用"trailers"表示數(shù)據(jù)傳輸時(shí)的分塊方式)用來(lái)表示瀏覽器希望在最后一個(gè)大小為0的塊之后還接收到一些額外的字段。 | TE: trailers,deflate | 固定 |
| User-Agent | 瀏覽器的身份標(biāo)識(shí)字符串 | User-Agent: Mozilla/…… | 固定 |
| Upgrade | 要求服務(wù)器升級(jí)到一個(gè)高版本協(xié)議。 | Upgrade:HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 | 固定 |
| Via | 告訴服務(wù)器,這個(gè)請(qǐng)求是由哪些代理發(fā)出的。 | Via: 1.0 fred, 1.1 itbilu.com.com (Apache/1.1) | 固定 |
| Warning | 一個(gè)一般性的警告,表示在實(shí)體內(nèi)容體中可能存在錯(cuò)誤。 | Warning: 199 Miscellaneous warning | 固定 |