Правильный код состояния HTTP для неправильного ввода

Что такое оптимальный код ответа HTTP, когда не сообщается 200 (все нормально), но ошибка ввода?

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

с помощью 500 больше похоже на проблему с сервером
с помощью 200 с предупреждением/ответом на текст ошибки плохо (разрешить кеширование и все не в порядке)
используя 204 и ничего не возвращаю, возможно, хорошо (но хорошо поддерживается?)
использование 404 неверно, если запрашиваемый путь (script) доступен и находится в надлежащем месте

Ответ 1

Коды, начинающиеся с 4 (4xx), предназначены для клиентских ошибок. Может быть, 400 (Bad Request) может быть подходящим для этого случая? Определение в http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html говорит:

"Запрос не мог быть понят сервером из-за искаженного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений".

Ответ 2

У нас была такая же проблема и при создании нашего API. Мы искали код состояния HTTP, эквивалентный InvalidArgumentException. После прочтения исходной статьи ниже мы закончили использование 422 Unprocessable Entity, в котором говорится:

Код состояния 422 (необработанная сущность) означает, что сервер понимает тип содержимого объекта запроса (следовательно, код статуса 415 (неподдерживаемый тип носителя) является неуместным), и синтаксис объекта запроса является правильным (таким образом, 400 (Bad Request) неуместен), но не смог обработать содержащиеся инструкции. Например, это условие ошибки может возникнуть, если тело запроса XML содержит правильно сформированные (т.е. Синтаксически правильные), но семантически ошибочные инструкции XML.

источник: https://www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm

Ответ 4

417 означает HTTP_EXPECTATION_FAILED

Ответ 5

404 - Не найдено - может использоваться для запрошенного URI, или запрошенный ресурс, такой как пользователь, не существует.