POST, GET: чем отличаются запросы друг от друга. Учимся работать с GET и POST запросами Php параметры get запроса

Этот пост предназначен для объяснения принципов передачи данных в интернете с помощью двух основных методов: GET и POST. Написал я его в качестве дополнения к инструкции по генератору сменного графика работы для тех, кому вряд ли интересны подробности ☺.

Перейдите по следующему адресу (это для наглядного объяснения): http://calendarin.net/calendar.php?year=2016 Обратите внимание на адресную строку браузера: calendarin.net/calendar.php?year=2016 Основной файл называется, за ним следует вопросительный знак (?) и параметр «year» со значением «2016». Так вот, всё, что следует за вопросительным знаком, это и есть GET-запрос. Всё просто. Чтобы передать не один параметр, а несколько, то их нужно разделить амперсандом (&). Пример: calendarin.net/calendar.php?year=2016&display=work-days-and-days-off

Основной файл всё также называется, за ним следует вопросительный знак (?), затем - параметр «year» со значением «2016», затем - амперсанд (&), затем - параметр «display» со значением «work-days-and-days-off».

GET-параметры могут изменяться прямо в адресной строке браузера. Например, изменив значение «2016» на «2017» и нажав клавишу, вы перейдёте к календарю на 2017 год.

Это передача данных скрытым способом (адрес страницы не изменяется); то есть увидеть, что было передано, можно только с помощью программы (скрипта). Например, в следующем инструменте для подсчёта символов в тексте исходные данные передаются методом POST: http://usefulonlinetools.com/free/character-counter.php

Если остались вопросы, комментарии и мой E-mail к вашим услугам.

Кроме метода GET, который мы рассмотрели в предыдущей заметке, существует еще один метод отправки запроса по протоколу HTTP – метод POST. Метод POST тоже очень часто используется на практике.

Если, для того, чтобы обратиться к серверу методом GET, нам достаточно было набрать запрос в URL-адрес, то в методе POST все работает по другому принципу.

Для того, чтобы выполнить этот вид запроса, нам необходимо нажать на кнопку с атрибутом type=»submit», которая расположена на веб-странице. Обратите внимание, что эта кнопка расположена в элементе , у которого установлен атрибут method со значением post.

Рассмотрим этот HTML-код:

Введите текст:

Если пользователь введет в текстовое поле какой-либо текст и нажмет на кнопку «Отправить», то на сервер будет отправлена переменная text со значением того содержимого, которое ввел пользователь.

POST и GET запросы простыми словами

Эта переменная будет отправлена методом POST.

Если в форме написать так:

То данные будут отправляться методом GET.

Если, в случае с GET-запросом, объем данных, которые мы могли передать ограничивался длиной адресной строки браузера, то в случае с запросом POST, такого ограничения нет, и мы можем передавать значительные объемы информации.

Еще одно отличие метода POST от GET, метод POST скрывает все передаваемые им переменные и их значения, в своём теле (Entity-Body). В случае с методом GET они хранились в строке запроса (Request-URI).

Вот пример запроса, выполненного методом POST:

POST / HTTP/1.0\r\n
Host: www.site.ru\r\n
Referer: http://www.site.ru/index.html\r\n
Cookie: income=1\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 35\r\n
\r\n
login=Dima&password=12345

Таким образом, передавая данные методом POST, их будет намного труднее перехватить злоумышленнику, т.к. они скрыты от непосредственного просмотра, поэтому метод передачи данных методом POST считается более безопасным способом.

Кроме того, методом POST можно передавать не только текст, но и мультимедиа данные (картинки, аудио, видео). Существует специальный параметр Content-Type, который определяет тот вид информации, который необходимо передать.

Ну и, наконец, чтобы на сервере получить данные, которые были переданы этим методом, используется переменная POST.

Вот пример обработки на языке PHP:

В прошлой заметке, мы определились с тем, что браузер (клиент) отправляет серверу HTTP запросы, а сервер отправляет клиенту HTTP ответы. Эти запросы и ответы оформляются по определенным правилам. Есть, что-то вроде синтаксиса, как и в какой последовательности, должно быть написано. Должна быть строго определенная структура.

Давайте более подробно рассмотрим эту структуру, по которой строятся запросы и ответы в протоколе HTTP.

HTTP запрос состоит из трех основных частей, которые идут в нем именно в том порядке, который указан ниже. Между заголовками и телом сообщения находится пустая строка (в качестве разделителя), она представляет собой символ перевода строки.

Пустая строка (разделитель)

Post и Get запросы, какая между ними разница и что лучше и для каких целей?

тело сообщения (Entity Body) – необязательный параметр

Строка запроса – указывает метод передачи, URL-адрес, к которому нужно обратиться и версию протокола HTTP.

Заголовки – описывают тело сообщений, передают различные параметры и др. сведения и информацию.

тело сообщения — это сами данные, которые передаются в запросе. Тело сообщения – это необязательный параметр и может отсутствовать.

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

Более подробно, каждый элемент запроса, мы рассмотрим в следующих заметках.

Давайте, для примера, рассмотрим один реальный запрос к серверу. Я выделил каждую часть запроса своим цветом: строка запроса — зеленый, заголовки — оранжевый, тело сообщения- голубой.

Запрос от браузера:

Host: webgyry.info

Cookie: wp-settings

Connection: keep-alive

В следующем примере уже присутствует тело сообщения.

Ответ сервера:

Content-Type: text/html; charset=UTF-8

Transfer-Encoding: chunked

Connection: keep-alive

Keep-Alive: timeout=5

X-Pingback: //webgyry.info/xmlrpc.php

Документ без названия

Вот такими сообщениями обмениваются клиент и сервер по протоколу HTTP.

Кстати, хотите узнать есть ли смысл в каком-то элементе на вашем сайте с помощью «целей» Яндекс Метрики и Google Analytics?

Уберите то, что НЕ работает, добавьте то, что работает и удвойте вашу выручку.

Курс по настройке целей Яндекс Метрики..

Курс по настройке целей Google Analytics..

HTTP клиент посылает запрос на сервер в форме cсообщения-запроса, которое имеет следующий формат:

  • Строка запроса (обязательный элемент)
  • Заголовок (опционалный элемент)
  • Пустая строка (обязательный элемент)
  • Тело сообщения (опциональный элемент)

Рассмотрим каждый из этих элементов по отдельности.

Строка запроса

Строка запроса начинается с токена метода, после которого следует URI запроса и версия протокола. Элементы отедляются друг от друга пробелами:

Расмотрим данный элемент более подробно

Метод запроса

Данный элемент указывает метод, который должен быть вызван на стороне сервера по указанному индентификатору URI.

В HTTP существует восемь методов:

  • HEAD
    Используется для получения строки статуса и заголовка от сервера по URI. Не изменяет данные.
  • GET
    Используется для получения данных от сервера по указанному URI. Не изменяет данные.
  • POST
    Используется для отправки данных на сервер (например информации о разработчике и т.д.) с помощью форм HTML.
  • PUT
    Замещает все предыдущие данные на ресурсе новыми загруженными данными.
  • DELETE
    Удаляет все текущие данные на ресурсе, определённом URI.
  • CONNECT
    Устанавливает туннельное соединение с сервером по указанному URI.
  • OPTIONS
    Описывает свойства соединения для указанного ресурса.
  • TRACE
    Предоставляет сообщение, содержащее обратный трейс расположения указанного в URI ресурса.

URI запроса

URI (Uniform Resource Identifier) – это идентификатор ресурса на который отправляется запрос. Ниже приведён наиболее часто встречающийся формат URI:

‘*’ используется когда HTTP запрос не относится к конкретному ресурсу, но к серверу. Используется только в случае, когда метод не обязательно применять к ресурсу. Например,

абсолютныйURI используется, когда HTTP запрос выполняется на прокси. Прокси запрашивается для передачи запроса из доступного кэша и возвращает ответ. Например:

асболютный_путь | источник используется наиболее чатсо.

Учимся работать с GET и POST запросами

Запрашивается конкретный ресурс определённого сервера. Например, клиент хочет получить ресурс с сервера через 80-й порт. Адрес ресурса “www.proselyte.net” и отправляет следующий запрос:

Запрос полей заголовка

Поля заголовка позволяют клиенту передать дополнительную информацию о запросе и о себе самом серверу. Эти поля действуют как модификаторы запроса.

