@alexg-nn

Должен ли сервер обработать запрос, если формат ответа не поддерживается?

Привет!

В HTTP протоколе есть такой статус 406 Not Acceptable, означающий, что сервер не может вернуть ответ в том формате, который понимает клиент. Мне не понятен вот какой момент. Допустим, прилетает POST (или PUT) запрос с Accept application/json, а сервер умеет возвращать лишь XML. Вопрос: должен ли сервер выполнить действие, которое предполагается в обработчике POST/PUT запроса, а потом послать 406 ответ, либо сперва он должен проверить может ли ответить в таком формате, а только потом приступать к обработке запроса. Как то нигде не нашёл однозначного ответа на этот вопрос.
В стандарте вообще написано, мол, вывалить ответ во всех возможных форматах, а клиент сам выберет более понятный. То есть там предполагается, что POST/PUT всё таки обработается. Но хотелось бы услышать мнения.

Спасибо.
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
RFC 7231
The 406 (Not Acceptable) status code indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request (Section 5.3), and the server is unwilling to supply a default representation.
The server SHOULD generate a payload containing a list of available representation characteristics and corresponding resource identifiers from which the user or user agent can choose the one most appropriate. A user agent MAY automatically select the most appropriate choice from that list. However, this specification does not define any standard for such automatic selection, as described in Section 6.4.1.

То есть, серверу РЕКОМЕНДОВАНО вернуть список допустимых вариантов (а не содержимое во всех вариантах), среди которых агент МОЖЕТ выбрать подходящий ему.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
В любой обработке любой логики сначала идет валидация запроса (что в http запросе, что в просто функции в коде). Подход Fail First. Если запрос не соответствует правилам игры - сразу до свидания, спасибо что зашли, но вам тут не рады :-)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы