Http коды ошибок: Список кодов состояния http — Википедия – HTTP response status codes — Web technology for developers

Содержание

HTTP коды ошибок сервера: 500, 501, 502, 503, 504, 505

Привет, читатель блога ZametkiNaPolyah.ru! Продолжим знакомиться с протоколом HTTP в рубрике Cерверы и протоколы и ее разделе HTTP протокол. В этой записи мы с тобой рассмотрим последний класс кодов состояния HTTP — коды ошибок HTTP сервера. Все коды ошибок HTTP сервера начинаются с пятерки и говорят о том, что сервер не может выполнить запрос по каким-то своим внутренним причинам. Стандарт HTTP 1.1 насчитывает всего 6 кодов ошибок сервера HTTP: 500, 501, 502, 503, 504, 505. Любая реализация HTTP сервера может расширить этот набор кодов ошибок сервера.

HTTP коды ошибок сервера: 500, 501, 502, 503, 504, 505

HTTP коды ошибок сервера: 500, 501, 502, 503, 504, 505

HTTP коды ошибок сервера: 500, 501, 502, 503, 504, 505

HTTP коды ошибок сервера говорят пользователю о том, что HTTP сервер знает, что совершил ошибку или просто сервер неспособен выполнить HTTP запрос клиента. Все когда ошибок HTTP сервера начинаются с пятерки. Составляя HTTP ответ сервер всегда отправляет тело HTTP сообщения клиенту за исключением того случая, когда использовался метод HEAD (здесь подробно написано про методы HTTP запроса). Браузеры (клиентские приложения или агенты пользователя), в свою очередь, всегда показывают пользователю то, что отправил сервер.

Давайте для удобства рассмотрения сведем в одну таблицу все коды ошибок HTTP сервера в одну таблицу и дадим подробное описание HTTP кодам ошибок сервера.

Код ошибки HTTP сервераОписание кода ошибки HTTP сервера
500 InternalServerErrorКод состояния ошибки HTTP сервера 500: внутренняя ошибка сервера Если вы видите ошибку HTTP сервера с кодом 500, то знайте, что это может любая внутренняя ошибка HTTP сервера, которая не входит в рамки других ошибок, в том числе и ошибок, описанных в других классах.
501 NotImplementedКод состояния ошибки HTTP сервера  501: не реализовано Если вы видите ошибку HTTP сервера с кодом 501, то это означает, что сервер не может выполнить HTTP сообщение, полученное от клиента, из-за ограниченного функционала. Ошибка сервера 501 может возникнуть из-за настроек сервера. Часто ошибка 501 возникает из-за того, что сервер не может распознать метод, указанный в запросе.
502 BadGatewayКод состояния ошибки HTTP сервера  502: ошибка шлюза Если вы видите ошибку HTTP сервера с кодом 502, то это означает, что серверное приложение действует в качестве шлюза или прокси-сервера и при этом он получил недопустимый ответ от следующего в цепочке запросов сервера, к которому обращался при попытке выполнить запрос.
503 ServiceUnavailable
Код состояния ошибки HTTP сервера  503: сервис недоступен
Если вы видите ошибку HTTP сервера с кодом 503, то это означает, что в настоящее время сервер недоступен из-за его перегрузки или он находится на техническом обслуживание. Если сервер знает о продолжительности задержки, то вместе с кодом ошибки 503, он может указать время в поле заголовка Retry-After.
504 GatewayTimeoutКод состояния ошибки HTTP сервера  504: истекло время ожидания Если вы видите ошибку HTTP сервера с кодом 504 возникает в том случае, когда HTTP сервер действует в роли прокси-сервера или шлюза и не получил своевременного ответа от следующего сервера, к которому он обращался, чтобы выполнить запрос.
505 HTTP VersionNotSupportedКод состояния ошибки HTTP сервера  505: сервис недоступен Если вы видите ошибку HTTP сервера с кодом 505, то это означает, что сервер не поддерживает или отказывается поддерживать версию HTTP протокола (кстати, версия — это очень важный параметр HTTP протокола, который определяет, как будет установлено HTTP соединение), указанную в запросе.

Мы рассмотрели коды состояний ошибок HTTP сервера и вообще все коды состояний HTTP сервера. Напомню, что помимо кодов ошибок сервера в HTTP есть: информационные коды состояния, успешные коды состояния, коды ошибок клиента и коды перенаправления. Заключением данных публикаций будет справочник кодов HTTP сервера, в котором будут собраны все коды состояний и их описание.

Не забывайте делиться своим мнением в комментариях и оставлять отзывы, это поможет сделать нашу работу лучше, с уважением ZametkiNaPolyah.ru!

Новые коды состояния HTTP / Habr

На рассмотрение в IETF поданы спецификации новых кодов состояния HTTP, которые более точно описывают некоторые типичные ситуации.
428 Precondition Required
429 Too Many Requests
431 Request Header Fields Too Large 
511 Network Authentication Required

Код состояния 428 (precondition required) означает, что серверу требуются условия выполнения запроса. Это типичная ситуация, когда клиент получает данные по GET, модифицирует их и отправляет назад на сервер через PUT, но к тому времени они уже были модифицированы другим клиентом, из-за чего возникает конфликт. Требуя обусловленного запроса, сервер защищается от возникновения конфликта. При этом обязательно должны быть указаны условия для корректной отправки данных на сервер.
HTTP/1.1 428 Precondition Required
Content-Type: text/html

<html>
   <head>
      <title>Precondition Required</title>
   </head>
   <body>
      <h2>Precondition Required</h2>
         <p>This request is required to be conditional;
            try using "If-Match".</p>
   </body>
</html>

Код состояния 429 (too many requests) означает, что пользователь отправил слишком много запросов в заданный период времени. Ответ должен содержать объяснение нарушенного условия и может содержать заголовок
Retry-After
с указанием времени, которое нужно подождать перед повтором.
HTTP/1.1 429 Too Many Requests
Content-Type: text/html
Retry-After: 3600

