HTTP狀態碼

狀態碼

狀態碼是來告訴客戶端,發生了什麼事情。狀態碼爲客戶端提供了一種理解事務處理結果便捷方式。狀態碼位於響應的起始行中php

好比,在行 HTTP/1.0 200 OK 中,狀態碼就是200

客戶端向一個 HTTP 服務器發送請求報文時,會遇到不少意想不到的狀況,請求不必定可以成功完成。服務器可能會告訴你沒法找到所請求的資源,你沒有訪問資源的權限,或者資源被移到了其餘地方html

狀態碼是在每條響應報文的起始行中返回的。會返回一個數字狀態和一個可讀的狀態。數字碼便於程序進行差錯處理,而緣由短語則便於人們理解nginx

緣由短語

緣由短語是響應起始行中的最後一個組件。它爲狀態碼提供了文本形式的解釋git

好比,在行 HTTP/1.0 200 OK 中,OK 就是緣由短語

緣由短語和狀態碼是成對出現的。緣由短語是狀態碼的可讀版本,應用程序開發者將其傳送給用戶,用於說明在請求間發生了什麼狀況。HTTP 規範並無提供任何硬性規定,要求緣由短語以何種形式出現github

《PHP面試問答》 https://github.com/colinlet/P...
結合實際 PHP 面試,系統的彙總面試中的各類各樣的問題,嘗試提供簡潔準確的答案。若是你在 PHP 面試中遇到問題,歡迎提 Issues 交流。包含網絡協議、數據結構與算法、PHP、Web、MySQL、Redis、Linux、安全、設計模式、架構、自我介紹、離職緣由、職業規劃、準備問題等部分
若是以爲不錯歡迎 star 關注,正在不斷持續更新中~~

狀態碼分類

五大類

能夠經過三位數字代碼對不一樣狀態碼進行分類面試

  • 200 到 299 之間的狀態碼錶示成功
  • 300 到 399 之間的代碼表示資源已經被移走了
  • 400 到 499 之間的代碼表示客戶端的請求出錯了
  • 500 到 599 之間的代碼表示服務器出錯了
狀態碼 總體範圍 已定義範圍 分類
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 版本只爲每類狀態定義了幾個代碼。隨着協議的發展,HTTP 規範中會正式地定義更多的狀態碼。若收到了不認識的狀態碼,多是有人將其做爲當前協議的擴展定義的。能夠根據其所處的範圍,將它做爲那個類別中一個普通的成員來處理算法

例如,若收到了狀態碼 515(在 5XX 代碼的已定義範圍以外),就應該認爲這條響應指出了服務器的錯誤,這是 5XX 報文的通用類別

100 ~ 199,信息狀態碼

HTTP/1.1 向協議中引入了信息性狀態碼。這些狀態碼相對較新,關於其複雜性和感
知價值存在一些爭論,而受到限制設計模式

狀態碼 緣由短語 含義
100 Continue 說明收到了請求的初始部分,請客戶端繼續。發送了這個狀態碼以後,服務器在收到請求以後必須進行響應
101 Switching Protocols 說明服務器正在根據客戶端的指定,將協議切換成 Update 首部所列的協議

100 Continue 狀態碼的目的是對這樣的狀況進行優化:HTTP 客戶端應用程序有一個實體的主體部分要發送給服務器,但但願在發送以前查看一下服務器是否會接受這個實體。客戶端應用程序只有在避免向服務器發送一個服務器沒法處理或使用的大實體,才應該使用 100 Continue瀏覽器

200 ~ 299,成功狀態碼

客戶端發起請求時,這些請求一般都是成功的。服務器有一組用來表示成功的狀態碼,分別對應於不一樣類型的請求安全

