Інтернет Windows Android

POST і GET запити простими словами. Як відправити post запит з браузера: метод пост Мінлива post в php приклади використання

У цьому уроці ми розглянемо загальні прийоми передачі даних між формами і сторінками. Такими методами є POST і GET. Про кожний ми поговоримо окремо і більш детально. Взагалі кажучи, це потрібно для зв'язку між формами. Наприклад ми заповнюємо якісь поля на сторінці і нам потрібно їх передати в іншу сторінку для обробки.

Метод GET в PHP

Для початку розберемо метод GET. Це коли всі змінні і їх значення передаються прямо через адресу. Зараз на прикладі ви все побачите, і навіть зрозумієте як працює більшість сайтів і форумів.
Наприклад, є у нас html сторінка такого виду:

Сторінка з прикладом передачі змінних за допомогою Get посилання

Бачите посилання? Вона складна і складається з декількох частин. Давайте розберемо все по поличках:
https: // сайт - адреса домену або, як його ще називають, хост.
index.php - сторінка на php, яка буде обробляти запит.
? - символ поділу між адресою та блоком зі змінними.
Далі йдуть змінні і їх значення, які розділені символом & .
name \u003d Sergey - змінна name і її значення Sergey.
age \u003d 22 - те ж саме, змінна age, значення 22.

Все розібрали, тепер подивимося як це обробляється в php, за допомогою методу GET.
Сторінка index.php, як ви пам'ятаєте, ми передавали їй:

Для початку рада: ЗАВЖДИ перевіряйте змінні на правильність: на порожнечу, на відповідність допустимих значень і так далі. Так як все передається через адресний рядок, то дані можна легко підмінити і нашкодити сайту. Тепер по самому коду: ми, за допомогою, перевірили змінні name і age на порожнечу і, якщо вони не порожні, то вивели їх, а якщо порожні, то просто повідомили про це.
Все просто, погодьтеся? Наприклад ви можете створити html сторінку і в менюшке зробити посилання через змінні, а в index.php обробляти змінну і відображати в залежності від отриманого значення ту чи іншу сторінку. Ну про це ми поговоримо пізніше, в статті про створення сайту на php з нуля. Щоб нічого не пропустити, раджу підписатися на RSS.

Метод POST в PHP

Для демонстрації роботи цього методу нам знадобиться трохи більше, ніж проста рядок з адресою :) Потрібно буде створити html сторінку з формою для заповнення, але нічого, я приведу готовий приклад для вас:

Сторінка з прикладом передачі змінних за допомогою Post

Заповнюємо поля для передачі інформації:

Вкажіть Ваше ім'я:

Вкажіть Ваш вік:



Отже, ми створили html сторінку з простою формою. Запам'ятайте, метод POST може використовуватися тільки в формі.
Перший параметр форми - «method», він визначає метод, який ми будемо використовувати для передачі. Як ви могли здогадатися, це або GET, або POST. При цьому, якщо встановлений GET, то всі імена полів (у вигляді назв змінних), а також їх значення, передаються по посиланню, як в розділі про метод GET. Якщо ж встановлено POST, то все назви змінних і значення будуть передаватися як запит браузера до веб-сервера. Тобто в адресному рядку їх видно не буде. У багатьох випадках це дуже корисно. Також POST безпечніше, воно і зрозуміло, адже змінні з їх значеннями вже не так просто відредагувати, хоча теж можна.

Другий параметр форми - «action». Це шлях і ім'я файлу скрипта, якого ми передаємо дані. У нашому випадку це index.php. Цей шлях можна передавати і повністю, тобто так: action \u003d "https://my_site.ru/index.php». Якщо не вказати значення параметра «action», то вся інформація буде передаватися головному скрипту, тобто контрольного аркуша index.php вашого сайту, що цілком логічно.

Тепер отримаємо дані з нашої форми. Раз передавали ми в index.php, значить нижче буде код саме цієї сторінки:

"; Echo" ім'я - "; echo $ _POST [" user_name "]; echo"
вік - "; echo $ _POST [" age "]; echo" років ";) else (echo" Змінні не дійшли. Перевірте все ще раз. ";)?\u003e

