4

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

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

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

我看到以下选项:

  1. 在 HTTP 响应内容中创建明文错误消息。设置响应头“内容类型:文本/纯文本”,并在响应内容中包含描述性错误消息。但是,这会打破 HTTP 客户端的“接受”限制。

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

  3. 尝试将错误消息强制转换为“可接受的”MIME 类型。这是很少可能的。即使可以将错误消息构造为有效的应用程序/xml 类型,它也可能会破坏 Web 服务合同(例如 XML 模式一致性)。

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

参考:

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

1 回答 1

0

如果接受标头是“应用程序/xml”,那么您应该将错误消息作为 xml 返回。它会破坏客户,但这没关系,客户无论如何都没有得到他们要求的信息。至少客户端能够解析错误消息......

于 2012-10-13T01:54:28.047 回答