close

Вход

Забыли?

вход по аккаунту

?

Лекция (Протокол HTTP)

код для вставкиСкачать
Протокол HTTP.
HTTP (Hypertext Transfer Protocol) - основной протокол используемый в Web. Несмотря на то, что протокол называется протоколом передачи гипертекста (т.е. HTML), на самом деле HTTP протокол может использоваться (и используется) для передачи практически любых данных в сети. Это передача и текста, и изображений, и файлов. Популярность HTTP связана с несколькими факторами: это использование достаточно универсальной URL адресации, способность передавать любые данные (как от клиента серверу так и наоборот), а также работа в режиме on-line (т.е. передача данных непосредственно между клиентом и сервером, без посредников). HTTP протокол можно назвать дуальным, в том смысле, что в системе клиент-сервер данные могут идти в двух направлениях, и от клиента к серверу и наоборот от сервера к клиенту. Однако сам синтаксис HTTP нацелен именно на передачу данных от клиента к серверу.
HTTP/1.0 используется также для коммуникаций между различными пользовательскими броузерами (клиентами) и шлюзами, дающими гипермедиа доступ к существующим Internet протоколам, таким как SMTP, NNTP, FTP, Gopher, WAIS. HTTP/1.0 разработан так, чтобы позволять таким шлюзам через proxy серверы, без какой-либо потери передавать данные с помощью упомянутых протоколов более ранних версий. HTTP основывается на парадигме запросов/ответов. Запрашивающая программа (клиент) устанавливает связь с обслуживающей программой-получателем (сервер) и посылает запрос серверу в следующей форме: * метод запроса, * URL, * версия протокола, * MIME-подобное сообщение, содержащее управляющую информацию запроса (параметры), информацию о клиенте и, может быть, тело сообщения. Все, что предшествует телу сообщения, является заголовком запроса.
Сервер отвечает сообщением, содержащим строку статуса (включая версию протокола и код статуса - успех или ошибка), за которой следует MIME-подобное сообщение, включающее в себя информацию о сервере, метаинформацию о содержании ответа, и, вероятно, само тело ответа. В Internet коммуникации обычно основываются на TCP/IP протоколах. Для WWW номер порта по умолчанию -- TCP:80, но также могут быть использованы и другие номера портов - это не исключает возможности использовать HTTP в качестве протокола верхнего уровня. Для большинства приложений сеанс связи открывается клиентом для каждого запроса и закрывается сервером после окончания ответа на запрос. Тем не менее, это не является особенностью протокола. И клиент, и сервер должны иметь возможность закрывать сеанс связи, например, в результате какого-нибудь действия пользователя. В любом случае, разрыв связи, инициированный любой стороной, прерывает текущий запрос, независимо от его статуса. Рассмотрим простейший пример HTTP - запроса. Если в адресном окне браузера мы наберем адрес http://yandex.ru, то браузер определит IP адрес сервера yandex.ru и пошлет ему на 80-й порт такой HTTP запрос:
GET http://yandex.ru/ HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*
Accept-Language: ru
Cookie: yandexuid=2464977781018373381
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
Host: yandex.ru
Referer: narod.ru Proxy-Connection: Keep-Alive
Запрос передается в незашифрованном текстовом виде. Самая главная часть запроса расположена в первой строке: Это тип запроса (GET), URL адрес запрашиваемого документа(http://yandex.ru) и версия HTTP протокола (HTTP/1.0). Далее перечисляются параметры запроса. Каждая строка соответствует одному параметру. В начале строки идет имя параметра, затем двоеточие и значение параметра. Accept - тип данных, которые может принять браузер (в кодировке MIME). Accept-Language - предпочтительный язык, на котором браузер хочет принять данные. User-Agent - тип программы, которая отослала запрос. Host - DNS (или IP) имя хоста, которому адресован запрос. Cookie - кукисы (данные, которые были сохранены сервером на локальном диске клиента, при посещении данного хоста прошлый раз). Referer - хост, со страницы которого мы отсылаем запрос. Так, например, если мы находимся на странице http://narod.ru, и нажимаем там ссылку http://yandex.ru, то запрос будут отправлен хосту yandex.ru, а поле запроса referer будет содержать имя хоста narod.ru.
Набор параметров запроса не фиксирован. Помимо приведенных, могут присутствовать и другие параметры.
Наиболее интересны такие параметры, как referer и cookie. Эти параметры используются, в основном, для идентификации пользователя сервером.
Запрос GET может содержать данные, передаваемые клиентом серверу. Они передаются непосредственно через URL адрес по CGI протоколу. Данные отделены от URL знаком "?" и соединяются знаком "&":
GET <URL>?<параметр 1>=<значение 1>&<параметр 2>=<значение 2>&...
Такой тип передачи данных серверу удобен, однако имеет ограничения на объем. Слишком большие массивы данных передавать через URL нельзя. Для таких целей существует другой тип зпросов: запрос POST. Запрос POST очень похож на GET, с той лишь разницей, что данные в запросе POST передаются отдельно от самого заголовка запроса:
Тело запроса должно отделяться от заголовка пустой строкой. Если сервер встречает пустую строку в POST запросе, то все что идет далее он считает телом запроса (передаваемыми данными). Отметим следующее: формат даных в теле POST запроса произволен. Несмотря на то, что чаще всего применяется CGI формат, он не обязателен. Кроме того, POST запрос не требует наличия тела запроса, и может передавать данные также и через URL.
Помимо CGI формата, иногда для передачи больших объемов информации (например файлов) применяют т.н. multipart формат (формат передаваемых данных определяется параметром Content-Type): Content-Type: multipart/form-data; boundary=---------------------------7d20345dc
Параметр boundary определяет для сервера ограничитель (в данном примере " ---------------------------7d20345dc"). Ограничитель генерируется клиентом случайным образом и необходим для того, что бы сервер мог отделить разные части посылаемые в теле запроса. Таким образом, тело содержит несколько частей, которые передаются в формате ASCII (а не в Unicode как необходимо для CGI) и разделены той строкой, которая была указана в boundary. Каждая часть содержит информацию о типе передаваемых данных и имя данной части. Удобство формата multipart в том, что передаваемые данные имеют неограниченную величину и не требуют предварительного кодирования. Помимо запросов GET и POST существуют и другие, например TRACE, PUT. Но они используются редко. 3
Документ
Категория
Рефераты
Просмотров
179
Размер файла
38 Кб
Теги
лекция, протокол, http
1/--страниц
Пожаловаться на содержимое документа