Нужен ли заголовок типа содержимого для запросов HTTP GET?

Насколько я понял, есть два места, где можно задать тип контента:

  • Клиент устанавливает тип контента для тела, которое он отправляет на сервер (например, для сообщения).
  • Сервер устанавливает тип содержимого для ответа.

Означает ли это, что мне не нужно или не следует устанавливать тип содержимого для всех моих запросов на получение (на стороне клиента). И если я могу или должен, какой тип контента был бы?

Также я прочитал в нескольких сообщениях, что тип контента клиента определяет тип контента, который клиент хотел бы получить. Так может быть, мой пункт 1 не прав?

Ответ 1

В соответствии с разделом 3.1.5.5 RFC 7231:

Отправитель, который генерирует сообщение, содержащее тело полезной нагрузки, ДОЛЖЕН сгенерировать поле заголовка Content-Type в этом сообщении, если только предполагаемый тип носителя закрытого представления неизвестен отправителю. Если поле заголовка Content-Type отсутствует, получатель МОЖЕТ либо предположить тип медиафайла "application/octet-stream" ([RFC2046], раздел 4.5.1), либо проверить данные для определения его типа.

Это означает, что HTTP-заголовок Content-Type должен быть установлен только для запросов PUT и POST.

Ответ 2

Получить запросы не должны иметь тип содержимого, поскольку у них нет объекта запроса (т.е. тела)

Ответ 3

В запросах GET могут быть заголовки "Принять", в которых указываются типы контента, которые клиент понимает. Затем сервер может использовать это, чтобы решить, какой тип содержимого нужно отправить назад.

Они необязательны, но.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1

Ответ 4

Принятый ответ неверен. Цитата верна, утверждение, что PUT и POST должны иметь это, неверны. Нет требования, чтобы PUT или POST имели дополнительный контент. Также не существует запрета на GET, фактически имеющего контент.

RFC говорят точно, что они означают. IFF ваша сторона (клиентский сервер OR) будет отправлять дополнительный контент за пределы заголовков HTTP, он ДОЛЖЕН указать заголовок Content-Type. Но учтите, что допустимо опускать Content-Type и включать контент (скажем, с помощью заголовка Content-Length).

Ответ 5

Проблема в том, что в сообщении GET не передается тип содержимого, это означает, что тип содержимого не имеет значения, так как сторона сервера все равно определяет содержимое. Проблема, с которой я столкнулся, состоит в том, что сейчас есть много мест, которые настраивают свои веб-сервисы так, чтобы они были достаточно умными, чтобы подобрать тип контента, который вы передаете, и вернуть ответ в "типе", который вы запрашиваете. Например. в настоящее время мы обмениваемся сообщениями с местом по умолчанию JSON, однако они настроили свой веб-сервис таким образом, что если вы передадите тип содержимого xml, они вернут xml, а не JSON по умолчанию. Который я думаю, что движение вперед - отличная идея