<html>
   <head>
      <title>Too Many Requests</title>
   </head>
   <body>
      <h2>Too many Requests</h2>
      <p>I only allow 50 requests per hour to this Web site per
         logged in user. Try again soon.</p>
   </body>
</html>

Код состояния 431 (request header fields too large) используется тогда, когда сервер отказывает в обработке запроса из-за того, что один или несколько заголовков в сумме превышают норму. Во втором случае в ответе должно содержаться указание, какой именно заголовок вызвал проблему.
HTTP/1.1 431 Request Header Fields Too Large
Content-Type: text/html

<html>
   <head>
      <title>Request Header Fields Too Large</title>
   </head>
   <body>
      <h2>Request Header Fields Too Large</h2>
      <p>The "Example" header was too large.</p>
   </body>
</html>

Код состояния 511 (network authentication required) означает, что нужно выполнить аутентификацию, при этом в ответе должна содержаться инструкция о том, как это сделать, например, с помощью HTML-формы по указанному адресу. Ошибку 511 возвращает не целевой сервер, а прокси, который не пускает пользователя в сеть (например, маршрутизатор в зоне платного Wi-Fi при неавторизованном доступе).

Например, пользователь отправляет HTTP-запрос по TCP на порт 80.

GET /index.htm HTTP/1.1
Host: www.example.com

Логин-сервер возвращает такой ответ.
HTTP/1.1 511 Network Authentication Required
Refresh: 0; url=https://login.example.net/
Content-Type: text/html

<html>
   <head>
      <title>Network Authentication Required</title>
   </head>
   <body>
      <p>You need to <a href="https://login.example.net/">
      authenticate with the local network</a> in order to get
      access.</p>
   </body>
</html>

Описание кодов ошибок интернета (404, 503 и тд) — кодов состояния HTTP — Поснов Андрей

Описание кодов

Информационные

В этот класс выделены коды, информирующие о процессе передачи. При работе через протокол версии 1.0 сообщения с такими кодами должны игнорироваться. В версии 1.1 клиент должен быть готов принять этот класс сообщений как обычный ответ, но серверу отправлять что-либо не нужно. Сами сообщения от сервера содержат только стартовую строку ответа и, если требуется, несколько специфичных для ответа полей заголовка. Прокси-сервера подобные сообщения должны отправлять дальше от сервера к клиенту.

  • 100 Continue — сервер удовлетворён начальными сведениями о запросе, клиент может продолжать пересылать заголовки. Появился в HTTP/1.1.
  • 101 Switching Protocols — сервер предлагает перейти на более подходящий для указанного ресурса протокол; список предлагаемых протоколов сервер обязательно указывает в поле заголовка Update. Если клиента это заинтересует, то он посылает новый запрос с указанием другого протокола. Появился в HTTP/1.1.
  • 102 Processing — запрос принят, но на его обработку понадобится длительное время. Используется сервером, чтобы клиент не разорвал соединение из-за превышения времени ожидания. Клиент при получении такого ответа должен сбросить таймер и дожидаться следующей команды в обычном режиме. Появился в WebDAV.

[править]Успех

Сообщения данного класса информируют о случаях успешного принятия и обработки запроса клиента. В зависимости от статуса сервер может ещё передать заголовки и тело сообщения.

  • 200 OK — успешный запрос. Если клиентом были запрошены какие-либо данные, то они находятся в заголовке и/или теле сообщения. Появился в HTTP/1.0.
  • 201 Created — в результате успешного выполнения запроса был создан новый ресурс. Сервер должен указать его местоположение в заголовке Location. Серверу рекомендуется[источник не указан 380 дней] ещё указывать в заголовке характеристики созданного ресурса (например, в поле Content-Type). Если сервер не уверен, что ресурс действительно будет существовать к моменту получения данного сообщения клиентом, то лучше использовать ответ с кодом 202. Появился в HTTP/1.0.
  • 202 Accepted — запрос был принят на обработку, но она не завершена. Клиенту не обязательно дожидаться окончательной передачи сообщения, так как может быть начат очень долгий процесс. Появился в HTTP/1.0.
  • 203 Non-Authoritative Information — аналогично ответу 200, но в этом случае передаваемая информация была взята не из первичного источника (резервной копии, другого сервера и т. д.) и поэтому может быть неактуальной. Появился в HTTP/1.1.
  • 204 No Content — сервер успешно обработал запрос, но в ответе были переданы только заголовки без тела сообщения. Клиент не должен обновлять содержимое документа, но может применить к нему полученные метаданные. Появился в HTTP/1.0.
  •  205 Reset Content — сервер обязывает клиента сбросить введённые пользователем данные. Тела сообщения сервер при этом не передаёт и документ обновлять не обязательно. Появился в HTTP/1.1.
  •  206 Partial Content — сервер удачно выполнил частичный GET-запрос, возвратив только часть сообщения. В заголовке Content-Range сервер указывает байтовые диапазоны содержимого. Особое внимание при работе с подобными ответами следует уделить кэшированию. Появился в HTTP/1.1. (подробнее…)
  •  207 Multi-Status — сервер передаёт результаты выполнения сразу нескольких независимых операций. Они помещаются в само тело сообщения в виде XML-документа с объектомmultistatus. Не рекомендуется размещать в этом объекте статусы из серии 1xx из-за бессмысленности и избыточности. Появился в WebDAV.
  •  226 IM Used — заголовок A-IM от клиента был успешно принят и сервер возвращает содержимое с учётом указанных параметров. Введено в RFC 3229 для дополнения протокола HTTP поддержкой дельта-кодирования.

Перенаправление

Коды этого класса сообщают клиенту, что для успешного выполнения операции необходимо сделать другой запрос, как правило, по другому URI. Из данного класса пять кодов 301302303,305 и 307 относятся непосредственно к перенаправлениям. Адрес, по которому клиенту следует произвести запрос, сервер указывает в заголовке Location. При этом допускается использование фрагментов в целевом URI.

