GET и POST HTTP-запросы. Передача параметров в HTTP-запросах

Существует несколько видов HTTP-запросов. Тип запроса указывается в первой строке HTTP-пакета, которая имеет вид:

<ТИП ЗАПРОСА> <ЗАПРАШИВАЕМЫЙ ДОКУМЕНТ> <ВЕРСИЯ HTTP>

например:

GET /page.php HTTP/1.1

GET-запрос

GET-запрос — это самый распространенный вид HTTP-запроса. При помощи него происходит запрос браузером любого файла веб-сервера. HTTP-запрос типа GET состоит только из HTTP-заголовков, тело у него отсутствует (это отмечалось в статье "Принципы функционирования веб-сервера").

При помощи GET-запроса можно передать веб-серверу параметры — некоторую информацию. Например, если на сайте предусмотрена авторизация пользователей, то с помощью параметров можно передавать имя пользователя и пароль для проверки. Рассмотрим механизм передачи параметров с помощью GET-запроса.

В первой строке запроса после ключевого слова GET помещается путь к запрашиваемому документу. Если в пути встречается знак вопроса, то принято считать, что в этом месте путь заканчивается, а за ним начинаются GET-параметры этого запроса:

GET /examples/test.html?параметры HTTP/1.1

GET-параметр имеет формат имя_параметра=значение_параметра, сами параметры разделяются знаком &. Пример GET-запроса с двумя параметрами:

GET /enter?login=admin&password=qwerty HTTP/1.1

GET-параметры можно вручную дописать в браузере в конце запрашиваемого URL в адресной строке. Обратимся к скрипту из статьи "Переменные окружения веб-сервера Apache" envvars.php следующим образом:

Как видите, в переменной окружения QUERY_STRING находится строка GET-параметров, в SCRIPT_NAME — путь и имя запрошенного документа, а в REQUEST_URI — полная строка запроса. То есть при помощи PHP можно принимать и обрабатывать GET-параметры. Для этого даже не нужно анализировать переменные окружения, так как в PHP все GET-параметры находятся в глобальном массиве $_GET. Индексы массива — имена параметров. Например, имеется файл script.php в корневом каталоге test-domain1:

<?php
  echo "Ваше имя: " . $_GET["name"] . "<br />";
  echo "Ваш возраст: " . $_GET["age"] . "<br />";
?>

результатом запроса http://test-domain1/script.php?name=John&age=33 будет:

Ваше имя: John
Ваш возраст: 33

Основным преимуществом GET-параметров является их размещение непосредственно в URL, что дает возможность сформировать гиперссылку на документ с определенными параметрами.

POST-запрос

Если необходимо передать на веб-сервер большой объем данных, например, текст сообщения или файл, используют POST-запрос. В этом типе запроса параметры помещаются в тело HTTP-запроса, а размер передаваемых данных в байтах указывается в заголовке Content-Length:

POST /enter HTTP/1.1
<Различные заголовки>
Content-Length: 27
<Различные заголовки>

login=admin&password=qwerty

Таким образом, в URL передаваемые параметры не видны. Простым способом сформировать POST-запрос не получится, они в основном генерируются с помощью HTML-форм, о которых речь пойдет в следующей статье. Что же касается PHP, то для POST-параметров выделен глобальный массив $_POST, доступ к которому аналогичен массиву $_GET.

Оставить комментарий

Ваше имя
 
Ваш e-mail
 
Комментарий