Не забуваємо перевіряти на порожнечу і допустимі значення. Далі потрібно уточнити, чому наші змінні називаються саме user_name і age? А ви подивіться на поля форми, яку ми створювали вище. бачите там input name \u003d "user_name» type \u003d «text» ? Ось тут параметр name і задає ім'я змінної, яку ми отримаємо за допомогою цього поля. Те ж саме і з age. Сподіваюся зрозуміло. Ну а отримання змінної і її значення через POST майже не відрізняється від GET, який ми розглянули вище.

Ну ось, урок вийшов великий, але зате один з найкорисніших, адже передача змінних між формами і сторінками це саме та інтерактивність, заради якої ми і використовуємо PHP.

Ви могли помітити, що на більшість сайтів можна споглядати ось такі адреси:

Http: //сайт/index.php? Blog \u003d 2

Тут, навіть не знаючи php, можна здогадатися, що ми звертаємося до файлу index.php Але те, що йде після знака питання, мало хто знає. Все досить просто: ? Blog \u003d 2 це оголошення глобальної змінної «$ _GET [" blog "]» з значенням «2». Таким чином я в скрипт передаю змінну яка відповідає за виведення інформації з бази даних. Давайте напишемо невеликий скрипт в якому Ви все наочно побачите:

if (isset ($ _ GET [ "blog"])) (
echo $ _GET [ "blog"];
}
?>

Ми використовуємо оператор умов if () в якості умови варто ось такий рядок:

Isset ($ _ GET [ "blog"])

isset () дозволяє дізнатися чи існує змінна яка вказана в дужках, тобто умова яке я описав в коді звучить так: Якщо існує змінна $ _GET [ "blog"] то вивести вміст цієї змінної на екран. Ось що вийшло:

Думаю зрозуміло Створюється глобальна змінна $ _GET з ідентифікатором який ми оголосили в адресному рядку ( в даному випадку з ідентифікатором «blog»)

Тепер хочу пояснити один момент. Припустимо нам необхідно оголосити дві змінні, як це зробити? Перша змінна оголошується після знака питання «?» Друга ж змінна оголошується після такого знака «&» ( Якщо чесно не знаю що це за знак ), Ось приклад оголошення трьох змінних:

Http: //сайт/index.php? A \u003d 1 & b \u003d 2 & c \u003d 3

Ось код виведення:

if (isset ($ _ GET [ "a"]) AND isset ($ _ GET [ "b"]) AND isset ($ _ GET [ "c"])) (
echo $ _GET [ "a"]. "
";
echo $ _GET [ "b"]. "
";
echo $ _GET [ "c"]. "
";
}
?>

Умова звучить так:

Якщо існує глобальна змінна $ _GET [ "a"] і глобальна змінна $ _GET [ "b"] і глобальна змінна $ _GET [ "з"] то вивести їх на екран, Ось результат:

форми

Перш ніж ми перейдемо до post запитам, необхідно розібрати, що таке форми? Чому потрібно? Тому що глобальна змінна $ _POST [ ""] створюється саме через форми. Що таке форма? Це поля для введення будь-нитка інформації користувачем. Поля бувають в одну строчку, великі поля, так само бувають радіо кнопочки, чек бокси. Розберемо все по порядку ...

Форма це тег:


елементи форми

У форми є атрибути, перерахую найпоширеніші:

Давайте створимо форму:


елементи форми

Як файлу обробника я поставив файл test.php так як саме в ньому пишу для Вас приклади. Метод відправки я поставив post так як саме цим методам користуються в 99.9% випадках. Так само я присвоїв нашій формі ім'я - form

Тепер зануримося в світ елементів форми. Насамперед Ви повинні зрозуміти, що майже всі елементи є тегом відмінність лише в атрибуті type у цих тегів. Давайте я перерахую використовувані елементи форм:

Я впевнений, що ви не раз зустрічали такі поля, так що тут як то кажуть: «no comments»

Тепер давайте складемо невелику тренувальну анкету, з якої будемо працювати далі. Наше завдання скласти невелику анкетку яка повідає нам ім'я заполнявшего, підлогу, з якої він країни, улюблений колір і поле тексту де користувач може додати що-нить про себе. Ось що у мене вийшло:

Ваше Прізвище Ім'я По батькові:

Ваш пол:
М
Ж

З якої ви країни



Улюблений (і) колір (а):

чорний:
Червоний:
білий:
інший:

Про себе:




Зверніть увагу, що майже у кожного тега є атрибут value, Для чого він? У нього записуються дані які Ви збираєтеся перенести на іншу сторінку. сподіваюся зрозуміло

