Answers:
产生包含有效载荷主体的消息的发送者应该在该消息中生成Content-Type头字段,除非发送者不知道所表示的预期媒体类型。如果 Content-Type头字段不存在,则接收者可以假定媒体类型为“ application / octet-stream”([RFC2046],第4.5.1节),或者检查数据以确定其类型。
这意味着Content-Type
仅应为PUT
和POST
请求设置HTTP标头。
获取请求不应具有内容类型,因为它们没有请求实体(即主体)
GET请求可以具有“ Accept”标头,其中标明了客户端可以理解的内容类型。然后,服务器可以使用它来决定发送回哪种内容类型。
它们是可选的。
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1
简短的答案:很可能,不,您不需要 HTTP GET请求的内容类型标头。但是规范似乎也不排除HTTP GET的内容类型标头。
配套材料:
“内容类型”是表示(即有效载荷)元数据的一部分。引自 RFC 7231第3.1节:
3.1。表示元数据
表示形式报头字段提供有关表示形式的元数据。当消息包含有效载荷主体时,表示形式报头字段描述如何解释有效载荷主体中包含的表示形式数据。...
以下标头字段传达制图表达元数据:
+-------------------+-----------------+ | 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
。在实践中,进行了一些实现并做出了可以理解的假设。引用亚当的评论:
“虽然...规范没有说您不能在GET上使用Content-Type,但.Net似乎在它的HttpClient中强制执行它。请参阅此问与答。”
但是,严格来说,规范本身并不排除HTTP GET包含有效负载的可能性。引自RFC 7231第4.3.1节:
4.3.1获取
...
GET请求消息中的有效负载没有定义的语义。在GET请求上发送有效内容正文可能会导致某些现有实现拒绝该请求。
因此,如果您的HTTP GET出于某种原因恰好包含有效负载,则Content-Type
标头可能也是合理的。
SHOULD NOT
包括内容类型。我们有明确的报价吗?