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

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

У меня есть несколько страниц, предназначенных для вызова с помощью AJAX - я возвращаю их ненормальный код состояния, если они не могут быть отображены, и мой javascript отобразит соответствующее окно ошибки.

Например, если пользователь не прошел аутентификацию или их сеанс не был завершен, и они пытаются вызвать одну из AJAX-страниц, он вернет 401 Unathorized.

У меня также есть некоторый возврат 500 Internal Server Error, если что-то действительно странное происходит на стороне сервера.

Какой код состояния следует вернуть, если одна из этих страниц была вызвана без обязательных параметров? (и поэтому не может возвращать какой-либо контент).

Я просмотрел статью статьи в википедии о кодах состояния HTTP, но ближайший к коду, который я искал, был следующим:

422 Непроцессная организация
Запрос был хорошо сформирован, но из-за семантических ошибок его не удалось выполнить.

Изменить: приведенный выше код является специфичным для WebDAV и поэтому вряд ли будет уместным в этом случае

Может ли кто-нибудь подумать о соответствующем коде для возврата?

4b9b3361

Ответ 1

Какой код состояния следует вернуть, если одна из этих страниц была вызвана без обязательных параметров? (и поэтому не может возвращать какой-либо контент).

Вы можете выбрать 404 Not Found:

Сервер не нашел ничего, что соответствовало бы Request-URI [если ваши требуемые параметры являются частью URI, т.е. $_GET]. Не указывается, является ли это условие временным или постоянным. Код состояния 410 (Gone) ДОЛЖЕН использоваться, если сервер через какой-то механизм, который может быть внутренне конфигурирован, знает, что старый ресурс постоянно недоступен и не имеет адреса пересылки. Этот код состояния обычно используется, когда сервер не хочет точно определить, почему запрос был отклонен, или когда другой ответ не применим.

(выделите меня)

404 Not Found - это подмножество 400 Bad Request, которое можно было бы также принять, потому что оно очень ясно о том, что это такое:

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

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

11.2. 422 Непроцессная организация

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

Объект запроса IIRC является органом запроса. Поэтому, если вы работаете с органами запроса, это может быть уместно, как писал Джулиан.


Вы прокомментировали:

IMHO, текст для 400 говорит о некорректном синтаксисе. Я бы предположил, что синтаксис здесь относится к синтаксису строки HTTP, которую клиент отправляет на сервер.

Это может быть, но это может быть что-то синтаксически выраженное, весь запрос, только некоторые заголовки запросов или конкретный заголовок запроса, URI запроса и т.д. 400. Не конкретно о "синтаксисе строки HTTP", он общий ответ на ошибку клиента:

Класс кода класса 4xx предназначен для случаев, когда клиент, похоже, ошибся. За исключением случаев ответа на запрос HEAD, сервер ДОЛЖЕН включать объект, содержащий объяснение ситуации ошибки, и является ли это временным или постоянным условием. Эти коды состояния применимы к любому методу запроса. Пользовательские агенты ДОЛЖНЫ отображать любой объект, включенный в список.

Важная роль здесь заключается в том, что вы должны сообщить клиенту, что пошло не так. Код состояния просто говорит, что что-то пошло не так (в классе 4xx), но HTTP не был специально разработан для того, чтобы исключить отсутствующий параметр детали запроса и информации как условие ошибки. По сути, URI знает только, что есть часть запроса-информации, а не то, что она означает.

Если вы считаете, что 400 слишком широк, я предлагаю вам выбрать 404, если проблема связана с URI, например. $_GET.

Ответ 2

Я не знаю о намерениях авторов RFC, но код состояния, который я видел в дикой природе для этого случая, 400 Bad Request.

Ответ 3

422 - это обычный код состояния HTTP; и он используется вне WebDAV. Вопреки тому, что говорят другие, нет проблем с этим; HTTP имеет реестр кода состояния по какой-либо причине.

См. http://www.iana.org/assignments/http-status-codes

Ответ 4

Описание как указано в 400

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

(Акцент мой)

Это говорит о некорректном синтаксисе, который не тот случай, когда браузер отправляет запрос на сервер. Его просто случай с отсутствующими параметрами (пока нет искаженного синтаксиса).

Я бы посоветовал придерживаться 404:)

(Эксперты исправляют меня, если я где-то не прав:))

Ответ 5

Прочтите это внимательно:

https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

422 - вещь, специфичная для WebDAV, и я не видел, чтобы она использовалась для чего-то еще.

400, хотя и не предназначен для этой конкретной цели, кажется, является общим выбором.

404 также является жизнеспособным выбором, если ваш API RESTful или аналогичный (используя часть пути URI для указания параметров поиска)