Тепер якщо запустити цей код в браузері, то ми побачимо наступне:

У форми я використовував атрибут action зі значенням test.php це означає, як я вже говорив, що дані з форми передадуться в файл test.php.

POST запит

Тепер напишемо php код який дозволить нам побачити введену нами інформацію. Де зберігаються дані? У випадку з get запитом, наші дані лежали в глобальній змінній $ _GET [ ""]. При post запиті, дані будуть лежати в глобальній змінній $ _POST [ ""]. У квадратних дужках, необхідно прописувати, як і в випадку з глобальної змінної get, ідентифікатор. Питання, де цей ідентифікатор взяти? Ось для чого нам необхідний атрибут name у елементів форм! Саме ці імена і служать нам ключем в глобальному масиві post. Ну що ж, приступимо до опису скрипта:

if (isset ($ _ POST [ "submit"])) (
echo "ПІБ:". $ _ POST [ "fio"]. "
";
echo "Пол:". $ _ POST [ "sex"]. "
";
echo "Країна проживання:". $ _ POST [ "city"]. "
";

Echo "Коханий (і) колір (а):
";
echo $ _POST [ "color_1"]. "
";
echo $ _POST [ "color_2"]. "
";
echo $ _POST [ "color_3"]. "
";
echo $ _POST [ "color_4"]. "
";
echo "Про себе:". $ _ POST [ "about"]. "


";
}
?>

Написане нами умова if говорить: Якщо існує глобальна змінна $ _POST [ "submit"] то виводимо дані на екран. Ця глобальна змінна створюється в разі якщо ми натиснули на кнопку відправки, ось для чого в даному прикладі необхідний атрибут name в кнопці. Ви цілком можете задатися питанням, чому ж у кнопки атрибут name не обов'язково? Все досить просто. Зазвичай програміст не відстежує натискання кнопки, а відстежує послані дані. Для коректної роботи, наприклад форми контактів, необхідно відстежити не натисканням кнопки, а правильність введення інформації, і дізнатися вводили цю інформацію взагалі. У нашому ж прикладі ми не перевіряли послані дані, а просто відстежили натискання кнопки, для спрощення прикладу ... Ось що у нас вийшло:

висновок

Ну що ж, за сьогодні ми розібрали два методи передачі даних між скриптами, так само галопом познайомилися з формами. Маю велику надію, що ця інформація Вам хоч де стане в нагоді. Якщо є якісь питання, чи думки, пишіть коментарі. Удачі Вам, на сьогодні у мене все!

P.S .: Хочете що б комп'ютерні ігри стали ще більш реалістичними? directx 11 для windows 7 завантажити безкоштовно можна на Віндоус ін! Насолоджуйтесь чудовою графікою!

Цей пост - відповідь на питання, поставлене в коментарі до однієї з моїх статей.

У статті я хочу розповісти, що ж із себе представляють HTTP-методи GET / POST / PUT / DELETE та інші, для чого вони були придумані і як їх використовувати відповідно до REST.

HTTP

Отже, що ж представляє із себе один з основних протоколів Інтернету? Педантів відправлю до RFC2616, а іншим розповім по-людськи :)

Цей протокол описує взаємодію між двома комп'ютерами (клієнтом і сервером), побудоване на базі повідомлень, званих запит (Request) і відповідь (Response). Кожне повідомлення складається з трьох частин: стартова рядок, заголовки і тіло. При цьому обов'язковою є тільки стартова рядок.

Стартові рядки для запиту і відповіді мають різний формат - нам цікава тільки стартова рядок запиту, яка виглядає так:

METHOD URI HTTP / VERSION ,

Де METHOD - це як раз метод HTTP-запиту, URI - ідентифікатор ресурсу, VERSION - версія протоколу (на даний момент актуальна версія 1.1).

Заголовки - це набір пар ім'я-значення, розділених двокрапкою. У заголовках передається різна службова інформація: кодування повідомлення, назву та версію браузера, адреса, з якого прийшов клієнт (Referrer) і так далі.

Тіло повідомлення - це, власне, передані дані. У відповіді переданими даними, як правило, є html-сторінка, яку запросив браузер, а в запиті, наприклад, в тексті листа передається вміст файлів, що завантажуються на сервер. Але як правило, тіло повідомлення в запиті взагалі відсутня.

Приклад HTTP-взаємодії

Розглянемо приклад.

