100 Continue

Код состо­я­ния HTTP (англ. HTTP status code) — часть пер­вой стро­ки отве­та сер­ве­ра при запро­сах по про­то­ко­лу HTTP.
Он пред­став­ля­ет собой целое трёх­раз­ряд­ное деся­тич­ное чис­ло. Пер­вая циф­ра ука­зы­ва­ет на класс состо­я­ния. За кодом отве­та обыч­но сле­ду­ет отде­лён­ная про­бе­лом пояс­ня­ю­щая фра­за на англий­ском язы­ке, кото­рая разъ­яс­ня­ет чело­ве­ку при­чи­ну имен­но тако­го отве­та. При­ме­ры:

  • 201 Created.
  • 401 Unauthorized.
  • 507 Insufficient Storage.

Кли­ент узна­ёт по коду отве­та о резуль­та­тах сво­е­го запро­са и опре­де­ля­ет, какие дей­ствия ему пред­при­ни­мать даль­ше. Набор кодов состо­я­ния явля­ет­ся стан­дар­том, и они опи­са­ны в соот­вет­ству­ю­щих доку­мен­тах RFC. Вве­де­ние новых кодов долж­но про­из­во­дить­ся толь­ко после согла­со­ва­ния с IETF. Тем не менее извест­но о двух исполь­зу­е­мых кодах, не упо­мя­ну­тых в RFC: 449 Retry With. Так­же упо­ми­на­ет­ся пояс­ни­тель­ная фра­за «Reply With»[1] в спе­ци­фи­ка­ции по WebDAV в Microsoft Developer Network, вве­дён­ный Microsoft, и 509 Bandwidth Limit Exceeded, вве­дён­ный в cPanel.

Кли­ент может не знать все коды состо­я­ния, но он обя­зан отре­а­ги­ро­вать в соот­вет­ствии с клас­сом кода. В насто­я­щее вре­мя выде­ле­но пять клас­сов кодов состо­я­ния.

Веб-сер­вер Internet Information Services в сво­их фай­лах жур­на­лов, кро­ме стан­дарт­ных кодов состо­я­ния, исполь­зу­ет под­ко­ды, запи­сы­вая их через точ­ку после основ­но­го. При этом в отве­тах от сер­ве­ра дан­ный под­код не раз­ме­ща­ет­ся — он нужен адми­ни­стра­то­ру сер­ве­ра, что­бы тот мог более точ­но опре­де­лять источ­ни­ки про­блем.

Обзорный список

Ниже пред­став­лен обзор­ный спи­сок всех опи­сан­ных в дан­ной ста­тье кодов отве­та:

Диа­грам­ма при­ня­тия веб-сер­ве­ром реше­ний на осно­ве заго­лов­ков

Ста­ти­сти­ка по кодам отве­та, сге­не­ри­ро­ван­ная ана­ли­за­то­ром логов Webalizer

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

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


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

  • 100 Continue — сер­вер удо­вле­тво­рён началь­ны­ми све­де­ни­я­ми о запро­се, кли­ент может про­дол­жать пере­сы­лать заго­лов­ки. Появил­ся в HTTP/1.1.
  • 101 Switching Protocols — сер­вер выпол­ня­ет тре­бо­ва­ние кли­ен­та и пере­клю­ча­ет про­то­ко­лы в соот­вет­ствии с ука­за­ни­ем, дан­ным в поле заго­лов­ка Upgrade. Сер­вер отправ­ля­ет заго­ло­вок отве­та Upgrade, ука­зы­вая про­то­кол, на кото­рый он пере­клю­чил­ся. Появил­ся в HTTP/1.1.
  • 102 Processing — запрос при­нят, но на его обра­бот­ку пона­до­бит­ся дли­тель­ное вре­мя. Исполь­зу­ет­ся сер­ве­ром, что­бы кли­ент не разо­рвал соеди­не­ние из-за пре­вы­ше­ния вре­ме­ни ожи­да­ния. Кли­ент при полу­че­нии тако­го отве­та дол­жен сбро­сить тай­мер и дожи­дать­ся сле­ду­ю­щей коман­ды в обыч­ном режи­ме. Появил­ся в WebDAV.
  • 103 Early Hints — исполь­зу­ет­ся для ран­не­го воз­вра­та части заго­лов­ков, когда заго­лов­ки пол­но­го отве­та не могут быть быст­ро сфор­ми­ро­ва­ны.

