Php определение http метода

Чем отличаются HTTP-методы GET и POST

HTTP-методы GET и POST — самые распространённые способы отправить или получить данные с сервера. Но в разных случаях оба метода могут быть небезопасными или неудобными в использовании. В этой заметке рассмотрим, какой метод когда использовать.

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

:authority: htmlacademy.ru :method: GET :path: /tutorial/php/http-header 

POST — метод для отправки данных на сайт. Чаще всего с помощью метода POST передаются формы.

URL-адрес запроса: https://htmlacademy.ru/consulting Метод запроса: POST Код состояния: 200 

Формат запроса

Протокол HTTP очень прост и состоит, по сути, из двух частей — заголовков и тела запроса или ответа.

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

Пример GET-запроса. Информация передаётся прямо в заголовке.

GET /blog/?name1=value1&name2=value2 HTTP/1.1 Host: htmlacademy.ru 

Пример POST-запроса. Информация передаётся в теле запроса:

POST /blog/ HTTP/1.1 Host: htmlacademy.ru name1=value1&name2=value2 

GET для безопасных действий, POST для опасных

Говоря совсем просто, GET-запросы лучше не использовать с приватной информацией. Вот почему:

  • Они кешируются. Это значит, что логин и пароль, переданные через GET-запрос, могут остаться в интернете навсегда, например, в веб-архиве или кеше Гугла.
  • Остаются в истории браузера. Чтобы узнать, какие данные отправлялись, достаточно нажать Ctrl+H.
  • Сохраняются в закладках и пересылаются. Можно не обратить внимания и опубликовать в соцсетях или отправить ссылку с приватной информацией в GET-запросе.
  • Сохраняются в логах сервера. Например, нельзя отправлять данные банковских карт через GET-запрос, так как это создаёт риски для пользователей.

Таким образом, любые важные данные — логины, пароли, данные карты, персональные данные — лучше передавать с помощью метода POST . Также метод POST поддерживает тип кодирования данных multipart/form-data , что позволяет передавать файлы.

Ещё раз коротко

  • Фильтры в интернет-магазинах
  • Передача параметров через ссылку
  • Другие безопасные запросы
  • Любые формы с паролями или банковскими картами
  • Формы заявок с персональными данными
  • Отправка файлов

Полезные материалы

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Читайте также:  Javascript document run function

Источник

Определение типа запроса в PHP (GET, POST, PUT или DELETE)

Как я могу определить, какой тип запроса использовался (GET, POST, PUT или DELETE) в PHP?

Ответ 1

Пример:

if ($_SERVER[‘REQUEST_METHOD’] === ‘POST’)

// Запрос использует метод POST

>

Ответ 2

REST в PHP можно использовать довольно просто. Создайте http://example.com/test.php (описано ниже). Используйте его для вызовов REST, например, http://example.com/test.php/testing/123/hello. Это работает с Apache и Lighttpd из коробки, и никакие правила перезаписи не нужны.

$method = $_SERVER[‘REQUEST_METHOD’];

$request = explode(«/», substr(@$_SERVER[‘PATH_INFO’], 1));

switch ($method)

case ‘PUT’:

do_something_with_put($request);

break;

case ‘POST’:

do_something_with_post($request);

break;

case ‘GET’:

do_something_with_get($request);

break;

default:

handle_error($request);

break;

>

Ответ 3

Определить метод HTTP или так называемый REQUEST METHOD можно с помощью следующего фрагмента кода :

$method = $_SERVER[‘REQUEST_METHOD’];

if ($method == ‘POST’)

// используется метод POST

> elseif ($method == ‘GET’)

// используется метод GET

> elseif ($method == ‘PUT’)

// используется метод PUT

> elseif ($method == ‘DELETE’)

// используется метод DELETE

> else

// неизвестный метод

>

Вы также можете сделать это с помощью переключателя, если вам больше нравится оператор if-else. Если в HTML-форме требуется метод, отличный от GET или POST, это часто решается с помощью скрытого поля в форме.

Ответ 4

В php вы можете сделать это так:

$method = $_SERVER[‘REQUEST_METHOD’];

switch ($method)

case ‘GET’:

//Здесь обрабатывается GET-запрос

echo »Вы используете ‘.$method.’ метод’;

break;

case ‘POST’:

//Здесь обрабатывается POST-запрос

echo »Вы используете ‘.$method.’ метод’;

break;

case ‘PUT’:

//Здесь обрабатывается PUT-запрос

echo »Вы используете ‘.$method.’ метод’;

break;

case ‘PATCH’:

//Здесь обрабатывается PATCH-запрос

break;

case ‘DELETE’:

