返回码是client端向server端发送请求后,描述server端处理该请求后的结果,根据返回码我们可以知道这次请求是否成功,失败的话是客户端的问题还是服务端的问题,除了返回码外,一般还会有对应的具体错误码和错误信息,以方便用户快速定位问题。
返回码在响应报文的第一行,有3位数字组成,分类有四种:2,3,4,5,3**工作中不经常遇到,下面介绍其余三种。
1、2**
(1)200 OK
请求成功后大部分返的是这个,可能还会跟实体的主体,也可以理解为报文主体的详细内容,通常用格式化的输出(xml、json)。
(2)204 No Content
表示请求已被服务器成功处理,但在返回的响应报文中不包含实体的主体部分,即没有更多的返回报文内容。
2、4**
(1)400 Bad Request
报文中存在语法错误,需要client端重新检查一下发送的请求内容是否正确合规。
(2)401 Unauthorized
表示请求需要通过http认证,当浏览器初次接收到401响应,会弹出认证用的对话窗口。
(3)403 Forbidden
这是工作中我遇到的4**最多的情况,表示这次请求资源的访问被服务器拒绝了。拒绝的原因有很多,比如这次请求访问的资源client端没有权限,请求调用的api方式server端不支持等,具体什么情况要结合错误信息和错误码来看。
(4)404 Not Found
3、5**
(1)500 Internal Server Error
(2)503 Service Unavailable
4、返回消息中的更多定位信息
单凭http返回码定位问题未免太粗糙了,需要响应报文的实体的主体里提供更多关于这次请求为什么失败的了定位信息。每个公司在做自己的api时,都会自定义一些额外的定位信息,添加进响应报文的实体里,以华为云对象存储(OBS)的官网API文档里7 附录为例,如图:
除了http的返回码外,还添加了错误码、错误信息和resquest_id。错误码更加细分了问题原因,比如NoSuchKey这种短语;Message是错误信息的详细文本,程序员定位问题是可以重点阅读参考;request-Id唯一对应一个请求,可以在后台进程日志里根据request-Id查找相应的日志来定位问题。
