我认为412(前提条件失败),但可能会有更好的标准?


当前回答

对于那些感兴趣的人,Spring MVC(3。至少X)在这种情况下返回400,这对我来说似乎是错误的。

我测试了几个谷歌url (accounts.google.com),并删除了所需的参数,在这种情况下,它们通常返回404。

我会复制谷歌。

其他回答

我经常使用403 Forbidden错误。理由是请求被理解了,但我不会按照要求去做(因为事情是错误的)。响应实体解释了错误所在,因此如果响应是HTML页面,错误消息就会出现在页面中。如果是JSON或XML响应,错误信息就在里面。

从rfc2616:

10.4.4禁止403 服务器理解请求,但拒绝执行。 授权没有帮助,请求不应该重复。 如果请求方法不是HEAD,而服务器希望 公开为什么要求没有得到满足,它应该描述 实体拒绝的原因。如果服务器不希望这样做 使此信息对客户机可用,即状态代码404 (Not Found)可以代替。

在我们的一个API项目中,我们决定将409状态设置为一些请求,当我们因为缺少参数而不能完全填充它时。

HTTP状态代码“409冲突”对我们来说是一个很好的尝试,因为它是定义 要求包含足够的信息以便用户识别 冲突的根源。

参考:w3.org/Protocols/

因此,在其他响应中,如400或404,我们选择409来强制检查请求中的一些注释,这有助于建立一个新的正确的请求。

无论如何,我们的案例是特殊的,因为如果请求不完全正确,我们需要发送一些数据,并且我们需要强制客户端查看消息并了解请求中的错误。

一般来说,如果我们只有一些缺失的参数,我们会选择一个400和一个包含缺失参数的数组。但是当我们需要发送更多的信息时,比如一个特定的案例消息,我们希望更确定客户端会处理它,我们就会发送409

有人认为,应该使用404 Not Found,因为无法找到指定的资源。

我通常去422(不可处理的实体),如果所需的参数中的某些东西不匹配API端点所需的(如太短的密码),但对于缺少的参数,我会去406(不可接受)。

只要去浏览器设置>护盾>自动重定向AMP页面 禁用它,再试一次…