По последним стандартам клиент может производить перенаправление без запроса пользователя только если второй ресурс будет запрашиваться методом GET или HEAD[6]. В предыдущих спецификациях говорилось, что для избежания круговых переходов пользователя следует спрашивать после 5-го подряд перенаправления[13]. При всех перенаправлениях, если метод запроса был не HEAD, то в тело ответа следует включить короткое гипертекстовое сообщение с целевым адресом, чтобы в случае ошибки пользователь смог сам произвести переход.

Разработчики HTTP отмечают, что многие клиенты при перенаправлениях с кодами 301 и 302 ошибочно применяют метод GET ко второму ресурсу, несмотря на то, что к первому запрос был с иным методом (чаще всего PUT)[14]. Чтобы избежать недоразумений, в версии HTTP/1.1 были введены коды 303 и 307 и их рекомендовано использовать вместо 302. Изменять метод нужно только если сервер ответил 303. В остальных случаях следующий запрос производить с исходным методом.

Поведение клиентов при различных перенаправлениях описано в таблице:

Статус ответаКэшированиеЕсли метод не GET или HEAD
301 Moved PermanentlyМожно как обычно.Спросить у пользователя подтверждения и запросить другой ресурс исходным методом.
307 Temporary RedirectМожно только если указан заголовок Cache-Control илиExpires.
302 Found (HTTP/1.1)
302 Moved Temporarily (HTTP/1.0)
303 See OtherНельзя.Перейти автоматически, но уже методом GET.
  •  300 Multiple Choices — по указанному URI существует несколько вариантов предоставления ресурса по типу MIME, по языку или по другим характеристикам. Сервер передаёт с сообщением список альтернатив, давая возможность сделать выбор клиенту автоматически или пользователю. Появился в HTTP/1.0.
  •  301 Moved Permanently — запрошенный документ был окончательно перенесен на новый URI, указанный в поле Location заголовка. Некоторые клиенты некорректно ведут себя при обработке данного кода. Появился в HTTP/1.0.
  •  302 Found, 302 Moved Temporarily — запрошенный документ временно доступен по другому URI, указанному в заголовке в поле Location. Этот код может быть использован, например, приуправляемом сервером согласовании содержимого. Некоторые клиенты некорректно ведут себя при обработке данного кода. Введено в HTTP/1.0.
  •  303 See Other — документ по запрошенному URI нужно запросить по адресу в поле Location заголовка с использованием метода GET несмотря даже на то, что первый запрашивался иным методом. Этот код был введён вместе с 307-ым для избежания неоднозначности, чтобы сервер был уверен, что следующий ресурс будет запрошен методом GET. Например, на веб-странице есть поле ввода текста для быстрого перехода и поиска. После ввода данных браузер делает запрос методом POST, включая в тело сообщения введённый текст. Если обнаружен документ с введённым названием, то сервер отвечает кодом 303, указав в заголовке Location его постоянный адрес. Тогда браузер гарантировано его запросит методом GET для получения содержимого. В противном случае сервер просто вернёт клиенту страницу с результатами поиска. Введено в HTTP/1.1.
  •  304 Not Modified — сервер возвращает такой код, если клиент запросил документ методом GET, использовал заголовок If-Modified-Since или If-None-Match и документ не изменился с указанного момента. При этом сообщение сервера не должно содержать тела. Появился в HTTP/1.0.
  •  305 Use Proxy — запрос к запрашиваемому ресурсу должен осуществляться через прокси-сервер, URI которого указан в поле Location заголовка. Данный код ответа могут использовать только исходные HTTP-сервера (не прокси). Введено в HTTP/1.1.
  •  306 (зарезервировано) — использовавшийся раньше код ответа, в настоящий момент зарезервирован. Упомянут в RFC 2616 (обновление HTTP/1.1).
  •  307 Temporary Redirect — запрашиваемый ресурс на короткое время доступен по другому URI, указанный в поле Location заголовка. Этот код был введён вместе с 303 вместо 302-го для избежания неоднозначности. Введено в RFC 2616 (обновление HTTP/1.1).

Ошибка клиента

Класс кодов 4xx предназначен для указания ошибок со стороны клиента. При использовании всех методов, кроме HEAD, сервер должен вернуть в теле сообщения гипертекстовое пояснение для пользователя.

  •  400 Bad Request — сервер обнаружил в запросе клиента синтаксическую ошибку. Появился в HTTP/1.0.
  •  401 Unauthorized — для доступа к запрашиваемому ресурсу требуется аутентификация. В заголовке ответ должен содержать поле WWW-Authenticate с перечнем условий аутентификации. Клиент может повторить запрос, включив в заголовок сообщения поле Authorization с требуемыми для аутентификации данными.
  •  402 Payment Required — предполагается использовать в будущем. В настоящий момент не используется. Этот код предусмотрен для платных пользовательских сервисов, а не дляхостинговых компаний. Имеется в виду, что эта ошибка не будет выдана хостинговым провайдером в случае просроченной оплаты его услуг. Зарезервирован, начиная с HTTP/1.1.

