В современном цифровом мире, где веб-разработка и интернет-технологии играют важную роль, понимание и использование HTTP-кодов (статусов сервера) приобретает все большее значение. Эти коды позволяют клиентам и серверам взаимодействовать друг с другом, обеспечивая эффективную коммуникацию и правильное функционирование веб-приложений. В этой статье мы рассмотрим, что такое HTTP-коды, как они работают и какие значения они могут принимать.
Что такое HTTP-код?
HTTP (HyperText Transfer Protocol) - это протокол, который определяет стандарты для передачи данных в сети. Один из аспектов протокола - это HTTP-коды (или HTTP-статусы), которые представляют собой набор чисел, обозначающих состояние сервера и взаимодействие с клиентом. Каждый HTTP-код имеет свое значение и функцию, которая позволяет клиентам и серверам правильно интерпретировать сообщения и управлять потоками данных.
Код состояния
Код состояния (статус) — числовое значение, возвращаемое сервером при выполнении запроса клиента. Коды состояния стандартизированы и описаны в RFC 2616. Они разделены на несколько классов, в зависимости от того, как они влияют на успешное завершение запроса клиентом.
1 класс — информация о запрашиваемом ресурсе.
2 класс — ошибка сервера.
3 класс — ошибка клиента.
4 класс — неклассифицированные ошибки.
5 класс — временные ошибки на сервере.
В некоторых случаях код состояния может возвращать дополнительную информацию о состоянии запроса. В этом случае код состояния будет содержать двоеточие, а за ним следует строка, описывающая дополнительную информацию.
Например, код состояния 301 («Moved Permanently») означает, что ресурс был перемещен в другое место. Дополнительная информация в этом случае — «moved permanently».
Коды состояния могут быть как положительными, так и отрицательными. Положительный код означает, что запрос был выполнен успешно, отрицательный — произошла ошибка.
Значения HTTP-кодов
Существует множество HTTP-кодов, каждый из которых имеет свое уникальное значение и функцию.
Информационные (1xx: Informational)
100 Continue | Сервер "удовлетворён" начальными сведениями о запросе, клиент может продолжать пересылать заголовки |
101 Switching Protocols | Сервер выполняет требование клиента и переключает протоколы в соответствии с указанием, данным в поле заголовка Upgrade |
102 Processing | Запрос принят, но на его обработку понадобится длительное время. Используется сервером, чтобы клиент не разорвал соединение из-за превышения времени ожидания. |
103 Early Hints | используется для раннего возврата части заголовков, когда заголовки полного ответа не могут быть быстро сформированы |
Успех (2xx: Success)
200 OK | Успешный запрос |
201 Created | В результате успешного выполнения запроса был создан новый ресурс. |
202 Accepted | Запрос был принят на обработку, но она не завершена. |
203 Non-Authoritative Information | Аналогично ответу 200, но в этом случае передаваемая информация была взята не из первичного источника (резервной копии, другого сервера и т. д.) и поэтому может быть неактуальной |
204 No Content | Сервер успешно обработал запрос, но в ответе были переданы только заголовки без тела сообщения |
205 Reset Content | Сервер обязывает клиента сбросить введённые пользователем данные |
206 Partial Content | Сервер удачно выполнил частичный GET-запрос, возвратив только часть сообщения |
207 Multi-Status | Сервер передаёт результаты выполнения сразу нескольких независимых операций |
208 Already Reported | Члены привязки DAV уже были перечислены в предыдущей части (multistatus) ответа и не включаются снова |
226 IM Used | Заголовок A-IM от клиента был успешно принят и сервер возвращает содержимое с учётом указанных параметров |
Перенаправление (3xx: Redirection)
300 Multiple Choices | По указанному URI существует несколько вариантов предоставления ресурса по типу MIME, по языку или по другим характеристикам |
301 Moved Permanentl | Запрошенный документ был окончательно перенесен на новый URI, указанный в поле Location заголовка |
302 Found | Запрошенный документ временно доступен по другому URI, указанному в заголовке в поле Location |
302 Moved Temporarily | Запрошенный документ временно доступен по другому URI, указанному в заголовке в поле Location |
303 See Other | Документ по запрошенному URI нужно запросить по адресу в поле Location заголовка с использованием метода GET несмотря даже на то, что первый запрашивался иным методом |
304 Not Modified | Сервер возвращает код, если клиент запросил документ методом GET, использовал заголовок If-Modified-Since или If-None-Match и документ не изменился с указанного момента |
305 Use Proxy | Запрос к запрашиваемому ресурсу должен осуществляться через прокси-сервер, URI которого указан в поле Location заголовка. |
306 (зарезервировано) | Использовавшийся в ранних версиях спецификации код ответа, в настоящий момент зарезервирован |
307 Temporary Redirect | Запрашиваемый ресурс на короткое время доступен по другому URI, указанный в поле Location заголовка |
308 Permanent Redirect | Запрашиваемый ресурс был окончательно перенесен на новый URI, указанный в поле Location заголовка |
Ошибки клиента (4xx: Client Error)
400 Bad Request | Сервер обнаружил в запросе клиента синтаксическую ошибку |
401 Unauthorized | Для доступа к запрашиваемому ресурсу требуется аутентификация |
402 Payment Required | Не используется |
403 Forbidden | Сервер понял запрос, но он отказывается его выполнять из-за ограничений в доступе для клиента к указанному ресурсу |
404 Not Found | Сервер понял запрос, но не нашёл соответствующего ресурса по указанному URL. |
405 Method Not Allowed | Указанный клиентом метод нельзя применить к текущему ресурсу |
406 Not Acceptable | Запрошенный URI не может удовлетворить переданным в заголовке характеристикам |
407 Proxy Authentication Required | Ответ аналогичен коду 401 за исключением того, что аутентификация производится для прокси-сервера |
408 Request Timeout | Время ожидания сервером передачи от клиента истекло |
409 Conflict | Запрос не может быть выполнен из-за конфликтного обращения к ресурсу |
410 Gone | Ресурс раньше был по указанному URL, но был удалён и теперь недоступен |
411 Length Required | Для указанного ресурса клиент должен указать Content-Length в заголовке запроса |
412 Precondition Failed | Возвращается, если ни одно из условных полей заголовка (If-Match и др.) запроса не было выполнено |
413 Payload Too Large | Возвращается в случае, если сервер отказывается обработать запрос по причине слишком большого размера тела запроса |
414 URI Too Long | Сервер не может обработать запрос из-за слишком длинного указанного URI |
415 Unsupported Media Type | По каким-то причинам сервер отказывается работать с указанным типом данных при данном методе |
416 Range Not Satisfiable | В поле Range заголовка запроса был указан диапазон за пределами ресурса и отсутствует поле If-Range |
417 Expectation Failed | По каким-то причинам сервер не может удовлетворить значению поля Expect заголовка запроса |
418 I’m a teapot | Этот код был введен в 1998 году как одна из первоапрельских шуток IETF в RFC 2324 |
419 Authentication Timeout | Используется в качестве альтернативы коду 401, которые прошли проверку подлинности, но лишены доступа к определенным ресурсам сервера |
421 Misdirected Request | Запрос был перенаправлен на сервер, не способный дать ответ |
422 Unprocessable Entity | Сервер успешно принял запрос, может работать с указанным видом данных, однако имеется какая-то логическая ошибка, из-за которой невозможно произвести операцию над ресурсом. |
423 Locked | Целевой ресурс из запроса заблокирован от применения к нему указанного метода |
424 Failed Dependency | Реализация текущего запроса может зависеть от успешности выполнения другой операции. Если она не выполнена и из-за этого нельзя выполнить текущий запрос, то сервер вернёт этот код |
425 Too Early | Сервер не готов принять риски обработки "ранней информации" |
426 Upgrade Required | Сервер указывает клиенту на необходимость обновить протокол |
428 Precondition Required | Сервер указывает клиенту на необходимость использования в запросе заголовков условий, наподобие If-Match |
429 Too Many Requests | Клиент попытался отправить слишком много запросов за короткое время |
431 Request Header Fields Too Large | Превышена допустимая длина заголовков |
434 Requested host unavailable | Запрашиваемый адрес недоступен |
449 Retry With | Возвращается сервером, если для обработки запроса от клиента поступило недостаточно информации |
451 Unavailable For Legal Reasons | Доступ к ресурсу закрыт по юридическим причинам |
499 Client Closed Request | Нестандартный код nginx: клиент закрыл соединение, пока сервер обрабатывал запрос |
Ошибки сервера (5xx: Server Error )
500 Internal Server Error | Любая внутренняя ошибка сервера |
501 Not Implemented | Сервер не поддерживает возможностей, необходимых для обработки запроса |
502 Bad Gateway | Сервер, выступая в роли шлюза или прокси-сервера, получил недействительное ответное сообщение от вышестоящего сервера |
503 Service Unavailable | Сервер временно не имеет возможности обрабатывать запросы по техническим причинам |
504 Gateway Timeout | Сервер в роли шлюза или прокси-сервера не дождался ответа от вышестоящего сервера для завершения текущего запроса |
505 HTTP Version Not Supported | Сервер не поддерживает или отказывается поддерживать указанную в запросе версию протокола HTTP |
506 Variant Also Negotiates | В результате ошибочной конфигурации выбранный вариант указывает сам на себя, из-за чего процесс связывания прерывается |
507 Insufficient Storage | Не хватает места для выполнения текущего запроса |
508 Loop Detected | Операция отменена, т.к. сервер обнаружил бесконечный цикл при обработке запроса без ограничения глубины |
509 Bandwidth Limit Exceeded | Превышение веб-площадкой отведённого ей ограничения на потребление трафика |
510 Not Extended | На сервере отсутствует расширение, которое желает использовать клиент |
511 Network Authentication Required | Этот ответ посылается не сервером, которому был предназначен запрос, а сервером-посредником. Клиент должен сначала авторизоваться в сети. |
520 Unknown Error | Нестандартный код CloudFlare: CDN не смог обработать ошибку веб-сервера |
521 Web Server Is Down | Нестандартный код CloudFlare: Подключения CDN отклоняются веб-сервером |
522 Connection Timed Out | Нестандартный код CloudFlare: CDN не удалось подключиться к веб-серверу |
523 Origin Is Unreachable | Нестандартный код CloudFlare: Веб-сервер недостижим |
524 A Timeout Occurred | Нестандартный код CloudFlare: Тайм-аут подключения между сервером CDN и веб-сервером |
525 SSL Handshake Failed | Нестандартный код CloudFlare: Ошибка рукопожатия SSL между сервером CDN и веб-сервером |
526 Invalid SSL Certificate | Нестандартный код CloudFlare: Не удаётся подтвердить сертификат шифрования веб-сервера |
Заключение
Понимание и использование HTTP-кодов является важным аспектом разработки веб-приложений и взаимодействия между клиентом и сервером. Знание значений HTTP-кодов позволяет разработчикам и администраторам серверов правильно интерпретировать ответы сервера и принимать соответствующие меры для обеспечения эффективной работы веб-приложения.