【问题标题】:What is the correct response format of a 406 HTTP status error406 HTTP 状态错误的正确响应格式是什么
【发布时间】:2015-11-06 14:33:08
【问题描述】:

我想在我的应用程序中发出 406 Not Acceptable 错误,并且我想提醒客户有关可用的替代格式。

来自HTTP protocol spec

除非它是一个 HEAD 请求,否则响应应该包含一个实体 包含可用实体特征和位置的列表 用户或用户代理可以从中选择最合适的一个。 实体格式由给出的媒体类型指定 内容类型标头字段。取决于格式和 用户代理的能力,选择最合适的 选择可以自动执行。然而,这个规范 没有为这种自动选择定义任何标准。

我是否在响应正文中添加该实体? 该列表的格式是什么?

【问题讨论】:

  • @CodeCaster,你是什么意思?好像没有定义这样的格式。
  • @Opal 我的观点完全正确。您必须自己编写一个,并在服务器和客户端中实现它。
  • 是的,我就是这么想的。然而,一些通用格式应该被标准化。

标签: http http-headers


【解决方案1】:

规范中的主要内容是:

实体格式由 Content-Type 头域中给出的媒体类型指定

这个页面非常有用: http://chimera.labs.oreilly.com/books/1234000001708/apc.html#_proactive_negotiation

它引用的文章原样: http://bit.ly/agent-conneg

那里的示例描述了协商,在您将返回 300 Multiple Choices 响应的情况下,这种情况类似于您在 406 Not Acceptable 响应中提供替代方案的情况。它遵循相同的想法,您以返回内容类型的格式提供实体 - 如果您要返回文本,请编写一些文本;如果要返回 HTML,请编写一些 HTML。

HTTP/1.1 300 Multiple Choices
Host: www.example.org
Content-Type: application/xhtml
Content-Length:XXX

<p>
  Select one:
</p>
<a href="/results/fr" hreflang="fr">French</a>
<a href="/results/en-US" hreflang="en-US">US English</a>
<a href="/results/de" hreflang="de">German</a>

标准格式确实对自动重新协商很有用,但规范并未对此进行定义。我同意作者的观点,即告知 406 替代方案的最佳方法是在 oreilly.com 页面的示例中使用相同的“链接”标题,正如他们所描述的那样:

另一种方法是使用链接标头。这具有成为任何客户端都可以理解的标准标头的优点。这是一个例子:

HTTP/1.1 300 Multiple Choices
Host: www.example.org
Content-Length: 0
Link: <http://www.example.org/results/png>; type="image/png",
      <http://www.example.org/results/jpeg>;type="image/jpeg",
      <http://www.example.org/results/gif>;type="image/gif"

但是,不要指望每个客户都使用非标准化的东西来保证结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多