为什么我们需要设置头部请求的内容类型

Why We Need to Set Content Type of header request

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

HTTP 请求的 header 中的

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

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

Content-Type: application/json

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

Content-Type: text/xml

会通知服务器在 body.

中期望 XML

RFC7321 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content defines Content-Type in section 3.1.1.5:

The "Content-Type" header field indicates the media type of the associated representation: either the representation enclosed in the message payload or the selected representation, as determined by the message semantics. The indicated media type defines both the data format and how that data is intended to be processed by a recipient, within the scope of the received message semantics, after any content codings indicated by Content-Encoding are decoded.

有1500+个Media types registered with the IANA可以设置为一个请求的Content-Type

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

Clients that do so risk drawing incorrect conclusions, which might expose additional security risks (e.g., "privilege escalation").

当服务器执行此操作时调用 Content Sniffing 并且可以通过设置禁用:

X-Content-Type-Options: nosniff

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

例如,如果您构建的应用程序需要 json 格式的数据,但您没有在 header 中包含 Content-Type: application/json,那么在大多数情况下,您的应用程序会出现故障.