Передача переменных в PHP. Методы GET и POST
Итак, мы снова продолжаем изучение основ PHP и в этой статье познакомимся со способами передачи переменных в PHP, а именно с методами GET и POST. Каждый из них имеет свои плюсы и минусы, и применяется в соответствующих ситуациях, речь о которых пойдет в данной статье. Мы также рассмотрим примеры кода, которые демонстрируют работу методов POST и GET.
Передача переменных при помощи метода GET
Данный метод передачи переменных применяется в PHP для передачи переменных в файл при помощи адресной строки. То есть переменные передаются сразу через адресную строку браузера. Примером может быть, например, ссылка на статью в WordPress без использования ЧПУ (SEF), которая имеет примерно следующий вид:
https://archive.dmitriydenisov.com/?p=315
То есть в данном случае передается переменная $p со значением 315. Теперь давайте более подробно на примере рассмотрим работу метод GET. Пускай нам нужно передать в файл три переменных $a, $b и $c методом GET
$a = $_GET['a'];
$b = $_GET['b'];
$c = $_GET['c'];
$summa = $a + $b + $c;
echo "Сумма $a + $b + $c = $summa";
Поскольку все переменные перед передачей будут помещаться в глобальный массив GET (Массивы в PHP), то мы первым делом присваиваем нашим переменным значения соответствующих элементов массива GET. Делаем это в самом начале во избежание разнообразных ошибок при передаче переменных. Далее для демонстрации работы прописываем произвольную формулу и выводим результат на экран.
Для проверки работы метода GET достаточно просто добавить к ссылке на файл знак вопроса «?» и через амперсанд «&» перечислить переменные с их значениями. Пускай у нас есть файл
https://archive.dmitriydenisov.com/get.php?a=1&b=2&c=3
Как видно с примера, сначала мы добавляем знак вопроса сразу после названия файла. Далее прописываем переменную и через равно указываем ее значение. После этого через амперсанд аналогичным образом перечисляем другие переменные. Теперь при переходе по этой ссылке нам выведется сумма переменных $a, $b и $c.
Данный способ очень простой и не требует создания дополнительных файлов. Все необходимые данные поступают прямо через адресную строку браузера.
Ну а теперь давайте перейдем ко второму способу передачи переменных в PHP – методу POST.
Передача переменных в PHP при помощи метода POST
Данный способ позволяет скрыто передавать переменные с одного файла в другой. Как вы уже поняли, обычно для этих целей используются два файла. В первом находится форма для ввода исходных данных, а во втором исполнительный файл, который принимает переменные. Для демонстрации давайте рассмотрим следующий код.
Код первого файла с формой для отправки данных. Дадим ему название post-1.php
<!--Форма --> <form action="post-2.php" method="post" name="form1" target="_blank"> <!--Текстовые поля --> <p><input name="name" type="text" size="20"></p> <p><input name="lastname" type="text" size="20"></p> <!--Кнопка --> <p><input name="submit" type="submit" value="Передать"></p> </form>
Форма:
- action – указываем файл, в который будут передаваться переменные.
- method – метод передачи переменных. В нашем случае это метод POST.
- name – название формы. Одновременно в файл будет передана переменная с таким именем.
Текстовые поля:
- name – имена переменных. В нашем случае это имя и фамилия (переменные name и lastname).
- type – тип поля. В нашем случае это текстовое поле.
Кнопка:
- name – имя кнопки и переменной, которая будет передана вместе с другими переменными.
- type – тип кнопки. В нашем случае это кнопка для отправки данных.
- value – текст на кнопке.
Код второго файла, который будет служить приемником переменных. Назовем его post-2.php
$name = $_POST[name];
$lastname = $_POST[lastname];
echo "Значения переменных, переданных методом POST - $name и $lastname";
Как и с методом GET, мы первым делом присваиваем переменным значения соответствующих элементов глобального массива
Теперь при загрузке первого файла у нас загрузится форма. После введения данных жмем по кнопке «Отправить», в результате чего в новой вкладке у нас откроется страница со вторым файлом, на которой выведутся значения, прописанные в форме на предыдущей странице. То есть второму файлу будут переданы значения переменных с первого файла.
На этом данная статья про передачу переменных в PHP подошла к концу. Если вы не хотите пропустить появления других статей на блоге, рекомендую подписаться на новостную рассылку любым удобным способом в пункте «Подписка» либо воспользоваться формой ниже.
На этом все. Удачи вам и успеха в освоении основ PHP.
Обнаружили ошибку? Выделите ее и нажмите Ctrl+Enter
archive.dmitriydenisov.com
Урок 16. PHP — POST & GET
В этом уроке мы рассмотри приемы передачи данных между формами и страницами. Такими методами являются POST и GET. О каждом мы поговорим отдельно и более подробно. Вообще говоря, это нужно для связи между формами. Например мы заполняем какие то поля на странице и нам нужно их передать в другую страницу для обработки.
Метод GET в PHP
Для начала разберем метод GET. Это когда все переменные и их значения передаются прямо через адрес. Сейчас на примере вы все увидите, и даже поймете как работает большинство сайтов и форумов.
К примеру, есть у нас html страничка такого вида:
<html> <head> <title>Страница с примером передачи переменных с помощью Get</title> </head> <body> <a href=https://myblaze.ru/index.php?name=Sergey&age=22>ссылка</a> </body> </html>
Видите ссылку? Она сложная и состоит из нескольких частей. Давайте разберем все по полочкам:
https://myblaze.ru
index.php — страница на php, которая будет обрабатывать запрос.
? — символ разделения между адресом и блоком с переменными.
Далее идут переменные и их значения, которые разделены символом &.
name=Sergey — переменная name и ее значение Sergey.
age=22 — то же самое, переменная age, значение 22.
Все разобрали, теперь посмотрим как это обрабатывается в php, с помощью метода GET.
Страница index.php, как вы помните, мы передавали ей:
<?php if (!empty($_GET["name"])&&!empty($_GET["age"])) { echo " Получены новые вводные: имя - ".$_GET["name"].", возраст - ".$_GET["age"]." лет";} else { echo "Переменные не дошли. Проверьте все еще раз."; } ?>
Для начала совет: ВСЕГДА проверяйте переменные на правильность: на пустоту, на соответствие допустимых значений и так далее. Так как все передается через адресную строку, то данные можно легко подменить и навредить сайту. Теперь по самому коду: мы, с помощью условного оператора, проверили переменные name и age на пустоту и, если они не пустые, то вывели их, а если пустые, то просто сообщили об этом.
Все просто, согласитесь? Например вы можете создать html страницу и в менюшке сделать ссылки через переменные, а в index.php обрабатывать переменную и отображать в зависимости от полученного значения ту или иную страницу. Ну об этом мы поговорим позже, в статье про создание сайта на php с нуля. Чтобы ничего не пропустить, советую подписаться на RSS.
Метод POST в PHP
Для демонстрации работы этого метода нам понадобится немного больше, чем простая строчка с адресом 🙂 Нужно будет создать html страницу с формой для заполнения, но ничего, я приведу готовый пример для вас:
<html> <head> <title>Страница с примером передачи переменных с помощью Post</title> </head> <body> <form method="post" action="index.php">Заполняем поля для передачи информации:<br><br> Укажите Ваше имя: <input name="user_name" type="text" maxlength="20" size="25" value="" /> <br><br> Укажите Ваш возраст: <input name="age" type="text" maxlength="2" size="3" value="" /> <br><br> <input type=submit value="Передать информацию"></form> </body> </html>
Итак, мы создали html страничку с простой формой. Запомните, метод POST может использоваться только в форме.
Первый параметр формы — «method», он определяет метод, который мы будем использовать для передачи. Как вы могли догадаться, это либо GET, либо POST. При этом, если установлен GET, то все имена полей (в виде названий переменных), а также их значения, передаются по ссылке, как в разделе про метод GET. Если же установлен POST, то все названия переменных и значения будут передаваться как запрос браузера к веб-серверу. То есть в адресной строке их видно не будет. Во многих случаях это очень полезно. Также POST безопаснее, оно и понятно, ведь переменные с их значениями уже не так просто отредактировать, хотя тоже можно.
Второй параметр формы — «action». Это путь и имя файла скрипта, которому мы передаем данные. В нашем случае это index.php. Этот путь можно передавать и полностью, то есть так: action=«https://my_site.ru/index.php». Если не указать значение параметра «action», то вся информация будет передаваться главному скрипту, то есть индексной странице index.php вашего сайта, что вполне логично.
Теперь получим данные из нашей формы. Раз передавали мы в index.php, значит ниже будет код именно этой страницы:
<?php if (!empty($_POST["user_name"])&&!empty($_POST["age"])) { echo "Получены новые вводные:<br>"; echo "имя - "; echo $_POST["user_name"]; echo "<br>возраст - "; echo $_POST["age"]; echo " лет"; } else { echo "Переменные не дошли. Проверьте все еще раз."; } ?>
Не забываем проверять на пустоту и допустимые значения. Далее нужно уточнить, почему наши переменные называются именно user_name и age? А вы посмотрите на поля формы, которую мы создавали выше. Видите там input name=«user_name» type=«text» ? Вот здесь параметр name и задает имя переменной, которую мы получим с помощью этого поля. То же самое и с age. Надеюсь понятно. Ну а получение переменной и ее значения через POST почти не отличается от GET, который мы рассмотрели выше.
Ну вот, урок получился большой, но зато один из самых полезных, ведь передача переменных между формами и страницами это именно та интерактивность, ради которой мы и используем PHP.
← Цикл Do while | Содержание | htmlentities →
myblaze.ru
Метод GET
PHP урок № 296Начинаем большую тему. Представление внешних переменных. Метод GET — это первый метод с которым мы познакомимся в этом уроке.
Откуда берутся внешние, так сказать переменные, и по отношению к чему они внешние. Определение этому следующее. Все переменные приходящие в скрипт от браузера, в данном случаи через URL, или с сервера являются внешними переменными. Разберём как это понять, приходящие в скрипт.
Скрипт — любая программа написанная вами, для обработки этих самых переменных. Так как язык PHP серверный язык программирования, следовательно все скрипты находятся на сервере, т.е. на вашем сайте в папке и никуда не отправляются (например браузеру). Скрипт выполняет запрос браузера на представление страницы, он просто собирает, формирует страницу HTML кода и отправляет её в готовом виде пользователю, который запросил её с помощью своего браузера. Это то, что касается обработчика скриптов. Теперь посмотрим как пользователь с помощью своего браузера, причём не важно какого (Internet Explorer, Firefox, Opera, Chrome), отправляет запрос. В данном случаи GET-запрос.
GET — это название запроса который отправляется на сервер скрипту с помощью
браузера открыто, через URL, адресную строку.
Если в адресной строке вы увидели знак амперсанды (&) и знак вопрос (?), можно
считать, что этот узел работает на PHP, и ему в данный момент отправлены переменные
и их значения. Выглядеть это может примерно так:
http://lphp.ru/index.php?page=4&id_artpage=43
Давайте разберёмся, что отправит пользователь серверу, используя метод GET, в строке выше. И что он хочет получить в результате от сервера. Слева направо.
- http:// — префикс основного протокола передачи данных в web (HTTP)
- lphp.ru — домен в котором находится сервер
- index.php — имя файла, который будет обрабатывать запрос, то есть кому собственно отправлен GET-запрос
- ? — разделитель, после которого перечисляются переменные со значениями, которые нужны скрипту обработчику для формирования ответной страницы
- page — переменная или имя переменной
- = — оператор присваивает значения переменной
- 4 — значение переменной
- & — разделитель в строке запроса, между парами (переменная=значение&переменная=значение) и т.д.
Выше мы рассмотрели схему построения запроса используя метод GET. В зависимости от того, что вы заложили в понятие каждой переменной её значения могут быть разными. Это не обязательно цифры, это могут быть строки, слова. Напишем реальный пример передачи значения переменной page, скрипту обработчику. При этом скрипт будет должен вывести переданное ему значение на монитор — вот такая простая задачка.
<?php
echo $_GET['page'];
?>
В листинге №1 показан пример передачи значения обработчику находящемуся в том же
файле, это удобно когда скрипт не большой. Чаще всего передача происходит между
страницами и здесь нужно разделить форму отправки значений и код приёма
(обработчик). Ниже показан пример из двух файлов, форма отправки находится в файле
forma.php, а обработчик в файле add.php. Файлы вы можете конечно называть как вам угодно,
лишь придерживаясь правильности именования файлов и правильно указывайте путь к
обработчику.
Первое условие правильности именования — имя должно быть в английской раскладке.
Эту тему мы уже разбирали в уроке Переменные в PHP.Листинг № 2 — Метод GET. Передача данных между страницами. Файл forma.php
<?php
echo $_GET['page'];
?>
Как мы видим изменилась только форма отправки значения формы page.
В первой строке добавился метод которым мы отправляем значения, т.е. method=»GET» и добавился адрес обработчика в данном случаи только имя файла
(action=»add.php»), но можно так же указывать полный или относительный путь до
обработчика. Принято на сайтах указывать относительный путь, в силу того что при
переносе приложения на другой сервер не менять потом пути.
Комментарии
Андрей 13.04.2010 19:54:35Как в страницу php вставить текст из другого файла .txt или .php
helix 13.04.2010 19:58:56Если вас интересует подробная информация обратитесь на форум и предложите там раскрыть тему.
SETTER 13.04.2010 20:03:21В браузере отобразиться содержание файла file.txt include «file.txt»;
Амир Дакаскос 29.05.2011 07:23:42А у меня после нажатия кнопки открывается пустое окно… Пробовал использовать метод POST, тоже самое… А в адресной строке вижу, что данные передаются, но окно остается пустым
Амир Дакаскос 29.05.2011 13:15:24Да, все работает. Да и в одном файле код работает, а вот как только разделяешь на два файла — то все… Файл проверил, все верно там
Григорий 14.09.2011 07:12:06Добрый день!Спасибо за Ваш труд! Мой вопрос:адресная строка при методе POST отображается так же как при GET и в браузере чистый лист.В чем проблема? Danwer запущен,проверил на наличие ошибок-отсутствуют.Если есть возможнось отправить эти учебные заготовки(документы),то как и куда?Оставлю свой email : [email protected] Заранее огромное спасибо за помощь!)
Denis 08.11.2011 14:41:43eto mi uze prohodili gde to
Glarcitrerriz 15.08.2012 06:37:50Большое спасибо за совет и сердечная благодарность )))
mannwarinf 03.12.2012 21:51:26Проблема решена, тему можно закрывать.
steemelix 23.01.2013 14:33:00Хай я нашла где можно Скачать программу utorrent
Арсен Рамазанов 12.05.2013 21:12:49Большое спасибо за простой и понятный материал на счет GET!!!
feesereri 17.05.2013 02:35:17Вообщем проблема такая, слетела кодировка, сейчас как правило отображается крякозяброй,пробовал то что советуют в интернете не помогло, подскажите что делать. В некоторых русифицированных программах часть надписей интерфейса стала выглядетькак китайские иероглифы.
Aesoluecy 20.05.2013 01:04:29I want to wish you good luck and all the best
stiillsser 08.06.2013 18:14:14Не разбирусь как выкладывать jpg файлы(, подскажите.
inetpropos 20.06.2013 11:59:24Или уж идти в колледж для более углубленного изучения специальности?
alleksmebel 02.07.2013 16:42:11интересная мысль
Tamerlan75 19.08.2013 08:28:35Хороший урок, особенно для новичков полезен? будет. Всё на уровне и информация и оформление.
lphp.ru
Метод GET в PHP, метод POST
Программа на PHP может получить данные от страницы, которая запустила эту программу. Получение данных PHP скриптом осуществляется двумя методами: GET и POST. Они рассмотрены в данной теме.
Метод GET
Метод GET — это отправка данных внутри HTTP-запроса. Данные отправляются на сервер в виде части URL-адреса. Самый простой способ отправить данные этим методом — написать их внутри ссылки. Эта ссылка будет выглядеть так: сначала идёт обычный URL-адрес, затем без пробелов ставится знак вопроса и перечисляются данные. Данные записываются в таком виде:
параметр = значение
Если нужно отправить несколько параметров, то они разделяются знаком &. Если есть скрипт с таким адресом:
http://mysite.ru/page.php
То URL вместе с данными выглядит так:
http://mysite.ru/page.php?x=5
Такой URL — это самый обычный адрес страницы. Он отличается только наличием данных. В остальном он работает так же, как любой другой адрес страницы.
Данные, отправленные таким образом, PHP скрипт берёт из суперглобального массива $_GET. Имя элемента массива совпадает с именем параметра. Если в запросе параметр называется user то в программе данные содержатся в элементе $_GET[‘user’].
Создадим страницу sendpage.html, которая будет отправлять данные и файл take.php, который будет получать эти данные. На страницу добавим ссылку на файл, которая будет содержать запрос с данными. Страница получается такая:
sendpage.html:
1 | <!DOCTYPE html> <html> <head> <title>Страница</title> <meta charset="utf-8"> </head> <body> <a href="take.php?name=Иван&inf=2">Ссылка</a> </body> </html> |
Теперь создадим файл take.php и разместим его в той же папке, где находитсся страница. Запишем полученные данные из массива $_GET в переменные и выведем их на экран.
take.php:
3 | $name=$_GET['name']; $inf=$_GET['inf']; echo 'name '.$name.' inf '.$inf; |
Метод POST
Метод POST используется для отправки формы. Форма также может быть отправлена и методом GET, ведь по умолчанию для неё установлен именно этот метод. Но метод POST имеет ряд преимуществ, поэтому лучше использовать его.
Файл, которому отправляются данные, указывается в атрибуте action, а метод в атрибуте method. Сами данные содержатся в элементах формы. У каждого элемента есть атрибут name, в котором содержится имя элемента. С этим именем данные отправляются на сервер. А значения вводятся в элементах формы пользователем.
Данные, отправленные методом POST, PHP скрипт берёт из суперглобального массива $_POST. Имена элементов массива совпадают с именами элементов формы.
Добавим на страницу форму, которая будет отправлять данные в тот же файл:
9 | <form action="take.php" method="post"> <input name="login"> <input type="password" name="pas"> <input type="submit" value="Отправить"> </form> |
В PHP файле также запишем данные из массива $_POST в переменные и выведем их на страницу:
PHP код:
6 | $login=$_POST['login']; $pas=$_POST['pas']; echo '<br>'; echo 'login '.$login.' pas '.$pas; |
Запустите страницу, введите что-нибудь в поля формы и отправьте её. Программа должна вывести полученные данные. Обратите внимание, переменные $name и $inf не содержат значения. Ведь мы отправляем форму методом POST, а массив $_GET остаётся пустым и у него нет элементов массива, к которым обращаются эти переменные.
basecourse.ru
Метод POST
PHP урок № 298 В предыдущем уроки, мы уже разобрали один метод передачи данных метод GET. Сегодня обсудим, как работает метод POST и собственно чем он отличается и зачем нужен. Я когда начинал изучать PHP не очень понимал разницу и поэтому первое время пользовался исключительно методом POST, потому что метод GET, для меня казался китайской грамотой, все эти амперсанды (&) и знаки вопроса, переменные и их значения, с трудом доходили до меня. С другой стороны был в PHP метод POST, который скрывал все эти непонятные знаки в своём теле, т.е. в URL ни чего не выводил и поэтому казался проще. И так что мы имеем, главное отличия метода POST от метода GET это то, что он скрывает все передаваемые им переменные и их значения, в своём теле. Это главное отличие и оно важно при создании приложений. При таком подходе скрыта реализация приложения, не видны переменные, которые вы используете в работе данной программы. Нет возможности подменить значения переменной в URL и тем самым отправить на сервер (злоумышленником), заведомо не ликвидные данные, что в свою очередь может привести к сбою в работе скрипта, или полной остановки и потери информации.Второе существенное отличие метода POST от метода GET — вся передаваемая информация, как известно имеет свой объём (вес). Так вот в GET этот объём ограничен 8 КБ. Метод POST таких ограничений не имеет.
При разработке и отладке приложений, чаще используют метод GET. При завершении и выпуске приложения в свет, лучше изменить представление на метод POST, в целях безопасности и неограниченности объёма (без фантазий) передачи информации.
Листинг № 1 — Пример передачи данных между страницами — метод POST.
В примере выше представлена форма отправки данных используя метод POST. Это можно увидеть в открывающем теге form , атрибут method=»post». Написание не имеет особого значения, нижний регистр букв используется или верхний. Что такое регистр, можно узнать из урока Регистр букв. Если не прописать метод, то браузер по умолчанию будет использовать метод GET. Ещё важный аргумент тега form, это аргумент action=»post.php». Action — служит для указания пути до обработчика, т.е. куда будут отправлены данные вписанные в эту форму. Имеющую имя в данном скрипте form, но для нас сейчас это не имеет ни какого значения. Хочу лишь сказать, что именование всех объектов web-страницы в PHP, осуществляется путём присвоения атрибуту name имени. По сути это именование переменной. Форма в которую вы вводите данные есть переменная и у неё должно быть имя, для того чтоб можно было с помощью скрипта обращаться к ней. О переменных можно почитать в уроке Переменные в PHP. Разберём теперь обработчик, который в данном примере, выполняет функцию приёма данных и вывода их на монитор. Делается это с помощью глобального массива — так называются группа переменных в PHP. C ними мы будем знакомиться позже на страницах сайта LPHP.RU. Пока же только запомните синтаксис их написания, в смысле глобального массива.При использовании метода POST, правильное написание глобального массива, выглядит так:
В примере выше представлен глобальный массив POST — это мы можем видеть по его имени, после знака подчёркивания. В квадратных скобках, в данном случаи нет значения, поэтому массив можно считать пустым. При отправки данных методом POST всегда все отправленные переменные и их значения, будут содержаться в этом глобальном массиве ($_POST[]). И только при обращении к нему вы сможете получить отправленные данные с одной страницы на другую.
При работе приложения может происходить так, что одна и та же переменная отправляется разными способами, используя методы POST и GET. В этом случаи целесообразно использовать глобальный массив $REQUEST[], который сам определяет какой метод был применён для отправки данных.
Листинг № 2 — Выводим данные на монитор метод POST. Файл post.php
<?php
echo $_POST['text'];
?>
Листинг №2 показывает обработчик формы. В глобальном массиве POST, в квадратных скобках мы видим имя переменной — именно так скрипт понимает, что нужно выводить на монитор $_POST[‘text’]. В первом листинге мы именовали форму, назвав переменную text (name=»text»). Форма содержащая текст получила имя text.
Чтобы вывести на монитор отправленные данные, достаточно просто прописать имя переменной в квадратных скобках глобального массива POST.
Комментарии
Slava 12.04.2011 12:16:41Доброго времени суток,меня интересует такой вопрос:почему на главной странице сайта написано,что уроки соблюдаю определенную последовательность и в конце каждого урока находится ссылка,по которой можно перейти и преступить к следующему по уровню знаний в данной теме вопросу
anonymous 12.04.2011 12:17:33а в конце данного урока таковой не имеется!Почему?
SETTER 12.04.2011 12:37:15Уже имеется
слава 12.04.2011 19:21:14огромное спасибо
Vergon 22.11.2011 21:49:11Хорошие уроки для начинающих. Всё разложено по полочкам и не перезагружено лишней информацией, которая путает новичков! Респект автору.
Даниил 08.06.2012 14:06:48Добрый день. я все сделал по инструкции, но когда я проверяю сделанную работу на работоспособность у меня не работает. я захожу в форму где нужно заполнить поле, жму кнопку отправить, но вместо обработчика выскакивает такая же страница. подскажите мне что не так
Макскс 22.09.2012 07:23:06Как делать странички?
SETTER 23.09.2012 11:25:44Начните изучать HTML.
Шмоэль Лазарман 09.06.2013 20:34:19Автор , ты воистину красавчик ! По сабжу PHP это легче лёгково , пробегаюсь бегло — и то все понятно , доступно с 1 раза . Примеры получаются без ошибок . Экспериментирую
lphp.ru
Самоучитель (учебник) по PHP онлайн
Главная Страница » Самоучитель PHP 5 для чайников с примерами » Передача данных HTML-формы
Рассмотрим атрибут method тега ‹form›. Он указывает, каким способом передавать данные из формы. Всего существует два метода: GET и POST.
Если использовать метод GET, то данные передаются посредством добавления их в конец строки запроса. Например, создайте файл test.html со следующим содержанием (листинг 10.2).
Листинг 10.2. Передача данных методом GET
‹html›
‹head›
‹title› Передача данных методом GET ‹/title›
‹/head›
‹body›
‹form action="test.php" method="get"›
‹input type="Text" name="text"›
‹input type="Submit" value="Go!"›
‹/form›
‹/body›
‹/html›
Затем нам понадобится файл с именем test.php, который будет запускаться при нажатии кнопки Go!. Его содержание пока нас не интересует, поэтому оставьте его пустым. Запустите файл test.html в браузере, введите в поле текст (например, «qwerty») и нажмите кнопку Go!. Результат смотрите ниже.
Обратите внимание на адресную строку браузера. После знака вопроса следует выражение text=qwerty. Другими словами, пользователь может видеть, какие данные передаются серверу. Метод GET используется по умолчанию.
Если применить метод POST, то результат будет иным (см. рис. ниже).
В этом случае передаваемые данные скрыты от пользователя. В принципе особой разницы использования того или иного метода передачи данных нет. Единственное, что стоит отметить, это ограничение на объем передаваемой информации при методе GET.
Поделиться с друзьями
www.php-s.ru
Типы HTTP-запросов и философия REST / Habr
Этот пост — ответ на вопрос, заданный в комментарии к одной из моих статей.В статье я хочу рассказать, что же из себя представляют HTTP-методы GET/POST/PUT/DELETE и другие, для чего они были придуманы и как их использовать в соответствии с REST.
Итак, что же представляет из себя один из основных протоколов интернета? Педантов отправлю к RFC2616, а остальным расскажу по-человечески 🙂
Этот протокол описывает взаимодействие между двумя компьютерами (клиентом и сервером), построенное на базе сообщений, называемых запрос (Request) и ответ (Response). Каждое сообщение состоит из трех частей: стартовая строка, заголовки и тело. При этом обязательной является только стартовая строка.
Стартовые строки для запроса и ответа имеют различный формат — нам интересна только стартовая строка запроса, которая выглядит так:
METHOD URI HTTP/VERSION
,
где METHOD — это как раз метод HTTP-запроса, URI — идентификатор ресурса, VERSION — версия протокола (на данный момент актуальна версия 1.1).
Заголовки — это набор пар имя-значение, разделенных двоеточием. В заголовках передается различная служебная информация: кодировка сообщения, название и версия браузера, адрес, с которого пришел клиент (Referrer) и так далее.
Тело сообщения — это, собственно, передаваемые данные. В ответе передаваемыми данными, как правило, является html-страница, которую запросил браузер, а в запросе, например, в теле сообщения передается содержимое файлов, загружаемых на сервер. Но как правило, тело сообщения в запросе вообще отсутствует.
Рассмотрим пример.
Запрос:
GET /index.php HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 Accept: text/html Connection: close
Первая строка — это строка запроса, остальные — заголовки; тело сообщения отсутствует
Ответ:
HTTP/1.0 200 OK Server: nginx/0.6.31 Content-Language: ru Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close ... САМА HTML-СТРАНИЦА ...
Вернемся к стартовой строке запроса и вспомним, что в ней присутствует такой параметр, как URI. Это расшифровывается, как Uniform Resource Identifier — единообразный идентификатор ресурса. Ресурс — это, как правило, файл на сервере (пример URI в данном случае ‘/styles.css’), но вообще ресурсом может являться и какой-либо абстрактный объект (‘/blogs/webdev/’ — указывает на блок «Веб-разработка», а не на конкретный файл).
Тип HTTP-запроса (также называемый HTTP-метод) указывает серверу на то, какое действие мы хотим произвести с ресурсом. Изначально (в начале 90-х) предполагалось, что клиент может хотеть от ресурса только одно — получить его, однако сейчас по протоколу HTTP можно создавать посты, редактировать профиль, удалять сообщения и многое другое. И эти действия сложно объединить термином «получение».
Для разграничения действий с ресурсами на уровне HTTP-методов и были придуманы следующие варианты:
- GET — получение ресурса
- POST — создание ресурса
- PUT — обновление ресурса
- DELETE — удаление ресурса
Обратите внимание на тот факт, что спецификация HTTP не обязывает сервер понимать все методы (которых на самом деле гораздо больше, чем 4) — обязателен только GET, а также не указывает серверу, что он должен делать при получении запроса с тем или иным методом. А это значит, что сервер в ответ на запрос DELETE /index.php HTTP/1.1 не обязан удалять страницу index.php на сервере, так же как на запрос GET /index.php HTTP/1.1 не обязан возвращать вам страницу index.php, он может ее удалять, например 🙂
REST (REpresentational State Transfer) — это термин был введен в 2000-м году Роем Филдингом (Roy Fielding) — одним из разработчиков протокола HTTP — в качестве названия группы принципов построения веб-приложений. Вообще REST охватывает более широкую область, нежели HTTP — его можно применять и в других сетях с другими протоколами. REST описывает принципы взаимодействия клиента и сервера, основанные на понятиях «ресурса» и «глагола» (можно понимать их как подлежащее и сказуемое). В случае HTTP ресурс определяется своим URI, а глагол — это HTTP-метод.
REST предлагает отказаться от использования одинаковых URI для разных ресурсов (то есть адреса двух разных статей вроде /index.php?article_id=10 и /index.php?article_id=20 — это не REST-way) и использовать разные HTTP-методы для разных действий. То есть веб-приложение, написанное с использованием REST подхода будет удалять ресурс при обращении к нему с HTTP-методом DELETE (разумеется, это не значит, что надо давать возможность удалить всё и вся, но любой запрос на удаление в приложении должен использовать HTTP-метод DELETE).
REST дает программистам возможность писать стандартизованные и чуть более красивые веб-приложения, чем раньше. Используя REST, URI для добавления нового юзера будет не /user.php?action=create (метод GET/POST), а просто /user.php (метод строго POST).
В итоге, совместив имеющуюся спецификацию HTTP и REST-подход наконец-то обретают смысл различные HTTP-методы. GET — возвращает ресурс, POST — создает новый, PUT — обновляет существующий, DELETE — удаляет.
Да, есть небольшая проблема с применением REST на практике. Проблема эта называется HTML.
PUT/DELETE запросы можно отправлять посредством XMLHttpRequest, посредством обращения к серверу «вручную» (скажем, через curl или даже через telnet), но нельзя сделать HTML-форму, отправляющую полноценный PUT/DELETE-запрос.
Дело в том, спецификация HTML не позволяет создавать формы, отправляющие данные иначе, чем через GET или POST. Поэтому для нормальной работы с другими методами приходится имитировать их искусственно. Например, в Rack (механизм, на базе которого Ruby взаимодействует с веб-сервером; с применением Rack сделаны Rails, Merb и другие Ruby-фреймворки) в форму можно добавить hidden-поле с именем «_method», а в качестве значения указать название метода (например, «PUT») — в этом случае будет отправлен POST-запрос, но Rack сможет сделать вид, что получил PUT, а не POST.
habr.com