Поддерживает ли протокол HTTP несколько типов контента в заголовках ответов?

#http #http-headers

#http #http-заголовки

Вопрос:

Мне интересно, могу ли я вернуть заголовок ответа

 Content-Type: application/json text/json 
  

или это незаконно?

В протоколе HTTP указано, что Content-Type должен иметь тип MediaType, и этот тип MediaType определяется следующим образом:

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

Но у меня возникли проблемы с интерпретацией того, что это означает, кто-нибудь может меня просветить?

Спасибо!

Комментарии:

1. Обратите внимание, что Content-Type , как и любой другой заголовок, может отображаться дважды или более.

2. @Stephan Я так не думаю: ни одно из escape-предложений tools.ietf.org/html/rfc7230#section-3.2.2 похоже, применимо к Content-Type.

Ответ №1:

Вам нужно посмотреть на определение поля заголовка:

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

Content-Type = «Content-Type» «:» тип носителя

таким образом, требуется один тип носителя, который определяется грамматикой, которую вы процитировали выше.

Итак, ответ таков: один тип / подтип, за которым следуют необязательные параметры.

Ответ №2:

Нет. Как указано в принятом ответе, само значение заголовка не допускает нескольких значений, а также не разрешается отправлять заголовки нескольких типов контента:

Отправитель НЕ ДОЛЖЕН генерировать несколько полей заголовка с одинаковым именем поля в сообщении, если только либо все значение поля для этого поля заголовка не определено как список, разделенный запятыми [т. Е. #(значения)], либо поле заголовка не является хорошо известным исключением (как указано ниже).

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

Ни одно из «escape-предложений» не выполняется, поскольку media-type не допускает список значений, разделенных запятыми, и Content-Type очевидно, также не является общеизвестным исключением.