2009-07-15 47 views
1

我有一个使用RESTful url模式的web应用程序。目前,如果用户试图访问他们需要进行身份验证的页面,它只会返回任何内容。在这种情况下返回HTTP状态代码是否是一种好的做法?我会使用403还是不同的?需要验证的内容的REST http状态码?

+0

REST与URI模式无关。 “REST风格的网址模式”完全是无稽之谈。我怀疑你的API只是RPC。 – aehlke 2009-07-22 19:42:00

回答

3

您应该使用HTTP状态码发送响应。

我不会派一个403禁止回来,虽然作为该规范规定了这个状态代码:

服务器理解了请求,但 拒绝执行它。 授权不会帮助和 请求不应该重复

返回401未授权状态代码,而不是。看到这个更多信息的状态代码:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

我这样做与新泽西的方法是发送与状态的响应,然后包括其中包含人类可读的消息的字符串实体,例如

Response response = Response.status(Status.PRECONDITION_FAILED).entity(
        new String("Incorrect " + id + " [" + id + "]")).build(); 

这会显示给客户端。我抛出了一个包装这个响应的Jersey WebApplicationException。

+0

感谢乔恩,这是最有帮助的。 – 2009-07-15 20:19:21

1

如果他们没有权限返回401给他们机会回应认证挑战或403如果你不想让他们。

Restlet 1.1向前返回403,而早期版本返回401。403似乎被认为更正确,如果不一定更有帮助。

0

这要看。当然,你真的应该回报一些东西,只是为了获得体面的客户体验。如果您想让他们有机会在此时进行身份验证,则可以返回401,并且客户端将知道使用标准身份验证来传递凭据。但是,如果您希望通过某种其他机制进行身份验证(某些登录URL,然后设置cookie或其他机制),则返回403可能是一种方法。

0

lol ...在REST API实现中,我刚刚构建了一个响应体,它返回一个401状态码,该响应体读取“再见”。是与API交互的人抱怨的第一件事。我仍然认为“再见”这样说; )