- •Лабораторная работа 1 Использование сетевых утилит (маленькая…)
- •Лабораторная работа 2 Программное обеспечение для организации «виртуальных машин» - vMware Player.
- •5 Основных причин внедрить по виртуализации
- •Лабораторная работа 3 Установка FreeBsd 10.0 на «виртуальную машину» на базе vMware Player. Первоначальная настройка сервера на основе FreeBsd 10.0.
- •Лабораторная работа 5 Установка и настройка Web-сервера (Apache, php).
- •Лабораторная работа 6 Протокол http. Обмен данными между web-сервером и клиентом по протоколу http.
- •Лабораторная работа 7 Расширенная настройка web-сервера Apache.
- •Лабораторная работа 8 Среда разработки NetBeans ide. Отладка JavaScript и php сценариев на удаленном web-сервере с помощью NetBeans ide и расширения xDebug.
- •Лабораторная работа 9 Основы построения ajax приложений.
- •Лабораторная работа 10 Взаимодействие с сервером, передача данных. Методы get, post, head.
- •Часть 1. Запрос методом get.
- •Часть 2. Запросы методом post и head.
- •Лабораторная работа 11 Передача сложных типов данных. Нотация json.
- •Часть 1. Форма авторизации пользователя.
- •Часть 2. Проверка пользователя.
- •Часть 3. Закрыть сообщение об ошибке.
- •Часть 4. Список пользователей online.
- •Лабораторная работа 12 Использование xml. Xmlrpc.
- •Часть 1. Получение способов доставки.
- •Часть 2. Отображение способов доставки на экране.
- •Часть 3. Получение расчетной общей стоимости заказа.
- •Часть 4. Отображение данных детализации расчета стоимости заказа.
- •Лабораторная работа 13 Использование xml Webсервисов. Протокол soap.
- •Часть 1. Изучение xml файлов с текстом soap сообщений.
- •Часть 2. Регистрация новой сессии пользователя.
- •Часть 3. Добавление книг в корзину.
- •Часть 4. Отображение содержания корзины на экране.
- •Часть 5. Очистка корзины.
- •Лабораторная работа 14 Безопасность и эффективность ajax приложений.
- •Часть 1. Запрос «соли» хеширования с сервера.
- •Часть 2. Хеширование пароля.
- •Часть 3. Вывод результата авторизации.
- •Часть 4. Загрузка больших объемов данных (глав книги).
- •Часть 5. Показ главы книги.
Лабораторная работа 6 Протокол http. Обмен данными между web-сервером и клиентом по протоколу http.
Цель
Изучить основные этапы взаимодействия между web-сервером и клиентом (не обязательно браузером) с помощью протокола HTTP.
Теоретические сведения
HTTP – базовый протоколом сети гипертекстовых ресурсов.
Реализован на основе принципов взаимодействия «клиент-сервер»:
потребитель–клиент инициирует соединение с поставщиком–сервером и посылает ему запрос;
поставщик–сервер, получает запрос, производит необходимые действия и возвращает обратно клиенту ответ с результатом.
Состав HTTP-запроса:
Строка запроса (строка состояния, строка-статус).
Поля заголовка. Вида – Поле: Значение
Пустая строка.
Тело запроса.
Рис. Структура запроса клиента
Строка запроса (строка состояния):
метод_запроса URL_pecypca версия_протокола_НТТР{CR|LF}
Метод, указанный в строке состояния, определяет способ воздействия на ресурс, URL которого задан в той же строке. Метод может принимать значения GET, POST, HEAD, PUT, DELETE.
GET. Согласно формальному определению, метод GET предназначается для получения ресурса с указанным URL. Получив запрос GET, сервер должен прочитать указанный ресурс и включить код ресурса в состав ответа клиенту. Ресурс, URL которого передается в составе запроса, не обязательно должен представлять собой HTML-страницу, файл с изображением или другие данные. URL ресурса может указывать на исполняемый код программы, который, при соблюдении определенных условий, должен быть запущен на сервере. В этом случае клиенту возвращается не код программы, а данные, сгенерированные в процессе ее выполнения. Несмотря на то что, по определению, метод GET предназначен для получения информации, он может применяться и в других целях. Метод GET вполне подходит для передачи небольших фрагментов данных на сервер.
POST. Согласно тому же формальному определению, основное назначение метода POST – передача данных на сервер. Однако, подобно методу GET, метод POST может применяться по-разному и нередко используется для получения информации с сервера. Как и в случае с методом GET, URL, заданный в строке состояния, указывает на конкретный ресурс. Метод POST также может использоваться для запуска процесса.
HEAD и PUT являются модификациями методов GET и POST.
HEAD – сервер возвращает только заголовки без контента.
Версия протокола, как правило, задается в следующем формате:
HTTP/версия.модификация
На версию протокола ориентируется браузер, которую он предпочитает.
Поля заголовка, следующие за строкой состояния, позволяют уточнять запрос, т.е. передавать серверу дополнительную информацию.
Полей заголовков определено достаточно много.
Т.к. протокол HTTP расширяемый, то можно добавить и свои поля заголовка.
Часть заголовков предназначена для сервера, а часть полезна для разработчиков сервера.
Заголовки помещаются в серверные переменные. Можно использовать, например, для сбора статистики на сервере.
Состав HTTP-ответа:
Строка состояния.
Поля заголовка.
Пустая строка.
Тело ответа.
Строка состояния:
версия_протокола Код_ответа Пояснительное_сообщение
Версия_протокола задается в том же формате, что и в запросе клиента, и имеет тот же смысл.
Код_ответа – это трехзначное десятичное число, представляющее в закодированном виде результат обслуживания запроса сервером.
Пояснительное_сообщение дублирует код ответа в символьном виде. Это строка символов, которая не обрабатывается клиентом. Она предназначена для системного администратора или оператора, занимающегося обслуживанием системы, и является расшифровкой кода ответа.
В используемых в настоящее время реализациях протокола HTTP первая цифра не может быть больше 5 и определяет следующие классы ответов.
1 - специальный класс сообщений, называемых информационными. Код ответа, начинающийся с 1, означает, что сервер продолжает обработку запроса. При обмене данными между HTTP-клиентом и HTTP-сервером сообщения этого класса используются достаточно редко.
2 - успешная обработка запроса клиента.
3 - перенаправление запроса. Чтобы запрос был обслужен, необходимо предпринять дополнительные действия.
4 - ошибка клиента. Как правило, код ответа, начинающийся с цифры 4, возвращается в том случае, если в запросе клиента встретилась синтаксическая ошибка.
5 - ошибка сервера. По тем или иным причинам сервер не в состоянии выполнить запрос.
100 |
Continue Продолжайте |
Клиент должен продолжать передачу запроса |
200 |
OK |
Запрос был успешно обработан. Содержимое отклика зависит от типа запроса |
204 |
No Content Нет содержимого |
Сервер выполнил запрос, но ему нечего возвращать клиенту. Обозреватель не должен изменять отображение документа. |
301 |
Moved Permanently Ресурс перенесен |
Запрошенный ресурс сменил свой URI. Его новый URI указан в поле заголовка отклика Location. |
302 |
Found Найдено |
Запрошенный ресурс временно сменил свой URI. |
304 |
Not Modified Не изменено |
Клиент выполнил условный запрос GET, доступ разрешен, но документ не был изменен. |
400 |
Bad Request Неверный запрос |
Запрос не был понят сервером из-за его неверного синтаксиса. |
401 |
Unauthorized Неавторизован |
Запрос требует авторизации доступа, тип которой указан в поле заголовка отклика WWW-Authenticate |
403 |
Forbidden Запрещено |
Сервер понял запрос, но отказался его выполнять |
404 |
Not Found Не найдено |
Ресурс, заданный в URI запроса, не найден |
405 |
Method Not Allowed Недопустимый метод |
Данный тип запроса не применим к ресурсу, заданному в URI запроса |
500 |
Internal Server Error Внутренняя ошибка сервера |
Запрос не исполнен из-за неожиданной ошибки сервера |
503 |
Service Unavailable Служба недоступна |
Сервер временно не может исполнить запрос из-за перегрузки |
Выполнение
Смоделируем запрос к web-серверу в ручном режиме, используя подключение с помощью telnet.
Откройте окно командной строки Windows cmd.
Выполните команду telnet.
Введите команду (обязательно укажите в качестве параметра порт 80):
open www.ya.ru 80
В левом верхнем углу будет мигать курсор, что свидетельствует об успешном подключении. Пишем запрос к серверу:
GET / HTTP/1.1 <жмем Enter>
Host: www.ya.ru <жмем Enter>
<жмем Enter>
Смотрим на ответ сервера. Определите статус ответа, как называется web-сервер (в смысле программа). Найдите, где начинается содержание переданной web-станицы.
Выполните еще один запрос, но без указания в заголовке поля Host. Проанализируйте ответ сервера, какой статус ответа получили и почему?
open www.ya.ru 80 <жмем Enter>
GET / HTTP/1.1 <жмем Enter>
<жмем Enter>
По ответу сервера на Ваш запрос выясните какой сервер используется на сайте www.yandex.ru. Вместо метода GET используйте метод HEAD. В чем разница между ответами сервера на запрос с методом GET и HEAD?
Для дальнейшей работы будем пользоваться плагинами для просмотра заголовков и вообще для анализа обмена данными между web-сервером и браузером.
Для просмотра взаимодействия IE и web-сервера используем HTTP Analyzer Stand-alone V7.
Данный плагин можно открыть в отдельном окне, что несколько удобнее. В работе нас будут интересовать вкладки «Header», «Response Content» и «Raw Stream».
Попробуйте открывать несколько сайтов и проанализировать содержание запросов и ответов сервера. Чем отличается информацию на вкладках Header», «Response Content» и «Raw Stream»? Каким именем представляется IE в запросах к web-серверу?
Дальнейшие эксперименты будем проводить с web-сервером Apache, инсталлированным Вами в предыдущей лабораторной работе на сервер FreeBSD.
Запустите виртуальную машину с сервером FreeBSD.
Убедитесь, что web-сервер работает. Например, откройте в браузере www.server_freebsd.mycompany.ru.
Пробуем подключиться к нашему серверу с помощью любого ftp-клиента и учетной записи root.
Вот теперь можно продолжать. Возвращаемся в браузер IE и открываем наш «домашний» сайт www.server_freebsd.mycompany.ru. Анализируем содержание запросов и ответов сервера. Обратите внимание на статус ответа сервера при первом запросе нашей странички.
Выполните обновление открытой web-странички (F5). Объясните, почему в ответе сервера наблюдаем статус 304 Not Modified. Измените файл index.html на сервере и опять обновите страничку в браузере. Что изменилось в статусе ответа сервера? Почему?
Для других браузеров так же существуют подобные плагины для просмотра HTTP-заголовков.
Установите для Chrome расширение HTTP Headers.
Просмотрите заголовки с помощью этого плагина.
Изучаем передачу данных из формы различными методами.
Создайте на сервере простую html страничку с именем test_get.html (важно – используем метод GET):
<html>
<head>
<meta charset="koi8-r">
<title>test page</title>
</head>
<body>
<h1>test page</h1>
<form method=GET action='php_forma.php'>
Имя: <input type=text name='name'><br>
Фамилия: <input type=text name='fam'><br>
Сообщение: <textarea name='message'></textarea><br>
<input type=submit value='Отправить сообщение'>
</form>
</body>
</html>
Создадим еще одну страничку с именем test_post.html укажем в атрибутах формы метод POST.
Теперь напишем небольшой php-скрипт и сохраним его под именем php_forma.php. Обратите внимание в файлах test_get.html и test_post.html наш скрипт указан в качестве параметра атрибута action для формы.
<?php
PRINT '
<html>
<head>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=koi8-r">
</head>
<body>
<p>
<h1>Отправка данных</h1>
';
echo "Метод: ".$_SERVER['REQUEST_METHOD'];
echo "<br>";
echo "Строка запроса: ".$_SERVER['QUERY_STRING'];
echo "<br>";
echo "<br>";
echo "Параметры и их значения";
if (get_magic_quotes_gpc()) {
$_GET = array_map('stripslashes', $_GET);
$_POST = array_map('stripslashes', $_POST);
};
if(count($_POST)!=0)
{
foreach ($_POST as $key=>$value)
echo "<br> $key = $value";
};
echo "<br>";
if(count($_GET)!=0)
{
foreach ($_GET as $key=>$value)
echo "<br> $key = $value";
}
PRINT "
</p>
</body>
</html>
";
?>
Сравните HTTP-заголовки для страницы, которая получается после нажатия на кнопку «Отправить сообщение» на странице test_get.html и test_post.html. В чем отличие и почему?
