Mar*_*cka 137 content-type get http
据我所知,有两个地方可以设置内容类型:
这是否意味着我不必或不应该为我的所有获取请求(客户端)设置内容类型.如果我可以或应该采用什么内容类型?
另外,我在一些帖子中读到,客户端的内容类型指定了客户端希望接收的内容类型.也许我的观点1不对?
Epo*_*poc 97
生成包含有效负载主体的消息的发送方应该在该消息中生成Content-Type标头字段,除非发送方不知道所包含的表示的预期媒体类型.如果 Content-Type头字段不存在,则接收者可以采用媒体类型"application/octet-stream"([RFC2046],第4.5.1节)或检查数据以确定其类型.
这意味着Content-Type只应为for PUT和POSTrequest 设置HTTP标头.
Dmi*_*oda 64
获取请求不应该具有内容类型,因为它们没有请求实体(即正文)
Mat*_*son 35
GET请求可以有"Accept"标头,表示客户端理解的内容类型.然后,服务器可以使用它来决定要发回的内容类型.
但它们是可选的.
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1
小智 24
接受的答案是错误的.引用是正确的,PUT和POST必须拥有它的断言是不正确的.不要求PUT或POST实际上有其他内容.也没有禁止GET实际拥有内容.
RFC确切地说明了它们的意思.. IFF你的身边(客户端或原始服务器)将发送额外的内容,除HTTP标头之外,它应该指定Content-Type标头.但请注意,允许省略Content-Type并且仍然包含内容(例如,通过使用Content-Length标头).
Ray*_*Luo 12
简短回答:很可能,不,您不需要HTTP GET 请求的内容类型标头。但规范似乎也不排除 HTTP GET 的内容类型标头。
支持材料:
“Content-Type”是表示(即有效负载)元数据的一部分。引自 RFC 7231 第 3.1 节:
3.1. 表示元数据
表示标头字段提供有关表示的元数据。当消息包含有效负载主体时,表示标头字段描述如何解释有效负载主体中包含的表示数据。...
以下标头字段传达表示元数据:
Run Code Online (Sandbox Code Playgroud)+-------------------+-----------------+ | Header Field Name | Defined in... | +-------------------+-----------------+ | Content-Type | Section 3.1.1.5 | | ... | ... |
引自RFC 7231 第 3.1.1.5 节(顺便说一下,当前选择的答案在节号中有一个拼写错误):
“Content-Type”头字段指示相关表示的媒体类型
从这个意义上说,Content-Type标头实际上并不是关于 HTTP GET 请求(或者 POST 或 PUT 请求)。它与此类任何请求中的有效负载有关。因此,如果没有有效负载,就不需要Content-Type. 在实践中,一些实施继续进行并做出了可以理解的假设。引用Adam 的评论:
“虽然......规范并没有说你不能在 GET 上使用 Content-Type,但 .Net 似乎在它的 HttpClient 中强制执行它。请参阅此 SO q&a。”
然而,严格来说,规范本身并不排除HTTP GET包含有效负载的可能性。引自RFC 7231 第 4.3.1 节:
4.3.1 获取
...
GET 请求消息中的有效负载没有定义的语义;在 GET 请求上发送有效负载正文可能会导致某些现有实现拒绝该请求。
因此,如果您的 HTTP GET 出于某种原因碰巧包含有效负载,Content-Type那么标头也可能是合理的。