Rest 响应内容类型是否应始终与接受相同?

Rest 响应内容类型是否应始终与接受相同?,rest,http,Rest,Http,我有一个具有实体格式原始版本的资源,还有一个更高版本的改进版本,其中包含中断更改 调用者使用Accept标题选择更高版本 假设我的服务只返回JSON 响应应该是application/json还是正好是Accept标题中的格式?有人在乎我作弊吗 例如,这是好还是坏: 客户端请求:GET/people/1;接受:application/vnd.personv2+json 服务器响应:200{“Name”:“John”};内容类型:应用程序/json 服务器提供了一个使用JSON的v2 pers

我有一个具有实体格式原始版本的资源,还有一个更高版本的改进版本,其中包含中断更改

调用者使用
Accept
标题选择更高版本

假设我的服务只返回JSON

响应应该是
application/json
还是正好是
Accept
标题中的格式?有人在乎我作弊吗

例如,这是好还是坏:

  • 客户端请求:
    GET/people/1;接受:application/vnd.personv2+json
  • 服务器响应:
    200{“Name”:“John”};内容类型:应用程序/json

服务器提供了一个使用JSON的v2 person格式,但表示它“只是”普通的应用程序JSON,而不是说它完全是请求的格式。

否,
accept
标记了端点可以处理的内容类型。端点可以处理json吗?xml?img?html?等更正式地说:

Accept request header字段可用于指定响应可接受的某些媒体类型。Accept标头可用于指示请求仅限于一小部分所需的类型,如请求内嵌图像的情况

内容类型
是响应在其有效负载中的内容,以便请求发起方知道如何处理。正式地:

Content-Type-entity-header字段表示发送给收件人的实体主体的媒体类型,或者在HEAD方法的情况下,表示如果请求是GET,则会发送的媒体类型

例如,您的web服务器中有一个接受json的端点(例如,客户端的数据
{'name':'some name','age':'30'}
),并返回一个图像(例如,30岁的人的描述性图像)。在这种情况下,接受将是
application/json
,响应类似于
img/*

这也适用于你的情况。接受是一回事,内容类型是另一回事。即使它们在语义上是相同的,它们也不一定是相同的。

在这一点上非常清楚:

如果[accept]标题字段为 在请求中出现,但没有任何可用的表示 响应具有列为可接受的媒体类型 源服务器可以

  • 通过发送406(而不是 (可接受)响应或
  • 通过处理 回应,就好像它不受内容协商的约束一样
格式化我的

因此,是的,您所问的(“当客户端请求
application/vnd.personv2+json
时返回
application/json
)”很好