Сервер вернул ошибку 403 при попытке просмотра директории «cgi-bin», доступ к которой был запрещён.

  •  403 Forbidden — сервер понял запрос, но он отказывается его выполнять из-за ограничений в доступе для клиента к указанному ресурсу. Если для доступа к ресурсу требуется аутентификация средствами HTTP, то сервер вернёт ответ 401 или 407 при использовании прокси. В противном случае ограничения были заданы администратором сервера или разработчиком веб-приложения и могут быть любыми в зависимости от возможностей используемого программного обеспечения. В любом случае клиенту следует сообщить причины отказа в обработке запроса. Наиболее вероятными причинами ограничения может послужить попытка доступа к системным ресурсам веб-сервера (например, файлам .htaccess или .htpasswd) или к файлам, доступ к которым был закрыт с помощью конфигурационных файлов, требование аутентификации не средствами HTTP, например, для доступа к системе управления содержимым или разделу для зарегистрированных пользователей либо сервер не удовлетворён IP-адресом клиента, например, при блокировках. Появился в HTTP/1.0.
  •  404 Not Found — самая распространенная ошибка при пользовании Интернетом, основная причина — ошибка в написании адреса Web-страницы. Сервер понял запрос, но не нашёл соответствующего ресурса по указанному URI. Если серверу известно, что по этому адресу был документ, то ему желательно использовать код 410. Ответ 404 может использоваться вместо 403, если требуется тщательно скрыть от посторонних глаз определённые ресурсы. Появился в HTTP/1.0.
  •  405 Method Not Allowed — указанный клиентом метод нельзя применить к текущему ресурсу. В ответе сервер должен указать доступные методы в заголовке Allow, разделив их запятой. Эту ошибку сервер должен возвращать, если метод ему известен, но он не применим именно к указанному в запросе ресурсу, если же указанный метод не применим на всём сервере, то клиенту нужно вернуть код 501 (Not Implemented). Появился в HTTP/1.1.
  •  406 Not Acceptable — запрошенный URI не может удовлетворить переданным в заголовке характеристикам. Если метод был не HEAD, то сервер должен вернуть список допустимых характеристик для данного ресурса. Появился в HTTP/1.1.
  •  407 Proxy Authentication Required — ответ аналогичен коду 401 за исключением того, что аутентификация производится для прокси-сервера. Механизм аналогичен идентификации на исходном сервере. Появился в HTTP/1.1.
  •  408 Request Timeout — время ожидания сервером передачи от клиента истекло. Клиент может повторить аналогичный предыдущему запрос в любое время. Например, такая ситуация может возникнуть при загрузке на сервер объёмного файла методом POST или PUT. В какой-то момент передачи источник данных перестал отвечать, например, из-за повреждения компакт-дискаили потеря связи с другим компьютером в локальной сети. Пока клиент ничего не передаёт, ожидая от него ответа, соединение с сервером держится. Через некоторое время сервер может закрыть соединение со своей стороны, чтобы дать возможность другим клиентам сделать запрос. Этот ответ не возвращается, когда клиент принудительно остановил передачу по команде пользователя или соединение прервалось по каким-то иным причинам, так как ответ уже послать невозможно. Появился в HTTP/1.1.
  •  409 Conflict — запрос не может быть выполнен из-за конфликтного обращения к ресурсу. Такое возможно, например, когда два клиента пытаются изменить ресурс с помощью методаPUT.Появился в HTTP/1.1.
  •  410 Gone — такой ответ сервер посылает, если ресурс раньше был по указанному URL, но был удалён и теперь недоступен. Серверу в этом случае неизвестно и местоположение альтернативного документа, например, копии). Если у сервера есть подозрение, что документ в ближайшее время может быть восстановлен, то лучше клиенту передать код 404. Появился в HTTP/1.1.
  •  411 Length Required — для указанного ресурса клиент должен указать Content-Length в заголовке запроса. Без указания этого поля не стоит делать повторную попытку запроса к серверу по данному URI. Такой ответ естественен для запросов типа POST и PUT. Например, если по указанному URI производится загрузка файлов, а на сервере стоит ограничение на их объём. Тогда разумней будет проверить в самом начале заголовок Content-Length и сразу отказать в загрузке, чем провоцировать бессмысленную нагрузку, разрывая соединение, когда клиент действительно пришлёт слишком объёмное сообщение. Появился в HTTP/1.1.
  •  412 Precondition Failed — возвращается, если ни одно из условных полей заголовка[неизвестный термин] запроса не было выполнено. Появился в HTTP/1.1.
  •  413 Request Entity Too Large — возвращается в случае, если сервер отказывается обработать запрос по причине слишком большого размера тела запроса. Сервер может закрыть соединение, чтобы прекратить дальнейшую передачу запроса. Если проблема временная, то рекомендуется в ответ сервера включить заголовок Retry-After с указанием времени, по истечении которого можно повторить аналогичный запрос. Появился в HTTP/1.1.
  •  414 Request-URL Too Long — сервер не может обработать запрос из-за слишком длинного указанного URL. Такую ошибку можно спровоцировать, например, когда клиент пытается передать длинные параметры через метод GET, а не POST. Появился в HTTP/1.1.
  •  415 Unsupported Media Type — по каким-то причинам сервер отказывается работать с указанным типом данных при данном методе. Появился в HTTP/1.1.
  •  416 Requested Range Not Satisfiable — в поле Range заголовка запроса был указан диапазон за пределами ресурса и отсутствует поле If-Range. Если клиент передал байтовый диапазон, то сервер может вернуть реальный размер в поле Content-Range заголовка. Данный ответ не следует использовать при передаче типа multipart/byteranges[источник не указан 380 дней]. Введено в RFC 2616 (обновление HTTP/1.1).
  •  417 Expectation Failed — по каким-то причинам сервер не может удовлетворить значению поля Expect заголовка запроса. Введено в RFC 2616 (обновление HTTP/1.1).
  •  422 Unprocessable Entity — сервер успешно принял запрос, может работать с указанным видом данных, в теле запроса XML-документ имеет верный синтаксис, но имеется какая-то логическая ошибка, из-за которой невозможно произвести операцию над ресурсом. Введено в WebDAV.
  •  423 Locked — целевой ресурс из запроса заблокирован от применения к нему указанного метода. Введено в WebDAV.
  •  424 Failed Dependency — реализация текущего запроса может зависеть от успешности выполнения другой операции. Если она не выполнена и из-за этого нельзя выполнить текущий запрос, то сервер вернёт этот код. Введено в WebDAV.
  •  425 Unordered Collection — посылается, если клиент послал запрос, обозначив положение в неотсортированной коллекции или используя порядок следования элементов, отличный от серверного[уточнить]. Введено в черновике по WebDAV Advanced Collections Protocol[15].
  •  426 Upgrade Required — сервер указывает клиенту на необходимость обновить протокол. Заголовок ответа должен содержать правильно сформированные поля Upgrade и Connection. Введено в RFC 2817 для возможности перехода к TLS посредством HTTP.
  •  428 Precondition Required — сервер указывает клиенту на необходимость использования в забросе заголовков условий, наподобие If-Match. Введено в черновике стандарта RFC 6585.
  •  429 Too Many Requests — клиент попытался отправить слишком много запросов за короткое время, что может указывать, например, на попытку DoS-атаки. Может сопровождаться заголовком Retry-After, указывающим, через какое время можно повторить запрос. Введено в черновике стандарта RFC 6585.
  •  431 Request Header Fields Too Large — Превышена допустимая длина заголовков. Сервер не обязан отвечать этим кодом, вместо этого он может просто сбросить соединение. Введено в черновике стандарта RFC 6585.
  •  449 Retry With — возвращается сервером, если для обработки запроса от клиента поступило недостаточно информации. При этом в заголовок ответа помещается поле Ms-Echo-Request. Введено корпорацией Microsoft для WebDAV. В настоящий момент как минимум используется программой Microsoft Money.
  •  451 Unavailable For Legal Reasons — доступ к ресурсу закрыт по юридическим причинам, например, по требованию органов государственной власти или по требованию правообладателя в случае нарушения авторских прав. Введено в черновике IETF за авторством Google[10], при этом код ошибки является отсылкой к роману Рэя Брэдбери «451 градус по Фаренгейту».
  •  456 Unrecoverable Error — возвращается сервером, если обработка запроса вызывает некорректируемые сбои в таблицах баз данных[источник не указан 380 дней]. Введено корпорацией Microsoftдля WebDAV.