Ниже приведён списко наиболее важных полей заголовка, которые могут быть использованы:

  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Authorization
  • Expect
  • If-Match
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • If-Unmodified-Since
  • Range
  • Referer
  • User-Agent

Если мы заотим реализовать своего собственного клиента и свой собственный веб-сервер, то мы можем создавать собственные поля заголовка.

Пример HTTP запроса

На этом мы заканчиваем изучение запросов HTTP.
В следующей статье мы рассмотрим HTTP ответы.

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

Самый простой способ, как можно создать запрос методом GET- это набрать URL-адрес в адресную строку браузера.

Браузер передаст серверу примерно следующую информацию:

GET / HTTP/1.1
Host: webgyry.info
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: wp-settings
Connection: keep-alive

Запрос состоит из двух частей:

1. строка запроса (Request Line)

2. заголовки (Message Headers)

Обратите внимание, что GET запрос не имеет тела сообщения. Но, это не означает, что с его помощью мы не можем передать серверу никакую информацию.

Различие между методами GET и POST

Это можно делать с помощью специальных GET параметров.

Чтобы добавить GET параметры к запросу, нужно в конце URL-адреса поставить знак «?» и после него начинать задавать их по следующему правилу:

имя_параметра1=значение_параметра1& имя_параметра2=значение_параметра2&…

Разделителем между параметрами служит знак «&».

К примеру, если мы хотим передать серверу два значения, имя пользователя и его возраст, то это можно сделать следующей строкой:

http://site.ru/page.php?name=dima&age=27

Когда выполнен данный запрос, данные попадают в так называемую переменную окружения QUERY_STRING, из которой их можно получить на сервере с помощью серверного языка веб-программирования.

Вот пример, как это можно сделать на PHP.

Конструкция $_GET[«имя_параметра»] позволяет выводить значение переданного параметра.

В результате выполнения этого кода в браузере выведется:

Ваше имя: dima
Ваш возраст: 27

мы тоже выполняем запрос к серверу методом GET.

Решил сделать себе шпаргалку об основных методах отправки и получения данных с веб сервера средствами php и js. Так и родилась эта заметка. В ней я рассмотрел наиболее часто используемые приёмы обмена данными между веб клиентом и веб сервером, которые используют php разработчики.

Главными фаворитами отправки данных являются php get запрос и php запрос post, за ними идёт технология AJAX. Так в чём же отличия get и post запросов.

  • get запрос передаётся в адресной строке (в http заголовке) и виден пользователю
  • post запрос передаётся в теле документа
  • объём get запроса ограничен (максимум 276 символов)
  • метод get не передаёт файлы
  • метод post передаёт файлы
Php get запрос

Что бы сделать php get запрос нам для начала следует создать html форму с полем для ввода данных. В теге form указываем к какому файлу на сервере обращаться и каким методом производить отправку . Так же не забываем задавать полю атрибут name , это будет название ячейки массива GET $_GET["data"]; из которого мы получим данные в файл на сервере. Как отправлять данные get через форму я думаю ясно, теперь попробуем передать их через адресную строку. index.php?data=1 если мы вобьём такой запрос в адресную строку и отправим, то в файле в index.php мы получим из $_GET["data"] значение 1. С этим я думаю то же всё понятно, теперь пример.

Задача: есть файл index.php с формой отправки get запроса к другому файлу например get.php. При получении гет запроса файл get.php должен передать массив с данными в index.php. В index.php полученный массив должен вывестись.

Реализация. Файл index.php

//В форме методом get через скрытое поле посылаем значение 1 Отправить запрос

Файл get.php

Php запрос post

Php запрос post передаётся так же через форму, только атрибут в теге form будет method="post" . И получать данные в указанном файле мы будем из массива пост $_POST["search"] и сразу приведём пример.

Задача: отправить данные из index.php методом POST на сервер в файл get.php и получить их обратно, если поле отправки данных пустое вывести сообщении о незаполненном поле. Решение начнём с index.php

Поисковый запрос

Заполните поле запроса

Введённый запрос:

Отправить запрос

Файл get.php

Передача массива AJAX

