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.

Комментарии

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

 
Игорь
17 августа 2012, 12:25
#1
 

бла бла бла?

Joker-jar
17 августа 2012, 16:34
#2
 

Игорь, м?

БОБ
11 сентября 2012, 12:44
#3
 

Спасибо. Разобрался

bukvoed
6 ноября 2012, 2:40
#4
 

прикольная статья

Oliver
28 ноября 2012, 23:02
#5
 

Спасибо, качественно, доходчего изложено

Дима
25 декабря 2012, 22:16
#6
 

Про GET запросы все изложено очень доходчиво и наглядно
А вот что касается POST запросов то как то очень скудно получилось с наглядностю, тоесть можно было бы сделать еще пару конкретных примеров с POST запросами.

Joker-jar
26 декабря 2012, 18:07
#7
 

Дима, да, может так показаться. Но нужно учитывать, что материал на сайте оформлен в иерархической последовательности, за этой статьей следуют статьи о HTML-формах и обработке параметров в них, в которых как раз и продолжается затрагиваться тема POST-запросов.

Vladimir
13 февраля 2013, 21:18
#8
 

Хорошая статья. Благодарю.

Anonymous
10 марта 2013, 23:13
#9
 

По-поводу post запросов - пожалуста)

<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/style.css">
 
<meta charset="utf-8">
<title></title>
</head>
 
<body>
<form action = "index.php" method = "post">
Переменная <input type = "text" name = "const">
<input type = "submit" name = "submit" name= "sumbit" value = "Константа">
</form>
<?php
 $const = $_post['const'];
	if ( empty($const)){
		unset($const);
		print("Путсое поле");
	}
 
	else
	print("Поле заполнено!");
?>
</body>
</html>

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

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