HTTP响应代码,用于区分不正确的参数和失败的值

时间:2012-07-04 09:24:33

标签: http rest

适合的响应代码和消息是什么:

  1. 字段以错误的方式提交(网址参数与正文)或缺少字段
  2. 字段获取无效值(字符串而不是数字,将来是时间戳)
  3. 某些字符如?, /会破坏网址参数中的内容
  4. 实际失败:凭据无效,重复已完成的操作
  5. 目前,我们全部使用400.

2 个答案:

答案 0 :(得分:6)

您的问题中的案例1,2和3基本上是请求中的语法错误

=> 400错误请求

(RFC 2616说:由于语法格式错误,服务器无法理解该请求。

关于案例4:

一个。凭证无效

=> 401未经授权

湾重复已经完成的行动

=> 403 Forbidden

(RFC说:服务器理解请求,但拒绝履行请求。授权无效,请求不应重复。

但是,当尝试错误地修改内容(PUT)或分别访问已删除的资源时, 409 Conflict 410 Gone 才有意义。

这是RFC 2616 Section 10

答案 1 :(得分:3)

阅读每个响应代码的HTTP规范,以获取有关在响应正文中返回的内容的一些信息。例如,4xx说:“除了在响应HEAD请求时,服务器应该包含一个包含错误情况解释的表示,以及它是暂时的还是永久的条件。”

要记住的主要观点是HTTP响应代码是统一的,因此与提供互操作性有关,而不是满足各个应用程序的详细需求。使用响应正文而不是代码,以您希望客户理解的格式包含分钟详细信息。

  

1个字段以错误的方式提交(URL参数与正文)或缺少字段

返回“404 Not Found”。查询字符串参数是URI的一部分,用于标识资源。 /foo/bar?a=1&b=2标识的资源与foo/bar不同。如果资源不存在,则返回404.代码中的相同逻辑用于处理同一路径的任何查询字符串参数并不重要:这些详细信息有意隐藏在统一接口后面。有关详细信息,请参阅the URI spec

  

2个字段获取无效值(字符串而不是数字,将来是时间戳)

400在这里是最好的,除非资源处于与用户可能合理能够解析的请求冲突的状态(然后重新提交请求),在这种情况下返回409。

  

3个字符如?,/破坏URL参数中的内容

如果此类破坏是由于您的服务器未正确处理查询字符串组件中的保留字符,则返回500.如果客户端提交格式错误的Request-URI,则返回400.如果URI标识了您的服务器未处理的资源,返回404。

  

4实际失败:凭据无效,重复已完成的操作

无效的凭据应导致“401 Unauthorized”。如果请求方法为idempotent(GET,HEAD,PUT,DELETE),则重复已执行的操作应导致200 OK(或重定向等)。对于POST,重复操作完全取决于操作的性质,实际上可能会返回任何状态代码。 400/409很常见,但许多此类资源只是再次执行操作,这通常是可取的。