Лекция: Передача данных от клиента к серверу и обратно. Протокол HTTP
Основной протокол передачи гипертекстовых данных – это HTTP. HTTP основывается на запросах/ответах. При этом запрашивающая программа — клиент устанавливает связь с программой- сервером и посылает запрос серверу в следующей форме:
метод запроса, URI, версия протокола, сообщение, содержащее управляющую информацию запроса, информацию о клиенте и тело сообщения.
Запрос создается браузером клиента. Когда пользователь набирает в браузере URL-адрес: http:bsu.by/my.php вот что при этом происходит:
Браузер разбирает URL-адрес и решает следующее:
-Использовать протокол HTTP.
-Извлечь запрошенный ресурс с компьютера, находящегося на bsu. by.
-Получить информационный ресурс, известный, как /my.php.
На основе данной информации создается запрос HTTP, выглядящий следующим образом:
GET /my.php HTTP/1.1
Accept: image/gif, image/png, image/jpeg, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0;
Windows XP; .NET CLR 1.1.4322)
Host:bsu.by
Connection: Keep-Alive
Вот что эти строки значат:
GET — метод HTTP который означает: «Дай информацию, находящуюся в /му.php, и вышли ее, используя протокол HTTP 1.1».
Accept — «я могу понимать графическую информацию в следующих форматах».
Accept-Language — «язык, который я понимаю — английский, американский ». Accept-Encoding — «мне можно отправлять данные в сжатом виде, поскольку я понимаю типы сжатия gzip и deflate».
User-Agent — «тип моего браузера — Microsoft Explorer 8, выполняющийся под управлением Windows XP».
Host — «доставь мне информацию /my.php с компьютера, находящегося на хосте feedster.com».
Connection: Keep-Alive — «держи подключение HTTP открытым, пока браузер не закроет его». Это повышает производительность, поскольку соединение не нужно закрывать и снова открывать для каждого подключения. Без Keep-Alive Web-страница будет иметь множество подключений.
Когда Web-сервер получает подобный запрос, он должен просмотреть информацию на сервере, которая представлена /my. php.
В конце запроса помещается его тело.
Сервер отвечает на запрос сообщением, содержащим строку статуса (включая версию протокола и код статуса — успех или ошибка), за которой следует MIME-подобное сообщение, включающее в себя информацию о сервере, метаинформацию о содержании ответа, и, само тело ответа. Ответ (response) сервера посылается клиенту (браузеру) в виде:
НТТР/1.1 200 0К
Date: Моп, 08 Dec 2003 16:46:40 GMT
Server: Apache/1.3.27 (Unix) mod_throttle/3.1.2 PHP/4.3.2
X-Powered-By: PHP/4.3.2
X-Accelerated-By: PHPA/1.3.3r2
Connection: close
Content-Type: text/html; charset=utf-8
<html lang=«en-US» xml:lang=«en-US» «nlns=«www.w3.org/1999/xhtml»>
<head>
<script>
HTTP-ответ состоит из двух частей. В начале идет порция сведений о самой запрошенной информации — заголовок ответа (response header). Затем идет пустая строка и далее — сама запрошенная информация. Эта вторая часть называется телом (body). Вот что означают части заголовка:
HTTP/1.1 — первая строка сообщает клиенту, что информация будет отправлена по протоколу HTTP версии 1.1. Код 200 состояния HTTP означает: «Все хорошо, документ найден и сейчас будет отправлен».
Date — сообщает клиенту дату, установленную на сервере, с которого поступает информация. Стандартный часовой пояс — GMT, то есть время по Гринвичу.
Server — каков тип сервера, предоставляющего информацию.
X-Powered-By — каким инструментом поддерживается сервер (конечно, РНР).
X-Accelerated-By — какой инструмент повышает производительность сервера (эти два Х-заголовка не обязательны и специфичный для конкретной конфигурации сервера).
Connection — сообщает клиенту, что соединение будет закрыто после того, как сервер завершит отправку информации.
Content-Type — сообщает клиенту, какой тип содержимого будет отправлен. В дополнение также указывается набор символов.