Content-Type только с кодировкой

Я наткнулся на этот интересный заголовок:

Content-Type: charset=utf-8

Установить HTTP-заголовок для UTF-8 с помощью PHP

Ответчик говорит, что этот синтаксис определяется RFC 2616, но я не видя это в предоставленной ссылке. Является ли этот допустимый синтаксис, и если да, то где конкретно это определено?

Ответ 1

производство в RFC 2616 для заголовка Content-Type:

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

И media-type production:

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

Это говорит о том, что, хотя часть параметра (например, charset=utf-8 является необязательной, часть type "/" subtype не является, то есть тип носителя должен иметь тип, за которым следует слэш, за которым следует подтип.

Итак, Content-Type: charset=utf-8 не является допустимым синтаксисом для этого, а не специально определенным в любом другом месте, нормативно/авторитетно, чтобы быть.

RFC 2616 фактически устарел RFC 7231 и несколькими другими RFC (текущими HTTP RFC).

Но соответствующие части RFC 7231 определяют по существу одни и те же производные для этого случая:

Произведение в RFC 7231 для значения заголовка Content-Type таково:

Content-Type = media-type

И 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

Ответ 2

Нет, я не могу найти такой контент-тип, определенный где-либо в RFC 2616 или RFC 7231.

И это даже не работает в Chrome.

(Я пробовал xhr.setRequestHeader('Content-type','charset=utf-8');. Когда я xhr.send, нет заголовка content-type.)