Каков наиболее подходящий код статуса HTTP для возврата, если отсутствует требуемый заголовок?

21

Я прочитал Какой код ответа HTTP-статуса я должен использовать, если в запросе отсутствует требуемый параметр? , но он специально не задавал вопрос о заголовках и, похоже, не было консенсуса.

Контекст этого вопроса предполагает успешную аутентификацию. В настоящее время я предпочитаю либо 400 (хотя это не так, потому что это не совсем случай "неправильного синтаксиса") или 403. Учитывая описание 403:

  

Сервер понял запрос, но отказывается его выполнять.   Авторизация не поможет, и запрос НЕ ДОЛЖЕН повториться. <Сильный> Если   метод запроса не был HEAD, и сервер хочет обнародовать   почему запрос не был выполнен, СЛЕДУЕТ описать причину   для отказа в сущности.

Это имеет для меня наибольшее значение.

Может кто-нибудь, пожалуйста, просветит меня? Спасибо.

    
задан David Peden 14.05.2012 в 04:26
источник

1 ответ

32

400 Bad Request

Это ошибка пользователя в запросе. В отличие от 403, клиенту следует разрешить повторить свой запрос, но только после модификации:

  

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

Изменить

Как отмечает Марк Рид в комментариях, 403 говорит: «Нет ничего плохого в том, что вы мне прислали. У вас есть правильная авторизация, и синтаксис действителен. Я просто не хочу делать то, что вы просите».

Часть, выделенная жирным шрифтом, просто говорит: если сервер так выбирает, он может точно сказать клиенту, почему он не хочет выполнять запрос.

    
ответ дан Tim Pote 14.05.2012 в 04:31
  • Определенно 400. Если что-то не так с запросом, который не зависит от состояния сервера, то это 400. Если на серверной стороне не так, то на стороне сервера («Это очень сложный запрос, насколько вам известно, но я не в настроении »), тогда вы используете 403. –  Mark Reed 14.05.2012 в 04:39
  • Спасибо за отзыв, ребята. –  David Peden 14.05.2012 в 18:36
  • Как насчет 412 (предварительное условие не выполнено)? –  Adam Dyga 12.05.2014 в 09:37
  • AFAIK HTTP 412 Precondition Failed зарезервирован для использования с If-Match и If-Unmodified-Только с заголовками. –  botchniaque 18.11.2015 в 16:08