Как форма отправляется по дефолту

Ответ

Формы отправляются методом GET, если не указан атрибут method. Данные добавляются в URL в виде query-параметров (?key=value).

Пример:

<form action="/submit">
  <input name="username" value="John">
  <button>Отправить</button>
</form>

При отправке браузер сделает запрос на /submit?username=John.

Для отправки данных в теле запроса нужно явно указать method="POST". Также важно помнить:

  • Форма перезагружает страницу при отправке
  • Для предотвращения перезагрузки нужно использовать event.preventDefault()
  • По умолчанию кодировка данных - application/x-www-form-urlencoded

Ответ 18+ 🔞

А, ну это же классика, блядь! Смотри, народ постоянно на этом подгорает, как сука на сковородке.

Вот представь: пишешь ты форму, всё красиво, поля, кнопочка. И думаешь: "Ну сейчас нажму — данные улетят тихонечко, в теле запроса, как уважаемые люди". Ан хуй там! Если ты не прописал method="POST", то браузер, этот хитрожопый ублюдок, по умолчанию юзает GET.

И что получается? Все твои драгоценные input-ы, со всеми паролями и прочей хуйнёй, он тупо лепит прямо в URL! Получается такая хуйня: /submit?username=John&password=12345. Красота, да? Вся история браузера, логи сервера — всё в говне. Пиздец и позор.

Пример, смотри, вот этот кусок говнокода:

<form action="/submit">
  <input name="username" value="John">
  <button>Отправить</button>
</form>

Нажмёшь кнопку — и тебя перекинет на /submit?username=John. Всё на виду, как манда на морозе.

Так что, запомни раз и нахуй: хочешь отправить данные нормально, в теле запроса, как секретную записку, — тыкай method="POST". Без этого — нихуя не выйдет.

И ещё два момента, от которых мозг вытекает, если не знать:

  1. Перезагрузка страницы. Это ж натуральное поведение, ёпта! Отправил форму — браузер делает запрос и грузит новый документ. Хочешь этого избежать, чтобы всё было модно-молодёжно на одном экране? Вешай на событие submit слушатель и делай event.preventDefault(). Иначе — welcome to 1995 год, сука.
  2. Кодировка. По умолчанию данные кодируются как application/x-www-form-urlencoded. Это типа ключ=значение&ключ2=значение2. Если тебе нужно файлы отправлять — вспоминай про enctype="multipart/form-data", а то опять обосрёшься.

Вот и вся магия, блядь. Казалось бы, элементарщина, а половина интернета на этом спотыкается, как пьяный охуитель в подъезде.