//Здесь обрабатывается DELETE-запрос

echo »Вы используете ‘.$method.’ метод’;

break;

case ‘COPY’:

//Здесь обрабатывается COPY-запрос

echo »Вы используете ‘.$method.’ метод’;

break;

case ‘OPTIONS’:

//Здесь обрабатывается OPTIONS-запрос

echo »Вы используете ‘.$method.’ метод’;

break;

case ‘LINK’:

//Здесь обрабатывается LINK-запрос

echo »Вы используете ‘.$method.’ метод’;

break;

case ‘UNLINK’:

//Здесь обрабатывается UNLINK-запрос

echo »Вы используете ‘.$method.’ метод’;

break;

case ‘PURGE’:

//Здесь обрабатывается PURGE-запрос

echo »Вы используете ‘.$method.’ метод’;

break;

case ‘LOCK’:

//Здесь обрабатывается LOCK-запрос

echo »Вы используете ‘.$method.’ метод’;

break;

case ‘UNLOCK’:

//Здесь обрабатывается UNLOCK-запрос

echo »Вы используете ‘.$method.’ метод’;

break;

case ‘PROPFIND’:

//Здесь обрабатывается PROPFIND-запрос

echo »Вы используете ‘.$method.’ метод’;

break;

case ‘VIEW’:

//Здесь обрабатывается VIEW-запрос

echo ‘Вы используете ‘.$method.’метод’;

break;

Default:

echo »Вы используете ‘.$method.’ метод’;

break;

>

?>

Ответ 5

Я использовал этот код. Он должен работать.

function get_request_method()

$request_method = strtolower($_SERVER[‘REQUEST_METHOD’]);

if($request_method != ‘get’ && $request_method != ‘post’)

return $request_method;

>

if($request_method == ‘post’ && isset($_POST[‘_method’]))

return strtolower($_POST[‘_method’]);

>

return $request_method;

>

Приведенный выше код будет работать с вызовами REST и также будет работать с html-формой:

Ответ 6

Поскольку речь идет о REST, получить метод запроса от сервера недостаточно. Вам также необходимо получить параметры маршрута RESTful. Причина разделения параметров RESTful и параметров GET/POST/PUT заключается в том, что ресурс должен иметь свой собственный уникальный URL для идентификации. Вот один из способов реализации RESTful маршрутов в PHP с помощью Slim:

Читайте также:  Css как задать рамку элементам

https://github.com/codeguy/Slim

$app = new \Slim\Slim();

$app->get(‘/hello/:name’, function ($name)

echo «Привет, $name»;

>);

$app->run();

И настройте сервер соответствующим образом. Вот еще один пример с использованием AltoRouter:

https://github.com/dannyvankooten/AltoRouter

$router = new AltoRouter();

$router->setBasePath(‘/AltoRouter’); // (необязательно) поддиректория, в которой находится AltoRouter

// маршруты отображения

