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

Web services REST Web服务:以4XX状态响应时可接受的HTTP响应内容类型(客户端错误),web-services,http,rest,mime-types,Web Services,Http,Rest,Mime Types,我在HTTP规范中找不到任何文档,这些文档控制在HTTP客户端发出无效HTTP请求时是否可以生成HTTP响应,包括人类可读的错误消息(例如,内容类型:text/plain),并指定一个请求标头,该标头使用accept标头限制可接受的响应内容类型 设想一个REST web服务客户机向“”发出无效的GET请求http://myhost/validpath?illegalRequestParameter=rubbish,并包括请求头“Accept:application/xml”或“Accept:ap

我在HTTP规范中找不到任何文档,这些文档控制在HTTP客户端发出无效HTTP请求时是否可以生成HTTP响应,包括人类可读的错误消息(例如,内容类型:text/plain),并指定一个请求标头,该标头使用accept标头限制可接受的响应内容类型

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

服务器将以4XX系列中的HTTP状态代码响应(在本例中为“400错误请求”)。但是,该服务如何能够向客户传递有关错误原因的信息呢

我看到以下选项:

  • 在HTTP响应内容中创建明文错误消息。 设置响应标题“内容类型:文本/普通”,并在响应内容中包含描述性错误消息。然而,这将打破HTTP客户端的“接受”限制

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

  • 尝试将错误消息强制转换为“可接受”MIME类型。 这几乎是不可能的。即使错误消息可以构造为有效的应用程序/xml类型,它也可能破坏web服务契约(例如xml模式一致性)

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

    参考资料:

  • HTTP状态代码定义:
  • HTTP头字段定义

  • 如果accept头是“application/xml”,那么应该以xml形式返回错误消息。这会破坏客户机,但这并不重要,客户机无论如何都无法获得他们要求的信息。至少客户端能够解析错误消息