Выполним ту же самую задачу с помощью ajax. Вообще то ajax это технология относящаяся к javascript, но в рамках заметки о передаче данных на сервер затронем и эту технологию. Конечно ajax это тема отдельной статьи. В процессе запроса ещё будем выводить гифку индикатора загрузки. Так же имеем два файла index.php и get.php. Файл index.php. Не забываем подключать jquery. Обращу внимание, для скрытия гифки при первой загрузке страницы назначаем блоку box стиль display: none

$(document).ready(function(){ //вешаем событие на кнопку отправить $(".submit").click(function(){ $.ajax({ //как будем передавать данные type: "GET", //куда передаём url: "get.php", //какие данные передаём data: {flag: 1}, //событие перед отправкой ajax beforeSend: function(){ //выводим гифку $(".box").show(); }, //событие после получения ответа, //получаем массив в data success: function(data){ //скрываем гифку $(".box").hide(); var html = ""; //ф-я JSON.parse переводит json данные в объект var dt=JSON.parse(data); for (var i = 0; i

Файл get.php. В файл получаем данные из гет массива и из php передаём массив в javascript. Что бы передать php массив в js, его нужно привести к формату json. Для этого используем php ф-ю json_encode. После перекодировки производится отправка json php средствами, а конкретно вызываем echo.

Первый метод для выполнения PHP POST запроса заключается в использовании file_get_contents . Второй метод будет использовать fread в сочетании с парой других функций. Оба варианта применяют функцию stream_context_create , чтобы заполнить необходимые поля заголовка запроса.

Пояснение кода

Переменная $sPD содержит данные, которые нужно передать. Она должна иметь формат строки HTTP-запроса , поэтому некоторые специальные символы должны быть закодированы.

И в функции file_get_contents , и в функции fread у нас есть два новых параметра. Первый из них — use_include_path . Так как мы выполняем HTTP- запрос , в обоих примерах он будет иметь значение false . При использовании значения true для считывания локального ресурса функция будет искать файл по адресу include_path .

Второй параметр — context , он заполняется возвращаемым значением stream_context_create , который принимает значение массива $aHTTP .

Использование file_get_contents для выполнения POST-запросов

Чтобы в PHP отправить POST запрос с помощью file_get_contents , нужно применить stream_context_create , чтобы вручную заполнить поля заголовка и указать, какая «обертка » будет использоваться — в данном случае HTTP :

$sURL = "http://brugbart.com/Examples/http-post.php"; // URL-адрес POST $sPD = "name=Jacob&bench=150"; // Данные POST $aHTTP = array("http" => // Обертка, которая будет использоваться array("method" => "POST", // Метод запроса // Ниже задаются заголовки запроса "header" => "Content-type: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $contents;

Использование fread для выполнения POST-запросов

Для выполнения POST-запросов можно использовать функцию fread . В следующем примере stream_context_create используется для составления необходимых заголовков HTTP-запроса :

$sURL = "http://brugbart.com/Examples/http-post.php"; // URL-адрес POST $sPD = "name=Jacob&bench=150"; // Данные POST $aHTTP = array("http" => // Обертка, которая будет использоваться array("method" => "POST", // Request Method // Ниже задаются заголовки запроса "header" => "Content-type: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $context); $contents = ""; while (!feof($handle)) { $contents .= fread($handle, 8192); } fclose($handle); echo $contents;

Выполнение GET-запросов с помощью PHP

Теперь мы уделим внимание использованию fread и file_get_contents для загрузки контента из интернета через HTTP и HTTPS . Чтобы использовать методы, описанные в этой статье, необходимо активировать опцию fopen wrappers . Для этого в файле php.ini нужно установить для параметра allow_url_fopen значение On .

Выполнение POST и GET запросов PHP применяется для входа в систему на сайтах, получения содержимого веб-страницы или проверки новых версий приложений. Мы расскажем, как выполнять простые HTTP-запросы .

Использование fread для загрузки или получения файлов через интернет

Помните, что считывание веб-страницы ограничивается доступной частью пакета. Так что нужно использовать функцию stream_get_contents (аналогичную file_get_contents ) или цикл while , чтобы считывать содержимое меньшими фрагментами до тех пор, пока не будет достигнут конец файла:

В данном случае обработки POST запроса PHP последний аргумент функции fread равен размеру фрагмента. Он, как правило, не должен быть больше, чем 8192 (8*1024 ).

Имейте в виду, что он может быть больше или меньше, а также может быть ограничен настройками системы, на которой запускается PHP .

Использование file_get_contents для получения URL-адреса сайта

Еще проще использовать этот метод при считывании файла по HTTP , так как вам не придется заботиться о считывании по фрагментам — все обрабатывается в PHP .

Данная публикация представляет собой перевод статьи «Making POST Requests With PHP » , подготовленной дружной командой проекта

Методы GET и POST в HTTP и HTTPS — два самых популярных метода, используемых для передачи данных с клиента на сервер с использованием протокола HTTP (протокол передачи гипертекста). И GET, и POST могут использоваться для отправки запроса и получения ответа, но между ними существует значительная разница.

Разница между запросами GET и POST в HTTP или HTTPS - популярный вопрос на каждом интервью по веб-программированию. Поскольку HTML не зависит от технологии веб-сервера, такой как Java, ASP или PHP и HTTP — это основной протокол в пространстве Интернета, нельзя четко игнорировать важность понимания методов GET и POST. В этой статье мы рассмотрим, что такое HTTP-метод GET, что такое HTTP-метод POST, когда использовать тот или иной запрос и какова разница между ними. Разберем каждое понятие отдельно.

Что такое HTML?

HTML — это язык, используемый для создания веб-страниц. Гипертекст относится к гиперссылкам, которые может содержать HTML-страница. Язык разметки означает способ использования тегов для определения макета страницы и элементов на странице.
Ниже приведен пример HTML, который используется для определения базовой веб-страницы с заголовком и одним абзацем текста:




TechTerms.com


Это пример абзаца в HTML.

Первая строка определяет тип содержимого, содержащегося в документе. , и , которые все включены в пример выше. Заголовок страницы, метаданные и ссылки на файлы с привязкой помещаются между Фактическое содержимое страницы находится между тегами .

За последние несколько десятилетий сеть пережила множество изменений, но HTML всегда был основным языком, используемым для разработки веб-страниц. Интересно, что хотя веб-сайты стали более продвинутыми и интерактивными, HTML стал проще. Если вы сравниваете источник страницы HTML5 с аналогичной страницей, написанной в HTML 4.01 или XHTML 1.0, на странице HTML5 будет меньше кода. Это связано с тем, что современный HTML опирается на каскадные таблицы стилей или JavaScript для форматирования почти всех элементов внутри страницы.

Многие динамические веб-сайты генерируют веб-страницы «на лету», используя серверный язык сценариев, такой как PHP или ASP. Однако даже динамические страницы должны быть отформатированы с использованием HTML. Поэтому языки сценариев часто генерируют HTML-код, который отправляется в веб-браузер.

Протокол передачи гипертекста HTTP предназначен для взаимодействия между клиентами и серверами и работает как протокол запроса-ответа.

Веб-браузер может быть клиентом, а приложение на компьютере, на котором размещен веб-сайт, — сервером.

Клиент (браузер) отправляет HTTP-запрос серверу, сервер возвращает ответ, который содержит информацию о состоянии запроса и может также содержать запрошенный контент.

Два метода запросов GET и POST

Два часто используемых метода для запроса-ответа между клиентом и сервером:

    GET - запрашивает данные из указанного ресурса;

    POST - отправляет данных, подлежащие обработке, на указанный ресурс.

Перевод GET и POST в буквальном смысле означает получение и постобработку.

Подробнее об HTTP

HTTP — это протокол, используемый для передачи данных через Интернет. Является частью пакета интернет-протокола и определяет команды и службы, используемые для передачи данных веб-страницы.

HTTP использует модель server-client. Клиент может быть домашним компьютером, ноутбуком или мобильным устройством. HTTP-сервер, как правило, является веб-хостом с программным обеспечением веб-сервера, таким как Apache или IIS. Когда пользователь получает доступ к веб-сайту, браузер отправляет запрос на соответствующий веб-сервер и отвечает кодом состояния HTTP. Если URL-адрес действителен и соединение предоставлено, сервер отправит браузеру веб-страницу и связанные файлы.

Общие коды состояния HTTP включают:

    200 — успешный запрос (существует веб-страница);

    301 — перемещается постоянно (часто перенаправляется на новый URL-адрес);

    401 — несанкционированный запрос (требуется авторизация);

    500 — внутренняя ошибка сервера (часто вызванная неправильной конфигурацией сервера).

POST и GET в HTTP

HTTP определяет команды GET и POST, которые используются для обработки представлений форм на веб-сайтах. Команда CONNECT используется для облегчения безопасного соединения, которое шифруется с использованием SSL. Зашифрованные HTTP-соединения происходят через HTTPS — расширение HTTP, предназначенное для защищенных передач данных.

URL-адреса, начинающиеся с «http://», доступны по стандартным протоколам передачи гипертекста и по умолчанию используют порт 80. URL-адреса, начинающиеся с «https://», доступны через безопасное соединение HTTPS и часто используют порт 443.

POST

POST — это серия системных проверок, выполняемых компьютерами и другими электронными устройствами при их включении. Результаты теста могут отображаться на экране, выводиться через мигающие светодиоды или просто записываться внутри. В компьютерных системах операция POST выполняется в начале последовательности загрузки. Если все тесты пройдены, остальная часть процесса запуска будет продолжена автоматически.

Операционные системы устройств Mac и Windows запускают POST каждый раз, когда компьютер загружается или перезапускается. Сканирование проверяет аппаратное обеспечение и гарантирует, что процессор, ОЗУ и устройства хранения данных будут работать правильно. Если во время выполнения POST возникла ошибка, процесс запуска может приостановиться или полностью прекратиться, а на мониторе может появиться сообщение о На ПК ошибки POST часто отображаются на экране информации о BIOS. Они могут выводиться как криптовые коды, такие как «08», или как системное сообщение, например, «Ошибка системной памяти при смещении». На Mac ошибки POST часто обозначаются простой графикой, например, сломанной иконкой папки, которая указывает, что загрузочное устройство не найдено.

Физические проявления

В некоторых случаях экран компьютера может даже не включаться перед ошибками POST. Если это произойдет, коды ошибок могут выводиться через мигающие светодиодные индикаторы или звуковые сигналы. Например, Apple iMac будет воспроизводить три последовательных тона, выдерживать паузу в пять секунд, а затем повторять тоны, когда во время запуска обнаруживается плохая ОЗУ. Большинство ПК также издают звуковые сигналы при обнаружении ошибок POST, хотя каждый производитель использует свои собственные коды.

POST — довольно технический термин, который используют только компьютерные техники на регулярной основе. Однако это хорошая аббревиатура, поскольку помогает лучше понять сообщения об ошибках, которые могут появиться на компьютерах или других электронных устройствах. Если компьютер не запускается из-за ошибки POST, можно использовать другое устройство для поиска значения и причины ошибки с веб-сайта производителя. Затем можно предпринять соответствующие действия — удаление модуля памяти или повторную установку видеокарты с последующим перезапуском оборудования.

GET

POST также является методом передачи переменных формы HTML с одной веб-страницы на другую, не отображая их в адресной строке. Альтернативный метод — GET, который добавляет значения в URL. Запросы HTTP POST предоставляют дополнительные данные от клиента (браузера) на сервер в теле сообщения. Напротив, запросы GET включают все необходимые данные в URL. Формы в HTML могут использовать любой метод, указав метод = POST или method = GET (по умолчанию) в элементе . Указанный метод определяет, как данные формы передаются на сервер. Когда используется метод GET, все данные формы кодируются в URL-адрес в качестве параметров строки запроса. С POST данные формы появляются в теле сообщения HTTP-запроса.

Различия в представлении формы

Метод запроса POST запрашивает веб-сервер на прием и хранение данных, заключенные в тело сообщения запроса. Часто используется при загрузке файла или при отправке заполненной веб-формы.

Метод запроса HTTP GET извлекает информацию с сервера. В рамках запроса GET некоторые данные могут передаваться в строке запроса URL-адреса, указывая условия поиска, диапазоны дат или другую информацию, которая определяет запрос.

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

Основное различие между запросами GET и POST заключается в том, что они соответствуют различным HTTP-запросам, как определено в спецификациях HTTP. Процесс подачи обоих методов начинается таким же образом: набор данных формы создается браузером и затем кодируется способом, указанным атрибутом enctype. Для METHOD = "POST атрибут enctype может быть multipart/form-data или application/x-www-form-urlencoded, тогда как для METHOD =" GET " запускается только через application/x-www-form-urlencoded. Эти данные формы set затем передается на сервер.

Для отправки формы с помощью METHOD = "GET" браузер создает URL-адрес, принимая значение атрибута действия и добавляя к нему набор данных формы, закодированного с использованием типа контента application/x-www-form-urlencoded). Затем браузер обрабатывает этот URL-адрес, как если бы он ссылался на ссылку (или, как если бы пользователь набрал URL-адрес вручную). Браузер делит URL на части и распознает хост, затем отправляет на этот хост запрос GET с остальной частью URL в качестве аргумента. Важно отметить, что этот процесс означает, что данные формы ограничены кодами ASCII. Особое внимание следует уделять кодированию и декодированию других типов символов при передаче их по URL-адресу в формате ASCII.

Представление формы с METHOD = «POST» вызывает отправку запроса POST с использованием значения атрибута действия и сообщения, созданного в соответствии с типом контента, указанным атрибутом enctype.

PHP

PHP — это встроенный в HTML. Это означает, что PHP-код можно вставить в HTML-страницу. Код PHP читается или анализируется сервером, на котором находится страница. Вывод функций GET и POST в PHP на странице обычно возвращается как HTML-код, который может быть прочитан браузером. Поскольку PHP-код преобразуется в HTML до загрузки страницы, пользователи не могут просматривать PHP-код на странице. Это делает страницы PHP достаточными для доступа к базам данных и другой защищенной информации.

Большая часть синтаксиса PHP заимствована из других языков, таких как C, Java и Perl. Однако PHP имеет ряд уникальных функций и специальных функций. Цель этого языка — дать возможность веб-разработчикам быстро и легко писать динамически сгенерированные страницы.

Wordpress

WordPress — это бесплатная система управления контентом, используемая для создания и обслуживания веб-сайтов. Его простота использования и уникальные функции ведения блога помогли ему стать самым популярным инструментом ведения блогов в Интернете.

Интерфейс WordPress позволяет любому, кто не имеет опыта веб-разработки, создать и опубликовать веб-сайт. Встроенные инструменты ведения блога обеспечивают простой способ отслеживания отдельных сообщений, посетителей и комментариев пользователей.

Несмотря на то что доступны тысячи шаблонов WordPress и плагинов, система POST GET в WordPress все еще имеет свои ограничения. Поскольку это служба на основе шаблонов, пользователь должен начать с заранее созданного веб-сайта, а не создавать страницы с нуля. Кроме того, нет возможности вставлять скрипты или поддерживать базу данных с тем же уровнем контроля, который предлагает пользовательский веб-сайт.

Инструмент POST_GET_ID () позволяет использовать скрипты для управления элементом, так как он имеет уникальный идентификатор, и при отправке его в виде формы через данные методы раскрывающийся список будет отправлен с уникальным идентификатором, который позволяет сценарию замечать, какая публикация работает. В качестве альтернативы может быть отправлена скрытая переменная, которая позволит сценарию увидеть, какая публикация относится к представлению.

Последнее обновление: 1.11.2015

Принцип отправки данных может отличаться в различных ситуациях. Рассмотрим эти ситуации.

Отправка GET-запроса

GET-запрос характеризуется тем, что данные могут отправляться в строке запроса:

// объект для отправки var user = { name: "Tom", age: 23 }; var request = new XMLHttpRequest(); function reqReadyStateChange() { if (request.readyState == 4) { var status = request.status; if (status == 200) { document.getElementById("output").innerHTML=request.responseText; } } } // строка с параметрами для отправки var body = "name=" + user.name + "&age="+user.age; request.open("GET", "http://localhost:8080/postdata.php?"+body); request.onreadystatechange = reqReadyStateChange; request.send();

Для отправки берем свойства объекта user и формируем из их значений сроку с параметрами: "name=" + user.name + "&age="+user.age . Затем эта строка добавляется к строке запроса в методе open("GET", "http://localhost:8080/postdata.php?"+body)

Предполагается, что данные отправляются скрипту на языке php postdata.php, который может иметь, например, следующее содержание:

Конкретная технология стороны сервера тут не важна. И в качестве тестирования можно взять любую другую технологию. Например, ASP.NET MVC. Метод контроллера в ASP.NET MVC, который принимает данные, мог бы выглядеть следующим образом:

Public string PostData(string name, int age) { return "Ваше имя: "+name +"; Ваш возраст: "+ age; }

Кодирование параметров

Все отправляемые в GET-запросе параметры разделяются знаком амперсанда(&). Но что, если какой-нибудь параметр имеет знак амперсанда. Например,

Var user = { name: "Tom&Tim", age: 23 }; // строка с параметрами для отправки var body = "name=" + user.name + "&age="+user.age;

В этом случае при получении параметров скрипт на стороне сервера может неправильно обработать данные и неправильно извлечь параметры. Поэтому, чтобы кодировать все передаваемые данные, нужно применять функцию encodeURIComponent() :

Var body = "name=" + encodeURIComponent(user.name) + "&age="+encodeURIComponent(user.age);

При этом строка "Tom&Tim" будет кодирована в следующую строку: "Tom%26Tim".

При необходимости мы можем выполнить обратное декодирование с помощью функции decodeURIComponent() :

Var encodeName = encodeURIComponent(user.name); // Tom%26Tim var decodeName = decodeURIComponent(encodeName); // Tom&Tim

POST-запросы

Отправка данных в POST-запросах будет немного отличаться:

Var user = { name: "Tom", age: 23 }; var request = new XMLHttpRequest(); function reqReadyStateChange() { if (request.readyState == 4 && request.status == 200) document.getElementById("output").innerHTML=request.responseText; } var body = "name=" + user.name + "&age="+user.age; request.open("POST", "http://localhost:8080/postdata.php"); request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); request.onreadystatechange = reqReadyStateChange; request.send(body);