Ошибка сервера

Коды 5xx выделены под случаи неудачного выполнения операции по вине сервера. Для всех ситуаций, кроме использования метода HEAD, сервер должен включать в тело сообщения объяснение, которое клиент отобразит пользователю.

  •  500 Internal Server Error — любая внутренняя ошибка сервера, которая не входит в рамки остальных ошибок класса. Появился в HTTP/1.0.
  •  501 Not Implemented — сервер не поддерживает возможностей, необходимых для обработки запроса. Типичный ответ для случаев, когда сервер не понимает указанный в запросе метод. Если же метод серверу известен, но он не применим к данному ресурсу, то нужно вернуть ответ 405. Появился в HTTP/1.0.
  •  502 Bad Gateway — сервер, выступая в роли шлюза или прокси-сервера, получил недействительное ответное сообщение от вышестоящего сервера. Появился в HTTP/1.0.
  •  503 Service Unavailable — сервер временно не имеет возможности обрабатывать запросы по техническим причинам (обслуживание, перегрузка и прочее). В поле Retry-After заголовка сервер может указать время, через которое клиенту рекомендуется повторить запрос. Хотя во время перегрузки очевидным кажется сразу разрывать соединение, эффективней может оказаться установка большого значения поля Retry-After для уменьшения частоты избыточных запросов. Появился в HTTP/1.0.
  •  504 Gateway Timeout — сервер в роли шлюза или прокси-сервера не дождался ответа от вышестоящего сервера для завершения текущего запроса. Появился в HTTP/1.1.
  •  505 HTTP Version Not Supported — сервер не поддерживает или отказывается поддерживать указанную в запросе версию протокола HTTP. Появился в HTTP/1.1.
  •  506 Variant Also Negotiates — в результате ошибочной конфигурации выбранный вариант указывает сам на себя, из-за чего процесс связывания прерывается. Экспериментальное. Введено вRFC 2295 для дополнения протокола HTTP технологией Transparent Content Negotiation.
  •  507 Insufficient Storage — не хватает места для выполнения текущего запроса. Проблема может быть временной. Введено в WebDAV.
  •  509 Bandwidth Limit Exceeded — используется при превышении веб-площадкой отведённого ей ограничения на потребление трафика. В данном случае владельцу площадки следует обратиться к своему хостинг-провайдеру. В настоящий момент данный код не описан ни в одном RFC и используется только модулем «bw/limited», входящим в панель управления хостингом cPanel, где и был введён.
  •  510 Not Extended — на сервере отсутствует расширение, которое желает использовать клиент. Сервер может дополнительно передать информацию о доступных ему расширениях. Введено вRFC 2774 для дополнения протокола HTTP поддержкой расширений.
  •  511 Network Authentication Required — этот ответ посылается не сервером, которому был предназначен запрос, а сервером-посредником — например, сервером провайдера — в случае, если клиент должен сначала авторизоваться в сети, например, ввести пароль для платной точки доступа к Интернету. Предполагается, что в теле ответа будет возвращена Web-форма авторизации или перенаправление на неё. Введено в черновике стандарта RFC 6585.

Описание кодов ошибок интернета (404, 503 и тд) — кодов состояния HTTP

в каких случаях при раскрутке сайта они могут возникнуть

К наиболее распространенным кодам ответов относятся следующие.

Плохой запрос 400

Заголовок обозначает, что в запросе пользователя обнаружена синтаксическая ошибка. С помощью анализа этих ответов можно определить дополнительные ключевые слова для поисковой оптимизации сайта (с опечатками, неправильно написанные и др.).

Не авторизован 401

Для данного запроса необходима идентификация пользователя, у которого сервер запрашивает логин и пароль. При указании неверных данных статус возвращается.

Необходима оплата 402

Код предназначен для пользовательских сервисов, требующих оплаты.

Запрещено 403

Сервер возвращает данную ошибку при попытке просмотреть документы или директории, доступ к которым запрещен. Наиболее вероятные причины ограничения:

  • IP-адрес посетителя не удовлетворяет сервер, например, из-за частых обращений,
  • необходима авторизация не средствами HTTP,
  • клиент пытается посмотреть системные ресурсы сервера и др.

Не найдено 404

