我有一个使用RESTful网址模式的网络应用程序。目前,如果用户尝试访问需要进行身份验证的页面,则只返回任何内容。在这种情况下返回HTTP状态代码是一种好习惯吗?我会使用403还是不同的?
答案 0 :(得分:3)
您应该发送带有HTTP状态代码的响应。
我不会发回 403 Forbidden ,但规范指定此状态代码:
服务器理解请求,但是 拒绝履行它。 授权无济于事 请求不应重复
返回 401 Unauthorized 状态代码。有关状态代码的更多信息,请参阅此处:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
我使用Jersey执行此操作的方法是发送具有状态的响应,然后包含一个包含人类可读消息的String实体,例如
Response response = Response.status(Status.PRECONDITION_FAILED).entity(
new String("Incorrect " + id + " [" + id + "]")).build();
这将显示给客户端。我抛出了一个包含此响应的Jersey WebApplicationException。
答案 1 :(得分:1)
如果他们没有权限,则返回401以使他们有机会响应身份验证质询,或者如果您不想要他们,则返回403.
Restlet 1.1以后返回403,而早期版本返回401. 403似乎被认为更正确,如果不一定更有帮助。
答案 2 :(得分:0)
这取决于。当然,你真的应该回归一些东西,只是为了获得体面的客户体验。如果您希望在那时给他们机会进行身份验证,您可以返回401,客户端将知道使用标准身份验证传递凭据。但是,如果您希望通过其他机制(某些登录URL然后设置cookie或某些机制)进行身份验证,那么返回403可能就好了。
答案 3 :(得分:0)
lol ...在刚刚构建的REST API实现中,我返回了一个401状态代码,其响应正文显示为“goodbye”。是第一个被人与API交互的抱怨。我仍然认为“再见”说了这一切; )