Подтвердить что ты не робот

Когда уместно ответить с ошибкой HTTP 412?

Мне непонятно, когда вы должны и не должны возвращать HTTP 412: Precondition Failed, ошибка для веб-службы? Я думаю использовать его при проверке данных. Например, если данные клиента POST XML и эти данные отсутствуют, требуемый элемент данных, а затем ответ 412 и описание ошибки.

Согласуется ли это с духом ответа с помощью HTTP 412 или что-то еще нужно использовать (например, другой код ошибки HTTP или исключение веб-приложения)?

4b9b3361

Ответ 1

Если вы посмотрите RFC 2616, вы увидите ряд заголовков запросов, которые можно использовать для применения условий к запросу:

If-Match
If-Modified-Since
If-None-Match
If-Range
If-Unmodified-Since

Эти заголовки содержат "предварительные условия", позволяя клиенту сообщать серверу только о завершении запроса, если выполняются определенные условия. Например, вы используете запрос PUT для обновления состояния ресурса, но вы хотите, чтобы только PUT выполнялось, если ресурс не был изменен кем-то еще с момента вашего последнего GET.

Код состояния ответа 412 (Precondition Failed) обычно используется, когда эти предварительные условия терпят неудачу.

Ваш пример звучит как неверный запрос (т.е. клиент отправил недопустимые данные из-за отсутствующих значений). Код состояния 400 (Bad Request) более подходит здесь IMO.

Ответ 2

412 зарезервирован для случаев, когда запрос является условным, и условие не выполняется.

Для вашего случая использования 422 Unprocessable Entity является хорошим совпадением.

Ответ 3

Лучше всего было бы избежать 412. На практике большинство веб-сервисов, которые я использовал, отправляют 400 code (Bad Request). У многих фреймворков есть встроенная поддержка для 400, и ваши клиенты оценят более распространенный код ошибки. Часто, особенно с интерфейсами REST, возвращается простое "сообщение" или "ошибка" с описанием.