В данном разделе будут рассмотрены различные коды ответов, возвращаемые HTTP-сервером, а точнее – коды состояния, содержащиеся в свойстве КодСостояния объектов HTTPСервисОтвет и HTTPОтвет.
Подробнее
Более подробно коды состояний, возвращаемые сервером, описаны в протоколе по адресу http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html.
Если при выполнении HTTP-запроса на веб-сервере возникает фатальная ошибка, то в большинстве случаев нужно остановить работу и показать пользователю сообщение об ошибке, включив в него код состояния, возвращенный HTTP-сервером.
Прежде всего, если при попытке выполнить HTTP-запрос на веб-сервере было вызвано исключение, то это говорит о том, что запрос не дошел до HTTP-сервера.
Коды состояний 4XX сигнализируют о неправильном запросе. Причины ошибок могут быть следующими:
Коды состояний 5XX сигнализируют о проблемах на сервере (возможно, на прокси-сервере). Причины ошибок могут быть следующими:
Коды состояний 3XX означают, что клиент должен предпринять дальнейшие действия для выполнения запроса. При этом запрос должен быть перенаправлен на новый адрес. Причины ошибок могут быть следующими:
Коды состояний 1XX и 2XX означают, что запрос клиента был успешно получен, понят и принят.
Ниже приводится пример процедуры ВыполнитьHTTPЗапрос(), которая получает в качестве параметра адрес ресурса. В процедуре устанавливается HTTP-соединение с локальным веб-сервером "localhost", затем на основе адреса ресурса создается HTTP-запрос и выполняется на сервере методом Получить() объекта HTTPСоединение. Ответ сервера в виде объекта HTTPОтвет возвращается в переменную Результат (листинг 1.142).
Листинг 1.142. Процедура «ВыполнитьHTTPЗапрос»
&НаСервереБезКонтекста
Процедура ВыполнитьHTTPЗапрос(АдресРесурса)
СерверИсточник = "localhost";
Сообщение = Новый СообщениеПользователю;
// Создать HTTP-соединение с сервером localhost.
HTTPСоединение = Новый HTTPСоединение(СерверИсточник);
// Создать HTTP-запрос на основе URL.
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
Попытка
Результат = HTTPСоединение.Получить(HTTPЗапрос);
Исключение
Сообщение.Текст = "Произошла сетевая ошибка!";
Сообщение.Сообщить();
ВызватьИсключение;
КонецПопытки;
Если Результат.КодСостояния >= 400 и Результат.КодСостояния < 500 Тогда
Сообщение.Текст = "Код статуса больше 4XX, ошибка запроса. Код статуса: " + Результат.КодСостояния;
КонецЕсли;
Если Результат.КодСостояния >= 500 и Результат.КодСостояния < 600 Тогда
Сообщение.Текст = "Код статуса больше 5XX, ошибка сервера. Код статуса: " + Результат.КодСостояния;
КонецЕсли;
// Обработать перенаправление.
Если Результат.КодСостояния >= 300 и Результат.КодСостояния < 400 Тогда
Сообщение.Текст = "Код статуса больше 3XX, Перенаправление. Код статуса: " + Результат.КодСостояния;
Если Результат.КодСостояния = 302 Тогда
Сообщение.Текст = Сообщение.Текст + Символы.ПС + "Код статуса 302, Постоянное перенаправление.";
АдресРесурса = Результат.Заголовки.Получить("Location");
Если АдресРесурса <> Неопределено Тогда
Сообщение.Текст = Сообщение.Текст + Символы.ПС + "Выполняю запрос по новому адресу " +
Символы.ПС + АдресРесурса;
ВыполнитьHTTPЗапрос(АдресРесурса);
Иначе
Сообщение.Текст = Сообщение.Текст + Символы.ПС + "Сервер не сообщил адрес ресурса!";
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Результат.КодСостояния < 300 Тогда
Сообщение.Текст = "Скорее всего все хорошо!";
Сообщение.Текст = Сообщение.Текст + Символы.ПС + "Код статуса: " + Результат.КодСостояния;
КонецЕсли;
Сообщение.Сообщить();
КонецПроцедуры
В этой процедуре обрабатываются и выводятся пользователю различные коды состояния HTTP-сервера. Отдельно анализируются коды ответа, которые сигнализируют о перенаправлении запросов. Если код состояния – 302, то процедура выполняется заново, с новым адресом ресурса.