摘要:若用戶發(fā)起了一個條件請求,而資源近期未被修改,可以通過該狀態(tài)碼表明。將來的請求應該使用老的和狀態(tài)碼之間存在一些交叉。服務器擔心請求會引發(fā)沖突時,可以發(fā)送此狀態(tài)碼。
狀態(tài)碼
狀態(tài)碼是來告訴客戶端,發(fā)生了什么事情。狀態(tài)碼為客戶端提供了一種理解事務處理結果的便捷方式。狀態(tài)碼位于響應的起始行中
比如,在行 HTTP/1.0 200 OK 中,狀態(tài)碼就是200
客戶端向一個 HTTP 服務器發(fā)送請求報文時,會遇到很多意想不到的情況,請求不一定能夠成功完成。服務器可能會告訴你無法找到所請求的資源,你沒有訪問資源的權限,或者資源被移到了其他地方
狀態(tài)碼是在每條響應報文的起始行中返回的。會返回一個數(shù)字狀態(tài)和一個可讀的狀態(tài)。數(shù)字碼便于程序進行差錯處理,而原因短語則便于人們理解
原因短語原因短語是響應起始行中的最后一個組件。它為狀態(tài)碼提供了文本形式的解釋
比如,在行 HTTP/1.0 200 OK 中,OK 就是原因短語
原因短語和狀態(tài)碼是成對出現(xiàn)的。原因短語是狀態(tài)碼的可讀版本,應用程序開發(fā)者將其傳送給用戶,用于說明在請求間發(fā)生了什么情況。HTTP 規(guī)范并沒有提供任何硬性規(guī)定,要求原因短語以何種形式出現(xiàn)
《PHP面試問答》 https://github.com/colinlet/P...狀態(tài)碼分類 五大類
結合實際 PHP 面試,系統(tǒng)的匯總面試中的各種各樣的問題,嘗試提供簡潔準確的答案。如果你在 PHP 面試中遇到問題,歡迎提 Issues 交流。包含網(wǎng)絡協(xié)議、數(shù)據(jù)結構與算法、PHP、Web、MySQL、Redis、Linux、安全、設計模式、架構、自我介紹、離職原因、職業(yè)規(guī)劃、準備問題等部分
如果覺得不錯歡迎 star 關注,正在不斷持續(xù)更新中~~
可以通過三位數(shù)字代碼對不同狀態(tài)碼進行分類
200 到 299 之間的狀態(tài)碼表示成功
300 到 399 之間的代碼表示資源已經(jīng)被移走了
400 到 499 之間的代碼表示客戶端的請求出錯了
500 到 599 之間的代碼表示服務器出錯了
狀態(tài)碼 | 整體范圍 | 已定義范圍 | 分類 |
---|---|---|---|
1XX | 100~199 | 100~101 | 信息提示 |
2XX | 200~299 | 200~206 | 成功 |
3XX | 300~399 | 300~305 | 重定向 |
4XX | 400~499 | 400~415 | 客戶端錯誤 |
5XX | 500~599 | 500~505 | 服務器錯誤 |
當前的 HTTP 版本只為每類狀態(tài)定義了幾個代碼。隨著協(xié)議的發(fā)展,HTTP 規(guī)范中會正式地定義更多的狀態(tài)碼。若收到了不認識的狀態(tài)碼,可能是有人將其作為當前協(xié)議的擴展定義的。可以根據(jù)其所處的范圍,將它作為那個類別中一個普通的成員來處理
例如,若收到了狀態(tài)碼 515(在 5XX 代碼的已定義范圍之外),就應該認為這條響應指出了服務器的錯誤,這是 5XX 報文的通用類別100 ~ 199,信息狀態(tài)碼
HTTP/1.1 向協(xié)議中引入了信息性狀態(tài)碼。這些狀態(tài)碼相對較新,關于其復雜性和感
知價值存在一些爭論,而受到限制
狀態(tài)碼 | 原因短語 | 含義 |
---|---|---|
100 | Continue | 說明收到了請求的初始部分,請客戶端繼續(xù)。發(fā)送了這個狀態(tài)碼之后,服務器在收到請求之后必須進行響應 |
101 | Switching Protocols | 說明服務器正在根據(jù)客戶端的指定,將協(xié)議切換成 Update 首部所列的協(xié)議 |
100 Continue 狀態(tài)碼的目的是對這樣的情況進行優(yōu)化:HTTP 客戶端應用程序有一個實體的主體部分要發(fā)送給服務器,但希望在發(fā)送之前查看一下服務器是否會接受這個實體。客戶端應用程序只有在避免向服務器發(fā)送一個服務器無法處理或使用的大實體,才應該使用 100 Continue
200 ~ 299,成功狀態(tài)碼客戶端發(fā)起請求時,這些請求通常都是成功的。服務器有一組用來表示成功的狀態(tài)碼,分別對應于不同類型的請求
狀態(tài)碼 | 原因短語 | 含義 |
---|---|---|
200 | OK | 請求沒問題,實體的主體部分包含了所請求的資源 |
201 | Created | 用于創(chuàng)建服務器對象的請求(比如:PUT)。響應的實體主體部分中應該包含引用了已創(chuàng)建的資源的URL,Location首部包含的則是最具體的引擎。服務器必須在發(fā)送這個狀態(tài)碼之前創(chuàng)建好對象 |
202 | Accepted | 請求已被接受,服務器還未對其執(zhí)行任何動作。不能保證服務器會完成這個請求;接受請求時,它看起來是有效的。服務器應在實體的主體部分包含對請求狀態(tài)的描述,或附加請求預計處理時間、信息獲取指針 |
203 | Non-Authoritative Information | 實體首部包含的信息不是來自于源端服務器,而是來自資源的副本。如果中間節(jié)點上有一份副本,但無法或沒有對元數(shù)據(jù)進行驗證,就會出現(xiàn)這種情況 |
204 | No Content | 響應報文中包含若干首部和一個狀態(tài)行,但沒有實體的主體部分。主要用于在瀏覽器不轉為顯示新文檔的情況下,對其進行更新(比如刷新一個表單頁面) |
205 | Reset Content | 另一個主要用于瀏覽器的代碼。負責告知瀏覽器清除當前頁面中的所有 HTML 表單元素 |
206 | Partial Content | 成功執(zhí)行了一個部分或 Range(范圍)請求。客戶端可以通過一些特殊的首部來獲取部分或某個范圍內(nèi)的文檔 |
重定向狀態(tài)碼要么告知客戶端使用替代位置來訪問他們所感興趣的資源,要么就提供一個替代的響應而不是資源的內(nèi)容。如果資源已被移動,可發(fā)送一個重定向狀態(tài)碼和一個可選的 Location 首部來告知客戶端資源已被移走,以及現(xiàn)在可以在哪里找到它。這樣,瀏覽器就可以在不打擾使用者的情況下,透明地轉入新的位置了
請求報文
GET /index.php HTTP/1.1 Host: blog.maplemark.cn Accept: *
響應報文
HTTP/1.1 301 Moved Permanently Server: nginx/1.12.2 Date: Fri, 19 Apr 2019 03:58:59 GMT Content-Type: text/html; charset=UTF-8 X-Powered-By: PHP/7.2.16 Location: https://blog.maplemark.cn/
請求報文
GET / HTTP/1.1 Host: blog.maplemark.cn Accept: *
響應報文
HTTP/1.1 200 OK Server: nginx/1.12.2 Date: Fri, 19 Apr 2019 03:59:34 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive ...
狀態(tài)碼 | 原因短語 | 含義 |
---|---|---|
300 | Multiple Choices | 客戶端請求一個實際指向多個資源的URL時會返回這個狀態(tài)碼,比如服務器上有某個HTML文檔有多個語言版本。返回時會帶有一個選項列表,用戶可以選擇期望使用的那項 |
301 | Moved Permanently | 在請求的 URL 已被移除時使用。響應的 Location 首部中應該包含資源現(xiàn)在所處的 URL |
302 | Found | 與 301 狀態(tài)碼類似;但是,客戶端應該使用 Location 首部給出的URL 來臨時定位資源。將來的請求仍應使用老的 URL |
303 | See Other | 告知客戶端應該用另一個 URL 來獲取資源。新的 URL 位于響應報文的 Location 首部。其主要目的是允許 POST 請求的響應將客戶端定向到某個資源上去 |
304 | Not Modified | 客戶端可以通過所包含的請求首部,使其請求變成有條件的。若用戶發(fā)起了一個條件 GET 請求,而資源近期未被修改,可以通過該狀態(tài)碼表明。帶有這個狀態(tài)碼的響應不應該包含實體的主體部分 |
305 | Use Proxy | 用來說明必須通過一個代理來訪問資源;代理的位置由 Location首部給出。客戶端是相對某個特定資源來解析這條響應的,不能假定所有請求,甚至所有對持有所請求資源的服務器的請求都通過這個代理進行。如果客戶端錯誤地讓代理介入了某條請求,可能會引發(fā)破壞性的行為,而且會造成安全漏洞 |
306 | (未使用) | 當前未使用 |
307 | Temporary Redirect | 與 301 狀態(tài)碼類似;但客戶端應該使用 Location 首部給出的 URL來臨時定位資源。將來的請求應該使用老的 URL |
302、303 和 307 狀態(tài)碼之間存在一些交叉。這些狀態(tài)碼的用法有著細微的差別,大部分差別都源于 HTTP/1.0 和 HTTP/1.1 應用程序對這些狀態(tài)碼處理方式的不同,為兼容 HTTP/1.0 而保留了一些狀態(tài)碼(例如 302 狀態(tài)碼)400 ~ 499,客戶端錯誤狀態(tài)碼
有時客戶端會發(fā)送一些服務器無法處理的東西,比如格式錯誤的請求報文,或者最常見的是,請求一個不存在的 URL
很多客戶端錯誤都是由瀏覽器來處理的,甚至不會打擾到你。只有少量錯誤,比如404,還是會穿過瀏覽器來到用戶面前
狀態(tài)碼 | 原因短語 | 含義 |
---|---|---|
400 | Bad Request | 用于告知客戶端它發(fā)送了一個錯誤的請求 |
401 | Unauthorized | 與適當?shù)氖撞恳煌祷兀谶@些首部中請求客戶端在獲取對資源的訪問權之前,對自己進行認證 |
402 | Payment Required | 現(xiàn)在這個狀態(tài)碼還未使用,但已經(jīng)被保留,以作未來之用 |
403 | Forbidden | 用于說明請求被服務器拒絕了。如果服務器想說明為什么拒絕請求,可以包含實體的主體部分來對原因進行描述。但這個狀態(tài)碼通常是在服務器不想說明拒絕原因的時候使用的 |
404 | Not Found | 用于說明服務器無法找到所請求的 URL。通常會包含一個實體,以便客戶端應用程序顯示給用戶看 |
405 | Method Not Allowed | 發(fā)起的請求中帶有所請求的 URL 不支持的方法時,使用此狀態(tài)碼。應該在響應中包含 Allow 首部,以告知客戶端對所請求的資源可以使用哪些方法 |
406 | Not Acceptable | 客戶端可以指定參數(shù)來說明它們愿意接收什么類型的實體。服務器沒有與客戶端可接受的 URL 相匹配的資源時,使用此代碼。通常,服務器會包含一些首部,以便客戶端弄清楚為什么請求無法滿足 |
407 | Proxy Authentication Required | 與 401 狀態(tài)碼類似,但用于要求對資源進行認證的代理服務器 |
408 | Request Timeout | 如果客戶端完成請求所花的時間太長,服務器可以回送此狀態(tài)碼,并關閉連接。超時時長隨服務器的不同有所不同,但通常對所有的合法請求來說,都是夠長的 |
409 | Conflict | 用于說明請求可能在資源上引發(fā)的一些沖突。服務器擔心請求會引發(fā)沖突時,可以發(fā)送此狀態(tài)碼。響應中應該包含描述沖突的主體 |
410 | Gone | 與 404 類似,只是服務器曾經(jīng)擁有過此資源。主要用于 Web 站點的維護,這樣服務器的管理者就可以在資源被移除的情況下通知客戶端了 |
411 | Length Required | 服務器要求在請求報文中包含 Content-Length 首部時使用 |
412 | Precondition Failed | 客戶端發(fā)起了條件請求,且其中一個條件失敗了的時候使用。客戶端包含了 Expect 首部時發(fā)起的就是條件請求 |
413 | Request Entity Too Large | 客戶端發(fā)送的實體主體部分比服務器能夠或者希望處理的要大時,使用此狀態(tài)碼 |
414 | Request URI Too Long | 客戶端所發(fā)請求中的請求 URL 比服務器能夠或者希望處理的要長時,使用此狀態(tài)碼 |
415 | Unsupported Media Type | 服務器無法理解或無法支持客戶端所發(fā)實體的內(nèi)容類型時,使用此狀態(tài)碼 |
416 | Requested Range Not Satisfiable | 請求報文所請求的是指定資源的某個范圍,而此范圍無效或無法滿足時,使用此狀態(tài)碼 |
417 | Expectation Failed | 請求的 Expect 請求首部包含了一個期望,但服務器無法滿足此期望時,使用此狀態(tài)碼。如果代理或其他中間應用程序有確切證據(jù)說明源端服務器會為某請求產(chǎn)生一個失敗的期望,就可以發(fā)送這個響應狀態(tài)碼 |
有時客戶端發(fā)送了一條有效請求,服務器自身卻出錯了。這可能是客戶端碰上了服務器的缺陷,或者服務器上的子元素,比如某個網(wǎng)關資源,出了錯
代理嘗試著代表客戶端與服務器進行交流時,經(jīng)常會出現(xiàn)問題。代理會發(fā)布 5XX 服務器錯誤狀態(tài)碼來描述所遇到的問題
狀態(tài)碼 | 原因短語 | 含義 |
---|---|---|
500 | Internal Server Error | 服務器遇到一個妨礙它為請求提供服務的錯誤時,使用此狀態(tài)碼 |
501 | Not Implemented | 客戶端發(fā)起的請求超出服務器的能力范圍(比如,使用了服務器不支持的請求方法)時,使用此狀態(tài)碼 |
502 | Bad Gateway | 作為代理或網(wǎng)關使用的服務器從請求響應鏈的下一條鏈路上收到了一條偽響應(比如,它無法連接到其父網(wǎng)關)時,使用此狀態(tài)碼 |
503 | Service Unavailable | 用來說明服務器現(xiàn)在無法為請求提供服務,但將來可以。如果服務器知道什么時候資源會變?yōu)榭捎玫模梢栽陧憫邪粋€ RetryAfter 首部 |
504 | Gateway Timeout | 與狀態(tài)碼 408 類似,只是這里的響應來自一個網(wǎng)關或代理,它們在等待另一服務器對其請求進行響應時超時了 |
505 | HTTP Version Not Supported | 服務器收到的請求使用了它無法或不愿支持的協(xié)議版本時,使用此狀態(tài)碼。有些服務器應用程序會選擇不支持協(xié)議的早期版本 |
《HTTP狀態(tài)碼》 原文鏈接:https://blog.maplemark.cn/2019/04/http狀態(tài)碼.html?utm=sf
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/31377.html
摘要:如果客戶端錯誤的讓代理介入某個請求,可能引發(fā)破壞性的行為,照成安全漏銅問題未使用未使用與狀態(tài)碼類似但客戶端應該使用首部給出的來臨時定位資源。 http showImg(https://segmentfault.com/img/bV7kr7?w=645&h=306); 介紹:http基于tcp/ip通信來傳遞數(shù)據(jù) 注意事項 http是無連接:每次連接只處理一個請求,服務器處理完請求后,...
摘要:一臨時響應臨時響應表示臨時響應并需要請求者繼續(xù)執(zhí)行操作的狀態(tài)碼。由擴展的狀態(tài)碼,代表處理將被繼續(xù)執(zhí)行。二成功成功表示成功處理了請求的狀態(tài)碼。如果您的網(wǎng)站上沒有文件,而您在網(wǎng)站管理員工具診斷標簽的頁上看到此狀態(tài)碼,則這是正確的狀態(tài)碼。 什么是HTTP: HTTP(HyperText Transfer Protocol超文本傳輸協(xié)議)是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡協(xié)議。所有的WWW文...
閱讀 3246·2021-11-24 09:39
閱讀 2931·2021-09-09 11:34
閱讀 3199·2021-09-07 09:58
閱讀 2305·2019-08-30 13:07
閱讀 2868·2019-08-29 15:09
閱讀 1569·2019-08-29 13:01
閱讀 2309·2019-08-26 12:18
閱讀 1927·2019-08-26 10:28