为啥我们需要设置标头请求的内容类型

Posted

技术标签:

【中文标题】为啥我们需要设置标头请求的内容类型【英文标题】:Why We Need to Set Content Type of header request为什么我们需要设置标头请求的内容类型 【发布时间】:2017-07-17 18:41:21 【问题描述】:

我想知道什么是内容类型,为什么要设置header请求的内容类型,可以设置多少种header内容? 如果可能,请提供文件。

【问题讨论】:

【参考方案1】:

Content-Type 在 HTTP 请求的标头中向服务器指定它应该期望的数据。如果服务器允许并接受多种类型的内容,它可以使用该字段知道如何解释请求的正文。

例如:如果服务器允许 XML 和 JSON 数据位于同一端点,则将 Content-Type 设置为:

内容类型:application/json

会让服务器知道它应该期望请求正文包含 JSON。而通过:

内容类型:文本/xml

将通知服务器在正文中期待 XML。

RFC7321 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content 在3.1.1.5 部分定义Content-Type

“Content-Type”标头字段表示媒体类型 相关表示:包含在 消息有效负载或选定的表示,由 消息语义。指示的媒体类型定义了数据 格式以及接收者打算如何处理该数据, 在接收到的消息语义范围内,在任何内容之后 Content-Encoding 指示的编码被解码。

有 1500+ 个Media types 注册了IANA,可以将其设置为Content-Type 进行请求。

第 3.1.1.5 节的最后一段解释说,如果未设置 Content-Type,服务器可能会假定数据为 application/octet-stream 或以任何它想要的方式解释请求。但是:

这样做的客户 所以冒着得出错误结论的风险,这可能会暴露额外的 安全风险(例如,“权限提升”)。

当服务器执行此操作时称为Content Sniffing,可以通过设置禁用:

X-Content-Type-Options: nosniff

【讨论】:

兄弟 IANA 代表什么? 如果我们不设置任何 content-type 那么会出现什么问题 IANA 代表互联网号码分配机构。他们维护 IP 分配、端口号,并且是 DNS ***域的全球协调者。 我已更新答案以包含指向 IANA 的链接,并解释如果未设置 Content-Type 会发生什么。【参考方案2】:

如果您不设置 Content-Type,您的应用可能无法运行。

例如,如果您正在构建一个需要 json 格式数据的应用,并且您没有在标题中包含 Content-Type: application/json,那么在大多数情况下,您的应用都会出现故障。

【讨论】:

以上是关于为啥我们需要设置标头请求的内容类型的主要内容,如果未能解决你的问题,请参考以下文章

为啥在路由到 REST WebAPI 获取方法时需要内容类型标头?

为啥 RestKit 会更改我的响应内容类型?

当内容类型和内容编码标头一起发送时,表达js拒绝发布请求(400错误请求)

为啥编码标头内容类型:text/html;在 Outlook 插件中使用 MailItem 时缺少 GMAIL 的 SMTP 服务器:SMTP.GMAIL.COM?

POST 请求标头中的内容类型缺少 FormData 边界

本地主机已被 cors 策略请求标头字段内容类型阻止访问控制不允许