Требуется ли заголовок Accept для метода POST, который не возвращает клиенту никакого содержимого? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть конечная точка, которая поддерживает метод POST с типом контента как json (только). Но запрос POST не возвращает никакого содержимого в теле ответа, кроме кодов состояния. В этом случае, каково правильное поведение?

  1. Клиент отправляет POST с заголовком Accept как application/json
  2. Клиент отправляет POST с заголовком Accept как application/xml

Должен ли сервер возвращать ошибку в случае 2?

Ответы [ 2 ]

3 голосов
/ 15 мая 2019

Серверы могут игнорировать заголовок Accept.

Если вы ничего не отвечаете в ответе, это бессмысленно. Вам решать, хотите ли вы отклонить запросы с Accept заголовками или нет.

Но я думаю, что большинство систем не будут отклонять эти запросы.

1 голос
/ 15 мая 2019

RFC 7231 описывает семантику Accept header

Запрос без какого-либо поля заголовка Accept подразумевает, что пользовательский агент примет любой тип носителя в ответ.

Если поле заголовка присутствует в запросе и ни одно из доступных представлений для ответа не имеет тип носителя, который указан в качестве приемлемого, сервер происхождения может либо заполнить поле заголовка, отправив ответ 406 (не приемлемо), либо не обращайте внимания на поле заголовка, обрабатывая ответ, как если бы он не подлежал согласованию содержимого.

Заголовок Accept, предоставленный клиентом, вероятно, должен отражать контекст запроса, видимый клиентом; например, веб-браузер может разумно использовать другой заголовок Accept для <img>, чем для <script>, в каждом случае поощряя сервер предоставлять полезные представления.

В случае POST вы пытаетесь договориться о представлении «статуса или результатов, полученных в результате действия», а не о представлении самого ресурса.

Если представление ответа имеет длину ноль байтов , когда тип носителя равен application/json, то я ожидаю, что ответ также будет иметь длину 0 байт, если тип носителя равен application/xml , Поэтому для меня не очевидно принимать одно, а другое нет.

...