在网络应用开发蓬勃发展的今天,TCP/IP协议族已经成了网络应用开发不可或缺的一部分,而应用层的HTTP协议更是无法绕开,如果一个程序员连HTTP状态码都不知道是什么的话,十有八九是要遭人白眼的。
在工作中遇到有些同学对HTTP协议概念理解不清或者不知道该怎么使用HTTP状态码,甚至有人误以为“我向Server发送一个HTTP Request,只要能收到一个HTTP Response就说明我代码写对了”,殊不知HTTP Response就是通过不同的StatusCode来区分的。就好比我们去商店买饮料,我们问店员“请给我一瓶饮料”,期望的回答当然是“你好,这是您的饮料”,但事实上的回答回答可能有:“对不起,你要的饮料已经买完了”–404、“对不起,这个饮料只供给会员”–401、“对不起,请您排队稍等”–202、“Can you speak English?”(外国商店,你得说外文)–101…
所以了解HTTP状态码的用途可以更有针对性的对业务进行处理,今天就来回顾下那些常用的HTTP Status Code
1xx
1xx 状态码一般是一个请求的中间状态,一般是信息提示,请求协商
状态码编号 | 状态码标识 | 说明 |
---|---|---|
100 | Continue | 请求未结束,应该继续请求 |
101 | Switching Protocol | 协议转换,在使用 Web Socket 的时候就会遇到,下面是一个示例,响应会有一个 Connection:Upgrade 的请求头, Upgrade 会指定要使用的协议名称 |
2xx
2xx 一般表示请求处理成功
200 OK,请求处理成功
状态码编号 | 状态码标识 | 说明 |
---|---|---|
201 | Created | 请求处理成功,并且新资源已经创建 |
202 | Accepted | 请求已经接受,正在处理,尚未处理完成 |
204 | No Content | 响应内容为空,在 asp.net core 中返回一个 Json(null) 的时候就会是一个 NoContent 的结果 |
3xx
3xx 一般表示重定向
状态码编号 | 状态码标识 | 说明 |
---|---|---|
301 | Moved Permanently | 永久重定向 |
302 | Found | 临时重定向 |
304 | Not Modified | 资源未发生修改,可以直接使用浏览器本地缓存 |
307 | Temporary Redirect | 临时重定向请求 |
308 | Permanent Redirect | 永久重定向请求 |
注意:
- 301、302 只支持 GET 请求,如果是 POST 请求,重定向后会使用 GET 请求且 Body 数据会丢失
- 307、308 支持 POST 请求,在 POST 重定向的时候会带上原来请求的 body 再请求新的地址,body 数据不会丢失
- 302、307 是临时重定向
- 301、308 是永久重定向,是允许缓存的,浏览器可以缓存
4xx
4xx 一般表示客户端请求错误
状态码编号 | 状态码标识 | 说明 |
---|---|---|
400 | BadRequest | 错误请求,一般用来表示请求参数异常,比如请求的某一个参数不能为空,但实际请求是空 |
401 | Unauthorized | 未授权,资源需要授权或登录,而用户没有登录或者没有提供访问所需的 Token 等 |
403 | Forbidden | 禁止访问,当前用户没有权限访问资源,如需要Admin角色的用户,但是请求的用户没有这个角色 |
404 | NotFound | 未找到资源,资源不存在 |
405 | Method Not Allowed | 不允许的方法调用,资源不支持的请求方法,比如资源只允许 GET 请求,但是实际请求使用了 POST 或 DELETE 方法 |
406 | Not Acceptable | 请求的资源客户端不支持处理,比如客户端希望获取 xml 的响应,但是服务器端只支持 JSON 响应 |
408 | Request Timeout | 请求处理超时 |
409 | Conflict | 请求资源冲突,常发生在 PUT 更新资源信息时发生,比如更新时指定资源的 ETAG,但是PUT请求时,资源的 ETAG 已经发生变化 |
410 | Gone | 请求资源在源服务器上不再可用 |
411 | Length Required | 请求需要携带 Content-Length 请求头 |
412 | Precondition Failed | 请求预检失败,请求的某些参数不符合条件 |
413 | Payload Too Large | 请求的参数太大,请求的 body 过大,服务器拒绝处理 |
414 | URI Too Long | 请求的 URI 地址太长,服务器拒绝处理 |
415 | Unsupported Media Type | 不支持的媒体类型或不支持的编码,比如服务器只支持处理 JSON 请求,但是请求是 xml 格式 |
5xx
5xx 一般表示服务端错误
状态码编号 | 状态码标识 | 说明 |
---|---|---|
500 | Internal Server Error | 服务器内部错误 |
501 | Not Implemented | 服务器不支持需要处理请求的功能,比如图片压缩等处理 |
502 | Bad Gateway | 反向代理或网关找不到处理请求的服务器 |
503 | Service Unavailable | 服务不可用 |
504 | Gateway Timeout | 网关超时 |
505 | HTTP Version Not Supported | 不支持的 HTTP 版本,服务器不支持或拒绝处理这个 HTTP 版本的请求 |