HTTP / 1.1状态码400和417,不能select哪个

我已经在这里提到它可能有更好的帮助,我有一个处理用户发送数据的处理文件,然而,在这之前,它将来自客户端的input与期望值进行比较以确保没有客户端数据更改。

我可以说我对HTTP状态代码并不了解,但是我已经做了一些研究,并select哪一个最适合意外的input处理。 所以我想出了:

400 Bad Request: The request cannot be fulfilled due to bad syntax

417 Expectation Failed: The server cannot meet the requirements of the Expect request-header field

现在,我不能确定使用哪一个,我已经看到400错误请求被使用了很多,但是,我从解释得到的是,错误是由于一个未提交的请求,而不是一个非法的input。

另一方面,期望失败似乎只适合我的使用,但是,我从来没有见过或试验过这个头状态。

我需要你的经验和意见,非常感谢!

有关表单/stream程页面草稿的全面详细信息以及我的实验,请点击此链接。

另外:另一个原因 – 为什么我想这是为了防止谷歌操纵。 这不仅可以在后台使用,而且还可以在客户端/用户交互显示的前端和要显示的页面内容中使用。

我相信*,给予200 OK或403禁止状态码对于存在或允许存在的页面有效。

*另外两个:我已经看了417和100现在,发现他们类似于我试图做的(仅适用于上传处理的情况下,至less),在这里: http : //benramsey.com/blog/ 2008/04 / HTTP状态-100-继续/

  • 即: *连接到X网站与http://www.mydomain.com/page.php?query=lol&query2=fail的网页将被Google索引,因为HTTP头被给定为OK。

解决scheme我参考:

事实上,404是我可能会再次结束。 我只是想要一个不同的解决scheme,如果HTTP提供它,但到目前为止,似乎404仍然是最好的解决scheme可用于此,谢谢,所有,我的问题已经发现它的答案。

如果一个GET请求的参数不正确,规范的事情是发回404(未find)或200(OK)。

使用GET请求的RESTful方法是查询资源(获取)。 因此,如果所需的参数与现有资源不相符(因为它们不完整),则可以准确地说,找不到URI中查询的资源。

实际上,如果你想避免浏览器忽略你的404页面,而代之以自己的(我正在看IE 9和10),你可能要使用200.如果你认为你的应用程序是资源,200是适当的; 你查询了应用程序,并返回了一个结果(碰巧是一个错误,但不是在HTTP级别)。 但是,这种使用不是很RESTful。

417错误应该只发生在客户端发送服务器无法完成的HTTP Expect头时,这与请求中应用程序的“预期input”无关。 不要使用它。

另一方面,只有服务器不理解的HTTP请求中的语法错误时,才应该发送400错误。

这两种方法都不适合应用程序逻辑中的validation失败,但我认为400更合适一些。

你在Stack Overflow的问题中考虑使用的403错误是我认为最好的select。

当在$ _GET中找不到期望的值时,我只是使用了403 Forbidden头,但是当想到的时候,这不是一个需要login的操作(当然,用户不得不login才能查看pipe理员面板),这更像是一个意想不到的价值input。

您正在考虑401 ,这是需要身份validation时使用的响应代码。 403是一个通用的拒绝请求,这听起来像你想要的。

这一切都假设你想要返回一个4xx响应代码..这对于一个API来说是有意义的,但是对于一个面向用户的HTML页面,你更可能想要发送一个带有错误信息的200的正文。

我无法弄清楚你在做什么,但是还有一个你可能没有考虑过的选项 – 200 – 好的。 原因是你正确地收到了这些数据,这个问题对于你的应用程序来说是无效的,这对于HTTP协议来说并不是问题。

这里相关的rfc是rfc2616 。 你可以使用400,但是你需要为客户提供从rfc中修改数据的能力

10.4.1 400错误的请求

由于格式错误,服务器无法理解请求。 客户端不应该不加修改地重复请求。

关于417 rfc说

10.4.18 417期望失败

期望的请求头字段(请参阅第14.20节)给出的期望不能被这个服务器满足,或者如果服务器是代理服务器有明确的证据表明下一个跃点服务器不能满足请求。

所以如果你不使用期望头,你可能不应该使用这个响应。