HTTP状态码

蛇形命名派
• 阅读 2145

状态码

状态码是来告诉客户端,发生了什么事情。状态码为客户端提供了一种理解事务处理结果便捷方式。状态码位于响应的起始行中

比如,在行 HTTP/1.0 200 OK 中,状态码就是200

客户端向一个 HTTP 服务器发送请求报文时,会遇到很多意想不到的情况,请求不一定能够成功完成。服务器可能会告诉你无法找到所请求的资源,你没有访问资源的权限,或者资源被移到了其他地方

状态码是在每条响应报文的起始行中返回的。会返回一个数字状态和一个可读的状态。数字码便于程序进行差错处理,而原因短语则便于人们理解

原因短语

原因短语是响应起始行中的最后一个组件。它为状态码提供了文本形式的解释

比如,在行 HTTP/1.0 200 OK 中,OK 就是原因短语

原因短语和状态码是成对出现的。原因短语是状态码的可读版本,应用程序开发者将其传送给用户,用于说明在请求间发生了什么情况。HTTP 规范并没有提供任何硬性规定,要求原因短语以何种形式出现

《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
302、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

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Stella981 Stella981
3年前
HttpURLConnection(http 1.1) 用法、状态码、状态描述
最近研究了java的HttpURLConnection的用法,这里简单的做一下记录:Java中可以使用HttpURLConnection来请求WEB资源。1、 URL请求的类别分为二类,GET与POST请求。二者的区别在于:     a:)get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,
Stella981 Stella981
3年前
Modbus功能码及错误码说明
有效功能码说明(十进制)功能码说明01读取线圈状态02读取输入状态03读取保持寄存器04读取输入寄存器05强置单线圈06预置单寄存器07读取异常状态08回送诊断校验09编程(只用于484)10控询11读取事件计数12读取通信事件记录13编程
Wesley13 Wesley13
3年前
PHP 开发 APP 接口
1.通信数据的标准格式(JSON),包括:code:状态码(200,400等)message:提示信息(例如:数据返回成功、邮箱格式错误等)data:返回数据!(https://oscimg.oschina.net/oscnet/9949434b70f59290e42777df32afc4c239b.jpg)2.JSON方
Wesley13 Wesley13
3年前
HTTP常用状态码
1.2XX成功200OK表示从客户端发来的请求在服务器端被正常处理了204NoContent代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分.另外,也不予许返回任何实体的主体.206PartialContent表示客户端进行了范围请求(Range),而服务器成功执行了这部分
Stella981 Stella981
3年前
Django_初识
HTTP协议超文本传输协议(应用层的,基于tcp\ip协议的)特点:无状态,无连接(短连接)请求消息格式:请求行\请求头部\空行\请求数据请求行:GET路径HTTP/1.1响应消息格式:响应行\响应头部\空行\响应数据响应行:HTTP/1.1状态码状态
Wesley13 Wesley13
3年前
HTTP状态码
消息(1字头)这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应。100Continue客户端应当继续发送请求。这个临时响应是
Stella981 Stella981
3年前
Code128条形码
如何看懂Code128条形码1.条形码种类很多,常见的大概有二十多种码制,其中包括:Code39码(标准39码)、Codabar码(库德巴码)、Code25码(标准25码)、ITF25码(交叉25码)、Matrix25码(矩阵25码)、UPCA码、UPCE码、EAN13码(EAN13国际商品条码)、EAN8码(EAN8国际商品
Stella981 Stella981
3年前
Http状态码详解
从维基百科上翻译的,有点蹩脚包涵包涵。1xx消息相关的代表请求已经收到,继续处理。这个状态码的分类意味着一个临时的响应,仅有状态行和可选的头部信息组成,并且有一个空行结尾。因为HTTP/1.0并没有定义任何1xx相关的状态码,所以服务器应该发出一个1xx的响应给一个HTTP/1.0的客户端除非在实验条件下。100继续
Easter79 Easter79
3年前
SpringMVC 异常处理.
一、异常处理  Spring提供了多种方式将异常转换为响应:特定的Spring异常将会自动映射为指定的HTTP状态码。在默认情况下,Spring会将自身的一些异常自动转换为合适的状态码,从而反馈给客户端。实际上,如果没有出现任何映射的异常,响应都会带有500状态码。映射表如下:!(https://oscimg.os
IT全栈视野 IT全栈视野
1年前
全面解读HTTP状态码
100Continue继续。这意味着客户端应当继续其请求操作101SwitchingProtocols切换协议。服务器会依照客户端的请求来切换协议。且只能切换至更高级的协议,例如切换到HTTP的新版本协议。200OK请求成功。此状态通常应用于GET与POS