Классы ошибок
Настройка реакции на ошибку
Литература

Новые коды


Путешествуя по WWW, пользователи часто встречаются с загадочными сообщениями об ошибках типа 404 Not Found или 500 Server Error и обычно либо злятся на них, либо просто не обращают внимания. И тем не менее откуда берутся эти сообщения и что они означают?

Все мы видели их не раз и не два: Web-страницы с лаконичным текстом, извещающим, что туда, куда нам нужно, мы попасть не можем, и в нескольких словах объясняющим почему. Самая распространенная страница этого типа содержит гигантскую жирную надпись 404 Not Found (404: ресурс не найден), а под ней - чуть ли не извинения: URL '/abcde.html' not found on server (ресурс с URL '/abcde.html' на сервере не найден). Не исключено, что страница "404 Not Found" - самая посещаемая в мире.

Расскажу о следующем случае. В прошлом году в праздник Хэллоуин мы с приятельницей решили нарядиться на маскарад Web-страницами: распечатали увеличенные снимки экранов, наклеили их на большие куски картона и повесили себе на шею. Естественно, экраны должны были быть легко узнаваемы. Я выбрала главную страницу сервера Yahoo!, а приятельница - стандартную "404 Not Found". На мою долю достались жидкие аплодисменты, зато костюм приятельницы стал гвоздем всего вечера.

Эта история иллюстрирует три обстоятельства:

- хотя мы обычно игнорируем подобные страницы, встречи с ними стали будничным делом для тех, кто путешествует по Web;

- мои друзья ценят юмор "для узкого круга";

- они проводят в Web слишком много времени.

Вряд ли я в состоянии как-то прокомментировать второй и третий пункты, но первый прокомментировать могу. Сообщение 404 Not Found представляет собой один из многих кодов ошибок HTTP/1.1. Такие коды, поясняющие, что происходит между сервером и клиентом, создаются сервером и пересылаются на клиентскую машину. Как правило, браузер выводит код на экран в форме стандартной Web-страницы, но может также проигнорировать его или загрузить специальную страницу. Не следует путать код ошибки сервера с клиентским сообщением об ошибке, которое выводится в диалоговом окне.

Все коды состояний определены в разработанных W3C спецификациях HTTP/1.1 на странице 51 и следующих. Определение каждого кода содержит "метод(ы), которым он может следовать, и полный список метаинформации, необходимой для правильной реакции".

Перечислю наиболее распространенные коды ошибок.

204 No Content


Нет содержания. Это означает, что сервер выполнил запрос по протоколу HTTP, но новой информации, которую он мог бы передать клиенту, не существует.

200 OK


Все в порядке. Знаете ли вы о том, что при всяком успешном обращении к Web-странице сервер регистрирует код OK? Вот это он и есть. Код означает, что запрос был успешно обработан, но пользователю соответствующее сообщение никогда не показывают.

400 Bad Request


Некорректный запрос. Запрос HTTP не был понят сервером из-за неправильного синтаксиса. Проверьте, не сделали ли вы где-нибудь опечатку, исправьте запрос и попытайтесь послать его снова.

401 Unauthorized


Нет разрешения. Запрос требует идентификации пользователя в соответствии со стандартом WWW, т. е. вам необходимы правильный идентификатор пользователя и пароль. Увидев это сообщение, проверьте в идентификаторе и пароле правописание и регистр (он существен и там, и там), кроме того, попробуйте печатать чуть медленнее. Если же вы пытаетесь пробраться на закрытую страницу, не будучи на ней зарегистрированным, я могу помочь вам, разве что напомнив, что Bob - очень распространенное имя пользователя, а sex - весьма популярный пароль. Все прочее оставляю на усмотрение читателя.

402 Payment Required


Требуется оплата. Сейчас этот код не применяют, в спецификациях он резервируется на будущее.

403 Forbidden


Доступ запрещен. У меня всегда такое чувство, что при этом коде надо бы выводить на экран картинку с черепом и скрещенными костями. Код означает, что сервер понял запрос, но отказывается его выполнить. Пароль тут ни при чем, повторные обращения также ничего не дадут. Обычно это сообщение используется на серверах, сконфигурированных так, чтобы скрывать от пользователя конкретную причину отказа.

