Answers:
正如您正确指出的那样,HTTP客户端使用Accept标头告诉服务器它们将接受什么内容类型。然后,服务器将发回一个响应,该响应将包含一个Content-Type标头,该标头告诉客户端返回的内容的内容类型实际上是什么。
但是,您可能已经注意到,HTTP请求也可以包含 Content-Type标头。为什么?好吧,考虑一下POST或PUT请求。对于那些请求类型,客户端实际上是作为请求的一部分向服务器发送一堆数据,Content-Type标头告诉服务器数据实际上是什么(从而确定服务器如何解析数据)。
特别是,对于由HTML表单提交产生的POST请求,该请求的Content-Type(通常)将是下面的标准表单内容类型之一,由标记enctype
上的属性指定<form>
:
application/x-www-form-urlencoded
(对于少量的简单ASCII文本,默认,较旧,更简单,开销稍少,不支持文件上传)multipart/form-data
(更新,增加了对文件上传的支持,对大量的二进制数据或非ASCII文本更有效)这是一个请求-响应对话,因此客户端
接受请求HTTP标头会通告客户端能够理解的内容类型,以MIME类型表示。然后,使用内容协商,服务器选择建议之一,使用建议,并通过Content-Type响应标头将其选择通知客户端。浏览器根据完成请求的上下文为此标头设置适当的值:获取CSS样式表时,为请求设置的值与获取图像,视频或脚本时不同。
Content-Type实体标头用于指示资源的媒体类型。
作为响应,Content-Type标头告诉客户端返回的内容的内容类型实际上是什么。在某些情况下,浏览器将执行MIME嗅探,并且不一定遵循此标头的值;为防止此行为,可以将标头X-Content-Type-Options设置为nosniff。
在请求(例如POST或PUT)中,客户端告诉服务器实际发送的数据类型。