Какой Content-Type должен использовать 204 No Response?

При создании HTTP-службы RESTful и ответа предоставляется 204 No Content (например, после того, как потребитель выдает запрос DELETE), какой Content-Type должен включать ответ?

Должно ли оно быть опущено? Есть ли предпочтительный Content-Type? Должен ли он быть одним и тем же типом содержимого GET-запроса к одному и тому же ресурсу? Разве это не имеет значения?

Ответы

Ответ 1

У вас есть Content-Type, когда у вас есть контент, и даже тогда он необязателен:

Любое сообщение HTTP/1.1 , содержащее тело объекта SHOULD, включает поле заголовка Content-Type, определяющее тип носителя этого тела.

(из RFC2616, §7.2.1, обратите внимание на использование СЛЕДУЕТ).

Поскольку содержимого нет, тогда нет причин указывать заголовок Content-Type.

Ответ 2

Ну, вот еще немного истории, и это связано с тем, когда реальный мир (браузеры) соответствуют теоретическому миру (спецификациям). Кажется, Firefox (верст 38, как я пишу это) имеет ошибку, когда браузер пытается проанализировать содержимое как xml, если нет заголовка типа контента, ДАЖЕ КОГДА код ответа равен 204 (без содержимого). См. https://bugzilla.mozilla.org/show_bug.cgi?id=521301

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