Каким HTTP-методом следует отправлять данные HTML-формы и почему?

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

Ответ

Для отправки данных HTML-формы, которые изменяют состояние на сервере (логин, регистрация, оплата), следует использовать метод POST (реже PUT или PATCH). Метод GET для этого не подходит.

Почему POST, а не GET?

Критерий GET POST
Назначение (семантика) Получение (fetch) данных. Создание или обновление ресурса.
Данные в запросе Передаются в URL как query-параметры (?user=name). Передаются в теле запроса (body).
Безопасность Параметры видны в истории браузера, логах сервера, URL-барe. Нельзя передавать пароли! Данные скрыты в теле, не кэшируются по умолчанию.
Ограничение длины Ограничено длиной URL (обычно ~2048 символов). Фактически не ограничено.
Идемпотентность Идемпотентный (повторный вызов безопасен). Не идемпотентный (повторный вызов может создать дубликат).

Пример формы и обработки (Spring MVC):

<!-- HTML форма -->
<form action="/submit" method="POST">
    <input type="text" name="username">
    <input type="password" name="password">
    <button type="submit">Отправить</button>
</form>
// Spring Controller, обрабатывающий POST-запрос
@PostMapping("/submit")
public String handleSubmit(@RequestParam String username, 
                           @RequestParam String password) {
    // Обработка данных формы (аутентификация, сохранение)
    return "result-page";
}

Вывод: Используйте POST для форм, чтобы безопасно передавать данные любого объема, соблюдать семантику HTTP и избегать побочных эффектов при обновлении страницы или кэшировании.