18c0693f

Протокол HTTP


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

HTTP (Hypertext Transfer Protocol, протокол передачи гипертекста) представляет собой протокол прикладного уровня, использующий для пересылки данных протокол транспортного уровня. Достаточно подробное описание его можно найти в [5,6].

Сообщения HTTP бывают двух видов: запросы клиента и ответы сервера.

Запрос HTTP состоит из идентификации метода запроса, универсального идентификатора запрашиваемого ресурса (Universal Resource Identifier, URI), указания версии протокола и, возможно, набора заголовков с дополнительной информацией, а также поля данных общего вида.

<Request> ::= GET <URI> CrLf | <Method> <URI> <HTTP-Version> CrLf <Req-Header>* ( <Data> )? <Req-Header> ::= <Field> : <Value> CrLf CrLf ::= '\r''\n'

Основные методы протокола HTTP следующие.

Остальные методы — HEAD, PUT, DELETE, LINK, UNLINK — используются гораздо реже.

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



Пример запроса.

GET /locate?keywords=HTTP+description HTTP/1.1 Date: Mon, 15 Dec 2004 12:18:15 GMT Accept: image/gif, image/jpg, */* Accept-Charset: iso-8859-1, *, utf-8 Accept-Language: en Connection: keep-Alive User-Agent: Mozilla/4.7 [en] (Win98; u) Таблица 14.1. Некоторые коды статуса ответа HTTP и их объяснениеГруппа кодовКодФраза-объяснение, следующая за кодомЗначение кода
1xxИнформационное сообщение
2xxУспешная обработка
200OKВcе нормально
201CreatedДокумент создан
3xxПеренаправление запроса
301Moved PermanentlyРесурс перемещен
302Moved TemporarilyРесурс перемещен временно
4xxОшибка клиента
400Bad RequestНекорректно составленный запрос
401UnauthorizedНужна аутентификация клиента
403ForbiddenДоступ к ресурсу запрещен
404Not FoundЗапрашиваемый ресурс отсутствует
5xxОшибка сервера
500Internal Server ErrorВнутренняя ошибка сервера
Ответ сервера на HTTP-запрос состоит либо только из запрашиваемого клиентом документа, либо в дополнение к нему содержит код статуса ответа и, возможно, несколько заголовков ответа.



<Response> ::= ( <Content> )? | <HTTP-Version> <Code> <Explanation> CrLf <Resp-Header>* ( <Content> )? <Resp-Header> ::= <Field> : <Value> CrLf CrLf ::= '\r''\n'

Некоторые коды статуса ответа поясняются в табл. 12.

Возможны следующие заголовки ответа:



Пример HTTP-ответа.

HTTP/1.0 200 OK Content-Length: 2109 Content-Type: text/html Expires: 0 Last-Modified: Thu, 08 Feb 2001 09:23:17 GMT Server: Apache/1.3.12 <HTML> <HEAD> <TITLE> … </TITLE> </HEAD> <BODY> … </BODY> </HTML>