網(wǎng)絡(luò)請求的狀態(tài)碼

本部分余下的內(nèi)容會(huì)詳細(xì)地介紹 HTTP 1.1中的狀態(tài)碼。這些狀態(tài)碼被分為五大類:

100-199 用于指定客戶端應(yīng)相應(yīng)的某些動(dòng)作漩蟆。

200-299 用于表示請求成功。

300-399 用于已經(jīng)移動(dòng)的文件并且常被包含在定位頭信息中指定新的地址信息。

400-499 用于指出客戶端的錯(cuò)誤。

500-599 用于支持服務(wù)器錯(cuò)誤功炮。

HttpServletResponse中的常量代表關(guān)聯(lián)不同標(biāo)準(zhǔn)消息的狀態(tài)碼。在servlet程序中术唬,你會(huì)更多地用到這些常量的標(biāo)識來使用狀態(tài)碼薪伏。例如:你一般會(huì)使用response.setStatus(response.SC_NO_CONTENT)而不是 response.setStatus(204),因?yàn)楹笳卟灰桌斫舛胰菀讓?dǎo)致錯(cuò)誤粗仓。但是嫁怀,你應(yīng)當(dāng)注意到服務(wù)器允許對消息輕微的改變,而客戶端只注意狀態(tài)碼的數(shù)字值借浊。所以服務(wù)器可能只返回 HTTP/1.1 200 而不是 HTTP/1.1 200 OK塘淑。

100 (Continue/繼續(xù))

如果服務(wù)器收到頭信息中帶有100-continue的請求,這是指客戶端詢問是否可以在后續(xù)的請求中發(fā)送附件蚂斤。在這種情況下存捺,服務(wù)器用 100(SC_CONTINUE)允許客戶端繼續(xù)或用417 (Expectation Failed)告訴客戶端不同意接受附件。這個(gè)狀態(tài)碼是 HTTP 1.1中新加入的橡淆。

101 (Switching Protocols/轉(zhuǎn)換協(xié)議)

101 (SC_SWITCHING_PROTOCOLS)狀態(tài)碼是指服務(wù)器將按照其上的頭信息變?yōu)橐粋€(gè)不同的協(xié)議。這是 HTTP 1.1中新加入的母赵。

200 (OK/正常)

200 (SC_OK)的意思是一切正常逸爵。一般用于相應(yīng)GET和POST請求。這個(gè)狀態(tài)碼對servlet是缺省的凹嘲;如果沒有調(diào)用setStatus方法的話师倔,就會(huì)得到200。

201 (Created/已創(chuàng)建)

201 (SC_CREATED)表示服務(wù)器在請求的響應(yīng)中建立了新文檔周蹭;應(yīng)在定位頭信息中給出它的URL趋艘。

202 (Accepted/接受)

202 (SC_ACCEPTED)告訴客戶端請求正在被執(zhí)行疲恢,但還沒有處理完。

203 (Non-Authoritative Information/非官方信息)

狀態(tài)碼203 (SC_NON_AUTHORITATIVE_INFORMATION)是表示文檔被正常的返回瓷胧,但是由于正在使用的是文檔副本所以某些響應(yīng)頭信息可能不正確显拳。這是 HTTP 1.1中新加入的。

204 (No Content/無內(nèi)容)

在并沒有新文檔的情況下搓萧,204 (SC_NO_CONTENT)確保瀏覽器繼續(xù)顯示先前的文檔杂数。這各狀態(tài)碼對于用戶周期性的重載某一頁非常有用,并且你可以確定先前的頁面是否已經(jīng)更新瘸洛。例如揍移,某個(gè)servlet可能作如下操作:

int pageVersion =Integer.parseInt(request.getParameter("pageVersion"));

if (pageVersion >= currentVersion) {

response.setStatus(response.SC_NO_CONTENT);

} else {

// Create regular page

}

但是,這種方法對通過刷新響應(yīng)頭信息或等價(jià)的HTML標(biāo)記自動(dòng)重載的頁面起作用反肋,因?yàn)樗鼤?huì)返回一個(gè)204狀態(tài)碼停止以后的重載那伐。但基于JavaScript腳本的自動(dòng)重載在這種情況下仍然需要能夠起作用∈幔可以閱讀本書7.2 ( HTTP 1.1 Response Headers and Their Meaning/HTTP 1.1響應(yīng)頭信息以及他們的意義)部分的詳細(xì)討論罕邀。