Успех


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

  • 200 OK — успеш­ный запрос. Если кли­ен­том были запро­ше­ны какие-либо дан­ные, то они нахо­дят­ся в заго­лов­ке и/или теле сооб­ще­ния. Появил­ся в HTTP/1.0.
  • 201 Created — в резуль­та­те успеш­но­го выпол­не­ния запро­са был создан новый ресурс. Сер­вер может ука­зать адре­са (их может быть несколь­ко) создан­но­го ресур­са в теле отве­та, при этом пред­по­чти­тель­ный адрес ука­зы­ва­ет­ся в заго­лов­ке Location. Сер­ве­ру реко­мен­ду­ет­ся ука­зы­вать в теле отве­та харак­те­ри­сти­ки создан­но­го ресур­са и его адре­са, фор­мат тела отве­та опре­де­ля­ет­ся заго­лов­ком 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.
  • 208 Already Reported — чле­ны при­вяз­ки DAV уже были пере­чис­ле­ны в преды­ду­щей части (multistatus) отве­та и не вклю­ча­ют­ся сно­ва.
  • 226 IM Used — заго­ло­вок A-IM от кли­ен­та был успеш­но при­нят и сер­вер воз­вра­ща­ет содер­жи­мое с учё­том ука­зан­ных пара­мет­ров. Вве­де­но в RFC 3229 для допол­не­ния про­то­ко­ла HTTP под­держ­кой дель­та-коди­ро­ва­ния.

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


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

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

