标签: http-status-codes

更正需要授权的资源的http状态代码

如果用户试图访问要求用户登录的页面,则返回正确的http状态代码似乎存在很多混淆.

那么基本上当我显示登录页面时会发送什么状态代码?

我很确定我们需要使用该4xx范围内的状态代码.

我不是在谈论HTTP身份验证,所以至少有一个我们不会使用的状态代码(401 Unauthorized).

现在我们应该使用什么?答案(也在SO上)似乎有所不同:

根据这里的答案,我们应该使用403 Forbidden.

但在状态代码的描述中是:

授权无效,请求不应重复.

嗯,这看起来不是正确的.由于授权WOULD帮助.

所以让我们看看其他答案.这里的答案甚至根本不使用4xx范围而是使用302 Found

302 Found状态代码的描述:

请求的资源暂时驻留在不同的URI下.由于重定向有时可能会被更改,因此客户端应该继续使用Request-URI来处理将来的请求.如果由Cache-Control或Expires头字段指示,则此响应仅可缓存.

我认为这也不是我想要的.因为它不是位于不同URI下的请求资源.而是一个完全不同的资源(登录页面与经过身份验证的内容页面).

所以我走了另一个解决方案令人惊讶地选择了另一个答案.

这个答案建议我们选择400 Bad Request.

此状态代码的说明是:

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

我认为服务器理解请求很好,但在用户通过身份验证之前拒绝提供访问权限.

另一个答案也说403答案是正确的,但它的结尾是:

如果这是一个面向公众的网站,你试图根据会话cookie拒绝访问[这就是我所做的],200使用适当的主体来指示需要登录或者302临时重定向到登录页面通常最好.

所以403是正确的,但是200或者302是最好的.

嘿! 这就是我要找的:最好的解决方案.但最好不要和正确的一样吗?为什么它会是最好的?

感谢所有在这个问题上做到这一点的人:)

我知道我不应该太担心它.而且我认为这个问题更具假设性(不是真的,而是因为缺乏一个更好的词而使用它).

但这个问题现在困扰着我一段时间了.

如果我会成为一名经理(他们总是会听到一些很酷的发音),我会说:但是,但是,但是,但是,宁静很重要.:-)

那么:the right way™在上述情况下使用状态代码是什么(如果有的话)?

TL;博士

当用户尝试访问需要登录的页面时,正确的http状态代码响应是什么?

rest http-status-codes

56
推荐指数
4
解决办法
2万
查看次数

未提供用于所需参数的HTTP状态代码?

我有几个设计用AJAX调用的页面 - 如果它们无法显示,我会让它们返回异常状态代码,我的javascript会相应地显示错误框.

例如,如果用户未经过身份验证或其会话超时并且他们尝试调用其中一个AJAX页面,则会返回401 Unathorized.

500 Internal Server Error如果服务器端发生了奇怪的事情,我也有一些回报.

如果在没有必要参数的情况下调用其中一个页面,我应该返回什么状态代码?(因此不能返回任何内容).

我查看了有关HTTP状态代码维基百科文章,但我能找到的最接近的代码是我正在寻找的代码:

422
不可处理的实体请求格式正确,但由于语义错误而无法遵循.

编辑:上面的代码是特定于WebDAV的,因此在这种情况下不太合适

谁能想到适当的代码才能返回?

http http-status-codes

54
推荐指数
3
解决办法
5万
查看次数

POST后,我应该进行302还是303重定向?

Web应用程序的常见方案是在修改数据库的POST后重定向.就像在用户创建数据库对象后重定向到新创建的数据库对象一样.

似乎大多数Web应用程序使用302重定向,但如果您希望使用GET获取重定向中指定的URL,则303根据规范似乎是正确的做法.从技术上讲,使用302,浏览器应该使用与获取原始URL相同的方法获取指定的URL,这将是POST.大多数浏览器不会这样做.

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

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

我应该使用302还是303?

http-status-codes http-status-code-302

51
推荐指数
5
解决办法
2万
查看次数

HTTP状态424或500表示外部依赖性的错误

我正在尝试创建一个具有2个依赖项的服务.其中一个依赖项是内部管理的,而第二个需要对第三方API进行外部http出站调用.该序列需要更新资源,然后执行http出站呼叫.

所以我的问题是,在第二步失败的情况下,返回正确的http状态代码是什么?

如果响应是424或500,并且消息正文解释了遇到的错误?

  • 424:方法失败 - 表示该方法未在其范围内的特定资源上执行,因为该方法的某些部分执行失败导致整个方法被中止.
  • 500内部服务器错误.

rest http-status-codes

46
推荐指数
3
解决办法
3万
查看次数

如果用户尝试使用不正确的用户名/密码登录,但格式正确,则返回的HTTP状态代码是什么?

此处发布了一个类似的问题:REST API服务为验证失败返回的适当HTTP状态代码是什么?

上面的线程中的答案指出"例如,如果URI应该具有ISO-8601日期,并且您发现它的格式错误或者指的是2月31日,那么您将返回HTTP 400.如果您期望它同样如此实体主体中格式良好的XML,无法解析."