205 (Reset Content/重置內(nèi)容)

重置內(nèi)容205 (SC_RESET_CONTENT)的意思是雖然沒有新文檔但瀏覽器要重置文檔顯示。這個(gè)狀態(tài)碼用于強(qiáng)迫瀏覽器清除表單域抓督。這是 HTTP 1.1中新加入的燃少。

206 (Partial Content/局部內(nèi)容)

206 (SC_PARTIAL_CONTENT)是在服務(wù)器完成了一個(gè)包含Range頭信息的局部請求時(shí)被發(fā)送的。這是 HTTP 1.1中新加入的铃在。

300 (Multiple Choices/多重選擇)

300 (SC_MULTIPLE_CHOICES)表示被請求的文檔可以在多個(gè)地方找到阵具,并將在返回的文檔中列出來。如果服務(wù)器有首選設(shè)置定铜,首選項(xiàng)將會(huì)被列于定位響應(yīng)頭信息中阳液。

301 (Moved Permanently)

301 (SC_MOVED_PERMANENTLY)狀態(tài)是指所請求的文檔在別的地方;文檔新的URL會(huì)在定位響應(yīng)頭信息中給出揣炕。瀏覽器會(huì)自動(dòng)連接到新的URL帘皿。

302 (Found/找到)

與301有些類似,只是定位頭信息中所給的URL應(yīng)被理解為臨時(shí)交換地址而不是永久的畸陡。注意:在 HTTP 1.0中鹰溜,消息是臨時(shí)移動(dòng)(Moved Temporarily)的而不是被找到,因此HttpServletResponse中的常量是SC_MOVED_TEMPORARILY不是我們以為的SC_FOUND丁恭。

注意

代表狀態(tài)碼302的常量是SC_MOVED_TEMPORARILY而不是SC_FOUND曹动。

狀態(tài)碼302是非常有用的因?yàn)闉g覽器自動(dòng)連接在定為響應(yīng)頭信息中給出的新URL。這非常有用牲览,而且為此有一個(gè)專門的方法——sendRedirect墓陈。使用response.sendRedirect(url)比調(diào)用 response.setStatus(response.SC_MOVED_TEMPORARILY)和 response.setHeader("Location", url)多幾個(gè)好處。首先,response.sendRedirect(url)方法明顯要簡單和容易贡必。第二兔港,servlet自動(dòng)建立一頁保存這一連接以提供給那些不能自動(dòng)轉(zhuǎn)向的瀏覽器顯示。最后仔拟,在servlet 2.2版本(J2EE中的版本)中衫樊,sendRedirect能夠處理相對路徑,自動(dòng)轉(zhuǎn)換為絕對路徑理逊。但是你只能在2.1版本中使用絕對路徑橡伞。

如果你將用戶轉(zhuǎn)向到站點(diǎn)的另一頁中,你要用 HttpServletResponse 中的 encodeURL 方法傳送URL晋被。這么做可預(yù)防不斷使用基于URL重寫的會(huì)話跟蹤的情況兑徘。URL重寫是一種在你的網(wǎng)站跟蹤不使用 cookies 的用戶的方法。這是通過在每一個(gè)URL尾部附加路徑信息實(shí)現(xiàn)的羡洛,但是 servlet 會(huì)話跟蹤API會(huì)自動(dòng)的注意這些細(xì)節(jié)挂脑。會(huì)話跟蹤在第九章討論,并且養(yǎng)成使用 encodeURL 的習(xí)慣會(huì)使以后添加會(huì)話跟蹤的功能更容易很多欲侮。

核心技巧

如果你將用戶轉(zhuǎn)向到你的站點(diǎn)的其他頁面崭闲,用 response.sendRedirect(response.encodeURL(url)) 的方式事先計(jì)劃好會(huì)話跟蹤(session tracking)要比只是調(diào)用 response.sendRedirect(url) 好的多。

這個(gè)狀態(tài)碼有時(shí)可以與301交換使用威蕉。例如刁俭,如果你錯(cuò)誤的訪問了http://host/~user(路徑信息不完整),有些服務(wù)器就會(huì)回復(fù)301狀態(tài)碼而有些則回復(fù)302韧涨。從技術(shù)上說牍戚,如果最初的請求是GET瀏覽器只是被假定自動(dòng)轉(zhuǎn)向。如果想了解更多細(xì)節(jié)虑粥,請看狀態(tài)碼307的討論如孝。