Раз­ра­бот­чи­ки HTTP отме­ча­ют, что мно­гие кли­ен­ты при пере­на­прав­ле­ни­ях с кода­ми 301 и 302 оши­боч­но при­ме­ня­ют метод GET ко вто­ро­му ресур­су, несмот­ря на то, что к пер­во­му запрос был с иным мето­дом (чаще все­го PUT)[17]. Что­бы избе­жать недо­ра­зу­ме­ний, в вер­сии 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). Соглас­но ран­ним наброс­кам, код озна­чал Switch Proxy, ука­зы­вая кли­ен­ту сме­нить исполь­зу­е­мый прок­си-сер­вер на ука­зан­ный сер­ве­ром в заго­лов­ке отве­та[18].
  • 307 Temporary Redirect — запра­ши­ва­е­мый ресурс на корот­кое вре­мя досту­пен по дру­го­му URI, ука­зан­ный в поле Location заго­лов­ка. Метод запро­са (GET/POST) менять не раз­ре­ша­ет­ся. Напри­мер, POST-запрос дол­жен быть отправ­лен по ново­му URI тем же мето­дом POST. Этот код был вве­дён вме­сте с 303‑м вме­сто 302-го для избе­жа­ния неод­но­знач­но­сти. Вве­де­но в RFC 2616 (обнов­ле­ние HTTP/1.1).
  • 308 Permanent Redirect — запра­ши­ва­е­мый ресурс был окон­ча­тель­но пере­не­сен на новый URI, ука­зан­ный в поле Location заго­лов­ка. Метод запро­са (GET/POST) менять не раз­ре­ша­ет­ся. Напри­мер, POST-запрос дол­жен быть отправ­лен по ново­му URI тем же мето­дом POST. Этот код был вве­дён вме­сто 301-го для избе­жа­ния неод­но­знач­но­сти. Вве­де­но в RFC 7238 (RFC 7538).

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


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

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

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

  • 403 Forbidden[19] — сер­вер понял запрос, но он отка­зы­ва­ет­ся его выпол­нять из-за огра­ни­че­ний в досту­пе для кли­ен­та к ука­зан­но­му ресур­су. Ины­ми сло­ва­ми, кли­ент не упол­но­мо­чен совер­шать опе­ра­ции с запро­шен­ным ресур­сом. Если для досту­па к ресур­су тре­бу­ет­ся аутен­ти­фи­ка­ция сред­ства­ми HTTP, то сер­вер вер­нёт ответ 401, или 407 при исполь­зо­ва­нии прок­си. В про­тив­ном слу­чае огра­ни­че­ния были зада­ны адми­ни­стра­то­ром сер­ве­ра или раз­ра­бот­чи­ком веб-при­ло­же­ния и могут быть любы­ми в зави­си­мо­сти от воз­мож­но­стей исполь­зу­е­мо­го про­грамм­но­го обес­пе­че­ния. В любом слу­чае сер­ве­ру сле­ду­ет сооб­щить при­чи­ны отка­за в обра­бот­ке запро­са. Наи­бо­лее веро­ят­ны­ми при­чи­на­ми огра­ни­че­ния может послу­жить попыт­ка досту­па к систем­ным ресур­сам веб-сер­ве­ра (напри­мер, фай­лам .htaccess или .htpasswd) или к фай­лам, доступ к кото­рым был закрыт с помо­щью кон­фи­гу­ра­ци­он­ных фай­лов, тре­бо­ва­ние аутен­ти­фи­ка­ции не сред­ства­ми HTTP, напри­мер, для досту­па к систе­ме управ­ле­ния содер­жи­мым или раз­де­лу для заре­ги­стри­ро­ван­ных поль­зо­ва­те­лей либо сер­вер не удо­вле­тво­рён IP-адре­сом кли­ен­та, напри­мер, при бло­ки­ров­ках. Появил­ся в HTTP/1.0.
  • 404 Not Found[20] — самая рас­про­стра­нён­ная ошиб­ка при поль­зо­ва­нии Интер­не­том, основ­ная при­чи­на — ошиб­ка в напи­са­нии адре­са Web-стра­ни­цы. Сер­вер понял запрос, но не нашёл соот­вет­ству­ю­ще­го ресур­са по ука­зан­но­му URL. Если сер­ве­ру извест­но, что по это­му адре­су был доку­мент, то ему жела­тель­но исполь­зо­вать код 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, но был уда­лён и теперь недо­сту­пен. Сер­ве­ру в этом слу­чае неиз­вест­но и место­по­ло­же­ние аль­тер­на­тив­но­го доку­мен­та (напри­мер копии). Появил­ся в HTTP/1.1.
  • 411 Length Required — для ука­зан­но­го ресур­са кли­ент дол­жен ука­зать Content-Length в заго­лов­ке запро­са. Без ука­за­ния это­го поля не сто­ит делать повтор­ную попыт­ку запро­са к сер­ве­ру по дан­но­му URI. Такой ответ есте­стве­нен для запро­сов типа POST и PUT. Напри­мер, если по ука­зан­но­му URI про­из­во­дит­ся загруз­ка фай­лов, а на сер­ве­ре сто­ит огра­ни­че­ние на их объ­ём. Тогда разум­ней будет про­ве­рить в самом нача­ле заго­ло­вок Content-Length и сра­зу отка­зать в загруз­ке, чем про­во­ци­ро­вать бес­смыс­лен­ную нагруз­ку, раз­ры­вая соеди­не­ние, когда кли­ент дей­стви­тель­но при­шлёт слиш­ком объ­ём­ное сооб­ще­ние. Появил­ся в HTTP/1.1.
  • 412 Precondition Failed — воз­вра­ща­ет­ся, если ни одно из услов­ных полей заго­лов­ка (If-Match и др., см. RFC 7232) запро­са не было выпол­не­но. Появил­ся в HTTP/1.1.
  • 413 Payload Too Large — воз­вра­ща­ет­ся в слу­чае, если сер­вер отка­зы­ва­ет­ся обра­бо­тать запрос по при­чине слиш­ком боль­шо­го раз­ме­ра тела запро­са. Сер­вер может закрыть соеди­не­ние, что­бы пре­кра­тить даль­ней­шую пере­да­чу запро­са. Если про­бле­ма вре­мен­ная, то реко­мен­ду­ет­ся в ответ сер­ве­ра вклю­чить заго­ло­вок Retry-After с ука­за­ни­ем вре­ме­ни, по исте­че­нии кото­ро­го мож­но повто­рить ана­ло­гич­ный запрос. Появил­ся в HTTP/1.1. Ранее назы­вал­ся «Request Entity Too Large».
  • 414 URI Too Long — сер­вер не может обра­бо­тать запрос из-за слиш­ком длин­но­го ука­зан­но­го URI. Такую ошиб­ку мож­но спро­во­ци­ро­вать, напри­мер, когда кли­ент пыта­ет­ся пере­дать длин­ные пара­мет­ры через метод GET, а не POST. Появил­ся в HTTP/1.1. Ранее назы­вал­ся «Request-URI Too Long».
  • 415 Unsupported Media Type — по каким-то при­чи­нам сер­вер отка­зы­ва­ет­ся рабо­тать с ука­зан­ным типом дан­ных при дан­ном мето­де. Появил­ся в HTTP/1.1.
  • 416 Range Not Satisfiable — в поле Range заго­лов­ка запро­са был ука­зан диа­па­зон за пре­де­ла­ми ресур­са и отсут­ству­ет поле If-Range. Если кли­ент пере­дал бай­то­вый диа­па­зон, то сер­вер может вер­нуть реаль­ный раз­мер в поле Content-Range заго­лов­ка. Дан­ный ответ не сле­ду­ет исполь­зо­вать при пере­да­че типа multipart/byteranges[источ­ник не ука­зан 3940 дней]. Вве­де­но в RFC 2616 (обнов­ле­ние HTTP/1.1). Ранее назы­вал­ся «Requested Range Not Satisfiable».
  • 417 Expectation Failed — по каким-то при­чи­нам сер­вер не может удо­вле­тво­рить зна­че­нию поля Expect заго­лов­ка запро­са. Вве­де­но в RFC 2616 (обнов­ле­ние HTTP/1.1).
  • 418 I’m a teapot — Этот код был вве­ден в 1998 году как одна из тра­ди­ци­он­ных пер­во­ап­рель­ских шуток IETF в RFC 2324, Hyper Text Coffee Pot Control Protocol. Не ожи­да­ет­ся, что дан­ный код будет под­дер­жи­вать­ся реаль­ны­ми сер­ве­ра­ми[21].
  • 419 Authentication Timeout (not in RFC 2616) — Это­го кода нет в RFC 2616, исполь­зу­ет­ся в каче­стве аль­тер­на­ти­вы коду 401, кото­рые про­шли про­вер­ку под­лин­но­сти, но лише­ны досту­па к опре­де­лён­ным ресур­сам сер­ве­ра. Обыч­но код отда­ет­ся, если CSRF-токен уста­рел или ока­зал­ся некор­рект­ным.
  • 421 Misdirected Request — запрос был пере­на­прав­лен на сер­вер, не спо­соб­ный дать ответ.
  • 422 Unprocessable Entity — сер­вер успеш­но при­нял запрос, может рабо­тать с ука­зан­ным видом дан­ных (напри­мер, в теле запро­са нахо­дит­ся XML-доку­мент, име­ю­щий вер­ный син­так­сис), одна­ко име­ет­ся какая-то логи­че­ская ошиб­ка, из-за кото­рой невоз­мож­но про­из­ве­сти опе­ра­цию над ресур­сом. Вве­де­но в WebDAV.
  • 423 Locked — целе­вой ресурс из запро­са забло­ки­ро­ван от при­ме­не­ния к нему ука­зан­но­го мето­да. Вве­де­но в WebDAV.
  • 424 Failed Dependency — реа­ли­за­ция теку­ще­го запро­са может зави­сеть от успеш­но­сти выпол­не­ния дру­гой опе­ра­ции. Если она не выпол­не­на и из-за это­го нель­зя выпол­нить теку­щий запрос, то сер­вер вер­нёт этот код. Вве­де­но в WebDAV.
  • 425 Too Early — сер­вер не готов при­нять рис­ки обра­бот­ки «ран­ней инфор­ма­ции». Вве­де­но в RFC 8470 для защи­ты от атак повто­ре­ния при исполь­зо­ва­нии 0‑RTT в TLS 1.3.
  • 426 Upgrade Required — сер­вер ука­зы­ва­ет кли­ен­ту на необ­хо­ди­мость обно­вить про­то­кол. Заго­ло­вок отве­та дол­жен содер­жать пра­виль­но сфор­ми­ро­ван­ные поля Upgrade и Connection. Вве­де­но в RFC 2817 для воз­мож­но­сти пере­хо­да к TLS посред­ством HTTP.
  • 428 Precondition Required — сер­вер ука­зы­ва­ет кли­ен­ту на необ­хо­ди­мость исполь­зо­ва­ния в запро­се заго­лов­ков усло­вий, напо­до­бие If-Match. Вве­де­но в чер­но­ви­ке стан­дар­та RFC 6585.
  • 429 Too Many Requests — кли­ент попы­тал­ся отпра­вить слиш­ком мно­го запро­сов за корот­кое вре­мя, что может ука­зы­вать, напри­мер, на попыт­ку DDoS-ата­ки. Может сопро­вож­дать­ся заго­лов­ком 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[12], при этом код ошиб­ки явля­ет­ся отсыл­кой к рома­ну Рэя Брэд­бе­ри «451 гра­дус по Фарен­гей­ту». Был добав­лен в стан­дарт 21 декаб­ря 2015 года[22].
  • 499 Client Closed Request — нестан­дарт­ный код, пред­ло­жен­ный и исполь­зу­е­мый nginx для слу­ча­ев, когда кли­ент закрыл соеди­не­ние, пока nginx обра­ба­ты­вал запрос.

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

