Каковы ключевые отличия HTTP-метода GET от методов, изменяющих состояние (POST, PUT, DELETE)?

«Каковы ключевые отличия HTTP-метода GET от методов, изменяющих состояние (POST, PUT, DELETE)?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод GET предназначен только для получения данных. Его ключевые отличия от методов, изменяющих состояние на сервере (POST, PUT, PATCH, DELETE), определены в стандарте HTTP и заключаются в следующих свойствах:

  • Безопасность (Safe): GET не должен изменять состояние сервера. Его можно вызывать многократно без побочных эффектов.
  • Идемпотентность (Idempotent): Многократное выполнение одного и того же GET-запроса дает идентичный результат.
  • Кэшируемость (Cacheable): Ответы на GET-запросы могут и должны кэшироваться.
  • Данные в URI: Параметры передаются только в строке запроса (query string) URL.
  • Ограничение длины: Длина URL ограничена (зависит от браузера и сервера), что накладывает ограничение на объем передаваемых данных.

Методы POST, PUT, PATCH, DELETE не обладают свойством Safe (они изменяют данные). POST не является идемпотентным, а PUT и DELETE — идемпотентны. Данные для этих методов обычно передаются в теле запроса (body), без жестких ограничений по размеру.

Примеры:

# GET: Получить информацию о пользователе. Параметры в URL.
GET /api/users/123 HTTP/1.1
Host: example.com

# POST: Создать нового пользователя. Данные в теле запроса.
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "Alice",
  "email": "alice@example.com"
}