狀態碼 緣由短語 含義
200 OK 請求沒問題,實體的主體部分包含了所請求的資源
201 Created 用於建立服務器對象的請求(好比:PUT)。響應的實體主體部分中應該包含引用了已建立的資源的URL,Location首部包含的則是最具體的引擎。服務器必須在發送這個狀態碼以前建立好對象
202 Accepted 請求已被接受,服務器還未對其執行任何動做。不能保證服務器會完成這個請求;接受請求時,它看起來是有效的。服務器應在實體的主體部分包含對請求狀態的描述,或附加請求預計處理時間、信息獲取指針
203 Non-Authoritative Information 實體首部包含的信息不是來自於源端服務器,而是來自資源的副本。若是中間節點上有一份副本,但沒法或沒有對元數據進行驗證,就會出現這種狀況
204 No Content 響應報文中包含若干首部和一個狀態行,但沒有實體的主體部分。主要用於在瀏覽器不轉爲顯示新文檔的狀況下,對其進行更新(好比刷新一個表單頁面)
205 Reset Content 另外一個主要用於瀏覽器的代碼。負責告知瀏覽器清除當前頁面中的全部 HTML 表單元素
206 Partial Content 成功執行了一個部分或 Range(範圍)請求。客戶端能夠經過一些特殊的首部來獲取部分或某個範圍內的文檔

300 ~ 399,重定向狀態碼

重定向狀態碼要麼告知客戶端使用替代位置來訪問他們所感興趣的資源,要麼就提供一個替代的響應而不是資源的內容。若是資源已被移動,可發送一個重定向狀態碼和一個可選的 Location 首部來告知客戶端資源已被移走,以及如今能夠在哪裏找到它。這樣,瀏覽器就能夠在不打擾使用者的狀況下,透明地轉入新的位置了

請求報文

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
...
狀態碼 緣由短語 含義
300 Multiple Choices 客戶端請求一個實際指向多個資源的URL時會返回這個狀態碼,好比服務器上有某個HTML文檔有多個語言版本。返回時會帶有一個選項列表,用戶能夠選擇指望使用的那項
301 Moved Permanently 在請求的 URL 已被移除時使用。響應的 Location 首部中應該包含資源如今所處的 URL
302 Found 與 301 狀態碼相似;可是,客戶端應該使用 Location 首部給出的URL 來臨時定位資源。未來的請求仍應使用老的 URL
303 See Other 告知客戶端應該用另外一個 URL 來獲取資源。新的 URL 位於響應報文的 Location 首部。其主要目的是容許 POST 請求的響應將客戶端定向到某個資源上去
304 Not Modified 客戶端能夠經過所包含的請求首部,使其請求變成有條件的。若用戶發起了一個條件 GET 請求,而資源近期未被修改,能夠經過該狀態碼代表。帶有這個狀態碼的響應不該該包含實體的主體部分
305 Use Proxy 用來講明必須經過一個代理來訪問資源;代理的位置由 Location首部給出。客戶端是相對某個特定資源來解析這條響應的,不能假定全部請求,甚至全部對持有所請求資源的服務器的請求都經過這個代理進行。若是客戶端錯誤地讓代理介入了某條請求,可能會引起破壞性的行爲,並且會形成安全漏洞
306 (未使用) 當前未使用
307 Temporary Redirect 與 301 狀態碼相似;但客戶端應該使用 Location 首部給出的 URL來臨時定位資源。未來的請求應該使用老的 URL
30二、303 和 307 狀態碼之間存在一些交叉。這些狀態碼的用法有着細微的差異,大部分差異都源於 HTTP/1.0 和 HTTP/1.1 應用程序對這些狀態碼 處理方式的不一樣,爲兼容 HTTP/1.0 而保留了一些狀態碼(例如 302 狀態碼)

400 ~ 499,客戶端錯誤狀態碼

有時客戶端會發送一些服務器沒法處理的東西,好比格式錯誤的請求報文,或者最多見的是,請求一個不存在的 URL

不少客戶端錯誤都是由瀏覽器來處理的,甚至不會打擾到你。只有少許錯誤,好比404,仍是會穿過瀏覽器來到用戶面前