При­мер ошиб­ки 502 Bad Gateway


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

  • 500 Internal Server Error[23] — любая внут­рен­няя ошиб­ка сер­ве­ра, кото­рая не вхо­дит в рам­ки осталь­ных оши­бок клас­са. Появил­ся в 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.
  • 508 Loop Detected — опе­ра­ция отме­не­на, т.к. сер­вер обна­ру­жил бес­ко­неч­ный цикл при обра­бот­ке запро­са без огра­ни­че­ния глу­би­ны. Вве­де­но в WebDAV.
    • 508 Resource Limit Reached — вари­ант ошиб­ки 508 в CloudLinux, воз­ни­ка­ю­щий при исчер­па­нии лими­тов хостин­га[24].
  • 509 Bandwidth Limit Exceeded — исполь­зу­ет­ся при пре­вы­ше­нии веб-пло­щад­кой отве­дён­но­го ей огра­ни­че­ния на потреб­ле­ние тра­фи­ка. В дан­ном слу­чае вла­дель­цу пло­щад­ки сле­ду­ет обра­тить­ся к сво­е­му хостинг-про­вай­де­ру. В насто­я­щий момент дан­ный код не опи­сан ни в одном RFC и исполь­зу­ет­ся толь­ко моду­лем «bw/limited», вхо­дя­щим в панель управ­ле­ния хостин­гом cPanel, где и был вве­дён.
  • 510 Not Extended — на сер­ве­ре отсут­ству­ет рас­ши­ре­ние, кото­рое жела­ет исполь­зо­вать кли­ент. Сер­вер может допол­ни­тель­но пере­дать инфор­ма­цию о доступ­ных ему рас­ши­ре­ни­ях. Вве­де­но в RFC 2774 для допол­не­ния про­то­ко­ла HTTP под­держ­кой рас­ши­ре­ний.
  • 511 Network Authentication Required — этот ответ посы­ла­ет­ся не сер­ве­ром, кото­ро­му был пред­на­зна­чен запрос, а сер­ве­ром-посред­ни­ком — напри­мер, сер­ве­ром про­вай­де­ра — в слу­чае, если кли­ент дол­жен сна­ча­ла авто­ри­зо­вать­ся в сети, напри­мер, вве­сти пароль для плат­ной точ­ки досту­па к Интер­не­ту. Пред­по­ла­га­ет­ся, что в теле отве­та будет воз­вра­ще­на Web-фор­ма авто­ри­за­ции или пере­на­прав­ле­ние на неё. Вве­де­но в чер­но­ви­ке стан­дар­та RFC 6585.
  • 520 Unknown Error, воз­ни­ка­ет когда сер­вер CDN не смог обра­бо­тать ошиб­ку веб-сер­ве­ра; нестан­дарт­ный код CloudFlare.
  • 521 Web Server Is Down, воз­ни­ка­ет когда под­клю­че­ния CDN откло­ня­ют­ся веб-сер­ве­ром; нестан­дарт­ный код CloudFlare.
  • 522 Connection Timed Out, воз­ни­ка­ет когда CDN не уда­лось под­клю­чить­ся к веб-сер­ве­ру; нестан­дарт­ный код CloudFlare.
  • 523 Origin Is Unreachable, воз­ни­ка­ет когда веб-сер­вер недо­сти­жим; нестан­дарт­ный код CloudFlare.
  • 524 A Timeout Occurred, воз­ни­ка­ет при исте­че­нии тайм-аута под­клю­че­ния меж­ду сер­ве­ром CDN и веб-сер­ве­ром; нестан­дарт­ный код CloudFlare.
  • 525 SSL Handshake Failed, воз­ни­ка­ет при ошиб­ке руко­по­жа­тия SSL меж­ду сер­ве­ром CDN и веб-сер­ве­ром; нестан­дарт­ный код CloudFlare.
  • 526 Invalid SSL Certificate, воз­ни­ка­ет когда не уда­ёт­ся под­твер­дить сер­ти­фи­кат шиф­ро­ва­ния веб-сер­ве­ра; нестан­дарт­ный код CloudFlare.

