Виды html методов запросов

Типы HTTP-запросов и философия REST

Этот пост — ответ на вопрос, заданный в комментарии к одной из моих статей.

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

HTTP

Итак, что же представляет из себя один из основных протоколов интернета? Педантов отправлю к RFC2616, а остальным расскажу по-человечески 🙂

Этот протокол описывает взаимодействие между двумя компьютерами (клиентом и сервером), построенное на базе сообщений, называемых запрос (Request) и ответ (Response). Каждое сообщение состоит из трех частей: стартовая строка, заголовки и тело. При этом обязательной является только стартовая строка.

Стартовые строки для запроса и ответа имеют различный формат — нам интересна только стартовая строка запроса, которая выглядит так:

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

Заголовки — это набор пар имя-значение, разделенных двоеточием. В заголовках передается различная служебная информация: кодировка сообщения, название и версия браузера, адрес, с которого пришел клиент (Referrer) и так далее.

Тело сообщения — это, собственно, передаваемые данные. В ответе передаваемыми данными, как правило, является html-страница, которую запросил браузер, а в запросе, например, в теле сообщения передается содержимое файлов, загружаемых на сервер. Но как правило, тело сообщения в запросе вообще отсутствует.

Читайте также:  Обновление python через cmd

Пример 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=utf-8 Content-Length: 1234 Connection: close . САМА HTML-СТРАНИЦА .

Ресурсы и методы

Вернемся к стартовой строке запроса и вспомним, что в ней присутствует такой параметр, как URI. Это расшифровывается, как Uniform Resource Identifier — единообразный идентификатор ресурса. Ресурс — это, как правило, файл на сервере (пример URI в данном случае ‘/styles.css’), но вообще ресурсом может являться и какой-либо абстрактный объект (‘/blogs/webdev/’ — указывает на блок «Веб-разработка», а не на конкретный файл).

Тип HTTP-запроса (также называемый HTTP-метод) указывает серверу на то, какое действие мы хотим произвести с ресурсом. Изначально (в начале 90-х) предполагалось, что клиент может хотеть от ресурса только одно — получить его, однако сейчас по протоколу HTTP можно создавать посты, редактировать профиль, удалять сообщения и многое другое. И эти действия сложно объединить термином «получение».

  • GET — получение ресурса
  • POST — создание ресурса
  • PUT — обновление ресурса
  • DELETE — удаление ресурса

В игру вступает REST

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

REST предлагает отказаться от использования одинаковых URI для разных ресурсов (то есть адреса двух разных статей вроде /index.php?article_id=10 и /index.php?article_id=20 — это не REST-way) и использовать разные HTTP-методы для разных действий. То есть веб-приложение, написанное с использованием REST подхода будет удалять ресурс при обращении к нему с HTTP-методом DELETE (разумеется, это не значит, что надо давать возможность удалить всё и вся, но любой запрос на удаление в приложении должен использовать HTTP-метод DELETE).

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

Источник

HTTP Методы

Два наиболее часто используемых метода HTTP: GET и POST.

Что такое HTTP?

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

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

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

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

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

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

  • GET — Запрашивает данные из указанного ресурса
  • POST — Отправляет данные для обработки указанному ресурсу

Метод GET

Обратите внимание, что строка запроса (пары name/value) отправляется в URL запроса GET:

Некоторые другие примечания по запросам GET:

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

Метод POST

Обратите внимание, что строка запроса (пары name/value) отправляется в теле сообщения HTTP запроса POST:

Некоторые другие заметки о почтовых запросах:

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

Сравнение GET и POST

В следующей таблице сравниваются два метода HTTP: GET и POST.

GET POST
Возврат Кнопка/Перезагрузка Безвредный Данные будут повторно отправлены (браузер должен предупредить пользователя о том, что данные будут повторно отправлены)
Закладка Могут быть закладки Не могут быть закладки
Кэширование Может быть кэширован Не кэшировать
Тип кодировки application/x-www-form-urlencoded application/x-www-form-urlencoded или multipart/form-data. Использовать кодировку для двоичных данных
История Параметры остаются в истории браузера Параметры не сохраняются в истории браузера
Ограничения на длину данных Да, при отправке данных метод GET добавляет данные в URL; длина URL адреса ограничена (Максимальная длина URL составляет 2048 символов) Не ограничивать
Ограничения типа данных Только символы ASCII Не ограничивать. Двоичные данные также разрешены
Безопасность GET менее безопасен по сравнению с POST, поскольку отправляемые данные являются частью URL

Другие методы запроса HTTP

В следующей таблице перечислены некоторые другие методы запроса HTTP:

Метод Описание
HEAD То же, что и GET, но возвращает только заголовки HTTP, а не тело документа
PUT Загружает представление указанного URI
DELETE Удаляет указанный ресурс
OPTIONS Возвращает методы HTTP, поддерживаемые сервером
CONNECT Преобразует соединение запроса в прозрачный туннель TCP/IP

Источник

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

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

Метод GET запрашивает представление ресурса. Запросы с использованием этого метода могут только извлекать данные.

HEAD запрашивает ресурс так же, как и метод GET, но без тела ответа.

POST используется для отправки сущностей к определённому ресурсу. Часто вызывает изменение состояния или какие-то побочные эффекты на сервере.

PUT заменяет все текущие представления ресурса данными запроса.

DELETE удаляет указанный ресурс.

CONNECT устанавливает «туннель» к серверу, определённому по ресурсу.

OPTIONS используется для описания параметров соединения с ресурсом.

TRACE выполняет вызов возвращаемого тестового сообщения с ресурса.

PATCH используется для частичного изменения ресурса.

Спецификации

Спецификация Название Комментарий
RFC 7231, секция 4: Request methods Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content Определение GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE.
RFC 5789, секция 2: Patch method PATCH метод для HTTP Определение PATCH.

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

Found a content problem with this page?

This page was last modified on 17 июл. 2023 г. by MDN contributors.

Your blueprint for a better internet.

MDN

Support

Our communities

Developers

Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.

Источник

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