为什么我们需要设置HTTP请求的Content-Type头部?

6

我有以下问题:

  • 什么是内容类型?
  • 为什么需要设置HTTP请求的内容类型头?
  • 可以设置多少种头部内容类型?

如有可能,请提供文档。

2个回答

10
HTTP请求头中的Content-Type指定了服务器应该期望哪种数据。如果服务器允许并接受多种类型的内容,它可以使用这个字段来解释请求正文。
例如:如果服务器在同一端点允许XML和JSON数据,则设置Content-Type为:

Content-Type: application/json

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

Content-Type: text/xml

将通知服务器在正文中期望XML。 RFC7321 - 超文本传输协议(HTTP/1.1):语义和内容 在第3.1.1.5节中定义了Content-Type
"Content-Type"头字段指示相关表示的媒体类型:即消息负载中包含的表示或由消息语义确定的所选表示。指定的媒体类型定义了数据格式以及如何在接收方范围内处理该数据,在解码Content-Encoding指定的任何内容编码之后。有1500多个已注册的媒体类型可以设置为请求的Content-Type,详见Media typesIANA。第3.1.1.5节的最后一段解释说,如果未设置Content-Type,则服务器可能假定数据为application/octet-stream或以任何方式解释请求。但是,这样做的客户端面临着得出不正确结论的风险,这可能会暴露其他安全风险(例如,“特权升级”)。"
当服务器这样做时,它被称为内容嗅探,可以通过设置以下方式来禁用:

X-Content-Type-Options: nosniff


IANA代表什么? - Usman Hafeez
如果我们没有设置任何内容类型,会出现什么问题? - Usman Hafeez
IANA代表互联网数字分配机构。他们维护IP分配、端口号,并且是DNS顶级域的全球协调者。 - bramwelt
我已更新答案,包括指向IANA的链接,并解释了如果未设置Content-Type会发生什么。 - bramwelt

1
如果您没有设置Content-Type,您的应用程序可能无法正常工作。例如,如果您正在构建一个期望以json格式接收数据的应用程序,并且您在标头中不包括Content-Type: application/json,则在大多数情况下,您的应用程序将出现故障。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接