См. также

Примечания

  1. 1 2 2.2.6 449 «Retry With Status Code» // Web Distributed Authoring and Versioning (WebDAV) Protocol: Client Extensions. Архив­ная копия от 5 октяб­ря 2009 на Wayback Machine на сай­те MSDN
  2. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 «6.1.1 Status Code and Reason Phrase Архив­ная копия от 7 июня 2018 на Wayback Machine» в RFC 2068
  3. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 RFC 2616. Дата обра­ще­ния: 29 июля 2009. Архи­ви­ро­ва­но 7 мар­та 2011 года.
  4. 1 2 3 IETF Draft WebDAV Advanced Collections Protocol — S.4.2.5. Дата обра­ще­ния: 18 мая 2012. Архи­ви­ро­ва­но 9 июля 2012 года.
  5. IETF Draft WebDAV Advanced Collections Protocol — S.10. Дата обра­ще­ния: 18 мая 2012. Архи­ви­ро­ва­но 9 июля 2012 года.
  6. rfc5842. Дата обра­ще­ния: 12 сен­тяб­ря 2017. Архи­ви­ро­ва­но 10 октяб­ря 2017 года.
  7. 1 2 3 4 5 6 7 8 9 10 RFC 2616 «10.3 Redirection 3xx» (стр. 61). Дата обра­ще­ния: 29 июля 2009. Архи­ви­ро­ва­но 7 мар­та 2011 года.
  8. rfc7538. Дата обра­ще­ния: 12 сен­тяб­ря 2017. Архи­ви­ро­ва­но 16 апре­ля 2015 года.
  9. IETF Draft WebDAV Advanced Collections Protocol — S.4.3.1.1. Дата обра­ще­ния: 18 мая 2012. Архи­ви­ро­ва­но 9 июля 2012 года.
  10. rfc7540. Дата обра­ще­ния: 12 сен­тяб­ря 2017. Архи­ви­ро­ва­но 23 июня 2015 года.
  11. 1 2 3 4 RFC 6585
  12. 1 2 IETF Draft A New HTTP Status Code to Report Legal Obstacles. Дата обра­ще­ния: 6 мар­та 2013. Архи­ви­ро­ва­но 22 мая 2013 года.
  13. RFC 2295 Transparent Content Negotiation in HTTP — S.8.1. Дата обра­ще­ния: 18 мая 2012. Архи­ви­ро­ва­но 8 июня 2012 года.
  14. IETF Draft WebDAV Advanced Collections Protocol — S.7.1. Дата обра­ще­ния: 18 мая 2012. Архи­ви­ро­ва­но 9 июля 2012 года.
  15. 1 2 3 4 5 6 7 Error Pages – CloudFlare Support. Дата обра­ще­ния: 18 апре­ля 2016. Архи­ви­ро­ва­но 4 мар­та 2016 года.
  16. RFC 2068 «10.3 Redirection 3xx» (стр. 56) Архив­ная копия от 7 июня 2018 на Wayback Machine.
  17. RFC 2616, раз­дел «10.3.3 302 Found», стра­ни­ца 63 Архив­ная копия от 7 мар­та 2011 на Wayback Machine.
  18. Josh Cohen HTTP/1.1 305 and 306 Response Codes Архив­ная копия от 8 сен­тяб­ря 2014 на Wayback Machine (англ.) // Netscape Communications Corp., 25 декаб­ря 1996
  19. Что озна­ча­ет 403 Forbidden? Архив­ная копия от 21 фев­ра­ля 2014 на Wayback Machine.
  20. При­чи­ны появ­ле­ния ошиб­ки 404 Not Found Архив­ная копия от 21 фев­ра­ля 2014 на Wayback Machine.
  21. RFC 2324 — Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0).
  22. draft-ietf-httpbis-legally-restricted-status-04. datatracker.ietf.org. Дата обра­ще­ния: 22 декаб­ря 2015. Архи­ви­ро­ва­но 23 декаб­ря 2015 года.
  23. Опи­са­ние ошиб­ки 500 Internal Server Error Архив­ная копия от 21 фев­ра­ля 2014 на Wayback Machine.
  24. Resource Limit Reached. www.cloudlinux.com. Дата обра­ще­ния: 21 июня 2022. Архи­ви­ро­ва­но 15 мая 2021 года.

Ссылки

Основ­ные доку­мен­ты по про­то­ко­лу HTTP (по убы­ва­нию даты пуб­ли­ка­ции)
Доку­мен­ты по рас­ши­ре­ни­ям и обнов­ле­ни­ям про­то­ко­ла HTTP (по убы­ва­нию даты пуб­ли­ка­ции)
Допол­ни­тель­ные мате­ри­а­лы

[btn-action]
[wp-post-stars]

Похожее ...

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

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