我有以下问题:
- 什么是内容类型?
- 为什么我们需要设置HTTP请求的内容类型标头?
- 可以设置多少种类型的标头内容?
请提供文档。
Content-Type
在HTTP请求的标题中指定服务器的数据应期望的。如果服务器允许并接受多种类型的内容,则可以使用此字段知道如何解释请求的主体。
例如:如果服务器在同一端点允许XML和JSON数据,则将Content-Type
设置为:
content-type:应用程序/json
会让服务器知道它应该期望请求主体包含JSON。而通过:
content-type:text/xml
将通知服务器期望XML体内。
RFC7321-超文本传输协议(HTTP/1.1):语义和内容在第3.1.1.5节中定义了Content-Type
:
"内容类型"标题字段指示的媒体类型相关表示:要么包含在消息有效载荷或所选表示形式,由消息语义。指示的媒体类型定义了两个数据格式以及该数据打算如何由收件人处理,在收到的消息语义范围内,在任何内容之后用内容编码指示的编码被解码。
有1500多种以IANA注册的媒体类型,可以将其设置为请求的Content-Type
。
第3.1.1.5节的最后一段解释说,如果未设置Content-Type
,则服务器可以假定数据为application/octet-stream
或以任何方式解释请求。但是:
确实因此,有不正确结论的风险,这可能会暴露出更多的结论安全风险(例如,"特权升级"。
当服务器执行此操作时,它被称为内容嗅探,并且可以通过设置禁用:
x-content-type-options:nosniff
如果您不设置内容类型,则您的应用程序可能不起作用。
例如,如果您正在构建一个期望以JSON格式数据的应用程序,并且您不会在标题中包含Content-Type: application/json
,则在大多数情况下,您的应用程序都会出现故障。