如果查询字符串丢失,给用户404?

时间:2009-04-14 14:02:59

标签: http http-headers http-status-code-404

说我需要一个查询字符串;例如“itemid”。如果由于某种原因缺少该查询字符串,我应该给用户一个200错误页面还是“404 Not Found”?

我赞成404,但我不太确定。

6 个答案:

答案 0 :(得分:7)

也许你应该给出“400 Bad Request”。

  

由于语法格式错误,服务器无法理解该请求。客户端不应该在没有修改的情况下重复请求。

有关更多可能性,请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

并且像Chris Simpson所说,当找不到相应项目ID的项目时,给出“404 Not Found”。

您还可以查看热门的RESTful apis,了解其他人如何处理问题。例如Twitter

答案 1 :(得分:1)

好问题。就个人而言,我会使用200并提供用户友好的错误来解释问题,但这实际上取决于具体情况。

如果他们提供了itemid但是特定项目不存在,您是否也会显示404?

答案 2 :(得分:1)

从可用性的角度来看,我都不会说。

您应该显示一个页面,告诉用户哪些错误,并让他们有机会修复它。

如果链接来自您网站(或其他网站)上的其他网页,则会显示一个页面,告诉他们找不到所请求的项目并将其重定向到适当的页面,也许可以让他们浏览项目?

如果用户自己输入查询字符串,那么我不得不问为什么?由于URI通常不是用户友好的。

答案 3 :(得分:1)

只有当您获得的HTTP请求被适当的响应响应时,您应该给用户200,即使它只是一个简单的HTML,表明他们缺少参数。 404代码是用户代理请求缺少的资源时。

查看此列表以获取更多信息 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

答案 4 :(得分:-1)

给出500错误,可能是501.这将允许浏览器或代码通过现有的onError机制处理它,而不必以某种自定义方式监听它。

答案 5 :(得分:-1)

我看到这种方式有效,你应该返回200 - 因为它应该是一个有效的资源。

假设您的某个网址为widgets.com/browse.php?itemid=100 - 该网址会在您的目录中显示特定项目。

现在,用户输入widgets.com/browse.php - 我们期望采取什么行动?列出目录中的所有项目(当然(或至少是分页列表)。

重新考虑您的网址结构以及目录级别和参数之间的关系。