HTTP状态码

原文来自:https://github.com/liufeng3486/Documents/blob/master/HTTP/状态码.md#状态码
https://evertpot.com/http/

状态码

HTTP规定了很多状态码 。其实除了以下介绍的状态码以外,服务端其实是可以任意返回自己定义的奇奇怪怪的状态码的。所有系列的状态码中,4xx的数量是独占鳌头,由此可见,用户的行为是多么的不可预期。

常用的状态码

1xx 这组状态码都不常用

2xx

  • 200 最普通的请求成功,没有更多含义
  • 201 创建成功,一般post时,且服务端新建了数据的时候返回。
  • 206 部分成功,请求的数据较大的时候会返回。

3xx

  • 301 永久重定向
  • 302 临时重定向

4xx

  • 400 错误请求 其实就是一些不好分类的错误
  • 403,407 其中403是没登录,407是登录的权限不够
  • 404 页面不存在

5xx

  • 500 服务端挂了
  • 502 大部分情况和nginx无关,还是服务器挂了
  • 503 服务器关了,或者人太多所以挂了
  • 504 人太多的时候挂了

所有状态码

1xx

  • 1xx Informational 信息 其实还有102和103
  • 100 Continue 服务端等待客户端继续发送下一个请求 一般情况下不使用
  • 101 Switching Protocols 更换协议,在请求头中包含Connection:Upgrade时使用到 进行WebSocket通信时会遇到

2xx

  • 2xx Successful 成功 其实还有207,208,226
  • 201 Created 创建成功,客户端发送POST请求,在服务端新建了数据。 很多情况下,开发并不使用这个状态码
  • 202 Accepted 请求已接受,但未处理完成。一般用在异步的场景。 比如,同步新增数据服务端返回201,异步新增返回202
  • 203 Non-Authoritative Information 信息未授权,虽然请求成功了,但是信息有可能是第三方的 一般不使用,HTTP文档也规定了,203判断有问题的时候需要返回200
  • 204 No Content 返回body为空 用户周期性的刷新某个数据的时候使用它
  • 205 Reset Content 返回body为空,同时清空form标签中的内容 form表单主要是用户用来提交数据,返回205,浏览器会自动清空用户填写的内容,方便连续填写。
  • 206 Partial Content 获取部分内容,在响应头里会有range来确定需要的内容部分 通常是浏览器用来加载一个较大的文件时会出现

3xx

  • 3xx Redirection 重定向
  • 300 Multiple Choices
    重定向到多个地址access-control-allow-headers 返回headers需要设置access-control-allow-headers:Content-Type,User-Agent
    和location:http://www.xxx.com
  • 301 Moved Permanently 永久重定向 使用场景就是永久的迁移,需要设置location
  • 302 Found 临时重定向 主要关心GET请求 从Found 翻译成 临时重定向的说明 可以看出,这是一个有故事的状态码 它其实不应该被这么使用
  • 303 See Other POST时使用的重定向 POST时使用,但时常会和302混淆
  • 304 Not Modified 重复请求,不刷新 简单来说,就是http规定了一套规则,可以通过请求时header中的特定参数来确定用户请求的时间或者版本。等用户下次请求时,服务端判断时间戳或者版本号,确定是再给用户发送一次,还是直接返回304
  • 305 Use Proxy 使用代理 返回值需要在header里包含Location,Location里面是代理的地址
  • 306 Switch Proxy 切换代理 在客户端已经使用代理的情况下,返回Set-Proxy在里面说明该更换什么样的代理
  • 307 Temporary Redirect 和302很像 资源全部移到新地址的情况下使用,临时性的
  • 308 Permanent Redirect 和301很想 资源全部移到新地址的情况下使用,永久性的 详细可以看RFC7238

4xx

  • 4xx Client Error 客户端错误 其实还有411,412,413,415,416
  • 400 Bad Request 请求错误 其实没有特殊的地方,因为对一些不方便分类的错误都会用400,没明确告诉客户端该怎么避免错误
  • 401 Unauthorized 未经授权 “用户没有授权,这个时候客户端需要去登录页,来登录获取授权。但是这个跳转操作也不是客户端本身来处理,而且服务端来处理。”
  • 402 Payment Required 预留:需要付款 这个是HTTP文档预留的状态码,从名字可以判断是用来做一些支付服务的。但是暂无使用
  • 403 Forbidden 禁止执行访问 由于种种原因,可能是用户没有权限,或者是没有正确登录等原因,造成客户端没有权限访问。和401不同的是,401未登录。403是登录权限不足,或者登录的时候有凭证的问题。
  • 404 Not Found 资源、服务等不存在 “很常用的状态码,只要有资源不存在就会发404.但是!这个应该是服务器所不知道的资源。如果是服务器知道的资源被删除了,应该返回410更加合适。使用DELETE方法的时候,返回信息有些人会错误的使用404,这非常不合适。可以改为返回200或者204”
  • 405 Method Not Allowed 方法不被允许 简单来说就是这个接口只允许GET,但是你使用了POST。就会返回这样的状态码
  • 406 Not Acceptable 不可接受的 从字面意思来看,就是数据传输正常了,但是服务端没办法解析。所以一般是Content-Type和body的实际类型没有配置好
  • 407 Proxy Authentication Required 需要代理身份验证 含义和名字一样,出现了就检查一下自己的代理设置吧
  • 408 Request Timeout 请求超时 简单来说就是加载时间超过了阈值。客户端在保证自己网络良好的情况下如果通过重新请求的方式没有办法解决的话,那就要让服务端的管理员查看了。
  • 409 Conflict 资源冲突 可以将这个状态码的场景,想象为:你要删除一个正在编辑的文档。这个时候,系统会提示,文档被占用,无法删除。HTTP中,这个状态码一般是PUT时使用。
  • 410 Gone 消失 和404不同,404是请求了一个服务端不知道的资源。410是请求了一个服务器知道的资源,但是这个资源已经被清除了。所以软删除了资源,或者物理删除后,对资源留有标记的时候,使用这个状态码。
  • 414 Request-URI Too Long 请求HOST+PATH+params过长过长 请求的URI过长。说直白点就是Http://host:port/path?param1=1&&param2=data2…特别特别长

5xx

  • 5xx Server Error 服务端异常
  • 500 Internal Server Error 网络服务错误 HTTP文档中的解释转成人话就是 服务端出问题了,没办法响应请求
  • 501 Not Implemented 方法未实现NotImplemented 非常罕见,因为需要使用一些未定义的请求类型,而且有些服务端,就算你用了未定义的请求类型,也只会返回405给客户端。
  • 502 Bad Gateway 服务网关异常 出现的情况除了服务器的服务问题外,用户量过大时也是产生这个状态码。当收到Nginx 502(最常见的情况)时,大多数其实和Nginx无关,去看后端服务出现了什么问题。
  • 503 Service Unavailable 服务不可用 有可能是服务维护了,也可能是服务过载了。但是服务器过载的时候也不一定需要使用503,可以直接拒绝连接。
  • 504 Gateway Timeout 网关超时 一般是服务器上的服务出现问题了。高并发的情况下,很容易收到这个状态码
  • 505 HTTP Version Not Supported HTTP版本不支持 含义是服务端不支持。其实更多的情况是请求的时候数据格式异常。最常见的就是URL编码异常,最最常见就是空格没有转码就发给服务器了,服务器解析异常。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值