我想在我的应用程序中发出406 Not Acceptable错误,我想提醒客户注意可用的替代格式。
除非是HEAD请求,否则响应应该包含一个实体 包含可用实体特征和位置的列表 用户或用户代理可以从中选择最合适的用户。 实体格式由中给出的媒体类型指定 Content-Type标头字段。取决于格式和 用户代理的功能,选择最合适 选择可以自动执行。但是,这个规范 没有为这种自动选择定义任何标准。
我是否在响应正文中添加了该实体? 该列表的格式是什么?
答案 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"
但是,不要期望每个客户都能获得有关未标准化的保证结果。