2011-04-13 54 views
2

美好的一天,当用户访问url但不查询参数时使用的https状态码?

当请求者访问那个url但有不正确的查询参数时,应该使用什么http状态码。

比方说,像这样:

随着用户100,我可以访问http://example.com/bankaccount/get?id=100

不过,我不应该能够看到银行账户的其他用户,让我们通过http://example.com/bankaccount/get?id=200说。

应该使用哪个HTTP状态码?

+0

如果你已经知道用户的ID,为什么还要指定ID? – Gumbo 2011-04-13 09:20:39

回答

5

如果访问被禁止,返回403

服务器理解了请求,但拒绝执行。 [...]如果请求方法不是HEAD并且服务器希望公开为什么请求没有被满足,那么它应该描述在实体中拒绝的原因。如果服务器不希望将该信息提供给客户端,则可以使用状态码404(未找到)代替。

但是我没有看到明确指定ID,因为您现在已经是用户的ID了。因此/bankaccount/get应该足够在这种情况下。

+0

你是什么意思?服务器不应该因为无效的id而指定它是403? ....但仍然不是404?原谅,只是试图把我的头围绕此。 – 2011-04-13 09:40:47

+0

@Franz请参阅:您应该使用403并描述错误的原因,如果您想让用户知道它或使用404而不指定原因。但是,由于您已经知道用户的ID,因此您无需在URL中指定ID。所以'/ bankaccount/get'就足够了,你可以使用你已经拥有的用户ID。 – Gumbo 2011-04-13 09:46:40

+0

但是,如果(另一个例子)你是一个可以访问多个银行账户(这意味着需要一个id参数)的组管理员,并且你访问了一个不属于你的组的银行账户。 – 2011-04-13 10:43:02

0

我为403投票 - 禁止,因为它是一个合法的请求,但不允许当前用户。

如果查询参数的名称是错误的,而另一方面,它也许应该是404

+0

400相当于格式错误的语法。 – Gumbo 2011-04-13 09:21:36

+0

这就是我的意思 - 例如。如果URL结束/ get?zz = 100而不是/ get?id = 100 – artbristol 2011-04-13 09:23:49

+1

但该URL不是格式错误。它不是服务器所知或无法理解的。 – Gumbo 2011-04-13 09:26:09

1

在您的例子我要么送302,他重定向到一个错误页面,或200使用自定义错误页面就在那里。这将是最易于用户使用的版本。

编辑: 如果您想在状态代码的4xx区域中选择某些内容,请确保Web服务器提供相应的错误页面。普通用户不会乐意看到带有“403 - 禁止”的白色屏幕。 403与自定义错误页面是一个很好的解决这个问题。

+0

为什么不403用一个自定义的错误页面? – artbristol 2011-04-13 09:35:17

+0

@artbristol:感谢您的询问,这就是我在对另一个回复发表的评论中所建议的内容。我会更新我的答案,以包括这个选项当然也是有效的。 – Demento 2011-04-13 09:43:32

相关问题