Дополнительно
Значение кода ошибки HTTP 400 BAD request?
У меня есть JSON-запрос, который я отправляю в HTTP URL.
Должен ли он рассматриваться как 400
, где поле requestedResource
существует, но "Roman"
является недопустимым значением для этого поля?
[{requestedResource:"Roman"}]
Должно ли это рассматриваться как 400
, где поле "blah"
вообще не существует?
[{blah:"Roman"}]
332
8
Ответ 400 означает, что запрос был неправильно сформирован. Другими словами, поток данных, отправленный клиентом на сервер, не соответствовал правилам.
В случае REST API с полезной нагрузкой JSON, 400-е обычно, и я бы сказал, правильно, используются для указания того, что JSON является недействительным в некотором роде в соответствии со спецификацией API для сервиса.
По этой логике, оба сценария, которые вы предоставили, должны быть 400's.
Представьте, что это XML, а не JSON. В обоих случаях XML никогда не пройдет проверку схемы - либо из-за неопределенного элемента, либо из-за неправильного значения элемента. Это был бы плохой запрос. То же самое и здесь.
От w3.org
Выбор кода ответа HTTP является довольно простой задачей и может быть описан простыми правилами. Единственная сложная часть, о которой часто забывают, это параграф 6.5 из RFC 7231:
Правила следующие:
Так что в вашем случае я бы вернул ошибку 400 и что-то вроде этого, если "Roman" получен из пользовательского ввода и клиент должен иметь специфическую реакцию:
или более общую ошибку, если такая ситуация является плохой логической ошибкой клиента и не ожидается, если только разработчик не сделал что-то не так:
Ни в одном случае не является "и синтаксических ошибок и". Это'ы семантику, что не правы. Отсюда, ИМХО 400 неуместно. Вместо этого, было бы целесообразно вернуть 200 вместе с какой-то ошибкой объект, такой как
{ "по ошибке": { "Мои сообщения и": "по неизвестным запросу сайта и" } }
или любой другой.Рассмотрим путь обработки клиента(ов). Ошибка в синтаксисе (например, недопустимый формат JSON) - это ошибка в логике программы, другими словами баг какой-то, и должны быть обработаны соответствующим образом, в некотором смысле похож на 403, скажем; другими словами, что-то плохое случилось.
Ошибка в значении параметра, с другой стороны, ошибка семантики, возможно, из-за сказать, плохо проверенные действия пользователя. Это не ошибка http (хотя я предполагаю, что это может быть 422). Путь обработки будет отличаться.
Например, в jQuery, я бы предпочел не иметь, чтобы написать один обработчик ошибок, который касается как вещей, как 500 и некоторые приложения-специфические семантические ошибки. Другие рамки, угли для, а также лечить как ошибки HTTP 400-е и 500-е тож как большой жирный сбои, требующие программисту обнаружить, что's идя на И ветке в зависимости от того,'ы и "Реал" по ошибке или нет.
Используя
400
коды состояния для любых других целей, нежели указывая, что запрос уродлива-просто неправильно.Если запрос полезной нагрузки содержит байт-последовательность, которая не может быть переведен как
приложение/JSON
(если сервер ожидает, что dataformat), соответствующий код состояния415
:Если запрос полезной нагрузки является синтаксически правильные, но семантически неправильные, нестандартные
422
ответ код может быть использован, или стандартный403
код состояния:Думаю, об ожиданиях.
В качестве клиентского приложения, вы планируете знать, если что-то пойдет не так на стороне сервера. Если сервер должен выдать сообщение об ошибке, когда
мля
отсутствует илиrequestedResource
неправильное значение, чем ошибка 400 будут уместны.Сначала проверьте URL-адрес, это может быть неправильным, если она правильная, то проверьте текст запроса, который вы отправляете, возможной причиной является запрос, который вы отправляете отсутствует правильный синтаксис.
Разработка , проверка на специальные символы в строке запроса. Если это (специальный символ) используется это является причиной этой ошибки.
попробуйте скопировать запрос и проанализировать все данные теги.
В качестве дополнительного, для тех, кто может отвечать тот же вопрос, как у меня, я'м через
$.Аякс для отправки данных формы на сервер и я также получил
400` ошибка в первую очередь.Предположим, у меня есть JavaScript-переменной,
Не использовать переменную
виде FormData
непосредственно в качестве значения ключа "данные", как показано ниже:Вместо этого, использовать JSON.преобразовать в строки для инкапсуляции
виде FormData
, как показано ниже:В любом случае, как уже показано, эта ошибка происходит потому, что сервер не может распознать запрос причиной синтаксических ошибок, я'м просто воспитание на практике. Надеюсь, что это будет полезно для кого-то.