Для отправки данных методом POST надо установить заголовок Content-Type с помощью метода setRequestHeader() . В данном случае заголовок имеет значение application/x-www-form-urlencoded .

Отправка форм. FormData

Начиная со спецификации XMLHttpRequest2 в JavaScript появился новый объект - FormData , который позволяет сериализовать данные формы для ее последующей отправки. При этом нам даже необязательно создавать форму в коде html, мы можем создать ее динамически в JavaScript:

Var formData = new FormData(); formData.append("name", "Tom"); formData.append("age", 23); var request = new XMLHttpRequest(); function reqReadyStateChange() { if (request.readyState == 4 && request.status == 200) document.getElementById("output").innerHTML=request.responseText; } request.open("POST", "http://localhost:8080/display.php"); request.onreadystatechange = reqReadyStateChange; request.send(formData);

Для добавления данных у объекта FormData используется метод append("имя_параметра", значение) . При этом никакие заголовки указывать не надо.

Также мы можем определить форму в html и использовать ее для отправки:



// получаем объект формы var form = document.forms.user; // прикрепляем обработчик кнопки form.submit.addEventListener("click", sendRequest); // обработчик нажатия function sendRequest(event){ event.preventDefault(); var formData = new FormData(form); var request = new XMLHttpRequest(); request.open("POST", form.action); request.onreadystatechange = function () { if (request.readyState == 4 && request.status == 200) document.getElementById("output").innerHTML=request.responseText; } request.send(formData); }

Для сериализации всех полей формы нам достаточно передать объект формы в конструктор FormData: var formData = new FormData(form);

Отправка данных в формате json

Для отправки данных в формате json нам необходимо установить соответствующий заголовок и сериализовать данные с помощью метода JSON.stringify:

// объект для отправки var user = { username: "Tom", age: 23 }; var json = JSON.stringify(user); var request = new XMLHttpRequest(); request.open("POST", "http://localhost:8080/postjson.php"); request.setRequestHeader("Content-type", "application/json; charset=utf-8"); request.onreadystatechange = function () { if (request.readyState == 4 && request.status == 200) document.getElementById("output").innerHTML=request.responseText; } request.send(json);