Каково назначение основных HTTP-методов?

«Каково назначение основных HTTP-методов?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HTTP-методы (или глаголы) определяют действие, которое клиент хочет выполнить с ресурсом на сервере.

Метод Назначение Идемпотентность* Безопасность** Пример сценария
GET Получение данных или представления ресурса. Да Да Получение страницы товара, списка пользователей.
POST Создание нового ресурса или отправка данных для обработки. Нет Нет Отправка формы регистрации, создание заказа.
PUT Полное обновление (или создание) ресурса по известному URI. Да Нет Обновление всего профиля пользователя.
PATCH Частичное обновление ресурса. Нет*** Нет Изменение только email в профиле пользователя.
DELETE Удаление ресурса. Да Нет Удаление статьи, отмена заказа.
HEAD Аналогичен GET, но сервер возвращает только заголовки ответа (без тела). Да Да Проверка размера файла перед загрузкой (заголовок Content-Length).
OPTIONS Получение списка HTTP-методов, поддерживаемых для данного ресурса. Да Да Определение возможностей CORS (заголовок Allow).

Идемпотентность: многократное выполнение одного и того же запроса дает тот же результат, что и однократное. Безопасность: метод не должен изменять состояние сервера. *PATCH не гарантирует идемпотентность по спецификации, но может быть реализован как идемпотентный.

Пример PUT-запроса на Java 11+:

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.example.com/users/123"))
    .header("Content-Type", "application/json")
    .PUT(HttpRequest.BodyPublishers.ofString(
        "{"name": "John Doe", "email": "john@example.com"}"
    ))
    .build();
// Отправка запроса и обработка ответа...