HTTP协议是否支持响应头中的多种内容类型?

net*_*ain 21 http http-headers

我想知道我是否可以返回响应头

Content-Type: application/json text/json 
Run Code Online (Sandbox Code Playgroud)

或者这不合法吗?

HTTP协议声明Content-Type应为mediaType,mediaType定义如下:

   media-type     = type "/" subtype *( ";" parameter )
   type           = token
   subtype        = token
Run Code Online (Sandbox Code Playgroud)

但是我无法解释这意味着什么,任何人都可以启发我吗?

谢谢!

Jul*_*hke 24

您需要查看标头字段的定义:

http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.14.17

Content-Type ="Content-Type"":"media-type

所以它需要一个媒体类型,它由你上面引用的语法定义.

所以答案是:单个类型/子类型,后跟可选参数.


小智 5

不可以。正如接受的答案中所指出的,标头值本身不允许有多个值,也不允许发送多个 Content-Type 标头:

发送者不得在消息中生成具有相同字段名称的多个标头字段,除非该标头字段的整个字段值被定义为逗号分隔列表[即#(values)]或者标头字段是一个很好的-已知的异常(如下所述)。

https://www.rfc-editor.org/rfc/rfc7230#section-3.2.2

没有一个“转义子句”成立,因为media-type不允许使用逗号分隔的值列表,并且Content-Type显然也不是众所周知的例外。