为啥我们需要设置标头请求的内容类型
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 获取方法时需要内容类型标头?
当内容类型和内容编码标头一起发送时,表达js拒绝发布请求(400错误请求)
为啥编码标头内容类型:text/html;在 Outlook 插件中使用 MailItem 时缺少 GMAIL 的 SMTP 服务器:SMTP.GMAIL.COM?