Content-Type仅限charset

时间:2017-02-02 04:11:33

标签: utf-8 http-headers w3c rfc email-headers

我遇到了这个有趣的标题:

Content-Type: charset=utf-8

Set HTTP header to UTF-8 using PHP

回答者说这个语法是由RFC 2616定义的,但我不是 在提供的链接中看到它。这是有效的语法,如果是这样的话 具体是这个定义了吗?

2 个答案:

答案 0 :(得分:3)

production in RFC 2616 for the Content-Type header就是这样:

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

the media-type production就是这样:

media-type     = type "/" subtype *( ";" parameter )
type           = token
subtype        = token

虽然参数部分(例如,charset=utf-8是可选的,但type "/" subtype部分不是 - 也就是说,媒体类型必须具有类型,后跟斜杠后跟子类型。< / p>

因此,Content-Type: charset=utf-8不是有效的语法,也没有在其他任何地方以规范/权威的方式特别定义。

RFC 2616实际上已被RFC 7231和其他几个RFC(当前的HTTP RFC)废弃。

但是RFC 7231的相应部分为这种情况定义了基本相同的产品:

production in RFC 7231 for the value of the Content-Type header就是这样:

Content-Type = media-type

the media-type production就是这样:

media-type = type "/" subtype *( OWS ";" OWS parameter )
type       = token
subtype    = token

没有其他规范废弃或取代该部分 - RFC 7231仍然具有权威性。

大多数编程语言都有很好的媒体类型解析库 语法检查;例如:

npm install content-type
node -e "var ct = require('content-type'); ct.parse('charset=utf-8')"
=> TypeError: invalid media type
node -e "var ct = require('content-type'); ct.parse('image; charset=utf-8')"
=> TypeError: invalid media type

答案 1 :(得分:1)

不,我找不到RFC 2616或RFC 7231中任何地方定义的内容类型。

它甚至不适用于Chrome。

(我尝试xhr.setRequestHeader('Content-type','charset=utf-8');。当我xhr.send时,它没有content-type标题。)