404 Not Found


Ресурс не найден. Код, порождающий самую распространенную, самую узнаваемую страницу на свете. Он означает, что сервер не обнаружил ничего такого, что соответствовало бы запросу. Сервер ведет себя довольно любезно - по крайней мере сообщает, что именно он пытался, но не смог найти; например, текст URL '/microsoft.html' not found on server (ресурс с URL '/microsoft.html' на сервере не найден) подскажет вам, в чем дело, если на самом деле вам нужен файл microscope.html. Самая распространенная причина выдачи этого кода - опечатки, в том числе использование неправильного регистра. Вторая по распространенности причина состоит в том, что страницы, которую вы ищете, на сервере больше нет.

500 Internal Server Error


Внутренняя ошибка сервера. Согласно описанию HTTP/1.1, этот код выдается, когда "сервер столкнулся с неожиданными обстоятельствами, препятствующими выполнению запроса". Иначе говоря, вы ни в чем не виноваты и ничего не можете предпринять - разве что связаться с Web-мастером узла.

503 Service Unavailable


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

Классы ошибок

Каждый конкретный трехзначный код входит в некоторый класс; его можно определить по первой цифре.

Коды первого класса (1xx) - чисто информационные. В спецификациях HTTP/1.0 не определен ни один код ошибки из этого класса, так что серверы не посылают ответов с кодом 1xx никаким клиентам HTTP/1.0. Коды класса 1xx:

100 Continue (продолжить)
101 Switching Protocols (переключение протоколов)

Коды второго класса (2xx) соответствуют ситуациям, когда HTTP-запрос клиента успешно получен, понят и принят сервером. Это следующие коды:

200 OK
201 Created (объект создан)
202 Accepted (информация принята)
203 Non-Authoritative Information (не заслуживающая доверия информация)
204 No Content (нет содержания)
205 Reset Content (восстановить исходное содержание)
206 Partial Content (частичное содержание)

Класс 3xx составляют сообщения о перенаправлениях; чтобы выполнить запрос HTTP нужны еще какие-то действия пользовательского агента. Коды этого класса:

300 Multiple Choices (несколько вариантов на выбор)
301 Moved Permanently (ресурс перемещен на постоянной основе)
302 Moved Temporarily (ресурс временно перемещен)
303 See Other (смотрите другой ресурс)
304 Not Modified (не изменился)
305 Use Proxy (используйте прокси-сервер)

В классе 4xx больше всего разных кодов. С помощью этих кодов сервер сообщает об ошибке программы-клиента, т. е. о том, что проблема связана не с ним - сервером, а с вами - путешественником по Web. Вот их полный перечень:

400 Bad Request (некорректный запрос)
401 Unauthorized (нет разрешения)
402 Payment Required (требуется оплата)
403 Forbidden (доступ запрещен)
404 Not Found (ресурс не найден)
405 Method Not Allowed (недопустимый метод)
406 Not Acceptable (неприемлемый запрос)
407 Proxy Authentication Required (необходима регистрация на сервере-представителе)
408 Request Timeout (время обработки запроса истекло)
409 Conflict (конфликт)
410 Gone (ресурса больше нет)
411 Length Required (необходимо указать длину)
412 Precondition Failed (не выполнено предварительное условие)
413 Request Entity Too Large (запрашиваемый элемент слишком велик)
414 Request-URI Too Long (идентификатор ресурса в запросе слишком длинный)
415 Unsupported Media Type (неподдерживаемый тип устройства)

Возможно, серверы не раз выдавали вам коды класса 4xx, но результат выводился в другом формате. Попробуйте, например, задать в браузере адрес http://www.yahoo.com/whatever.html.