303 (See Other/參見其他信息)

這個(gè)狀態(tài)碼和 301、302 相似娩贷,只是如果最初的請求是 POST第晰,那么新文檔(在定位頭信息中給出)藥用 GET 找回。這個(gè)狀態(tài)碼是新加入 HTTP 1.1中的彬祖。

304 (Not Modified/為修正)

當(dāng)客戶端有一個(gè)緩存的文檔茁瘦,通過提供一個(gè) If-Modified-Since 頭信息可指出客戶端只希望文檔在指定日期之后有所修改時(shí)才會(huì)重載此文檔,用這種方式可以進(jìn)行有條件的請求储笑。304 (SC_NOT_MODIFIED)是指緩沖的版本已經(jīng)被更新并且客戶端應(yīng)刷新文檔甜熔。另外,服務(wù)器將返回請求的文檔及狀態(tài)碼 200南蓬。servlet一般情況下不會(huì)直接設(shè)置這個(gè)狀態(tài)碼纺非。它們會(huì)實(shí)現(xiàn)getLastModified方法并根據(jù)修正日期讓默認(rèn)服務(wù)方法處理有條件的請求。這個(gè)方法的例程已在2.8部分(An Example Using Servlet Initialization and Page Modification Dates/一個(gè)使用servlet初始化和頁面修正日期的例子)給出赘方。

305 (Use Proxy/使用代理)

305 (SC_USE_PROXY)表示所請求的文檔要通過定位頭信息中的代理服務(wù)器獲得烧颖。這個(gè)狀態(tài)碼是新加入 HTTP 1.1中的。

307 (Temporary Redirect/臨時(shí)重定向)

瀏覽器處理307狀態(tài)的規(guī)則與302相同窄陡。307狀態(tài)被加入到 HTTP 1.1中是由于許多瀏覽器在收到302響應(yīng)時(shí)即使是原始消息為POST的情況下仍然執(zhí)行了錯(cuò)誤的轉(zhuǎn)向炕淮。只有在收到303響應(yīng)時(shí)才假定瀏覽器會(huì)在POST請求時(shí)重定向。添加這個(gè)新的狀態(tài)碼的目的很明確:在響應(yīng)為303時(shí)按照GET和POST請求轉(zhuǎn)向跳夭;而在307響應(yīng)時(shí)則按照GET請求轉(zhuǎn)向而不是POST請求涂圆。注意:由于某些原因在HttpServletResponse中還沒有與這個(gè)狀態(tài)對應(yīng)的常量。該狀態(tài)碼是新加入HTTP 1.1中的币叹。

注意

在 HttpServletResponse 中沒有 SC_TEMPORARY_REDIRECT 常量润歉,所以你只能顯示的使用307狀態(tài)碼。

400 (Bad Request/錯(cuò)誤請求)

400 (SC_BAD_REQUEST)指出客戶端請求中的語法錯(cuò)誤颈抚。

401 (Unauthorized/未授權(quán))

401 (SC_UNAUTHORIZED)表示客戶端在授權(quán)頭信息中沒有有效的身份信息時(shí)訪問受到密碼保護(hù)的頁面踩衩。這個(gè)響應(yīng)必須包含一個(gè)WWW- Authenticate的授權(quán)信息頭。例如贩汉,在本書4.5部分中的“Restricting Access to Web Pages./限制訪問Web頁驱富。”

403 (Forbidden/禁止)

403 (SC_FORBIDDEN)的意思是除非擁有授權(quán)否則服務(wù)器拒絕提供所請求的資源匹舞。這個(gè)狀態(tài)經(jīng)常會(huì)由于服務(wù)器上的損壞文件或目錄許可而引起褐鸥。

404 (Not Found/未找到)

