假设我设计的媒体类型是另一种媒体类型的严格子集。例如,我的媒体类型为application/vnd.example.foo+xml
(此后缩写为foo+xml
)。此媒体类型是application/xhtml+xml
(以下简称xhtml
)媒体类型的严格子集。基本上我的媒体类型定义会在xhtml
媒体类型中的某些结构中添加额外的处理指令(或完全替换它们)。为了举例,可以说在任何foo+xml
文档中,客户端都应以特定的方式显示xpath //ul[@class='foo']/li[a]
,并且忽略文档的其余部分,这是一个处理模型,与原始xhtml
媒体类型完全不同。
有了这些信息,服务器现在可以开始创建该类型的表示,我的客户端可以传递Accept标头并愉快地使用这种类型的文档,它们都遵循我的类型定义中列出的处理指令。但是,这是一种自定义媒体类型,我不能假设任何人都知道如何处理。
我有一个选项:
foo+xml
媒体类型时,我会将内容类型设置为该媒体类型来投放文档。xhtml
媒体类型时,我会使用xhtml
内容类型标题提供相同的文档这意味着不知道foo+xml
但可能了解xhtml
是什么的通用客户端仍然可以处理我的文档,跟踪其他资源的链接,以通用的方式呈现给用户,等等。同样,知道foo+xml
语义的客户端实际上可以确认该文档实际上就是这样,而不必猜测或反省文档,看它是否完全看起来像它可以处理的东西(例如通过HTML分析,微格式等)。
答案 0 :(得分:1)
虽然我从未见过关于这一特定问题的任何权威性讨论,但我认为它似乎完全有效。它类似于为HTML文档请求text / plain以有效地执行视图源操作的想法。
从客户的角度来看,它不知道字节与另一个表示相同,所以我看不出客户的利弊如何。
我猜这个棘手的问题来自于缓存。您是否会使用相同的URI来返回两个表示,或者您是要从通用URI重定向到特定于表示的URI?缓存中是否会有一个或两个字节副本?您是否需要设置Vary标头以改变内容类型?你可以在缓存中使用两个副本吗?您是否需要对这些表示中的一个或两个进行更新?如果是这样,如果存在,那么缓存是否会使两个副本无效?