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.
бла бла бла?
Игорь, м?
Спасибо. Разобрался
прикольная статья
Спасибо, качественно, доходчего изложено
Про GET запросы все изложено очень доходчиво и наглядно
А вот что касается POST запросов то как то очень скудно получилось с наглядностю, тоесть можно было бы сделать еще пару конкретных примеров с POST запросами.
Дима, да, может так показаться. Но нужно учитывать, что материал на сайте оформлен в иерархической последовательности, за этой статьей следуют статьи о HTML-формах и обработке параметров в них, в которых как раз и продолжается затрагиваться тема POST-запросов.
Хорошая статья. Благодарю.
По-поводу post запросов - пожалуста)