实际工作中,前后端合作基本只用get/post,并且都是在200中封装相应的状态码,而没有使用HTTP级别的状态码.所以一般见200/404/500是最多的,其他很少见,见到后就有点不知道是什么用的~
其实不管开始有多麻烦,还是应该按照标准HTTP协议来设计接口,用两次就好了
- 从外观上,一眼就能看出这个请求是啥结果
- 再就是很多状态码浏览器会自动进行一些处理
4.1 状态码
状态码的作用是,当客户端向服务端发送请求时,描述返回的结果.由两部分组成
- 3位数字
- 原因短语
| 类别 | 原因短语 | |
|---|---|---|
| 1XX | Informational | 接收的请求正在处理 |
| 2XX | Success | 请求处理完毕 |
| 3XX | Redirect | 重定向,浏览器需要重新请求 |
| 4XX | Client Error | 客户端错误 |
| 5XX | Server Error | 服务端错误 |
4.2 2XX 成功
- 200 OK
- GET方法时,返回对应实体
- HEAD方法时不返回实体
- 204 No Content
- 成功,但不返回实体
- 用于修改/或者告诉服务器处理OK,客户端只需要知道服务端是否处理即可
- 相对于200来说可以减少流量
- 206 Partial Content
- 范围请求执行成功
- 相对于200一次性请求来说,可以节省流量,加快界面显示
4.3 3XX 重定向
- 301 Moved Permanently
- 永久变更
- 返回时要指定新的Location首部字段,浏览器会自动重新定位
- 用于图片换位置/接口路径变更
- 302 Found
- 临时变更
- 和301的区别在于,客户端做出相应处理的时候,决策可能会不一样
- 比如一个已保存到收藏夹的链接,跳转新链接后301的话会更改收藏夹,而302则不会
- 303 See Other
- 请求的资源对应新的URI
- 和302的区别在于,明确要求客户端用GET方法访问新的URI
- 可用于高延时数据下载,发送一个请求,服务端返回一个新的链接,客户端几十秒后自己访问新链接
- 304 Not Modified
- 服务端资源未改变,直接使用客户端缓存
- 发送请求时可附带条件,比如查找3天内更新的资源等,支持如下请求首部字段
- If-Modified-Since
- If-Non-Match
- If-Range
- If-UnModified-Since
- 307 Temporary Redirect
- 和302一样
- 区别在于不会要求使用GET访问新URI
4.4 4XX 客户端错误
- 400 Bad Request
- 请求参数错误
- 401 Unauthorized
- 未授权
- 用于未登陆/登陆过期
- 403 Forbidden
- 访问被拒绝
- 用于权限不够的情况下
- 404 Not Found
- 资源不存在
4.5 5XX 服务端错误
- 500 Internal Server Error
- 服务器端bug
- 503 Service Unavailable
- 服务器挂了
- 服务器运算大/或正在维护