Accept和Content-Type HTTP标头之间的区别


118

因此,Accept标头告诉服务器浏览器正在寻找的资源的MIME类型。例如,服务器可以发送纯文本,HTML,JSON等。

好的,这很有道理,但是当我查看Content-Type标题时,似乎正在做相同的事情。例如,它告诉服务器它需要文本或JSON。

那么HTTP标头AcceptContent-TypeHTTP标头有什么区别?

Answers:


155

正如您正确指出的那样,HTTP客户端使用Accept标头告诉服务器它们将接受什么内容类型。然后,服务器将发回一个响应,该响应将包含一个Content-Type标头,该标头告诉客户端返回的内容的内容类型实际上是什么。

但是,您可能已经注意到,HTTP请求也可以包含 Content-Type标头。为什么?好吧,考虑一下POSTPUT请求。对于那些请求类型,客户端实际上是作为请求的一部分向服务器发送一堆数据,Content-Type标头告诉服务器数据实际上是什么(从而确定服务器如何解析数据)。

特别是,对于由HTML表单提交产生的​​POST请求,该请求的Content-Type(通常)将是下面的标准表单内容类型之一,由标记enctype上的属性指定<form>

  • application/x-www-form-urlencoded (对于少量的简单ASCII文本,默认,较旧,更简单,开销稍少,不支持文件上传)
  • multipart/form-data (更新,增加了对文件上传的支持,对大量的二进制数据或非ASCII文本更有效)

22
  • 接受:浏览器可以消化的内容,例如,某人可以理解的所有语言。
  • Content-Type:是实际数据的格式,例如某人说的语言。由于计算机无法(嗯,现在它们可以)识别其他类型,就像人们可以说“哦,他是德国人!” 或“她在说中文!”

1
不一定是浏览器,而是任何http客户端。
Jim Aho

20

接受就像

这是我的要求,我想(接受)此回复格式

内容类型就像

这是我的请求(或响应),而这(内容类型)是我在请求(或响应)中发送的内容的格式


我知道我来晚了,但我很好奇,如果服务器未以“接受”格式发送响应格式,会发生什么情况?
尖叫

1
这将由客户端决定@shriek。我猜想大多数http客户端(或浏览器)都会“智能地”查看真实数据,并查看其真实含义。如果应该是JSON,也许一个客户端也可能会拒绝响应,但是解析失败,因为它似乎是另外一回事。
Jim Aho

5

这是一个请求-响应对话,因此客户端

  • 发送“ Content-Type”的请求,然后
  • 希望收到“接受”媒体类型的响应。

不正确 接受是一个请求标头。请参阅已接受的答案。
darron

2
@darron不,这个答案是正确的。他不是在说它不是一个请求头,而是在说它的目的是告诉服务器它希望得到什么样的响应。其他答案有点多余,但我认为这是最简洁的。+1。
Todd Menier

0

接受

接受请求HTTP标头会通告客户端能够理解的内容类型,以MIME类型表示。然后,使用内容协商,服务器选择建议之一,使用建议,并通过Content-Type响应标头将其选择通知客户端。浏览器根据完成请求的上下文为此标头设置适当的值:获取CSS样式表时,为请求设置的值与获取图像,视频或脚本时不同。

来源:developer.mozilla.org

内容类型

Content-Type实体标头用于指示资源的媒体类型。

作为响应,Content-Type标头告诉客户端返回的内容的内容类型实际上是什么。在某些情况下,浏览器将执行MIME嗅探,并且不一定遵循此标头的值;为防止此行为,可以将标头X-Content-Type-Options设置为nosniff。

在请求(例如POST或PUT)中,客户端告诉服务器实际发送的数据类型。

来源:developer.mozilla.org

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.