200 — это хорошо или это плохо? / Хабр
В этой трехминутной статье я хочу затронуть наболевшую тему.
Речь пойдет о статус коде HTTP 200 и ошибках в ответе.
HTTP/1.1 200 OK
{
"error": {
code: 2019,
message: "Validation failed: field 'size' is invalid: the value is not a number"
}
}
Нормально ли возвращать такой код, если возникла ошибка?
Нет? Да? Ну-ка давайте разберемся.
Случай 1. HTTP 200 и batch операция
Допустим отправляется один запрос. Запрос выполняется успешно. Возвращаем код 200. Ответ не содержит информации об ошибке. С этим случаем всё предельно просто и понятно. А что делать если требуется выполнить batch операцию?
Например, мы работаем с сервером изображений. Предоставляемый API позволяет загрузить за один запрос сразу несколько файлов.
Запрос выглядит примерно так:
{
"sources": [
{"image": "http://myserver.
com/image1.jpg"},
{"image": "http://myserver.com/image2.jpg"},
{"video": "http://myserver.com/video.jpg"}
]
}
Предположим, по какой-то причине (например, кончилось место на сервере) видео загрузить не удалось. Что бы вы вернули в таком случае? 2xx или 4xx или 5xx? Сервер, отвечает примерно вот так:
HTTP/1.1 200 OK
{
"results": [
{ "status": "ok", "id": 312 },
{ "status": "ok", "id": 313 },
{ "status": "fail", "error": "NO SPACE" }
]
}
Некоторые сервисы (и вполне известные) действуют также. Отвечают 200. А в ответе возвращают список команд, которые выполнить не получилось.
Случай 2. HTTP 200 и ошибки в ответе
Пришёл запрос. Запрос зафейлился. Например, мы забыли указать какое-то поле. Или дату отправили не в миллисекундах, а как строку. Тут-то точно не надо возвращать 200! Но увы и нет.
Где-то на просторах интернета я встречал проекты на github и bitbucket, которые специально предназначены для таких вот случаев.
В такие моменты твой код становится уродливым. Ты ему говоришь:
— Cлушай, у нас тут есть один внешний API. Он в целом нормальный. Только надо внимательно смотреть что в ответе приходит. Если там ответ содержит поле «error», то значит запрос сломался.
— Но ведь для этого же есть 4xx и 5xx! Да кто вообще так делает?!
— Тише-тише. Не надо так громко. Он может услышать. Пожалуйста, будь добрее к нему. И просто смотри не только на статус код, но и на ответ, пожалуйста.
— Ладно…
HTTP 200 — это просто статус
Ну 200 и 200. Ну не запилили. Или не успели. Или вообще не будут. Ну и что?! Написал json парсер и всё!
Как бы да, но я хочу знать почему. Забыли? Забили? Не успели? Не знали?
Возможно я что-то упускаю. Или не знаю.
Хочу ваше мнение. Срочно. Всем добра и выходных на выходных.
Комитет общественных коммуникаций Ленинградской области
Комитет общественных коммуникаций Ленинградской области
Приёмная
Губернатор Ленинградской области Александр Дрозденко поддержал предложение комитета общественных коммуникаций и поручил выделить здание в правительственном квартале Гатчины под помещения для некоммерческих организаций.
Областные некоммерческие организации подали 168 заявок на первый конкурс на грант губернатора Ленинградской области 2023 года.
Год «Команды знаний» в Ленинградской области стартовал со встречи Александра Дрозденко с победителями федеральных конкурсов среди некоммерческих организаций.

Для представителей НКО прошел семинар, на котором специалисты комитета общественных коммуникаций рассказали о правилах первого конкурсного отбора на грант в 2023 году.
Почти полтонны подарков для добровольцев и мобилизованных собрали на итоговой встрече с губернатором активисты Команды 47.
Все новости
Праздник неравнодушных
2145 некоммерческих организаций действующих в Ленобласти отмечают сегодня Всемирный день НКО.
27 февраля 2023
«Святыми тропами» по Ленобласти
В Волхове презентовали сайт с интерактивной картой паломнических маршрутов для молодежи.26 февраля 2023
Памяти коллеги
17 февраля не стало нашего товарища, коллеги — главного редактора радио «Лодья», руководителя пресс-службы Администрации Лодейнопольского района Елены Ивановны Васильевой.
18 февраля 2023
Возможности для молодежи в НКО
Перспективы участия молодежи в работе социально ориентированных НКО представил комитет общественных коммуникаций на карьерном форуме «Путь к успеху» в Гатчине.
17 февраля 2023
Гранты губернатора: заявки поданы, эксперты утверждены
Первое в 2023 году заседание экспертного совета конкурса на гранты губернатора Ленинградской области утвердило кандидатуры 33 специалистов, которые оценят заявки, поданные социально ориентированными организациями на конкурс губернаторских грантов по 11 социально значимым направлениям.
16 февраля 2023
Новые социальные проекты вышли на грант губернатора 2023 года
Завершен этап технической проверки заявок, претендующих на грант губернатора Ленинградской области в 2023 году.
14 февраля 2023
Фактический адрес
Санкт-Петербург, Суворовский пр., д. 67
Электронная почта
Телефон приемной
+7 (812) 539-41-89
кодов состояния ответа HTTP — HTTP
Коды состояния ответа HTTP указывают, был ли успешно выполнен конкретный HTTP-запрос. Ответы сгруппированы в пять классов:
- Информационные ответы (
100–199) - Успешные ответы (
200–299) - Сообщения перенаправления (
300–399) - Ответы об ошибках клиента (
400–499) Ответы об ошибках сервера (500—599)
Перечисленные ниже коды состояния определены в RFC 9110.
Примечание: Если вы получили ответ, которого нет в этом списке, это нестандартный ответ, возможно, настроенный для программного обеспечения сервера.
-
100 Продолжить Этот промежуточный ответ указывает, что клиент должен продолжить запрос или проигнорировать ответ, если запрос уже завершен.
-
101 Протоколы переключения Этот код отправляется в ответ на заголовок запроса
Upgradeот клиента и указывает протокол, на который переключается сервер.-
102 Обработка(WebDAV) Этот код указывает, что сервер получил и обрабатывает запрос, но ответа пока нет.
-
103 Ранние подсказкиЭкспериментальный Этот код состояния в первую очередь предназначен для использования с заголовком
Link, позволяя пользовательскому агенту начать предварительную загрузку ресурсов, пока сервер готовит ответ.
-
200 ОК Запрос выполнен успешно.
Значение результата «успех» зависит от метода HTTP:-
GET: Ресурс был получен и передан в теле сообщения. -
HEAD: заголовки представления включаются в ответ без какого-либо тела сообщения. -
PUTилиPOST: Ресурс, описывающий результат действия, передается в теле сообщения. -
TRACE: тело сообщения содержит сообщение запроса, полученное сервером.
-
-
201 Создан Запрос выполнен успешно, в результате был создан новый ресурс. Обычно это ответ, отправленный после
запросов POSTили несколькозапросов PUT.-
202 Принято Запрос получен, но еще не исполнен. Это ни к чему не обязывает, поскольку в HTTP нет способа отправить асинхронный ответ позже, указывающий результат запроса. Он предназначен для случаев, когда другой процесс или сервер обрабатывает запрос, или для пакетной обработки.

-
203 Неавторитетная информация Этот код ответа означает, что возвращенные метаданные не совсем совпадают с теми, что доступны на исходном сервере, а получены из локальной или сторонней копии. В основном это используется для зеркал или резервных копий другого ресурса. За исключением этого конкретного случая, ответ
200 OKпредпочтительнее, чем этот статус.-
204 Нет содержимого Для этого запроса нет контента для отправки, но заголовки могут быть полезны. Пользовательский агент может обновить свои кэшированные заголовки для этого ресурса новыми.
-
205 Сброс содержимого Указывает пользовательскому агенту сбросить документ, отправивший этот запрос.
-
206 Частичное содержимое Этот код ответа используется, когда от клиента отправляется заголовок
Rangeдля запроса только части ресурса.
-
207 Мультистатус(WebDAV) Передает информацию о нескольких ресурсах для ситуаций, когда могут быть уместны несколько кодов состояния.
-
208 Уже сообщалось(WebDAV) Используется внутри элемента ответа
, чтобы избежать повторного перечисления внутренних членов нескольких привязок к одной и той же коллекции.-
226 IM Используется(Дельта-кодирование HTTP) Сервер выполнил запрос
GETдля ресурса, и ответ является представлением результата одной или нескольких манипуляций с экземпляром, примененных к текущему экземпляру.
-
300 Множественный выбор Запрос имеет более одного возможного ответа. Пользовательский агент или пользователь должны выбрать один из них. (Не существует стандартизированного способа выбора одного из ответов, но рекомендуются HTML-ссылки на возможные варианты, чтобы пользователь мог выбрать.
)-
301 Перемещено навсегда URL запрошенного ресурса был изменен навсегда. Новый URL-адрес дается в ответе.
-
302 Найдено Этот код ответа означает, что URI запрошенного ресурса был временно изменен . Дальнейшие изменения в URI могут быть внесены в будущем. Следовательно, этот же URI должен использоваться клиентом в будущих запросах.
-
303 См. Другое Сервер отправил этот ответ, чтобы указать клиенту получить запрошенный ресурс по другому URI с помощью запроса GET.
-
304 Без изменений Это используется для целей кэширования. Он сообщает клиенту, что ответ не был изменен, поэтому клиент может продолжать использовать ту же кэшированную версию ответа.
-
305 Использовать прокси-серверNot for use in new websites.»> Устаревший Определено в предыдущей версии спецификации HTTP, чтобы указать, что запрошенный ответ должен быть доступен через прокси. Он устарел из-за проблем безопасности, связанных с внутренней конфигурацией прокси-сервера.
-
306 не используется Этот код ответа больше не используется; он просто зарезервирован. Он использовался в предыдущей версии спецификации HTTP/1.1.
-
307 Временное перенаправление Сервер отправляет этот ответ, чтобы указать клиенту получить запрошенный ресурс по другому URI тем же методом, который использовался в предыдущем запросе. Имеет ту же семантику, что и
302 Found 9.0007 Код ответа HTTP, за исключением того, что пользовательский агент не должен изменять используемый метод HTTP: если в первом запросе использовалсяPOST, во втором запросе должен использоватьсяPOST.
-
308 Постоянное перенаправление Это означает, что ресурс теперь постоянно находится в другом URI, указанном в заголовке HTTP-ответа
Location:. Это имеет ту же семантику, что и301 Moved PermanentlyКод ответа HTTP, за исключением того, что агент пользователя не должен изменять используемый метод HTTP: если в первом запросе использовалсяPOST, во втором запросе должен использоватьсяPOST.
-
400 Неверный запрос Сервер не может или не будет обрабатывать запрос из-за чего-то, что воспринимается как ошибка клиента (например, искаженный синтаксис запроса, неверный кадр сообщения запроса или ложная маршрутизация запроса).
-
401 Неавторизованный Хотя стандарт HTTP определяет «неавторизованный», семантически этот ответ означает «не прошедший проверку подлинности».
То есть клиент должен аутентифицировать себя, чтобы получить запрошенный ответ.-
402 Требуется оплатаЭкспериментальный Этот код ответа зарезервирован для использования в будущем. Первоначальной целью создания этого кода было использование его для цифровых платежных систем, однако этот код состояния используется очень редко, и не существует стандартного соглашения.
-
403 Запрещено у клиента нет прав доступа к контенту; то есть он неавторизован, поэтому сервер отказывается предоставить запрошенный ресурс. В отличие от
401 Unauthorized, личность клиента известна серверу.-
404 Не найдено Сервер не может найти запрошенный ресурс. В браузере это означает, что URL-адрес не распознается.
В API это также может означать, что конечная точка действительна, но самого ресурса не существует.
Серверы также могут отправлять этот ответ вместо 403 Запрещенодля сокрытия существования ресурса от неавторизованного клиента. Этот код ответа, вероятно, наиболее известен из-за его частого появления в Интернете.-
405 Метод не разрешен Метод запроса известен серверу, но не поддерживается целевым ресурсом. Например, API может не разрешить вызов
DELETEдля удаления ресурса.-
406 Неприемлемо Этот ответ отправляется, когда веб-сервер после выполнения управляемого сервером согласования контента не находит контента, соответствующего критериям, заданным агентом пользователя.
-
407 Требуется аутентификация прокси-сервера Это похоже на
401 Неавторизованный, но для аутентификации требуется прокси-сервер.
-
408 Время ожидания запроса Этот ответ отправляется некоторыми серверами при бездействующем соединении, даже без какого-либо предварительного запроса со стороны клиента. Это означает, что сервер хотел бы отключить это неиспользуемое соединение. Этот ответ используется гораздо чаще, поскольку некоторые браузеры, такие как Chrome, Firefox 27+ или IE9, используют механизмы предварительного соединения HTTP для ускорения работы в Интернете. Также обратите внимание, что некоторые серверы просто отключают соединение, не отправляя это сообщение.
-
409 Конфликт Этот ответ отправляется, когда запрос конфликтует с текущим состоянием сервера.
-
410 Исчез Этот ответ отправляется, когда запрошенный контент был безвозвратно удален с сервера без адреса пересылки. Ожидается, что клиенты удалят свои кеши и ссылки на ресурс.
Спецификация HTTP предполагает, что этот код состояния будет использоваться для «ограниченных по времени рекламных услуг».
API не должны чувствовать себя обязанными указывать ресурсы, которые были удалены, с этим кодом состояния.-
411 Требуемая длина Сервер отклонил запрос, поскольку поле заголовка
Content-Lengthне определено, а сервер требует его.-
412 Предварительное условие не выполнено Клиент указал в своих заголовках предварительные условия, которым сервер не соответствует.
-
413 Слишком большая полезная нагрузка Объект запроса превышает ограничения, установленные сервером. Сервер может закрыть соединение или вернуть 9Поле заголовка 0006 Retry-After .
-
414 URI слишком длинный URI, запрошенный клиентом, длиннее, чем сервер готов интерпретировать.

-
415 Неподдерживаемый тип носителя Медиаформат запрошенных данных не поддерживается сервером, поэтому сервер отклоняет запрос.
-
416 Неудовлетворительный диапазон Диапазон, указанный полем заголовка
Rangeв запросе, не может быть выполнен. Возможно, диапазон выходит за пределы размера данных целевого URI.-
417 Ожидание не выполнено Этот код ответа означает, что ожидание, указанное в поле заголовка запроса
Expect, не может быть выполнено сервером.-
418 Я чайник Сервер отказывается заваривать кофе в чайнике.
-
421 Неверно направленный запрос Запрос был направлен на сервер, который не может дать ответ. Это может быть отправлено сервером, который не настроен для создания ответов для комбинации схемы и полномочий, включенных в URI запроса.

-
422 Необрабатываемый контент(WebDAV) Запрос был сформирован правильно, но его невозможно выполнить из-за семантических ошибок.
-
423 Заблокировано(WebDAV) Ресурс, к которому осуществляется доступ, заблокирован.
-
424 Ошибка зависимости(WebDAV) Запрос не выполнен из-за сбоя предыдущего запроса.
-
425 Слишком раноЭкспериментальный Указывает, что сервер не хочет рисковать обработкой запроса, который может быть воспроизведен повторно.
-
426 Требуется обновление Сервер отказывается выполнять запрос с использованием текущего протокола, но может сделать это после того, как клиент перейдет на другой протокол. Сервер отправляет заголовок
Upgradeв ответе 426, чтобы указать требуемый(е) протокол(ы).
-
428 Требуется предварительное условие Исходный сервер требует, чтобы запрос был условным. Этот ответ предназначен для предотвращения проблемы «потеря обновления», когда клиент
GETs состояние ресурса, изменяет его иPUTs отправляет его обратно на сервер, когда тем временем третья сторона изменила состояние на сервере, что привело к конфликту.-
429 Слишком много запросов Пользователь отправил слишком много запросов за заданный промежуток времени («ограничение скорости»).
Сервер не хочет обрабатывать запрос, потому что его поля заголовка слишком велики. Запрос может быть отправлен повторно после уменьшения размера полей заголовка запроса.
-
451 Недоступно по юридическим причинам Пользовательский агент запросил ресурс, который не может быть предоставлен на законных основаниях, например, веб-страницу, подвергнутую государственной цензуре.

-
500 Внутренняя ошибка сервера Сервер столкнулся с ситуацией, с которой он не может справиться.
-
501 Не реализовано Метод запроса не поддерживается сервером и не может быть обработан. Единственными методами, которые должны поддерживать серверы (и, следовательно, которые не должны возвращать этот код), являются
ПОЛУЧИТЬиГОЛОВУ.-
502 Плохой шлюз Этот ответ об ошибке означает, что сервер, работающий в качестве шлюза для получения ответа, необходимого для обработки запроса, получил недопустимый ответ.
-
503 Служба недоступна Сервер не готов обработать запрос. Распространенными причинами являются сервер, который отключен для обслуживания или перегружен. Обратите внимание, что вместе с этим ответом должна быть отправлена удобная страница с объяснением проблемы.
Этот ответ следует использовать для временных условий и Retry-AfterHTTP-заголовок должен, по возможности, содержать предполагаемое время до восстановления службы. Веб-мастер также должен позаботиться о заголовках, связанных с кэшированием, которые отправляются вместе с этим ответом, поскольку эти временные ответы обычно не следует кэшировать.-
504 Время ожидания шлюза Этот ответ об ошибке выдается, когда сервер действует как шлюз и не может вовремя получить ответ.
-
505 Версия HTTP не поддерживается Версия HTTP, используемая в запросе, не поддерживается сервером.
-
506 Вариант также согласовывается На сервере произошла внутренняя ошибка конфигурации: выбранный вариантный ресурс сам настроен на участие в прозрачном согласовании содержимого и, следовательно, не является надлежащей конечной точкой в процессе согласования.

-
507 Недостаточно памяти(WebDAV) Метод не может быть выполнен для ресурса, так как сервер не может сохранить представление, необходимое для успешного выполнения запроса.
-
508 Обнаружена петля(WebDAV) Сервер обнаружил бесконечный цикл при обработке запроса.
-
510 Не расширен Для выполнения сервером требуются дополнительные расширения запроса.
-
511 Требуется сетевая аутентификация Указывает, что клиент должен пройти аутентификацию, чтобы получить доступ к сети.
Таблицы BCD загружаются только в браузере
с включенным JavaScript. Включите JavaScript для просмотра данных.- Список кодов состояния HTTP в Википедии
- Официальный реестр IANA кодов состояния HTTP
Обнаружили проблему с содержанием этой страницы?
- Отредактируйте страницу на GitHub.

- Сообщить о проблеме с содержимым.
- Посмотреть исходный код на GitHub.
Хотите принять участие?
Узнайте, как внести свой вклад.
Последний раз эта страница была изменена участниками MDN.
Что такое ответ 200 «ОК»?
Код состояния 200: Ответ «ОК»
Код состояния HTTP 200: Ответ «ОК»
Код состояния HTTP 200 означает успех. Клиент запросил документы с сервера. Сервер ответил клиенту и предоставил клиенту документы. Все хорошо.
Вы редко будете «видеть» этот ответ в дикой природе, используя браузер как обычный пользователь.
Обычно вы видите этот ответ только тогда, когда используете инструмент цифрового маркетинга, который специально показывает вам код состояния.
В общем, вы хотите увидеть 200 запросов. Они хороши!
Протокол HTTP
Давайте поговорим о том, как работает протокол HTTP.
Интернет состоит из двух основных элементов: клиентов и серверов .
Каждый раз, когда вы щелкаете в своем браузере, вы получаете доступ к Интернету через веб-клиент . Это может быть Chrome, Firefox, Safari или Internet Explorer.
При посещении веб-сайта вы отправляете запрос на веб-сервер .
Facebook.com, ClickMinded.com, MarthaStewart.com/1525880/marthas-chocolate-chip-cookies — все эти сайты имеют собственный домашний адрес. Это называется IP-адрес .
Ваш домашний адрес может быть 123 Main Street, New York, NY 10001 , а адрес Facebook — 66.220.144.0 .
Всякий раз, когда вы посещаете страницу в Интернете, вы запрашиваете целую кучу документов с сервера этого веб-сайта. Это могут быть документы HTML, CSS, изображения, PDF — что бы это ни было, основные отношения остаются прежними: вы (клиент) делаете запрос, а веб-сайт (сервер) отвечает на этот запрос.
Язык , который вы используете для выполнения этих запросов, называется Протокол HTTP . Эти протоколы на самом деле просто стандарты, с которыми согласились все в сети. Точно так же, как английский, испанский и китайский языки имеют понятный протокол, HTTP — это просто набор стандартов и понятный протокол.
Существует множество различных веб-протоколов, и вы, возможно, знакомы с некоторыми из них:
- DNS — Система доменных имен
- FTP — Протокол передачи файлов
- http — Протокол передачи гипертекста
- IRC — Протокол чата интернет -реле
- SMTP — Простой протокол переноса почты
- SSLTSTP Secure Sockets LOALE
- 1xx block: informational requests
- 2xx block: successful requests
- 3xx block: redirects
- 4xx block: client errors
- 5xx block: server errors
- 100 — Продолжить
- 101 — Протокол переключения
- 103 — Контрольные точки
- 200 — OK (вы увидите этот самый больше всего)
- 201 — создано
- 202 — принятый
- 205 — Содержание сброса
- 206 — Частичное содержание
- 301 – Переехал навсегда
- 302 – Найдено
- 304 — Не изменено
- 305 — Использовать прокси-сервер
- 307 — Временное перенаправление
- 400 – Неверный запрос
- 401 – Несанкционированный
- 403 – Запрещенный
- 404 – Не найдено
- 408 – Время ожидания запроса
- 410 – Исчезло0010
- 429 — слишком много запросов
- 500 — Внутренняя ошибка сервера
- 502 — Неисправный шлюз
- 503 — Служба недоступна
- 504 — Тайм-аут шлюза
- Полное руководство по кодам состояний
- Код состояния 200, Код состояния 301, Код состояния 302, Код состояния 304
- Код состояния 401, Код состояния 403, Код состояния 404, Код состояния 410
- Код состояния 429, Код состояния 500, код состояния 503, код состояния 504
HTP SCOLTPENTTPER 9099
HTP SCEPTTS WESTTP SECOL SOCKTE протокол HTTP, давайте поговорим о кодах состояния HTTP.
Коды состояния сообщают нам, был ли HTTP-запрос успешным, неудачным или чем-то средним. Давайте посмотрим на пять основных кодов состояния:
Some status коды более распространены, чем другие. Например, когда вы занимаетесь цифровым маркетингом, вы часто сталкиваетесь с кодом состояния 200, кодом состояния 301 и кодом состояния 404, но вы можете никогда не увидеть код состояния 206 или 307.
Давайте кратко рассмотрим каждый блок кода состояния и его значение.
1xx Коды состояния
Это информационные запросы . Сервер еще не полностью выполнил запрос и все еще обрабатывает информацию. Вы не будете часто видеть эти коды.
К ним относятся:
2xx Коды состояния
Это успешных запросов , значит все в порядке. Они включают в себя:
3xx Codes
перенаправляет . Они отображаются, когда вы запрашиваете адрес, но вас отправляют куда-то еще. Они могут быть хорошими или плохими. К ним относятся:
4xx Коды состояния
Это ошибок клиента . Это означает, что что-то пошло не так с запросом (клиент/пользователь), а не с ответом (веб-сайт/сервер).
К ним относятся:
5xx коды состояния
Это ошибки сервера . Это означает, что что-то пошло не так с ответом (веб-сайт/сервер), а не с запросом (клиент/пользователь). К ним относятся:
В заключение
Хотите узнать больше о конкретном коде? У нас есть серия кратких руководств по каждому ответу HTTP, чтобы вы могли оптимизировать свою стратегию цифрового маркетинга. Возьмите их здесь:
10-кратный рост вашего трафика от Google.

К ним относятся:
К ним относятся:
com/image1.jpg"},
{"image": "http://myserver.com/image2.jpg"},
{"video": "http://myserver.com/video.jpg"}
]
}

Значение результата «успех» зависит от метода HTTP:

)
То есть клиент должен аутентифицировать себя, чтобы получить запрошенный ответ.
В API это также может означать, что конечная точка действительна, но самого ресурса не существует.
Серверы также могут отправлять этот ответ вместо 
Спецификация HTTP предполагает, что этот код состояния будет использоваться для «ограниченных по времени рекламных услуг».
API не должны чувствовать себя обязанными указывать ресурсы, которые были удалены, с этим кодом состояния.


.jpg)
Этот ответ следует использовать для временных условий и 

Коды состояния сообщают нам, был ли HTTP-запрос успешным, неудачным или чем-то средним.