404 (SC_NOT_FOUND)狀態(tài)每個(gè)網(wǎng)絡(luò)程序員可能都遇到過,他告訴客戶端所給的地址無法找到任何資源赐稽。它是表示“沒有所訪問頁面”的標(biāo)準(zhǔn)方式叫榕。這個(gè)狀態(tài)碼是常用的響應(yīng)并且在HttpServletResponse類中有專門的方法實(shí)現(xiàn)它:sendError("message")。相對于 setStatus使用sendError得好處是:服務(wù)器會(huì)自動(dòng)生成一個(gè)錯(cuò)誤頁來顯示錯(cuò)誤信息又憨。但是翠霍,Internet Explorer 5瀏覽器卻默認(rèn)忽略你發(fā)揮的錯(cuò)誤頁面并顯示其自定義的錯(cuò)誤提示頁面,雖然微軟這么做違反了 HTTP 規(guī)范蠢莺。要關(guān)閉此功能寒匙,在工具菜單里,選擇Internet選項(xiàng)躏将,進(jìn)入高級標(biāo)簽頁锄弱,并確認(rèn)“顯示友好的 HTTP 錯(cuò)誤信息”選項(xiàng)(在我的瀏覽器中是倒數(shù)第8各選項(xiàng))沒有被選。但是很少有用戶知道此選項(xiàng)祸憋,因此這個(gè)特性被IE5隱藏了起來使用戶無法看到你所返回給用戶的信息会宪。而其他主流瀏覽器及IE4都完全的顯示服務(wù)器生成的錯(cuò)誤提示頁面◎强可以參考圖6-3及6-4中的例子掸鹅。

核心警告

默認(rèn)情況下塞帐,IE5忽略服務(wù)端生成的錯(cuò)誤提示頁面。

405 (Method Not Allowed/方法未允許)

405 (SC_METHOD_NOT_ALLOWED)指出請求方法(GET, POST, HEAD, PUT, DELETE, 等)對某些特定的資源不允許使用巍沙。該狀態(tài)碼是新加入 HTTP 1.1中的葵姥。

406 (Not Acceptable/無法訪問)

406 (SC_NOT_ACCEPTABLE)表示請求資源的MIME類型與客戶端中Accept頭信息中指定的類

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市句携,隨后出現(xiàn)的幾起案子榔幸,更是在濱河造成了極大的恐慌,老刑警劉巖矮嫉,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件削咆,死亡現(xiàn)場離奇詭異,居然都是意外死亡蠢笋,警方通過查閱死者的電腦和手機(jī)拨齐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昨寞,“玉大人奏黑,你說我怎么就攤上這事”喾” “怎么了熟史?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長窄俏。 經(jīng)常有香客問我蹂匹,道長,這世上最難降的妖魔是什么凹蜈? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任限寞,我火速辦了婚禮,結(jié)果婚禮上仰坦,老公的妹妹穿的比我還像新娘履植。我一直安慰自己,他們只是感情好悄晃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布玫霎。 她就那樣靜靜地躺著,像睡著了一般妈橄。 火紅的嫁衣襯著肌膚如雪庶近。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天眷蚓,我揣著相機(jī)與錄音鼻种,去河邊找鬼。 笑死沙热,一個(gè)胖子當(dāng)著我的面吹牛叉钥,可吹牛的內(nèi)容都是我干的罢缸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼投队,長吁一口氣:“原來是場噩夢啊……” “哼祖能!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蛾洛,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雁芙,沒想到半個(gè)月后轧膘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兔甘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年谎碍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洞焙。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蟆淀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出澡匪,到底是詐尸還是另有隱情熔任,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布唁情,位于F島的核電站疑苔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏甸鸟。R本人自食惡果不足惜惦费,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抢韭。 院中可真熱鬧薪贫,春花似錦、人聲如沸刻恭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳍贾。三九已至臀突,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贾漏,已是汗流浹背候学。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纵散,地道東北人梳码。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓隐圾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親掰茶。 傳聞我的和親對象是個(gè)殘疾皇子暇藏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)濒蒋,斷路器盐碱,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • HTTP狀態(tài)碼大全完整的 HTTP 1.1規(guī)范說明書來自于RFC 2616,你可以在http://www.tale...
    七維樹閱讀 324評論 0 3
  • 一沪伙、簡介 狀態(tài)碼被分為五大類 1瓮顽、100-199 用于指定客戶端應(yīng)相應(yīng)的某些動(dòng)作。 2围橡、200-299 用于表示請...
    one_mighty閱讀 329評論 0 0
  • 連我自己都沒猜到居然有2暖混。。 上回講到了如何讓皮卡丘出現(xiàn)在"現(xiàn)實(shí)"中翁授。這次拣播,我們要帶上精靈球捕抓皮卡丘了!(啪啪啪...
    PA_閱讀 1,681評論 3 12
  • 小魚兒歡歡收擦,時(shí)戲蓮葉間贮配; 偷偷來覓食,誰也不告誰塞赂。
    木子春閱讀 358評論 0 1