2016-05-20 1 views
2

Очевидно, что некоторые POST-запросы формы должны приводить к ошибке HTTP 4xx (например, неправильный URL-адрес, отсутствие ожидаемого поля, отказ от отправки файла cookie), но существующие вопросы like this, по-видимому, указывают, что все недопустимые формы должны быть рассмотрены ошибки 4xx HTTP. В самом деле?Является ли простая парольная версия действительно ошибкой HTTP?

Ошибочные пароли или случайное исключение обязательных полей чрезвычайно распространены и ожидаемых событий в приложении. Из любой спецификации не ясно, что это должно быть «ошибкой HTTP-клиента» или что POST можно считать только 2xx успешным, если он дает постоянное изменение состояния.

Я полагаю, что моя интуиция заключается в том, что если сервер отправляет клиенту форму, и клиент оперативно отвечает правильно сформированным запросом POST в эту форму со всеми ожидаемыми полями, то нарушение общей бизнес-логики не должно быть Ошибка HTTP.

Ситуация еще менее определена, если форма передается над чем-то вроде JSON-RPC. HTTP - это всего лишь механизм транспорта, и если функция успешно вызвана и ответ возвращается вызывающему, то должна быть ошибка HTTP.

Реже, некоторые формы могут выполнять несколько действий, и одна часть может преуспеть, а другая не удалась.

В идеале IETF очистит это с помощью RFC, возможно, добавит код ошибки HTTP для того, чтобы «операция не была выполнена из-за отказа в аннулировании формы» или расширила определение 422, чтобы охватить это.

+3

Почему вы опубликовали это? Написать блог. – Amit

+0

Вы задаете вопрос или пытаетесь ответить на связанный вопрос? –

+0

Я думаю, что это был особый вопрос, но позвольте мне снова посмотреть. –

ответ

1

Здесь нет правильного или неправильного положения. Я думаю, что HTML-формы в некоторой степени противоречат дизайну HTTP.

Браузер здесь HTTP-клиент. Если он отправляет запрос и получает HTTP-ошибку, он будет эхо-ответа на тело ответа, но мало работает с кодом ответа.

С точки зрения HTTP, возможно, браузер не должен «обновляться» от ошибки. Возможно, он должен был просто сообщить об ошибке пользователю и позволить им изменить форму и повторить попытку.

С точки зрения HTML, самое сложное, что нужно сделать, это вовсе не отправлять сообщение об ошибке, а перенаправлять обратно на URL-адрес формы, как правило, с набором параметров запроса.

В случае JSON-RPC (и многие протоколы, такие как XML-RPC, Soap, но также и более новые, такие как GraphQL), вообще не используют HTTP так, что он хорошо связан с HTTP.

Они не являются приложениями HTTP в этом смысле, они в значительной степени используют HTTP как «туннель». Они используют HTTP в качестве транспорта, но не используют «протокол HTTP» как таковой.

В таких ситуациях я не думаю, что это соответствует ошибкам с ошибками http emit. Ошибки обрабатываются на более высоком уровне, и вы, вероятно, всегда хотите использовать POST и возвращать 200 при передаче информации об ошибках в тело ответа.

Итак, вернемся к вашему вопросу:

  • Да, с точки зрения HTTP недопустимое представление форма должна быть 4xx ошибка. Неверный пароль a 401.
  • Нет, это не самая лучшая вещь в каждом конкретном случае использования, таком как браузеры и протоколы, которые используют HTTP только как транспорт.
  • Но если вы разрабатываете архитектуру на основе REST или хотите использовать HTTP так, как планировалось, то это то, что вы делаете . do.

Должны ли браузеры вести себя по-разному, когда сталкиваются с 422? Может быть. Но «была ошибка», как правило, недостаточно для хорошего UX. Помимо изменения того, как браузеры ведут себя с 422, вам может понадобиться мультимедийный тип с более конкретной информацией о том, как браузер должен связывать проблемы с клиентом.

+0

Действительно полезно, но вы можете отправить его на http://stackoverflow.com/questions/15580969/should-i-use-http-4xx-to-indicate-html-form-errors, так как я думаю, что это будет закрыто , –

+0

Если бы это было полезно для вас, я счастлив. Вверните SO и их драконовскую бюрократию вокруг того, что является подходящим вопросом. – Evert

Смежные вопросы