狀態碼 緣由短語 含義
400 Bad Request 用於告知客戶端它發送了一個錯誤的請求
401 Unauthorized 與適當的首部一同返回,在這些首部中請求客戶端在獲取對資源的訪問權以前,對本身進行認證
402 Payment Required 如今這個狀態碼還未使用,但已經被保留,以做將來之用
403 Forbidden 用於說明請求被服務器拒絕了。若是服務器想說明爲何拒絕請求,能夠包含實體的主體部分來對緣由進行描述。但這個狀態碼一般是在服務器不想說明拒絕緣由的時候使用的
404 Not Found 用於說明服務器沒法找到所請求的 URL。一般會包含一個實體,以便客戶端應用程序顯示給用戶看
405 Method Not Allowed 發起的請求中帶有所請求的 URL 不支持的方法時,使用此狀態碼。應該在響應中包含 Allow 首部,以告知客戶端對所請求的資源可使用哪些方法
406 Not Acceptable 客戶端能夠指定參數來講明它們願意接收什麼類型的實體。服務器沒有與客戶端可接受的 URL 相匹配的資源時,使用此代碼。一般,服務器會包含一些首部,以便客戶端弄清楚爲何請求沒法知足
407 Proxy Authentication Required 與 401 狀態碼相似,但用於要求對資源進行認證的代理服務器
408 Request Timeout 若是客戶端完成請求所花的時間太長,服務器能夠回送此狀態碼,並關閉鏈接。超時時長隨服務器的不一樣有所不一樣,但一般對全部的合法請求來講,都是夠長的
409 Conflict 用於說明請求可能在資源上引起的一些衝突。服務器擔憂請求會引起衝突時,能夠發送此狀態碼。響應中應該包含描述衝突的主體
410 Gone 與 404 相似,只是服務器曾經擁有過此資源。主要用於 Web 站點的維護,這樣服務器的管理者就能夠在資源被移除的狀況下通知客戶端了
411 Length Required 服務器要求在請求報文中包含 Content-Length 首部時使用
412 Precondition Failed 客戶端發起了條件請求,且其中一個條件失敗了的時候使用。客戶端包含了 Expect 首部時發起的就是條件請求
413 Request Entity Too Large 客戶端發送的實體主體部分比服務器可以或者但願處理的要大時,使用此狀態碼
414 Request URI Too Long 客戶端所發請求中的請求 URL 比服務器可以或者但願處理的要長時,使用此狀態碼
415 Unsupported Media Type 服務器沒法理解或沒法支持客戶端所發實體的內容類型時,使用此狀態碼
416 Requested Range Not Satisfiable 請求報文所請求的是指定資源的某個範圍,而此範圍無效或沒法知足時,使用此狀態碼
417 Expectation Failed 請求的 Expect 請求首部包含了一個指望,但服務器沒法知足此指望時,使用此狀態碼。若是代理或其餘中間應用程序有確切證聽說明源端服務器會爲某請求產生一個失敗的指望,就能夠發送這個響應狀態碼

500 ~ 599,服務器錯誤狀態碼

有時客戶端發送了一條有效請求,服務器自身卻出錯了。這多是客戶端碰上了服務器的缺陷,或者服務器上的子元素,好比某個網關資源,出了錯

代理嘗試着表明客戶端與服務器進行交流時,常常會出現問題。代理會發布 5XX 服務器錯誤狀態碼來描述所遇到的問題

狀態碼 緣由短語 含義
500 Internal Server Error 服務器遇到一個妨礙它爲請求提供服務的錯誤時,使用此狀態碼
501 Not Implemented 客戶端發起的請求超出服務器的能力範圍(好比,使用了服務器不支持的請求方法)時,使用此狀態碼
502 Bad Gateway 做爲代理或網關使用的服務器從請求響應鏈的下一條鏈路上收到了一條僞響應(好比,它沒法鏈接到其父網關)時,使用此狀態碼
503 Service Unavailable 用來講明服務器如今沒法爲請求提供服務,但未來能夠。若是服務器知道何時資源會變爲可用的,能夠在響應中包含一個 RetryAfter 首部
504 Gateway Timeout 與狀態碼 408 相似,只是這裏的響應來自一個網關或代理,它們在等待另外一服務器對其請求進行響應時超時了
505 HTTP Version Not Supported 服務器收到的請求使用了它沒法或不肯支持的協議版本時,使用此狀態碼。有些服務器應用程序會選擇不支持協議的早期版本

《HTTP狀態碼》 原文連接:https://blog.maplemark.cn/2019/04/http狀態碼.html?utm=sf

相關文章
相關標籤/搜索