Skip to content

HTTP的状态码是什么

状态码是HTTP报文的内容之一,早期的HTTP版本(0.9)中并没有状态码这一个定义,所以在实际的请求过程中,客户端很难知道这次请求服务器是否成功处理,或者如果发生错误后,错误的原因是什么?到了HTTP/1.x后,引入了状态码的概念,用来表示请求过程中发生的状态。状态码是服务器输出的,客户端常常根据状态码做出判断进而作为UI或者软件逻辑条件向下运行。使用状态码应该遵守规范,错误的使用将导致意外的结果。
状态码对客户端的运行策略有着很重要的影响,正确的使用状态码有助于不同客户端的优化,如在浏览器中,可以使用状态码控制缓存。 状态码由三位数字组成,每个状态码表示不同的处理结果。HTTP状态码主要分为五类,分别以不同的数字开头,每类状态码具有特定的含义。

常见的状态码

通常,我们常常接触的状态码分为五类,在这五类状态码中常常使用的并不多,一般来说下面的状态码出现频率是最高的,也是必须记住的。我们可以将不同类别的状态码类型分类为下面的格式:

  • 1xx 信息响应类
  • 2xx 成功响应类
  • 3xx 重定向响应类
  • 4xx 客户端错误响应类
  • 5xx 服务器错误响应类

其中最常见的状态码含义在下方:

状态码类别含义
100信息响应Continue:服务器收到了请求的初始部分,客户端应该继续发送请求
101信息响应Switching Protocols:服务器同意切换协议,通常是在升级到WebSocket时使用
200成功响应OK:请求成功,服务器返回了请求的资源
201成功响应Created:请求已成功处理,并创建了新的资源
204成功响应No Content:请求成功,但没有返回任何内容,常常用于浏览器缓存,当返回204时,告知浏览器代表可以使用缓存的文件
205成功响应Reset Content:请求成功,但响应中不包含任何内容,要求用户代理重置文档视图
301重定向Moved Permanently:请求的资源已永久移动到新的位置
302重定向Found:请求的资源临时移动到了新的位置
303重定向See Other:请求的资源可以在另一个URI下找到,应该使用GET方法获取
304重定向Not Modified:资源未修改,可以使用缓存的版本
307重定向Temporary Redirect:请求的资源临时移动到了另一个URI
400客户端错误Bad Request:服务器无法理解请求的格式
401客户端错误Unauthorized:请求需要用户认证
403客户端错误Forbidden:服务器理解请求,但拒绝执行它
404客户端错误Not Found:服务器找不到请求的资源
405客户端错误Method Not Allowed:请求的方法不允许用于请求的资源
500服务器错误Internal Server Error:服务器遇到了一个未曾预料的状况,无法完成请求
501服务器错误Not Implemented:服务器不支持实现请求所需的功能
502服务器错误Bad Gateway:作为网关或代理的服务器,从上游服务器收到了一个无效的响应
503服务器错误Service Unavailable:服务器目前无法处理请求,通常是服务器过载或维护
504服务器错误Gateway Timeout:作为网关或代理的服务器,未及时从上游服务器收到响应

这些常见的状态码在浏览器中绝大多数的版本都能兼容处理,但是不同浏览器和同一浏览器不同版本间都有很大兼容性差异。有关于这些差异,我们会在后续的浏览器兼容性章节中详细介绍。或者您可以在网上搜索有关最新的兼容性支持提醒。
对于更多的状态码含义解释和应用方法,您可以查看完整的HTTP状态码说明

IIS的差异

微软互联网信息服务 (Microsoft Internet Information Services)有时会使用额外的十进制子代码来获取更多具体信息,但是这些子代码仅出现在响应有效内容和文档中,而不是代替实际的HTTP状态代码。
可以说IIS存在对状态码的拓展如400.1、400.2,但并不是所有服务器都支持这样的状态码定义,有关于IIS状态码的定义,可以参考这里

缓存警告代码(已过时)

RFC 7234中规定了以下与缓存相关的警告代码。与上面的其他状态代码不同,这些代码不是作为 HTTP 协议中的响应状态发送的,而是作为“警告”HTTP 标头的一部分发送的。
由于此“警告”标头通常既不是由服务器发送的,也不是由客户端确认的,因此 HTTP 工作组于 2022 年使用RFC 9111废弃了此标头及其代码。
110 响应已过时 缓存提供的响应已过时(内容的年龄超过了 Cache-Control 标头设置的最大年龄或启发式选择的有效期)。
111 重新验证失败 由于无法到达原始服务器,缓存无法验证响应。
112 断开操作 该缓存有意与网络的其余部分断开连接。
113 启发式到期 缓存启发式地选择大于 24 小时的新鲜度寿命,并且响应的年龄也大于 24 小时。
199 其他警告 任意、非特定的警告。警告文本可能会被记录或呈现给用户。
214 应用转换 如果代理对表示应用任何转换,例如更改内容编码、媒体类型等,则由代理添加。
299 其他持续警告 与 199 相同,但表示持续警告。

拓展定义

HTTP状态码是有使用规范的,但不代表无法拓展代码。有时候实际的业务中会需要更多的代码,并且客户端并不是浏览器时,可以自己定义不同的场景下的状态码告知客户端处理。但需要注意使用这五类状态码进行拓展。如负载均衡时,使用了下面的代码在不同的节点中进行交互处理。
460 客户端在空闲超时期限结束之前关闭了与负载均衡器的连接。通常,客户端超时时间早于弹性负载均衡器的超时时间。
463 负载均衡器收到了包含超过 30 个 IP 地址的 X-Forwarded-For 请求标头。
464 客户端和源服务器之间的协议版本不兼容。

仅用于培训和测试,通过使用本站代码内容随之而来的风险与本站无关。版权所有,未经授权请勿转载,保留一切权利。
ICP备案号:滇ICP备15009214号-13   公安网备:滇公网安备 53312302000061号