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

Вот учу php, один из первых уроков это виды запросов. Не особо понял эту тему. И в других ресурсах тоже читал. Главное объясните какая между ними разница и что у них общего. И где ими пользоваться для максимального положительного результата.
  • Вопрос задан
  • 106079 просмотров
Решения вопроса 1
socengel
@socengel
7 лет native php в продакшене, онлайн 20000+,
Общего между ними то что они работают одинаково. Разницы между ними технически никакой. А вот идеологические различия есть.

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

GET запрос используется чтобы получить данные а POST чтобы отправить. (Напоминаю что технически они работают одинаково).

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

Чаще всего пост запрос используется в формах (для отправки данных).

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

Представим что мы используем GET метод. Тогда при отправке формы мы перейдем на следующий адрес /login.php?login=Андрей&password=123 согласитесь что так передавать такую информацию совсем не безопасно. Любой может открыть ваш браузер и начиная вводить адрес сайта он из истории может увидеть ваши пароли и логины.

А вот если бы мы указали методом POST то мы бы получили следующий запрос:
POST /login.php (login=Андрей&password=123) то что в скобочках было бы скрыто и никак не сохранено в браузере.

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

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

И еще одна хорошая новость их можно комбинировать, например
POST /index.php?page=login (login=Андрей&password=123) Думаю я уже достаточно объяснил что из этого получится и какие параметры в какой массив попадут.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
gadfi
@gadfi
https://gamega.org
GET ─получить данные
PUT ─ создать данные
POST ─ редактировать данные
DELETE ─ удалить данные

С PUT и POST часто неразбериха, разные источники рекомендуют по разному ... на самом деле их обоих можно использовать для создания и редактирования, выбирать вам, разве что если один объект то PUT, несколько то POST. Не будет ошибкой использовать POST для одного объекта, это все скорее правила хорошего тона чем жесткие требования ─ встречал api где все было на GET запросах (криво намой взгляд, но работает).
Также не забывайте про статус ответа ─ недавно работал с api где статусы были в виде gson объектов ..... вот это уже маразм.
Ответ написан
@frees2
$query_string = "";
if ($_POST) {  $kv = array();
foreach ($_POST as $key => $value) { $kv[] = "$key=$value"; }
$query_string = join("&", $kv);}
else { $query_string = $_SERVER['QUERY_STRING'];}



echo $query_string;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы