php - http协议的返回状态码规范问题

查看:254
本文介绍了php - http协议的返回状态码规范问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

假设,客户端发送了一个请求到服务器,服务器验证数据后,发觉不符合,需要返回一个错误。

我理解是,客户端由于请求过程是正确的,所以即使数据格式不符合服务端的要求,服务端也应该返回200状态码,然后在正文里带回错误信息,或一些json格式的报文,在报文里再附上真正的状态码。

但是看了一些别人的接口,有人是直接返回510状态码。

请问,各位有何高见?哪种才是规范?

解决方案

很多网上那些接口,大多是不符合规范的,说白了就是一群连 HTTP 协议都不懂的人写的 HTTP 服务,毫无参考价值。所以不要纠结那些。为什么 PHP 招黑和这个原因类似,很感激你愿意深究这个问题,为你这种精神必须点赞。

其实我建议你购买此书:《HTTP 权威指南》,很适合你这种有上进心的人。

对于这个问题,实际上你的理解有偏差。

请求过程正确不意味着响应就应当是 200。因为能够获得响应,就已经说明请求 过程 是没有任何问题的,若是请求过程不正确,不是 DNS 异常就是连接超时等等,你连响应码都看不到的。

所以响应码是用来标识 HTTP 服务器收到请求后,对此响应给出的结果。

为此,主要 划分了 2xx、3xx、4xx、5xx 这几种,2 打头的肯定是成功(不仅仅是 200 哦),3 开头的往往是无异常,但可能资源不是直接从你这个请求获取的,比如 302 重定向,304 缓存未过期等等。

重点来了,4 打头的,往往是请求存在异常,比如你所谓的提交的数据格式不正确 400 或 422,请求需要授权的 401,因为某种原因(权限不足或者黑名单)导致的拒绝用 403,请求的数据不存在或者该数据不想被当前请求获取用 404(很熟悉吧),请求方法被拒绝用 405,比如修改数据应该用 PUT 请求、新增数据用 POST,获取数据用 GET,删除数据用 DELETE 请求等等(还有常见的 OPTIONS 和 HEAD 请求哦),当然,4 开头的响应码最多,可以在百科(不论啥百科)都有 HTTP 状态码的详细文章。

5 开头的主要是服务器错误,不是因为请求的错误引起的异常都是用 5 开头的状态码,比如 500 服务器异常、503 服务器无法提供服务。

HTTP 状态码是在 RFC 一系列标准文件中定义的,因此不能够完全适应所有的接口提示细节,但已经能够完全涵盖大部分响应的语义。对于细节提示,接口响应中往往会单独在设置一个状态响应码,用来弥补 HTTP 状态码对于细节问题的表现力不足的情况。比如都是请求格式错误,但是缺少某个参数和参数给多了,都是 400,如果想要让客户端清楚地知道发生了什么,你还需要在接口中额外定义一些东西,辅助这类情况。

这篇关于php - http协议的返回状态码规范问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