406 HTTP状态错误的正确响应格式是什么

时间:2015-11-06 14:33:08

标签: http http-headers

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

来自HTTP protocol spec

  

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

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

1 个答案:

答案 0 :(得分:1)

规范中的主要内容是:

  

实体格式由Content-Type标题字段

中指定的媒体类型指定

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

As-is引用的文章: 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的最佳方法是使用相同的&#34; Link&#34;来自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"

但是,不要期望每个客户都能获得有关未标准化的保证结果。