$router->map(‘GET|POST’,’/’, ‘home#index’, ‘home’);

$router->map(‘GET’,’/users’, array(‘c’ => ‘UserController’, ‘a’ => ‘ListAction’));

$router->map(‘GET’,’/users/[i:id]’, ‘users#show’, ‘users_show’);

$router->map(‘POST’,’/users/[i:id]/[delete|update:action]’, ‘usersController#doAction’, ‘users_do’);

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Источник

RESTful PHP — 5 простых советов

REST (Representational state transfer) — это архитектурный стиль или свод соглашений для web-приложений и сервисов, основанный на манипулировании ресурсами и спецификацией HTTP. Впервые об этом заговорил Рой Филдинг (Roy Fielding) — один из отцов основателей HTTP (Hypertext Transfer Protocol).

Web-приложения зачастую игнорируют спецификацию HTTP и двигаются вперёд используя полюбившиеся возможности: GET и POST, 200 OK и 404 NOT FOUND. Так как используются программируемые web-приложения, со своими собственными API, то решение игнорировать спецификацию HTTP, может создать проблемы в дальнейшем. Как следствие — имеем множество приложений с интерфейсами GET и POST. Например интерфейс удаления пользователя: GET /user/1/delete против POST /user/delete ; в случае REST можно указать /user/1 это ресурс, а удаление HTTP метод DELETE.

Такие важные методы HTTP, как — POST, GET, PUT и DELETE — зачастую сравнивают с CREATE, READ, UPDATE, DELETE (CRUD) операциями маниулирования базами данных. HTTP отделяет понятие web-сервер и web-браузер. Это позволяет каждой реализации отличаться от других подобных, основанных на «клиент/сервер» принципе.

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

1. Использование методов PUT и DELETE

В PHP можно без проблем определить используемый HTTP метод, достаточно обратиться к переменной системного массива $_SERVER[‘REQUEST_METHOD’]; В случае web-браузеров там прописан либо GET, либо POST метод. Для клиентских приложений REST требуется поддержка PUT, DELETE и желательно OPTIONS и прочих. Но к сожалению в PHP нет $_PUT и $_DELETE, в отличии от $_GET и $_POST. Вот способ исправить упущение:

$_PUT = array(); if($_SERVER['REQUEST_METHOD'] == 'PUT') < $putdata = file_get_contents('php://input'); $exploded = explode('&', $putdata); foreach($exploded as $pair) < $item = explode('=', $pair); if(count($item) == 2) < $_PUT[urldecode($item[0])] = urldecode($item[1]); >> > 

Таким образом у нас появляется массив $_PUT, похожий на $_POST за исключением суперглобальности.

2. Отправка выборочных HTTP 1.1 заголовков

PHP позволяет кастомизировать заголовки посылаемые клиенту. В свою очередь заголовок содержит код ответа от сервера. По умолчанию PHP ответит кодом 200 OK на успешный запрос, на использование функции die() или на создание нового ресурса. Собственно есть два пути кастомизировать ситуацию:

header('HTTP/1.1 404 Not Found'); // или header('Location: http://www.foo.com/bar', true, 201); // 201 CREATED 

Первый вариант достаточно стандартный метод установки кода ответа. Если же потребуется указать перенаправление на ресурс «201 Created» или «301 Moved Permanently», это несложно реализовать, указав код в третьем параметре функции header(), как показано в примере. Второй пример можно заменить на более удобочитаемый код:

header('HTTP/1.1 201 Created'); header('Location: http://www.foo.com/bar'); 

3. Отправка значимых HTTP заголовков

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

Читайте также:  Javascript objects get keys

201 Created — используется если был создан новый ресурс. Должен применяться с функционалом направления на ресурс, например /tech/news, т.к. сам автоматического направления не использует.

202 Accepted — как бы говорит клиенту «ваш заказ принят и скоро будет обработан». В отличие от кода 201, который отсылается после создания ресурса, код 202 ставит запрос в очередь.

204 No Content — В связке с кэшированием и условным GET запросом (запросы с If-Modified-Since/If-None-Match заголовками), позволяет сказать web-приложениям «контент не изменился, продолжайте юзать кэшированную версию», без повторной переработки и отправки кэша.

401 Unauthorized — должен использоваться при попытке обратиться к ресурсу, требующему определённого уровня доступа. Используется в связке с www-authentication.

500 Internal Server Error — гораздо лучше 200 OK, когда PHP скрипт уже не дышит или привёл к исключению.

Естественно заголовков гораздо больше, на эту тему неоднократно было написано, приведённые выше — всего лишь примеры.

4. Не используйте $_SESSION

Настоящее RESTful PHP приложение должно быть полностью независимо, все запросы должны содержать достаточно информации чтобы на них можно было отреагировать без дополнительных усилий со стороны сервера. На практике это подразумевает сохранение авторизационной информации в куках с датой (timestamp) и контрольной суммой. Дополнительная информация так же может быть сохранена в куках. В случае если требуется сохранить большие объёмы данных, их можно уложить в базу данных, авторизационную информацию стоит оставить в куках. UPD: Надо оговориться, что использование cookies не в полной мере соответствует идеологии REST, т.к. сеансовые связи сохраняются. Но в случае cookies информация о сеансе хранится у клиента, а в случае использования session сеансовые связи хранятся во временной директории сервера и в сессионной куке клиента (если включен «session.use_cookies»).

5. Тестирование при помощи cURL или rest-client

cURL позволяет легко выполнять любые HTTP методы для нужного ресурса. Можно передавать любые параметры запросов и заголовков, а так же проверять ответные заголовки и данные. Инструмент коммандной строки «curl», стандартен для большинства *nix систем. Для пользователей Windows подойдёт MinGW/MSYS.

Пример использования и базовые опции:

# curl -X PUT www.foo.com/bar/1 -d «some=var» -d «other=var2» -H «Accept: text/json» -I

-X [METHOD] определяет HTTP метод.
-d «name=value» устанавливает имя и значения переменных в POST/PUT.
-H [HEADER] устанавливает заголовок.
-I отображает заголовки ответа.

Так же существует бесплатный графический, основанный на Java/Swing, rest-client для тестирования REST. Он так же поддерживает JSON/XML.

Полезные ссылки по теме

Где так или иначе используется

* restful (англ.) — успокоительный; успокаивающий.

Источник

Оцените статью