标题参数:"接受"和"内容类型"在REST上下文中

时间:2016-03-01 12:12:51

标签: rest http-headers

我知道Accept参数定义了从服务器发送的客户端响应中预期的数据类型,因此它被用作响应头。

我的问题是关于Content-type,客户端使用它来定义发送请求的正文格式,我总是把它作为客户端请求的一部分使用,所以我有一个客户端请求我使用AcceptContent-type设置标头的位置。最近,我遇到了一个项目,其中Content-type在响应标头中定义(因此由服务器发送)。所以我的问题是:Content-type需要设置为客户端请求标头的一部分,还是作为服务器响应标头的一部分,还是可以设置为两者?

4 个答案:

答案 0 :(得分:26)

阅读相关的RFC。在这种情况下7231

  

5.3.2. Accept

     

"接受"头字段可以由用户代理使用来指定      响应可接受的媒体类型。

  

3.1.1.5. Content-Type

     

"内容类型"标题字段表示媒体类型      相关代表

所以:Accept表示客户端可以接受来自服务器的响应Content-type始终与当前请求或响应的内容有关。

因此,如果您的请求没有有效负载,则不要使用内容类型请求标头。

答案 1 :(得分:7)

HTTP客户端使用Accept标头告诉服务器他们期望/喜欢哪种类型的内容作为响应。客户端和服务器既可以使用内容类型来标识其请求(客户端)或响应(服务器)中的数据格式,也可以帮助其他部分正确解释信息。

答案 2 :(得分:1)

TL; DR

实体标头Content-Type用于指示资源的媒体类型。在响应中,Content-Type标头告诉客户端返回的内容的内容类型实际上是什么。在诸如POST或PUT之类的请求中,客户端告诉服务器实际发送的数据类型。

详尽的答案

您正确地注意到,HTTP客户端使用Accept标头告诉服务器可接受的响应媒体类型。然后,服务器将依次返回响应,该响应将包含Content-Type标头,该标头告诉客户端实际上返回了哪种媒体类型。

现在,Content-Type标头也可以应要求和响应了。为什么?好吧,考虑一下POST或PUT请求。对于那些请求类型,客户端实际上是作为请求的一部分向服务器发送一堆数据,而Content-Type标头告诉服务器实际的数据是什么,从而确定服务器将如何解析它。 / p>

答案 3 :(得分:0)

接受客户请求标头字段可用于指定响应可接受的某些媒体类型。

  

这是我的请求,我想(接受)这种回复格式

Content-Type为 entity-header 字段表示发送给收件人的实体的媒体类型。

  

这是我的请求(或响应),这(内容类型)是我在请求(或响应)中发送的内容的格式

Source

HTTP标头字段提供有关请求或响应或消息正文中发送的对象的必需信息。 HTTP消息头有四种类型:

  • 常规标题:这些标题字段对 请求和响应消息。
  • 客户端请求标头::这些标头字段仅适用 请求消息。
  • 服务器响应标题::这些标题字段仅适用 用于响应消息。
  • 实体标题::这些标题字段定义有关以下内容的元信息: 实体-主体,或者如果没有主体,则关于所标识的资源 根据要求。 Source

https://www.w3.org/Protocols/HTTP/HTRQ_Headers.html
https://www.w3.org/Protocols/HTTP/Object_Headers.html