Данный код обозначает, что серверу запрос понятен, но по указанному URL соответствующего материала нет. Большое количество неработающих ссылок или документов осложняет эффективную раскрутку сайта, а посетитель, попав на стандартную страницу с кодом ошибки 404, практически всегда закрывает вкладку с ресурсом. Для удержания пользователя создается собственная страница ошибки в соответствии с общим дизайном ресурса.

Метод не применим 405

Данный ответ возвращается пользователю при невозможности применить указанный метод к данному ресурсу и содержит перечисление доступных.

Не приемлемо 406

Запрошенный URL не может удовлетворить характеристикам, переданным в заголовке.

Необходима авторизация proxy 407

Код аналогичен 401-му.

Время ожидания истекло 408

Закончилось время ожидания веб-сервером передачи от клиента.

Конфликт 409

Из-за конфликтного обращения к сайту запрос нельзя выполнить, например, при одномоментной попытке двух пользователей изменить ресурс методом PUT.

Удален 410

Ответ возвращается пользователю, если запрашиваемый ресурс находился по указанному URL ранее, но был удален, а местоположение альтернативного документа серверу не известно.

Размер запроса слишком большой 413

Данный код означает, что тело запроса клиента имеет чрезмерный объем и сервер отказывается его обработать.

Заблокировано 423

Применение указанного метода запрещено к данному ресурсу.

Невыполнимая зависимость 424

Код означает, что текущий запрос нельзя реализовать до завершения другой операции.

Необходимо обновление 426

Указание пользователю о необходимости обновить протокол.

Теги термина

Голосов 5, рейтинг 5

Обнаружение и исправление ошибок — Википедия

Обнаружение и исправление ошибок — направление в теории кодирования, нацеленное на контроль целостности данных при записи и воспроизведении информации или при её передаче по линиям связи, а также обеспечение восстановления информации после чтения её из устройства хранения или канала связи.

Для обнаружения ошибок используют коды обнаружения ошибок, для исправления — корректирующие коды (коды, исправляющие ошибки, коды с коррекцией ошибок, помехоустойчивые коды).

Контроль целостности данных и исправление ошибок — важные задачи на многих уровнях работы с информацией (в частности, физическом, канальном, транспортном уровнях сетевой модели OSI) в связи с тем, что в процессе хранения данных и передачи информации по сетям связи неизбежно возникают ошибки.

В системах связи возможны несколько стратегий борьбы с ошибками:

  • обнаружение ошибок в блоках данных и автоматический запрос повторной передачи[⇨] повреждённых блоков — этот подход применяется, в основном, на канальном и транспортном уровнях;
  • обнаружение ошибок в блоках данных и отбрасывание повреждённых блоков — такой подход иногда применяется в системах потокового мультимедиа, где важна задержка передачи и нет времени на повторную передачу;
  • прямая коррекция ошибок (англ. forward error correction) применяется на физическом уровне.

Основная техника — добавление при записи (передаче) в полезные данные специальным образом структурированной избыточной информации (например, контрольного числа), а при чтении (приёме) использование такой избыточной информации для обнаружения и исправления ошибки. Число ошибок, которое можно исправить, ограничено и зависит от конкретного применяемого кода.

Коды обнаружения ошибок (которые могут только установить факт ошибки) принадлежат к тем же классам кодов, что и коды, исправляющие ошибки. Фактически любой код, исправляющий ошибки, может быть также использован для обнаружения ошибок (при этом он будет способен обнаружить бо́льшее число ошибок, чем был способен исправить). Коды, исправляющие ошибки, применяются в системах цифровой связи, в том числе: спутниковой, радиорелейной, сотовой, передаче данных по телефонным каналам, а также в системах хранения информации, в том числе магнитных и оптических. Коды, обнаруживающие ошибки, применяются в сетевых протоколах различных уровней.

По способу работы с данными коды, исправляющие ошибки, делятся на блоковые[⇨], делящие информацию на фрагменты постоянной длины и обрабатывающие каждый из них в отдельности, и свёрточные[⇨], работающие с данными как с непрерывным потоком.

Блоковый код, разбивающий информацию на фрагменты длиной k{\displaystyle k} бит и преобразующий их в кодовые слова длиной n{\displaystyle n} бит обычно обозначают (n,k){\displaystyle (n,\;k)}; при этом число R=kn{\displaystyle R={\frac {k}{n}}} называется скоростью кода. Если исходные k{\displaystyle k} бит код оставляет неизменными, и добавляет n−k{\displaystyle n-k} проверочных, такой код называется систематическим, иначе — несистематическим.

Задать блоковый код можно по-разному, в том числе таблицей, где каждой совокупности из k{\displaystyle k} информационных бит сопоставляется n{\displaystyle n} бит кодового слова. Однако хороший код должен удовлетворять как минимум следующим критериям:

  • способность исправлять как можно большее число ошибок,
  • как можно меньшая избыточность,
  • простота кодирования и декодирования.

Приведённые требования в общем случае противоречат друг другу, поэтому существует большое количество кодов, каждый из которых пригоден для определённого круга задач. Практически все используемые коды являются линейными, это связано с тем, что нелинейные коды значительно сложнее исследовать, и для них трудно обеспечить приемлемую лёгкость кодирования и декодирования.

Линейные коды общего вида[править | править код]

Линейный блоковый код — такой код, что множество его кодовых слов образует k{\displaystyle k}-мерное линейное подпространство C{\displaystyle C} в n{\displaystyle n}-мерном линейном пространстве, изоморфное пространству k{\displaystyle k}-битных векторов.

Это значит, что операция кодирования соответствует умножению исходного k{\displaystyle k}-битного вектора на невырожденную матрицу G{\displaystyle G}, называемую порождающей матрицей.

Для ортогонального по отношению к C{\displaystyle C} подпространства C⊥{\displaystyle C^{\perp }} и матрицы H{\displaystyle H}, задающая базис этого подпространства и для любого вектора v→∈C{\displaystyle {\overrightarrow {v}}\in C} справедливо:

v→HT=0→{\displaystyle {\overrightarrow {v}}H^{T}={\overrightarrow {0}}}.
Минимальное расстояние и корректирующая способность[править | править код]

Расстоянием Хэмминга (метрикой Хэмминга) между двумя кодовыми словами u→{\displaystyle {\overrightarrow {u}}} и v→{\displaystyle {\overrightarrow {v}}} называется количество отличных бит на соответствующих позициях:

dH(u→,v→)=∑s|u(s)−v(s)|{\displaystyle d_{H}({\overrightarrow {u}},\;{\overrightarrow {v}})=\sum _{s}{|u^{(s)}-v^{(s)}|}}.

Минимальное расстояние Хэмминга dmin=minu≠vdH(u→,v→){\displaystyle d_{\min }=\min _{u\neq v}d_{H}({\overrightarrow {u}},\;{\overrightarrow {v}})} является важной характеристикой линейного блокового кода. Она показывает, насколько «далеко» расположены коды друг от друга. Она определяет другую, не менее важную характеристику — корректирующую способность:

t=⌊dmin−12⌋{\displaystyle t=\left\lfloor {\frac {d_{\min }-1}{2}}\right\rfloor }.

Корректирующая способность определяет, сколько ошибок передачи кода (типа 1↔0{\displaystyle 1\leftrightarrow 0}) можно гарантированно исправить. То есть вокруг каждого кодового слова A{\displaystyle A} имеем t{\displaystyle t}-окрестность At{\displaystyle A_{t}}, которая состоит из всех возможных вариантов передачи кодового слова A{\displaystyle A} с числом ошибок (1↔0{\displaystyle 1\leftrightarrow 0}) не более t{\displaystyle t}. Никакие две окрестности двух любых кодовых слов не пересекаются друг с другом, так как расстояние между кодовыми словами (то есть центрами этих окрестностей) всегда больше двух их радиусов dH(A,B)⩾dmin>2t{\displaystyle d_{H}(A,\;B)\geqslant d_{\min }>2t}.

Таким образом, получив искажённую кодовую комбинацию из At{\displaystyle A_{t}}, декодер принимает решение, что исходной была кодовая комбинация A{\displaystyle A}, исправляя тем самым не более t{\displaystyle t} ошибок.

Например, при наличии всего двух кодовых слов A{\displaystyle A} и B{\displaystyle B} с расстоянием Хэмминга между ними, равным 3, ошибка в одном бите слова A{\displaystyle A} может быть исправлена, так как даже в этом случае принятое слово ближе к кодовому слову A{\displaystyle A}, чем к B{\displaystyle B}. Но если каналом были внесены ошибки в двух битах (в которых A{\displaystyle A} отличалось от B{\displaystyle B}), то результат ошибочной передачи A{\displaystyle A} окажется ближе к B{\displaystyle B}, чем A{\displaystyle A}, и декодер примет решение, что передавалось слово B{\displaystyle B}.

Коды Хэмминга[править | править код]

Коды Хэмминга — простейшие линейные коды с минимальным расстоянием 3, то есть способные исправить одну ошибку. Код Хэмминга может быть представлен в таком виде, что синдром:

s→=r→HT{\displaystyle {\overrightarrow {s}}={\overrightarrow {r}}H^{T}},

где r→{\displaystyle {\overrightarrow {r}}} — принятый вектор, будет равен номеру позиции, в которой произошла ошибка. Это свойство позволяет сделать декодирование очень простым.

Общий метод декодирования линейных кодов[править | править код]

Любой код (в том числе нелинейный) можно декодировать с помощью обычной таблицы, где каждому значению принятого слова r→i{\displaystyle {\overrightarrow {r}}_{i}} соответствует наиболее вероятное переданное слово u→i{\displaystyle {\overrightarrow {u}}_{i}}. Однако данный метод требует применения огромных таблиц уже для кодовых слов сравнительно небольшой длины.

Для линейных кодов этот метод можно существенно упростить. При этом для каждого принятого вектора r→i{\displaystyle {\overrightarrow {r}}_{i}} вычисляется синдром s→i=r→iHT{\displaystyle {\overrightarrow {s}}_{i}={\overrightarrow {r}}_{i}H^{T}}. Поскольку r→i=v→i+e→i{\displaystyle {\overrightarrow {r}}_{i}={\overrightarrow {v}}_{i}+{\overrightarrow {e}}_{i}}, где v→i{\displaystyle {\overrightarrow {v}}_{i}} — кодовое слово, а e→i{\displaystyle {\overrightarrow {e}}_{i}} — вектор ошибки, то s→i=e→iHT{\displaystyle {\overrightarrow {s}}_{i}={\overrightarrow {e}}_{i}H^{T}}. Затем с помощью таблицы по синдрому определяется вектор ошибки, с помощью которого определяется переданное кодовое слово. При этом таблица получается гораздо меньше, чем при использовании предыдущего метода.

Линейные циклические коды[править | править код]

Несмотря на то, что декодирование линейных кодов значительно проще декодирования большинства нелинейных, для большинства кодов этот процесс всё ещё достаточно сложен. Циклические коды, кроме более простого декодирования, обладают и другими важными свойствами.

Циклическим кодом является линейный код, обладающий следующим свойством: если v→{\displaystyle {\overrightarrow {v}}} является кодовым словом, то его циклическая перестановка также является кодовым словом.

Слова циклического кода удобно представлять в виде многочленов. Например, кодовое слово v→=(v0,v1,…,vn−1){\displaystyle {\overrightarrow {v}}=(v_{0},\;v_{1},\;\ldots ,\;v_{n-1})} представляется в виде полинома v(x)=v0+v1x+…+vn−1xn−1{\displaystyle v(x)=v_{0}+v_{1}x+\ldots +v_{n-1}x^{n-1}}. При этом циклический сдвиг кодового слова эквивалентен умножению многочлена на x{\displaystyle x} по модулю xn−1{\displaystyle x^{n}-1}.