На экране появится специальная страница, используемая на сервере Yahoo! для извещения о том, что запрошенного документа не существует. Сервер пытается оказать вам посильную помощь, предъявив ближайший существующий аналог заданного ему запроса; в данном случае это просто основная страница самого Yahoo! (http://www.yahoo.com/).

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

Коды класса 5xx соответствуют симметричной ситуации - ошибке на сервере - и не имеют никакого отношения к пользователям Web. Однако если вы Web-мастер или отвечаете в своей фирме за подключение к Internet, вы, конечно, должны быть в курсе значений этих кодов и понимать, видят ли их пользователи на экранах своих браузеров. Каждый такой код несет полезную информацию, которая может пригодиться для устранения неисправности:

500 Internal Server Error (внутренняя ошибка сервера)
501 Not Implemented (функция не реализована)
502 Bad Gateway (дефект шлюза)
503 Service Unavailable (служба недоступна)
504 Gateway Timeout (время прохождения через шлюз истекло)
505 HTTP Version Not Supported (неподдерживаемая версия HTTP)

Настройка реакции на ошибку

Как мы видели на примере Yahoo!, можно заставить Web-сервер выдавать более дружелюбные сообщения об ошибках. К сожалению, конкретный способ сделать это для каждого сервера свой. Но при том что детали варьируются, суть остается неизменной. Первым делом вы создаете страницу (или страницы) с информацией, помогающей посетителю вашего узла вновь обрести почву под ногами. Естественное решение состоит в том, что это должен быть URL базовой страницы или поисковой системы узла. Затем необходимо сообщить Web-серверу, в каких случаях такая страница должна использоваться.

В случае серверов Netscape для этого нужно запустить программу администрирования ns-admin, нажать кнопку System Settings (установки системы), выбрать пункт Error Responses (реакция на ошибки), после чего заполнить форму.

Для других Web-серверов необходимую информацию следует искать в их документации.


Литература

Описание протокола HTTP/1.1: The Hypertext Transfer Protocol HTTP/ 1.1 Draft RFC http://www.w3.org/pub/WWW/Protocols/rfc2068/ rfc2068

Определения кодов ошибок - глава 10 спецификаций (с. 51): http://www.w3.org/pub/WWW/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-07.txt

Обзорная информация по HTTP: http://www.w3.org/Protocols/

Yahoo! (это лучший каталог в Web; он снабдил меня таким количеством примеров для статей, а заодно и замечательным маскарадным костюмом, что я просто не могу не включить его в список источников): http://www.yahoo.com/


Будучи активным пользователем Internet с 1988 г. и WWW - с 1994 г., Марива Х. Авирам хорошо помнит "добрые старые времена" в Сети. С 1995 г. она разрабатывает Web-узлы для различных фирм и дает консультации по вопросам, связанным с Internet.
E-mail: mariva.aviram@netscapeworld.com, http://www.mariva.com/.

Новые коды

В большинстве своем люди соглашаются с тем, что коды ошибок, рассматриваемые в статье, обезличены и несколько суховаты. Возможно, следовало бы предложить набор более содержательных и интересных кодов ошибок, объединив их в новый класс 6xx. Вот некоторые идеи:

600 Get a Life

Вернитесь в реальный мир. Послушайте, время - три часа ночи. Пора кончать лазанье по Паутине (или, если вы Web-мастер, копание в сервере) и отправляться на боковую.

601 Inappropriate Material

Неподходящий материал. Содержание страницы сомнительно или подпадает под ограничение "детям до шестнадцати". А вам действительно уже есть шестнадцать? Если нет, немедленно отправляйтесь по адресу http://www.pbs.org/rogers/ (популярная Web-страница для детей и их родителей. - Прим. ред.).

602 Really Bad Web Design

Действительно плохой дизайн. Эта страница отвратительна. Скажите Web-мастеру (или кто у них там пишет на HTML), чтобы прочел практикум по HTML Ричарда Кука в июльском номере NetscapeWorld за 1997 г. (http://www.netscapeworld.com//netscapeworld/nw-07-1997/nw-07-bestpract.html).

603 Random Status Code

Просто так. И с клиентом, и с запросом все в порядке. Но сервер вдруг решил вместо намеченной страницы направить вас на эту без всякой на то причины.

604 Cat GIF or JPEG Warning

Предупреждение: кошка в формате GIF или JPEG. Эта страница содержит фотографию кошки (кошек) разработчика.

607 Inflated Resume

Раздутое резюме. Легкий уклон в сторону профессиональных достижений вполне объясним, но это уже переходит всякие границы.

608 Unsupported Political Bombast

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

609 Copyright Violation

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

610 Ponzi Scheme

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

У вас есть еще предложения? Посылайте их мне по адресу mariva.aviram@netscapeworld.com.