需要身份验证的内容的REST http状态代码?

需要身份验证的内容的REST http状态代码?,http,rest,Http,Rest,我有一个使用RESTful url模式的web应用程序。当前,如果用户试图访问一个需要验证的页面,它只会返回任何内容。在这种情况下,返回HTTP状态码是否是一种良好的做法?我会使用403还是另一个?如果他们没有权限,请返回401,让他们有机会响应身份验证挑战;如果您不希望他们响应,请返回403 向前返回403,而早期版本返回401。403似乎被认为更正确,如果不一定更有用。如果他们没有权限,返回401,让他们有机会响应身份验证挑战;如果您不希望他们这样做,返回403 向前返回403,而早期版本返

我有一个使用RESTful url模式的web应用程序。当前,如果用户试图访问一个需要验证的页面,它只会返回任何内容。在这种情况下,返回HTTP状态码是否是一种良好的做法?我会使用403还是另一个?

如果他们没有权限,请返回401,让他们有机会响应身份验证挑战;如果您不希望他们响应,请返回403


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

如果他们没有权限,返回401,让他们有机会响应身份验证挑战;如果您不希望他们这样做,返回403


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

这取决于情况。当然,为了获得良好的客户体验,你真的应该退货。如果您想让他们有机会在那一刻进行身份验证,您可以返回401,客户端将知道如何使用标准身份验证传递凭据。但是,如果您希望他们通过其他机制(一些登录URL,然后设置cookie或类似的机制)进行身份验证,那么返回403可能是一种方法。

这取决于具体情况。当然,为了获得良好的客户体验,你真的应该退货。如果您想让他们有机会在那一刻进行身份验证,您可以返回401,客户端将知道如何使用标准身份验证传递凭据。但是,如果您希望他们通过其他机制(一些登录URL,然后设置cookie或类似的机制)进行身份验证,那么返回403可能是最好的选择。

您应该发送一个带有HTTP状态代码的响应

我不会将403禁止的发回,尽管规范指定了此状态代码:

服务器理解该请求,但是 他拒绝履行它。 授权将无济于事,而 请求不应重复

返回未经授权的状态代码。有关状态代码的更多信息,请参见此:

我对Jersey执行此操作的方法是发送一个状态为的响应,然后包含一个字符串实体,其中包含一条人类可读的消息,例如

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

这将显示给客户端。我抛出了一个Jersey WebApplicationException,它包装了此响应。

您应该发送一个带有HTTP状态代码的响应

我不会将403禁止的发回,尽管规范指定了此状态代码:

服务器理解该请求,但是 他拒绝履行它。 授权将无济于事,而 请求不应重复

返回未经授权的状态代码。有关状态代码的更多信息,请参见此:

我对Jersey执行此操作的方法是发送一个状态为的响应,然后包含一个字符串实体,其中包含一条人类可读的消息,例如

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

这将显示给客户端。我抛出了一个Jersey WebApplicationException,它包装了此响应。

哈哈。。。在我刚刚构建的RESTAPI实现中,我返回了一个401状态代码,其中的响应主体为“再见”。这是与API交互的家伙抱怨的第一件事。我仍然认为“再见”代表了一切;)

哈哈。。。在我刚刚构建的RESTAPI实现中,我返回了一个401状态代码,其中的响应主体为“再见”。这是与API交互的家伙抱怨的第一件事。我仍然认为“再见”代表了一切;)

谢谢Jon,这非常有用。谢谢Jon,这非常有用。REST与URI模式无关。“RESTfulURL模式”完全是胡说八道。我怀疑您的API只是RPC。REST与URI模式无关。“RESTfulURL模式”完全是胡说八道。我怀疑您的API只是RPC。