但是,如果用户提交了正确格式的数据,会发生什么?我的意思是,用户提交了用户名和密码的简单字母字符串/文本(这对我的应用程序完全有效).唯一的问题是密码与用户名不匹配.在这种情况下,400将是不正确的,因为它是完全有效的语法和格式良好.

一个401是不正确的(这里建议:哪个HTTP状态代码说用户名或密码不正确?)因为用户没有尝试访问任何页面,他只是尝试登录并输入不匹配的数据.

如果你回顾我链接的第一篇文章,第二个答案表明422是正确的响应(看起来对我来说是正确的),但是,我使用的是Django Rest Framework而422并不是状态代码的一部分(a可以在此处找到属于DRF的状态代码列表:http://www.django-rest-framework.org/api-guide/status-codes/#client-error-4xx)

404也看起来不正确,因为数据被成功接受而不被拒绝.

话虽如此,应该使用的真正正确答案是什么?

validation rest restful-authentication http-status-codes django-rest-framework

45
推荐指数
4
解决办法
3万
查看次数

如何使用Fiddler修改HTTP响应中的状态代码?

我需要测试一些我编写的客户端应用程序代码,以测试它对来自Web服务器的HTTP响应中返回的各种状态代码的处理.

我安装了Fiddler 2(Web调试代理),我相信有一种方法可以使用这个应用程序修改响应,但我很难找到方法.这将是最方便的方式,因为它允许我保持客户端和服务器代码不被修改.

任何人都可以协助,因为我想拦截从服务器发送到客户端的HTTP响应并在到达客户端之前修改状态代码?

任何建议将不胜感激.

http httpresponse http-status-codes fiddler

44
推荐指数
2
解决办法
3万
查看次数

请求中未接受的Content-Type的HTTP状态代码

对于某些资源,我的REST风格的服务器只接受PUTPOST使用JSON对象请求作为内容主体,因此需要Content-Typeapplication/json,而不是application/x-www-form-urlencodedmultipart/form-data或其他任何东西.

格式错误的JSON(或缺少JSON)返回a,400其中包含直接从JSON解析器引发的异常中获取的错误消息,以进行调试.

哪个HTTP错误代码意味着客户端发送了一个不可接受的请求Content-Type,即使服务器可以在技术上解析请求内容?

rest http http-status-codes mime-types http-request

43
推荐指数
1
解决办法
3万
查看次数

当error.networkResponse为null时,Android Volley中的Http状态代码

我在Android平台上使用Google Volley.我遇到一个问题,其中error参数in onErrorResponse返回null networkResponse 对于我正在使用的RESTful API,我需要确定Http状态代码,它经常以401(SC_UNAUTHORIZED)或500(SC_INTERNAL_SERVER_ERROR)到达,我偶尔可以检查通过:

final int httpStatusCode = error.networkResponse.statusCode;
if(networkResponse == HttpStatus.SC_UNAUTHORIZED) {
    // Http status code 401: Unauthorized.
}
Run Code Online (Sandbox Code Playgroud)

这会抛出一个NullPointerException因为networkResponsenull.

如何确定函数中的Http状态代码onErrorResponse

或者,我如何确保error.networkResponse非空onErrorResponse

android http-status-codes android-volley

43
推荐指数
3
解决办法
6万
查看次数

如果DELETE不可能,则为REST HTTP状态代码

当资源上无法进行DELETE(但不涉及用户权限)时,我的问题是关于HTTP状态代码的非常通用的问题.

我们在一种资源上有一个RESTful API.

DELETE方法被授权的资源,但有些条件下的资源不能被删除下(如果有绑定到该资源数据).

在这种情况下,返回客户端的正确HTTP状态代码是什么?

以下是我收集的一些可能性以及为什么它在我的案例中似乎不合适:

  • 403(禁止):似乎主要与用户的权利有关.
  • 405(不允许的方法):似乎API不是为这种类型的资源响应此方法而设计的.
  • 409(冲突):似乎合适,但客户应该有可能解决与API的冲突,但这不是这种情况.

更新:无法通过REST API更改阻止资源被删除的数据绑定.但是,资源可以通过其他方式"释放",因为数据所来自的数据库也可以被其他应用程序访问,这些应用程序可能会更改资源的状态(DB中的SQL DELETE总是可以这样做).

rest http-status-codes

43
推荐指数
2
解决办法
1万
查看次数

HTTP获取204无内容:这是正常的

HTTP GET请求是否正常出现响应状态代码204 - No Content?就像,这对于HTTP GET应该完成的内容来说,这在语义上是否正确?我知道一个HTTP POST请求204 - No Content可以的.对于GET请求,如果没有数据要发回,204状态代码是否合适?我应该使用404,还是仅仅坚持200以获得成功但是空洞的回答?

此问题的用例是我为Google App Engine编写的Java应用程序.我正在向servlet发送请求,但要发送回客户端的数据将通过Channel API套接字而不是HTTP Response传输.目前,我的客户端在请求正文中发送没有内容的POST,并在轮询Channel API套接字之前等待来自servlet的204响应.因为我没有在请求正文中发送数据,所以我在辩论发送GET而不是POST是否更有意义.

google-app-engine get http http-status-codes channel-api

42
推荐指数
4
解决办法
8万
查看次数