HTTP知識整合
HTTP——一、了解Web及網(wǎng)絡(luò)基礎(chǔ)
HTTP——二、簡單的HTTP協(xié)議
HTTP——三、HTTP報文內(nèi)的HTTP信息
HTTP——四、返回結(jié)果的HTTP狀態(tài)碼
HTTP——五、與HTTP協(xié)作的Web服務(wù)器
HTTP——六、HTTP首部
HTTP——七、確保Web安全的HTTPS
HTTP——八、確認訪問用戶身份的認證
HTTP——九、基于HTTP的功能追加協(xié)議
HTTP——十、構(gòu)建Web內(nèi)容的技術(shù)
HTTP——十一、Web的攻擊技術(shù)
HTTP 狀態(tài)碼負責表示客戶端 HTTP 請求的返回結(jié)果、標記服務(wù)器端的處理是否正常、通知出現(xiàn)的錯誤等工作。讓我們通過本章的學習,好好了解一下狀態(tài)碼的工作機制。
一、狀態(tài)碼告知從服務(wù)器端返回的請求結(jié)果
HTTP 狀態(tài)碼負責表示客戶端 HTTP 請求的返回結(jié)果、標記服務(wù)器端的處理是否正常、通知出現(xiàn)的錯誤等工作。讓我們通過本章的學習,好好了解一下狀態(tài)碼的工作機制。
圖:響應(yīng)的狀態(tài)碼可描述請求的處理結(jié)果
狀態(tài)碼如 200 OK,以 3 位數(shù)字和原因短語組成。
數(shù)字中的第一位指定了響應(yīng)類別,后兩位無分類。響應(yīng)類別有以下 5種。
表 4-1:狀態(tài)碼的類別
類別 | 原因短語 | |
---|---|---|
1XX | Informational(信息性狀態(tài)碼) | 接收的請求正在處理 |
2XX | Success(成功狀態(tài)碼) | 請求正常處理完畢 |
3XX | Redirection(重定向狀態(tài)碼) | 需要進行附加操作以完成請求 |
4XX | Client Error(客戶端錯誤狀態(tài)碼) | 服務(wù)器無法處理請求 |
5XX | Server Error(服務(wù)器錯誤狀態(tài)碼) | 服務(wù)器處理請求出錯 |
只要遵守狀態(tài)碼類別的定義,即使改變 RFC2616 中定義的狀態(tài)碼,或服務(wù)器端自行創(chuàng)建狀態(tài)碼都沒問題。
僅記錄在 RFC2616 上的 HTTP 狀態(tài)碼就達 40 種,若再加上WebDAV(Web-based Distributed Authoring and Versioning,基于萬維網(wǎng)的分布式創(chuàng)作和版本控制)(RFC4918、5842) 和附加 HTTP 狀態(tài)碼(RFC6585)等擴展,數(shù)量就達 60 余種。別看種類繁多,實際上經(jīng)常使用的大概只有 14 種。接下來,我們就介紹一下這些具有代表性的 14 個狀態(tài)碼。
二、2XX成功
2XX 的響應(yīng)結(jié)果表明請求被正常處理了。
1、200 OK
表示從客戶端發(fā)來的請求在服務(wù)器端被正常處理了。
在響應(yīng)報文內(nèi),隨狀態(tài)碼一起返回的信息會因方法的不同而發(fā)生改變。比如,使用 GET 方法時,對應(yīng)請求資源的實體會作為響應(yīng)返回;而使用 HEAD 方法時,對應(yīng)請求資源的實體首部不隨報文主體作為響應(yīng)返回(即在響應(yīng)中只返回首部,不會返回實體的主體部分)。
2、204 No Content
該狀態(tài)碼代表服務(wù)器接收的請求已成功處理,但在返回的響應(yīng)報文中不含實體的主體部分。另外,也不允許返回任何實體的主體。比如,當從瀏覽器發(fā)出請求處理后,返回 204 響應(yīng),那么瀏覽器顯示的頁面不發(fā)生更新。
一般在只需要從客戶端往服務(wù)器發(fā)送信息,而對客戶端不需要發(fā)送新信息內(nèi)容的情況下使用。
3、206 Partial Content
該狀態(tài)碼表示客戶端進行了范圍請求,而服務(wù)器成功執(zhí)行了這部分的GET 請求。響應(yīng)報文中包含由 Content-Range 指定范圍的實體內(nèi)容。
三、3XX重定向
3XX 響應(yīng)結(jié)果表明瀏覽器需要執(zhí)行某些特殊的處理以正確處理請求。
1、301 Moved Permanently
永久性重定向。該狀態(tài)碼表示請求的資源已被分配了新的 URI,以后應(yīng)使用資源現(xiàn)在所指的 URI。也就是說,如果已經(jīng)把資源對應(yīng)的 URI保存為書簽了,這時應(yīng)該按 Location 首部字段提示的 URI 重新保存。
像下方給出的請求 URI,當指定資源路徑的最后忘記添加斜杠“/”,就會產(chǎn)生 301 狀態(tài)碼。
http://example.com/sample
2、302 Found
臨時性重定向。該狀態(tài)碼表示請求的資源已被分配了新的 URI,希望用戶(本次)能使用新的 URI 訪問。
和 301 Moved Permanently 狀態(tài)碼相似,但 302 狀態(tài)碼代表的資源不是被永久移動,只是臨時性質(zhì)的。換句話說,已移動的資源對應(yīng)的URI 將來還有可能發(fā)生改變。比如,用戶把 URI 保存成書簽,但不會像 301 狀態(tài)碼出現(xiàn)時那樣去更新書簽,而是仍舊保留返回 302 狀態(tài)碼的頁面對應(yīng)的 URI。
3、303 See Other
該狀態(tài)碼表示由于請求對應(yīng)的資源存在著另一個 URI,應(yīng)使用 GET方法定向獲取請求的資源。
303 狀態(tài)碼和 302 Found 狀態(tài)碼有著相同的功能,但 303 狀態(tài)碼明確表示客戶端應(yīng)當采用 GET 方法獲取資源,這點與 302 狀態(tài)碼有區(qū)別。
比如,當使用 POST 方法訪問 CGI 程序,其執(zhí)行后的處理結(jié)果是希望客戶端能以 GET 方法重定向到另一個 URI 上去時,返回 303 狀態(tài)碼。雖然 302 Found 狀態(tài)碼也可以實現(xiàn)相同的功能,但這里使用 303狀態(tài)碼是最理想的。
本章采用的是 HTTP/1.1,而許多 HTTP/1.1 版以前的瀏覽器不能正確理解 303 狀
態(tài)碼。雖然 RFC 1945 和 RFC 2068 規(guī)范不允許客戶端在重定向時改變請求的方
法,但是很多現(xiàn)存的瀏覽器將 302 響應(yīng)視為 303 響應(yīng),并且使用 GET方式訪問在
Location 中規(guī)定的 URI,而無視原先請求的方法。所以作者說這里使用 303 是最
理想的。
當 301、302、303 響應(yīng)狀態(tài)碼返回時,幾乎所有的瀏覽器都會把POST 改成 GET,并刪除請求報文內(nèi)的主體,之后請求會自動再次發(fā)送。
301、302 標準是禁止將 POST 方法改變成 GET 方法的,但實際使用時大家都會這么做。
4、304 Not Modified
該狀態(tài)碼表示客戶端發(fā)送附帶條件的請求 2 時,服務(wù)器端允許請求訪問資源,但未滿足條件的情況。304 狀態(tài)碼返回時,不包含任何響應(yīng)的主體部分。304 雖然被劃分在 3XX 類別中,但是和重定向沒有關(guān)系。
附帶條件的請求是指采用 GET方法的請求報文中包含 If-Match,If-ModifiedSince,If-None-Match,If-Range,If-Unmodified-Since 中任一首部。
5、307 Temporary Redirect
臨時重定向。該狀態(tài)碼與 302 Found 有著相同的含義。盡管 302 標準禁止 POST 變換成 GET,但實際使用時大家并不遵守。
307 會遵照瀏覽器標準,不會從 POST 變成 GET。但是,對于處理響應(yīng)時的行為,每種瀏覽器有可能出現(xiàn)不同的情況。
四、4XX客戶端錯誤
4XX 的響應(yīng)結(jié)果表明客戶端是發(fā)生錯誤的原因所在。
1、400 Bad Request
該狀態(tài)碼表示請求報文中存在語法錯誤。當錯誤發(fā)生時,需修改請求的內(nèi)容后再次發(fā)送請求。另外,瀏覽器會像 200 OK 一樣對待該狀態(tài)碼。
2、401 Unauthorized
該狀態(tài)碼表示發(fā)送的請求需要有通過 HTTP 認證(BASIC 認證、DIGEST 認證)的認證信息。另外若之前已進行過 1 次請求,則表示用戶認證失敗。
返回含有 401 的響應(yīng)必須包含一個適用于被請求資源的 WWWAuthenticate 首部用以質(zhì)詢(challenge)用戶信息。當瀏覽器初次接收
到 401 響應(yīng),會彈出認證用的對話窗口。
3、403 Forbidden
該狀態(tài)碼表明對請求資源的訪問被服務(wù)器拒絕了。服務(wù)器端沒有必要給出拒絕的詳細理由,但如果想作說明的話,可以在實體的主體部分對原因進行描述,這樣就能讓用戶看到了。
未獲得文件系統(tǒng)的訪問授權(quán),訪問權(quán)限出現(xiàn)某些問題(從未授權(quán)的發(fā)送源 IP 地址試圖訪問)等列舉的情況都可能是發(fā)生 403 的原因。
4、404 Not Found
該狀態(tài)碼表明服務(wù)器上無法找到請求的資源。除此之外,也可以在服務(wù)器端拒絕請求且不想說明理由時使用。
五、5XX 服務(wù)器錯誤
5XX 的響應(yīng)結(jié)果表明服務(wù)器本身發(fā)生錯誤。
1、500 Internal Server Error
該狀態(tài)碼表明服務(wù)器端在執(zhí)行請求時發(fā)生了錯誤。也有可能是 Web應(yīng)用存在的 bug 或某些臨時的故障。
2、503 Service Unavailable
該狀態(tài)碼表明服務(wù)器暫時處于超負載或正在進行停機維護,現(xiàn)在無法處理請求。如果事先得知解除以上狀況需要的時間,最好寫入RetryAfter 首部字段再返回給客戶端。文章來源:http://www.zghlxwxcb.cn/news/detail-675526.html
狀態(tài)碼和狀況的不一致
不少返回的狀態(tài)碼響應(yīng)都是錯誤的,但是用戶可能察覺不到這點。比如 Web 應(yīng)用程序內(nèi)部發(fā)生錯誤,狀態(tài)碼依然返回 200 OK,這種情況也經(jīng)常遇到。文章來源地址http://www.zghlxwxcb.cn/news/detail-675526.html
到了這里,關(guān)于HTTP——四、返回結(jié)果的HTTP狀態(tài)碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!