запит:
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 \u003d utf-8 Content-Length: тисячі двісті тридцять чотири 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

REST (REpresentational State Transfer) - це термін був введений в 2000-му році Роєм Філдінгом (Roy Fielding) - одним з розробників протоколу HTTP - в якості назви групи принципів побудови веб-додатків. Взагалі REST охоплює більш широку область, ніж HTTP - його можна застосовувати і в інших мережах з іншими протоколами. REST описує принципи взаємодії клієнта і сервера, засновані на поняттях «ресурсу» і «дієслова» (можна розуміти їх як підмет і присудок). У разі HTTP ресурс визначається своїм URI, а дієслово - це HTTP-метод.

REST пропонує відмовитися від використання однакових URI для різних ресурсів (тобто адреси двох різних статей на кшталт /index.php?article_id\u003d10 і /index.php?article_id\u003d20 - це не REST-way) і використовувати різні HTTP-методи для різних дій. Тобто веб-додаток, написаний з використанням REST підходу буде видаляти ресурс при зверненні до нього з HTTP-методом DELETE (зрозуміло, це не означає, що треба давати можливість видалити все і вся, але будь-який запит на видалення в додатку повинен використовувати HTTP-метод DELETE).

REST дає програмістам можливість писати стандартизовані і трохи більше красиві веб-додатки, ніж раніше. Використовуючи REST, URI для додавання нового користувача буде не /user.php?action\u003dcreate (метод 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.

Цей пост призначений для пояснення принципів передачі даних в інтернеті за допомогою двох основних методів: GET і POST. Написав я його в якості доповнення до інструкції по генератору змінного графіка роботи для тих, кому навряд чи цікаві подробиці ☺.

Перейдіть за наступною адресою (це для наочного пояснення): http://calendarin.net/calendar.php?year\u003d2016 Зверніть увагу на адресний рядок браузера: calendarin.net/calendar.php ? Year \u003d 2016 Основний файл називається, за ним слід знак питання (?) І параметр «year» зі значенням «2016». Так ось, все, що слідує за знаком, це і є GET-запит. Все просто. Щоб передати не один параметр, а кілька, то їх потрібно розділити амперсандом (&). Приклад: calendarin.net/calendar.php ? Year \u003d 2016 & display \u003d 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 \u003d "submit», яка розташована на веб-сторінці. Зверніть увагу, що ця кнопка розташована в елементі , У якого встановлений атрибут method зі значенням post.

Розглянемо цей HTML-код:

Введіть текст:


Якщо користувач введе в текстове поле будь-якої текст і натисне на кнопку «Відправити», то на сервер буде відправлена \u200b\u200bзмінна text зі значенням того вмісту, яке ввів користувач.

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

Ця змінна буде відправлена \u200b\u200bметодом 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 \u003d 1 \\ r \\ n
Content-Type: application / x-www-form-urlencoded \\ r \\ n
Content-Length: 35 \\ r \\ n
\\ R \\ n
login \u003d Dima & password \u003d 12345

Таким чином, передаючи дані методом POST, їх буде набагато важче перехопити зловмиснику, тому що вони приховані від безпосереднього перегляду, тому метод передачі даних методом POST вважається більш безпечним способом.

Крім того, методом POST можна передавати не тільки текст, а й мультимедіа дані (картинки, аудіо, відео). Існує спеціальний параметр Content-Type, який визначає той вид інформації, який необхідно передати.

Ну і, нарешті, щоб на сервері отримати дані, які були передані цим методом, використовується змінна POST.

Ось приклад обробки на мові PHP:

echo $ _POST [ 'text'];
?>

У минулій замітці, ми визначилися з тим, що браузер (клієнт) відправляє серверу HTTP запити, а сервер відправляє клієнту HTTP відповіді. Ці запити і відповіді оформляються за певними правилами. Є, щось на зразок синтаксису, як і в якій послідовності, має бути написано. Повинна бути строго певна структура.

Давайте більш детально розглянемо цю структуру, по якій будуються запити і відповіді в протоколі HTTP.

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

Порожній рядок (роздільник)

Post і Get запити, яка між ними різниця і що краще і для яких цілей?

тіло повідомлення (Entity Body) - необов'язковий параметр

рядок запиту - вказує метод передачі, URL-адресу, до якого потрібно звернутися і версію протоколу HTTP.

заголовки - описують тіло повідомлень, передають різні параметри та ін. Відомості та інформацію.

тіло повідомлення - це самі дані, які передаються в запиті. Тіло повідомлення - це необов'язковий параметр і може бути відсутнім.

Коли ми отримуємо у відповідь запит від сервера, тіло повідомлення, найчастіше представляє собою вміст веб-сторінки. Але, при запитах до сервера, воно теж може іноді бути присутнім, наприклад, коли ми передаємо дані, які заповнили в формі зворотного зв'язку на сервер.

Більш детально, кожен елемент запиту, ми розглянемо в наступних замітках.

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

Запит від браузера:

Host: webgyry.info

Cookie: wp-settings

Connection: keep-alive

У наступному прикладі вже присутній тіло повідомлення.

Відповідь сервера:

Content-Type: text / html; charset \u003d UTF-8

Transfer-Encoding: chunked

Connection: keep-alive

Keep-Alive: timeout \u003d 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) \u200b\u200b- це ідентифікатор ресурсу на який відправляється запит. Нижче наведено найбільш часто зустрічається формат 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 \u003d 0.9, * / *; q \u003d 0.8
Accept-Language: ru-RU, ru; q \u003d 0.8, en-US; q \u003d 0.5, en; q \u003d 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 \u003d значеніе_параметра1 & імя_параметра2 \u003d значеніе_параметра2 & ...

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

