REST Web服务:响应状态为4XX时可接受的HTTP响应内容类型(客户端错误)

时间:2012-09-06 13:48:46

标签: web-services http rest mime-types

我一直无法在HTTP规范中找到任何文档来管理生成HTTP响应是否可接受包括人类可读的错误消息(例如content-type:text / plain)如果HTTP客户端无效HTTP请求,并指定了一个请求标头,使用accept标头限制可接受的响应内容类型。

想象一下,REST Web服务客户端向“http:// myhost / validpath?illegalRequestParameter = rubbish”发出无效的GET请求,并包含请求标头“Accept:application / xml”或“Accept:application / vnd.ms” -excel”。

服务器将使用4XX系列中的HTTP状态代码进行响应(在本例中为“400 Bad Request”)。但是,该服务如何能够向客户传达有关错误原因的信息?

我看到以下选项:

  1. 在HTTP响应内容中创建明文错误消息。 设置响应标头“Content-type:text / plain”,并在响应内容中包含描述性错误消息。但是,这会破坏HTTP客户端的“接受”限制。

  2. 不要包含HTTP响应内容。 这显然是有效的,但对于只知道发生“客户端错误”但无法知道原因(并在客户端日志文件中报告原因)的客户端没有太大帮助。

  3. 尝试将错误消息强制转换为“可接受”的MIME类型。 这很难实现。即使错误消息可以构造为有效的application / xml类型,也可能会破坏Web服务合同(例如XML Schema一致性)。

  4. 我的问题是:上述情况是否受现有HTTP规范/标准的约束?

    参考文献:

    1. HTTP状态代码说明:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
    2. HTTP标头字段定义http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

1 个答案:

答案 0 :(得分:0)

如果接受标头是' application / xml',那么您应该将错误消息作为xml返回。它会破坏客户端,但这并不重要,客户端无法获得他们请求的信息。至少客户端能够解析错误消息......