我正在对资源URI执行POST。但此操作的成功取决于另一个相关对象的响应性或可访问性。如果该对象没有响应或无法访问,则操作需要返回失败。在这种情况下我应该选择什么HTTP代码?
我目前正在就以下代码进行头脑风暴,但无法找到合适的代码:
我无法找到或归零特定的HTTP代码。
答案 0 :(得分:2)
https://greenbytes.de/tech/webdav/rfc7231.html#status.409:
“6.5.8 409冲突
409(冲突)状态代码表示由于与目标资源的当前状态冲突而无法完成请求。此代码用于用户可能能够解决冲突并重新提交请求的情况。服务器应该生成一个有效载荷,其中包含足够的信息,供用户识别冲突源。“
答案 1 :(得分:0)
选择正确的状态代码总是很棘手。例如,如果您返回类似404的状态代码,调试可能会变得脱轨,因为有人可能不确定它是否因为URL实际上不存在或者由于某些其他原因而在内部存在
通常,来电者只需知道一些事情:
通常我会尝试将响应与服务的逻辑分开。如果你想更准确地确定发生了什么(在你的例子中,依赖关系没有响应),返回一些JSON,更详细地描述问题是什么,将是一个更合适的地方,而不是使用http状态代码用于描述服务端的特定错误。
所以在你的情况下,我认为500是最合适的。调用者只知道出了问题并且它无法解决它,它可以处理这种情况,但是它需要它。如果调用者需要更多地了解发生的事情,请使用JSON响应来表达。
答案 2 :(得分:0)
让我们检查一下候选人:
404 :始终是一个选项,但由于相同的请求有时会失败或成功,这会产生闪烁的行为,这不是客户在获取404时所期望的。
412 :RFC 2616说:"在一个或多个请求标头字段中给出的前提条件" - 这不是失败的原因。
417 :类似于412:"此服务器无法满足Expect request-header字段中给出的期望"
503 :"由于服务器暂时过载或维护,服务器当前无法处理请求。"
似乎没有什么是完美的,但我会选择 503 ,因为它代表了最好的临时问题,并指导客户重试。
答案 3 :(得分:-3)
HTTP状态代码列表
参考wiki:
103检查点
在可恢复请求提议中用于恢复已中止的PUT或POST请求。
420方法失败(Spring Framework)
方法失败时Spring Framework使用的弃用响应。 420增强你的平静(Twitter) 当客户端受到速率限制时,Twitter Search and Trends API的版本1返回;版本1.1及更高版本使用429 Too Many Requests响应代码。
450 Windows家长控制(Microsoft)阻止
Microsoft扩展程序。打开Windows家长控制并阻止访问给定网页时会出现此错误。
498无效令牌(Esri)
由ArcGIS for Server返回。代码498表示已过期或无效的令牌。
需要499令牌(Esri)
由ArcGIS for Server返回。代码499表示需要令牌但未提交。
499防病毒已禁止请求
当拦截恶意网站时,由某些程序(例如Wget)制作。
超过509带宽限制(Apache Web服务器/ cPanel)
服务器已超过服务器管理员指定的带宽; >这通常被共享主机提供商用来限制客户的带宽。
530网站被冻结
Pantheon网络平台用于指示因不活动而被冻结的网站。