Наприклад, якщо ми хочемо передати сервера два значення, ім'я користувача і його вік, то це можна зробити наступним рядком:

http://site.ru/page.php?name\u003ddima&age\u003d27

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

Ось приклад, як це можна зробити на PHP.

echo «Ваше ім'я:». $ _GET [ «name»]. «
»;
echo «Ваш вік:». $ _GET [ «age»]. «
»;
?>

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

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

Ваше ім'я: dima
Ваш вік: 27

ми теж виконуємо запит до сервера методом GET.

Спільного між ними то що вони працюють однаково. Різниці між ними технічно ніякої. А ось ідеологічні відмінності є.

Я розповім про них в контексті PHP. Прошу зауважити що протокол HTTP до PHP має непряме відношення бо він створювався для обміну html сторінками а PHP просто розширює можливості і того і іншого.

GET запит використовується щоб отримати дані а POST щоб відправити. (Нагадую що технічно вони працюють однаково).

Тому в контексті PHP спираючись на цю ідеологію зробили такий спосіб:
1. При кожному запуску PHP за замовчуванням створюються суперглобальні масиви ($ _GET, $ _POST).
2. Якщо в рядку запиту є знак питання (?). Те все що після нього вважається параметрами GET запиту вони представлені в форматі "ключ" \u003d "значення" і як роздільник використовується знак амперсанда (&)
приклад:
GET /index.php?name\u003dАндрей&surname\u003dГалкін
це рядок запиту, тут 2 параметра. ці параметри потраплять в масив $ _GET.
3. $ _POST заповнюється іншим способом. вміст цього масиву заповнюється з "заголовків запиту". Тобто з місця, прихованого від очей в явному вигляді. Всю рутину по створенню таких заголовків бере на себе браузер. Хоча іноді і щось редагується в заголовках в ручну.

Найчастіше пост запит використовується в формах (для відправки даних).

Наприклад у нас є форма для входу 2 поля логін і пароль.

Уявімо що ми використовуємо GET метод. Тоді при відправці форми ми перейдемо на наступну адресу /login.php?login\u003dАндрей&password\u003d123 погодьтеся що так передавати таку інформацію зовсім небезпечно. Будь-хто може відкрити ваш браузер і починаючи вводити адресу сайту він з історії може побачити ваші паролі і логіни.

А ось якби ми вказали методом POST то ми б отримали такий запит:
POST /login.php (login \u003d Андрій & password \u003d 123) то що в дужках було б приховано і ніяк не збережено в браузері.

Загалом підсумовуючи:
GET - це щоб отримати певну сторінку в певному виді (сортування, поточна сторінка в блозі, рядок пошуку і т.п.).
POST - для оправлення даних які не впливають на відображення сторінки, в тому плані що ці дані впливають тільки на результат виконання скрипта (логіни, паролі, номери кредиток, повідомлення і т.п.).

І ще одна хороша новина їх можна комбінувати, наприклад
POST /index.php?page\u003dlogin (login \u003d Андрій & password \u003d 123) Думаю я вже досить пояснив що з цього вийде і які параметри в який масив потраплять.