I-2. HTML-формы. Методы отправки данных на сервер
Лабораторная работа 1. Протокол HTTP. Методы GET, POST. HTML формы. Теоретическая часть Жизненный цикл запроса в протоколе HTTP
Обратите внимание на выделенное жирным. Еще до того, как вы увидели на экране запрошенную страницу, соединение с сервером закрыто, и он о вас забыл. И когда вы введете другой (или тот же самый) адрес, или щелкните по ссылке, или нажмете на кнопку HTML-формы - та же схема повторится снова. Такую схему работы называют "клиент-сервер". Клиент в данном случае - браузер. Итак, соединение с веб-сервером длится всего несколько секунд (или долей секунд) - это промежуток времени между щелчком по ссылке (или другим способом запроса) и началом отображения страницы. Большинство браузеров во время соединения отображают некий индикатор, например, MS Internet Explorer отображает анимацию в правом верхнем углу. Чтобы навсегда избавиться от восприятия HTTP как "черного ящика", "притворимся" браузером с помощью telnet'а:
GET / HTTP/1.0 [здесь нажмем Enter] Нажатие Enter соответствует, как правило, комбинации символов CR + LF, обозначаемых как \r\n. Далее будет использоваться именно это обозначение. По экрану пробежит HTML-код страницы http://ya.ru/. Как видите - ничего сложного. Исходный код текущей страницы можно просмотреть практически в любом браузере, выбрав в меню "View|Source".
Картинки, фреймы - все это дополнительные запросы, точно такие же. Собственно, откуда берутся картинки в окне браузера: при парсинге (обработке) HTML-кода, браузер, натыкаясь на тэг <img src=" картинка "> осуществляет дополнительный запрос к серверу - запрос картинки, и отображает ее на месте, где стоит тэг <img...>. Попробуйте: Telnet www.google.ru 80 GET /php/php5ru.png HTTP/1.0 \r\n По экрану пробежит то, что вы увидите, если просмотрите этот png-файл в текстовом редакторе. I-2. HTML-формы. Методы отправки данных на сервер С HTML-формами вы наверняка уже встречались:
Сохранив данный код в HTML-файле и просмотрев его с помощью вашего любимого браузера, вы увидите привычную HTML-форму: Введите Ваше имя: Рассмотрим используемые в этом небольшом примере тэги подробнее. Тэг <form>, имеющий парный завершающий тэг </form>, собственно и задает форму. Его атрибуты - оба необязательные:
Если этот атрибут не указать, большинство браузеров (точнее говоря, все известные мне браузеры) отправляют форму на текущий документ, то есть "саму на себя". Это удобное сокращение, но по стандарту HTML атрибут action обязателен.
Если атрибут method не указан - подразумевается "GET".
Тэг <input> - задает элемент формы, определяемый атрибутом type:
Возможны и другие значения (да и <input> - не единственный тэг, задающий элемент формы), но их мы рассмотрим в следующих главах. Итак, что же происходит, когда мы нажимаем кнопку "OK"?
Отправка того же запроса вручную (с помошью telnet) выглядит следующим образом (предположим, что доменное имя сайта - www.example.com): telnet www.example.com 80 GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0 \r\n Как вы, скорее всего, уже догадались, нажатие submit-кнопки в форме с методом отправки "GET" аналогично вводу соответствующего URL (со знаком вопроса и данными формы в конце) в адресной строке браузера: http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK На самом деле, метод GET используется всегда, когда вы запрашиваете с сервера какой-либо документ, просто введя его URL, или щелкнув по ссылке. При использовании <form method="GET"... >, к URL просто добавляются знак вопроса и данные формы. Теперь заменим первую строку нашей формы на следующую:
Мы указали метод отправки "POST". В этом случае данные отправляются на сервер несколько другим способом:
telnet www.example.com 80 POST /cgi-bin/form_handler.cgi HTTP/1.0 \r\n При использовании метода POST данные формы отправляются уже после "двух Enter-ов" - в теле запроса. Все, что выше - на самом деле заголовок запроса (и когда мы использовали метод GET, данные формы отправлялись в заголовке). Для того, чтобы сервер знал, на каком байте закончить чтение тела запроса, в заголовке присутствует строка Content-Length; о том же, что данные формы будут переданы виде параметр1=значение1&параметр2=значение2..., причем значения передаются в виде urlencode - то есть, точно так же, как и с помощью метода GET, но в теле запроса, - серверу сообщает заголовок "Content-Type: application/x-www-form-urlencoded". Преимущество метода POST - отсутствие ограничения на длину строки с данными формы. При использовании метода POST невозможно отправить форму, просто "зайдя по ссылке", как было с GET. При использовании POST-формы, в ее атрибуте action можно указать после знака вопроса и параметры GET-формы. Таким образом, метод POST включает в себя и метод GET.
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|