Классы ответов НТТР/1.0

Каждое сообщение-ответ HTTP начинается со строки сосгояиия, которая имеет три поля: номер версии протокола сервера, код ответа и поясняющая фраза на естественном языке. Запрос на сервере может быть успешно обработай, вызвать отказ в обработке, либо быть переадресованным на другой сервер. В сообщении-за- иросе могут содержаться синтаксические ошибки, могут возникнуть проблемы нри обработке запроса сервером. Различные виды ответов груннируются в классгя ответов. В HTTP каждый из пяти классов ответов имеет несколько кодов ответов, каждый из которых выражается трехзначным целым числом. К няти классам ответов относятся: информационный класс, коды ответов для которого начинаются с 1 (записываются как lxx); класс успешного выполнения запроса (2xx); класс переадресации (3xx); класс ошибок клиента (4xx); класс ошибок сервера (5xx).

Идея классов ответов была заимствована у почтового протокола SMTP [Pos82J. Протокол FTP [PR85] имеет схожий механизм кодов ответов. Изпачальпо в HTTP имелось только четыре класса, однако позднее был добавлен информационный класс (lxx). Выбор первоначальных четырех классов ответов был в определенном смысле произвольным, поскольку протокол HTTP отличается от почтового протокола. Однако адаптация хорошо известиого и понятного механизма послужила хорошей отправпой точкой. Хотя теоретически протокол допускает создание дополнительных классов, на практике имеющиеся реализации могут недостаточно четко использовать новые классы ответов. Правилыю написанная реализация будет трактовать код ответа, принадлежащий неизвестному классу ответов, как ошибку.

Помимо числовых кодов ответов в HTTP предусмотрена короткая описательная фраза на естественном языке, называемая строкой описания (reason phrase), которая облегчает отладку и разработку приложений. Строка описания похожа на текст, ассоциированный с кодом ответа в SMTP. Некоторые браузеры отображают строку описания. Однако между кодами ответов в SMTP и в HTTP имеются различия. Каждая из трех цифр в коде ответа SMTP имеет специальное значение, как указано в Приложении E документа RFC 821. Первая цифра обозначает класс ответа, вторая цифра предоставляет несколько более подробную информацию об ответе, а третья цифра дает окончательную степень детализации. В отличие от первой и второй цифр, третья цифра не имеет специального смысла, связанного с ее значением. Вторая цифра в коде ответа SMTP имеет значение 0 для синтаксической информации, 1 для ответов, несущих дополнительную информацию, 2 для информации, относящейся к коммуникационному каналу, и 5 для почтовой информации. В HTTP же вторая и третья цифры не несут какой-либо дополнительной информации. Коды ответов в каждом классе получали последовательные номера.

В то время как коды ответов стандартизованы, строки состояния не являются стандартизованными. В различных программах могут использоваться различные строки, что не оказывает влияпия на интерпретацию кода ответа. Например, ответ 404 Not Found (Не пайдепо) означает то же самое, что 404 Missing Resource (Ресурс отсутствует) или 404 Kaanavillai.

Следует заметить, что хотя не все коды ответов понятны для всех НТТР-ирило- жений, класс ответа, к которому принадлежит код, должен быть попятным. Класс определяется первой цифрой кода. Каждый класс ответа x имеет x00 в качестве ответа по умолчанию. Если приложение получает код ответа, который ему пепопя- ieii, оно ведет себя так, как если бы получило код ответа по умолчапию. Предположим, что сервер-посредпик НТТР/1.0 получает код ответа 206 Partial Content, который был определен в НТТР/1.1. Сервер-посредпик НТТР/1.0 может не зпать, как должным образом интерпретировать такой ответ. Однако посредник должен трактовать его как код ответа 200 OK и не должен кэшировать ответ. НТТР-прило- жепие, такое как браузер или сервер-посредпик, должпо вести себя предсказуемо, даже если получает неопознанный код ответа. Заметим, что такой образ поведения неявным образом запрещает добавление новых классов кодов ответов, поскольку старые НТТР-приложепия не будут зпать, как интерпретировать коды ответов для нового класса. Далее мы подробно рассмотрим все пять классов ответов.

ИНФОРМАЦИОННЫЙ КЛАСС ОТВЕТОВ

Хотя информационный класс ответов был определен в НТТР/1.0, в действительности коды ответов не выделялись до появления НТТР/1.1. Это является примером заботы о будущих пуждах и расширяемости, что является признаком хорошего стиля разработки протокола. Этот класс ответов был явпо предназначен для экспериментальных приложений. Ко времени формализации НТТР/1.1 ипформа- ционный класс кодов ответов, которые были полезными для Web-траизакций, был определен н в настоящее время применяется. Класс lxx кодов состояния ответов подробнее рассматривается в главе 7 (раздел 7.2.3).

КЛАСС ОТВЕТОВ УСПЕШНОГО ВЫПОЛНЕНИЯ

После того как сервер получил и припял к выполнению HTTP-запрос, оп гене- рпруег ответ, принадлежащий к классу успешного выполнения. Это не означает, что результат будет соответствовать ожиданиям клиента. Сервер припял запрос и включает соответствующий ответ на основе метода запроса. Код успешного выполнения пикак не связан с наличием или отсутствием тела сообщения. Например, код ответа 200 OK вполне применим к сообщению с пустым телом, поскольку тело сообщения может иметь пулевую длину.

В НТТР/1.0 имеются следующие четыре кода ответов 2xx:

•          200 ОК. Ответ 200 OK возвращается, если запрос выполнен успешпо. В зависимости от метода запроса в ответ включается различное количество деталей. Например, запрос GET приводит к выдаче ответа исходным сервером, применяющим метод GET к ресурсу. В случае запроса HEAD ответ 200 OK будет содержать только метаданные.

•          201 Created. Этот ответ возвращается, если ресурс был успешпо создап в результате выполнения запроса POST. Хотя это официально и не определено в НТТР/1.0, метод PUT может также возвращать ответ 201 Created, если запрашиваемый URI не существовал и был успешпо создап.

•          202 Accepted. Ответ 202 Accepted ипформирует клиента, что запрос был получен, по пока не обработан полностью. Хотя позднее запрос может закоп- читься неудачей, главное назначение этого кода ответа — дать возможность агенту пользователя продолжить выполнение своей задачи, не ожидая завершения выполнения действия исходным сервером. Код 202 Accepted был специально предусмотрен для ситуаций, когда исходный сервер знает, что ответ не будет создап немедленно. Например, запрос может инициировать программу, выполнение которой на исходном сервере запимаег много времени, или процесс откладывается для последующего выполнения. Вместе с кодом ответа исходный сервер может предоставить сведения, когда действия могут реально завершиться. Если могут быть сформированы достоверные оценки, то они на естественным языке включаются в тело ответа.

•          204 No Content. Код 204 No Content является сигпалом от исходного сервера, подтверждающим завершение обработки запроса, и не требует реалыю видимых пользователем изменений. Предположим, пользователь щелкает мышью на чувствительной области карты изображений, обрабатываемой на исходном сервере; т.е. щелчок на активных участках может инициировать запрос. Если пользователь щелкает на других участках изображения карты, отображаемой пользователю, не произойдет никаких изменений. Это достигается за счет отправки сервером ответа 204 No Content, который браузер интерпретирует как «изменений не требуются».

КЛАСС ОТВЕТОВ, СВЯЗАННЫХ C ПЕРЕАДРЕСАЦИЕЙ

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

•          300 Multiple Choices. Код 300 Multiple Choices Главным образом выполняет роль кода ответа по умолчанию. В действительности приложения не используют этот код ответа. Информация о доступности ресурса в другом месте включается в ответ 300 Multiple Choices с помощью заголовка ответа Location. Агент пользователя использует информацию о местонахождении и автоматически пытается извлечь ресурс оттуда.

•          301 Moved Permanently. Код 301 Moved Permanently используется для указания, что запрашиваемый ресурс имеет-повое местонахождение. Это полезно для автоматической переадресации запросов GET и HEAD (по не POST) другому сайту. Метод POST, в отличие от методов GET и HEAD, может потребовать явного подтверждения от пользователя, поскольку он иотепциалыю изменяет содержимое на исходном сервере.

•          302 Moved Temporarily. Код 302 Moved Temporarily является разновидностью ответа 301 Moved Permanently в том смысле, что запрашиваемый ресурс также был неремещеп, но не постоянно. В отличие от ответа 301 Moved Permanently, клиенты будут продолжать использовать в будущих запросах старый URL. В то время как ответы 301 Moved Permanently по умолчапию являются кэшируемыми, ответы 302 Moved Temporarily не кэшируются.

•          304 Not Modified. Код ответа 304 Not Modified возвращается, если время последней модификации проверяемого ресурса не изменилось. Это имеет особое значение для кэширования, о чем подробнее рассказывается в главе 11.

КЛАСС ОТВЕТОВ, СВЯЗАННЫЙ С ОШИБКАМИ КЛИЕНТА

Класс 4xx кодов ответов используется для идентификации ошибок, которые могли иметь место на клиенте. Агент пользователя отображает коды ошибок и строки описания пользователю, чтобы он предпринял необходимые действия но исправлению ошибок. В НТТР/1.0 имеются следующие четыре кода ошибок клиента:

•          400 Bad Request. Этот ответ указывает, что синтаксис запроса был либо некорректен, либо не смог быть распознан исходным сервером.

•          401 Unauthorized. Если в запросе отсутствует необходимая информация о правах доступа, сервер возвращает код ошибки 401 Unauthorized. Это может случиться, если запрос либо вообще не содержит какой-либо информации о полномочиях доступа, либо эта информация неверпа. Вопросы, связанные с аутентификацией в НТТР/1.0, рассматриваются в разделе 6.4.

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

•          404 Not Found. Принимая во внимание большое количество запросов на несуществующие ресурсы, следует призпать наиболее широко распространенным кодом ошибки клиента код 404 Not Found. Этот код возвращается, если исходный сервер не может найти запрашиваемый ресурс. Ошибка может быть обусловлена тем фактом, что ресурс временно недоступен. В НТТР/1.0 не иредусмотреио возможностей для указания, когда ресурс спова может стать достунным.

КЛАСС ОТВЕТОВ, СВЯЗАННЫЙ С ОШИБКАМИ СЕРВЕРА

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

В классе 5xx имеются следующие четыре кода ответов:

•          500 Internal Server Error. Умалчиваемым для класса 5xx является код 500 Internal Server Error, который возвращается, если сервер не может точно определить характер ошибки.

•          501 Not Implemented. Если сервер знает, что у него нет возможности работать с определенным методом запроса, он может вернуть код 501 Not Implemented. Например, сервер, получивший запрос с методом, определенным в более рап- ней версии протокола, возвратит этот код.

•          502 Bad Gateway. Код ответа 502 Bad Gateway используется, если сервер, действующий в данный момент как носредпик или шлюз, не сиособеп обработать ответ, полученный от другого сервера. Это указывает, что отвечающий сервер не был источником ошибки.

•          503 Service Unavailable. Если сервер временно не может ответить, по иадеется ответить поздпее, он использует код ответа 503 Service Unavailable. Сервер может временно быть занят. Этот ответ указывает клиенту, что ему следует попытаться повторить запрос позднее.

Источник: Web-протоколы. Теория и практика. — M.: ЗАО «Издательство БИНОМ», 2002 г. – 592 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100