Что такое методы HTTP и как их использовать?
Возможно, вы слышали о запросах GET и POST, но это только начало.
Каждый HTTP-запрос использует метод, описывающий его основную цель. Каждый метод имеет конкретное применение для различных задач — от получения веб-страницы до удаления ресурса. GET и POST — два наиболее знакомых, но есть еще семь.
Узнайте об этой концепции и о том, для чего предназначен каждый из девяти возможных методов HTTP.
Что такое HTTP-метод?
Каждый HTTP-запрос, который вы делаете, включает в себя действие и цель для этого действия, подобно глаголу и существительному, которые действуют как объект.
URL-адрес идентифицирует уникальный ресурс, выступающий в качестве цели запроса. Между тем, глагол — какое действие выполнить по этому URL-адресу — представлен методом.
Первая строка HTTP-запроса предоставляет наиболее важную информацию, включая версию HTTP, URL-адрес ресурса и метод запроса:
GET /software/htp/cics/index.html HTTP/1.1
Каковы 9 методов HTTP?
Первые четыре метода эквивалентны четырем действиям модели CRUD: создание, чтение, обновление и удаление. Соответствующими методами HTTP являются POST, GET, PUT и DELETE.
ПОЛУЧАТЬ
Самый распространенный запрос по умолчанию, который вы отправляете при просмотре веб-страниц, нажатии ссылок или запросе данных через API. Сервер должен вернуть ресурс в теле ответа.
ПОЧТА
Используйте POST для создания новых ресурсов, особенно если у этих ресурсов есть идентифицируемый родительский ресурс. Например, если у вас есть ресурс /clients, вам следует создать нового клиента, отправив необходимые данные POST в /clients.
ПОМЕЩАТЬ
Обновите или замените существующий ресурс. Это похоже на POST, но за выбор уникального идентификатора ресурса отвечает клиент. Чтобы создать ресурс с помощью PUT, URL-адрес ресурса должен включать идентификатор, например /clients/007.
УДАЛИТЬ
Используйте этот метод, чтобы удалить ресурс, указанный в URL-адресе. Как и все методы HTTP, поддержка осуществляется сервером. Он может позволить кому угодно удалить ресурс, хотя это явно было бы рискованно. Сервер, поддерживающий DELETE, обычно требует аутентификации и авторизации.
Два других метода немного отличаются от описанного выше: PATCH и HEAD. Они могут оказаться полезными при использовании определенных API или при создании собственных.
ПЛАСТЫРЬ
Метод PATCH обновляет существующий ресурс только с частичными данными. Другими словами, вам не нужно предоставлять полное представление нового ресурса, а только поля, которые необходимо обновить.
ГОЛОВА
Запрос HEAD предназначен для случаев, когда вам нужна информация о ресурсе, а не сам ресурс. Ответ не будет содержать тела, но будет содержать набор полезных HTTP-заголовков. Вы можете узнать общий размер файла перед его загрузкой через заголовок ответа Content-Length.
Остальные методы — OPTIONS, CONNECT и TRACE – более непонятны. Они занимаются метаданными, сетями и устранением неполадок. Они могут оказаться полезными в определенных видах программирования, но, вероятно, вы не будете использовать их каждый день.
ПАРАМЕТРЫ
Сервер должен ответить на этот метод, сообщив вам, какие методы HTTP на самом деле поддерживает ресурс. Это может быть полезно для открытия.
СОЕДИНЯТЬ
Некоторые типы сетевого программного обеспечения могут использовать этот метод для установления туннеля между двумя компьютерами. Это часто используется для инициации соединения HTTPS через прокси.
СЛЕД
Этот метод полезен для устранения неполадок. Получив его, сервер должен отправить обратно запрос, полученный в теле ответа. Метод предоставляет механизм проверки того, изменили ли промежуточные машины какие-либо детали запроса.
GET и HEAD — единственные два метода, которые поддерживает каждый обычный веб-сервер. Конкретный сервер может поддерживать или не поддерживать другие методы, поэтому вам следует сначала проверить.
Когда вы можете использовать эти методы?
Большую часть времени методы HTTP будут для вас прозрачны. Однако вам придется учитывать их, если вы добавляете форму на веб-страницу или используете API.
HTTP-методы в HTML
Атрибут method элемента form позволяет вам установить метод HTTP, который будет использоваться при отправке формы. HTML поддерживает только значения post и get для этого атрибута, а также неясную альтернативу диалоговому окну.
<form method="post">
...
</form>
Вы можете использовать такие функции, как инструменты разработчика Chrome, для просмотра сетевого трафика и подтверждения метода, который ваш браузер отправляет для определенного запроса. Обратите внимание, что большинство веб-форм отправляют POST, поскольку они обычно обновляют данные на сервере. Однако многие формы поиска используют GET, поскольку они просто извлекают данные, не изменяя их.
Поскольку данные POST не являются частью URL-адреса, они более конфиденциальны, чем если бы вы отправляли их через GET. Данные по-прежнему существуют в теле запроса, где теоретически злоумышленник может их перехватить. Но отправка данных через HTTPS должна смягчить эту проблему.
Никогда не следует реализовывать вход пользователя с помощью запросов GET. Несмотря на то, что вход в систему может показаться больше похожим на операцию чтения, чем на создание или обновление, вам все равно необходимо использовать POST для защиты данных.
Поскольку HTML-формы поддерживают только GET и POST, вы не можете напрямую создать форму, которая, например, удаляет ресурс на сервере. Распространенный обходной путь, учитывающий принципы REST на сервере, — использовать переменную-заполнитель и притворяться, что это был исходный метод HTTP. Например:
<form method="post">
<input type="hidden" name="_method" value="DELETE" />
...
</form>
Ваш серверный код может проверять наличие этой переменной «прокси-метода» и обрабатывать ее так, как если бы это был реальный используемый метод. Например, в PHP:
$method = $_SERVER["REQUEST_METHOD"];
if (array_key_exists("_method", $_REQUEST)) {
$method = $_REQUEST["_method"];
}
Отправка HTTP-запросов программно
API Web Fetch предоставляет функцию JavaScript fetch(), которую можно использовать для отправки HTTP-запроса. Он поддерживает весь спектр методов, а не только GET и POST, которые поддерживает HTML.
Функция выборки по умолчанию отправит запрос GET. Чтобы использовать другой метод, укажите его имя в качестве значения свойства method в объекте, который вы отправляете в качестве второго аргумента.
fetch('https://example.com/', { method: "HEAD" });
Вы также можете отправлять HTTP-запросы со многих серверных языков, включая PHP. На этом языке библиотека Curl является распространенным способом отправки таких запросов.
В библиотеке Curl есть опция CURLOPT_CUSTOMREQUEST, которую вы можете установить, чтобы указать метод.
if ($ch = curl_init($url)) {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_exec($ch);
// ...
}
Через командную строку
Инструмент командной строки Curl позволяет передавать данные на сервер или с него по одному из нескольких протоколов. HTTP (и HTTPS) — два очень распространенных варианта использования.
По умолчанию Curl отправляет запрос GET, что вы можете подтвердить с помощью следующей команды:
curl -v -s -o /dev/null example.com/get-test
Вы можете увидеть метод запроса в пятой строке вывода:
Вы можете изменить метод запроса, который отправляет Curl, используя флаг -X:
curl -v -s -o /dev/null example.com/get-test -X POST
Теперь Curl отправляет запрос методом POST:
HTTP имеет множество применений
Большая часть того, что вы делаете в Интернете, будет включать стандартные запросы GET, а также время от времени POST для отправки форм. Но HTTP — гораздо более выразительный протокол, чем можно предположить.
Некоторые из наиболее распространенных методов отражают модель CRUD, что делает HTTP отличной основой для создания API, ориентированного на ресурсы.