Чаще всего используются двоичные циклические коды (то есть v0,v1,…{\displaystyle v_{0},\;v_{1},\;\ldots } могут принимать значения 0 или 1).

Порождающий многочлен[править | править код]

Можно показать, что все кодовые слова конкретного циклического кода кратны определённому порождающему (генераторному) многочлену g(x){\displaystyle g(x)}. Порождающий многочлен является делителем xn−1{\displaystyle x^{n}-1}.

С помощью порождающего многочлена осуществляется кодирование циклическим кодом. В частности:

Коды CRC[править | править код]

Коды CRC (англ. cyclic redundancy check — циклическая избыточная проверка) являются систематическими кодами, предназначенными не для исправления ошибок, а для их обнаружения. Они используют способ систематического кодирования, изложенный выше: «контрольная сумма» вычисляется путём деления xn−ku(x){\displaystyle x^{n-k}u(x)} на g(x){\displaystyle g(x)}. Ввиду того, что исправление ошибок не требуется, проверка правильности передачи может производиться точно так же.

Таким образом, вид многочлена g(x){\displaystyle g(x)} задаёт конкретный код CRC. Примеры наиболее популярных полиномов:

Название кодаСтепеньПолином
CRC-1212x12+x11+x3+x2+x+1{\displaystyle x^{12}+x^{11}+x^{3}+x^{2}+x+1}
CRC-1616x16+x15+x2+1{\displaystyle x^{16}+x^{15}+x^{2}+1}
CRC-CCITT16x16+x12+x5+1{\displaystyle x^{16}+x^{12}+x^{5}+1}
CRC-3232x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1{\displaystyle x^{32}+x^{26}+x^{23}+x^{22}+x^{16}+x^{12}+x^{11}+x^{10}+x^{8}+x^{7}+x^{5}+x^{4}+x^{2}+x+1}
Коды БЧХ[править | править код]

Коды Боуза — Чоудхури — Хоквингема (БЧХ) являются подклассом циклических кодов. Их отличительное свойство — возможность построения кода БЧХ с минимальным расстоянием не меньше заданного. Это важно, потому что, вообще говоря, определение минимального расстояния кода есть очень сложная задача.

Коды коррекции ошибок Рида — Соломона[править | править код]

Коды Рида — Соломона — недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида-Соломона, работающие с байтами (октетами).

Математически коды Рида — Соломона являются кодами БЧХ.

Преимущества и недостатки блоковых кодов[править | править код]

Хотя блоковые коды, как правило, хорошо справляются с редкими, но большими пачками ошибок, их эффективность при частых, но небольших ошибках (например, в канале с АБГШ), менее высока.

x^{32}+x^{26}+x^{23}+x^{22}+x^{16}+x^{12}+x^{11}+x^{10}+x^{8}+x^{7}+x^{5}+x^{4}+x^{2}+x+1 Свёрточный кодер (k=7,R=1/2{\displaystyle k=7,\;R=1/2})

Свёрточные коды, в отличие от блоковых, не делят информацию на фрагменты и работают с ней как со сплошным потоком данных. Такие коды, как правило, порождаются дискретной линейной инвариантной во времени системой. Поэтому, в отличие от большинства блоковых кодов, свёрточное кодирование — очень простая операция, чего нельзя сказать о декодировании.

Кодирование свёрточным кодом производится с помощью регистра сдвига, отводы от которого суммируются по модулю два. Таких сумм может быть две (чаще всего) или больше.

Декодирование свёрточных кодов, как правило, производится по алгоритму Витерби, который пытается восстановить переданную последовательность согласно критерию максимального правдоподобия.

Свёрточные коды эффективно работают в канале с белым шумом, но плохо справляются с пакетами ошибок. Более того, если декодер ошибается, на его выходе всегда возникает пакет ошибок.

Каскадное кодирование. Итеративное декодирование[править | править код]

Преимущества разных способов кодирования можно объединить, применив каскадное кодирование. При этом информация сначала кодируется одним кодом, а затем другим, в результате получается код-произведение.

Например, популярной является следующая конструкция: данные кодируются кодом Рида — Соломона, затем перемежаются (при этом символы, расположенные близко, помещаются далеко друг от друга) и кодируются свёрточным кодом. На приёмнике сначала декодируется свёрточный код, затем осуществляется обратное перемежение (при этом пачки ошибок на выходе свёрточного декодера попадают в разные кодовые слова кода Рида — Соломона), и затем осуществляется декодирование кода Рида — Соломона.

Некоторые коды-произведения специально сконструированы для итеративного декодирования, при котором декодирование осуществляется в несколько проходов, каждый из которых использует информацию от предыдущего. Это позволяет добиться большой эффективности, однако декодирование требует больших ресурсов. К таким кодам относят турбо-коды и LDPC-коды (коды Галлагера).

Эффективность кодов определяется количеством ошибок, которые тот может исправить, количеством избыточной информации, добавление которой требуется, а также сложностью реализации кодирования и декодирования (как аппаратной, так и в виде программы для ЭВМ).

Граница Хэмминга и совершенные коды[править | править код]

Пусть имеется двоичный блоковый (n,k){\displaystyle (n,k)} код с корректирующей способностью t{\displaystyle t}. Тогда справедливо неравенство (называемое границей Хэмминга):

∑i=0t(ni)⩽2n−k.{\displaystyle \sum _{i=0}^{t}{n \choose i}\leqslant 2^{n-k}.}

Коды, удовлетворяющие этой границе с равенством, называются совершенными. К совершенным кодам относятся, например, коды Хэмминга. Часто применяемые на практике коды с большой корректирующей способностью (такие, как коды Рида — Соломона) не являются совершенными.

Энергетический выигрыш[править | править код]

При передаче информации по каналу связи вероятность ошибки зависит от отношения сигнал/шум на входе демодулятора, таким образом, при постоянном уровне шума решающее значение имеет мощность передатчика. В системах спутниковой и мобильной, а также других типов связи остро стоит вопрос экономии энергии. Кроме того, в определённых системах связи (например, т

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *