我知道Accept
参数定义了从服务器发送的客户端响应中预期的数据类型,因此它被用作响应头。
我的问题是关于Content-type
,客户端使用它来定义发送请求的正文格式,我总是把它作为客户端请求的一部分使用,所以我有一个客户端请求我使用Accept
和Content-type
设置标头的位置。最近,我遇到了一个项目,其中Content-type
在响应标头中定义(因此由服务器发送)。所以我的问题是:Content-type
需要设置为客户端请求标头的一部分,还是作为服务器响应标头的一部分,还是可以设置为两者?
答案 0 :(得分:26)
阅读相关的RFC。在这种情况下7231:
"接受"头字段可以由用户代理使用来指定 响应可接受的媒体类型。
"内容类型"标题字段表示媒体类型 相关代表
所以: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 字段表示发送给收件人的实体的媒体类型。
这是我的请求(或响应),这(内容类型)是我在请求(或响应)中发送的内容的格式
HTTP标头字段提供有关请求或响应或消息正文中发送的对象的必需信息。 HTTP消息头有四种类型:
https://www.w3.org/Protocols/HTTP/HTRQ_Headers.html
https://www.w3.org/Protocols/HTTP/Object_Headers.html