Атрибут method в HTML <form>

Определение и использование

method Атрибут определяет, как отправлять данные формы (данные формы будут отправлены на страницу, указанную в атрибуте action)

Данные формы можно отправлять в виде переменных URL (используя method="get") или в виде транзакции HTTP POST (используя method="post")

О GET:

  • Прикрепите данные формы в виде пар имени/значения к URL
  • URL имеет ограничение по длине (примерно 3000 символов)
  • Не используйте GET для отправки конфиденциальных данных! (Будет виден в URL)
  • Это полезно для форм, которые пользователь хочет добавить в закладки
  • GET更适合非安全数据,例如Google中的查询字符串。

О методе POST:

  • Добавление данных формы в тело HTTP-запроса (данные не отображаются в URL).
  • Нет ограничений по размеру.
  • Формы, отправленные с использованием POST, не могут быть добавлены в закладки.

Пример

Пример 1

Подтверждение формы с использованием метода "get":

<form action="/action_page.php" method="get">
  <label for="fname">Имя:</label>
  <input type="text" id="fname" name="fname"><br><br>
  <label for="lname">Фамилия:</label>
  <input type="text" id="lname" name="lname"><br><br>
  <input type="submit" value="Подтвердить">
</form>

Попробуйте сами

Пример 2

Подтверждение формы с использованием метода "post":

<form action="/action_page.php" method="post">
  <label for="fname">Имя:</label>
  <input type="text" id="fname" name="fname"><br><br>
  <label for="lname">Фамилия:</label>
  <input type="text" id="lname" name="lname"><br><br>
  <input type="submit" value="Подтвердить">
</form>

Попробуйте сами

Синтаксис

<form method="get|post">

Значение свойства

Значение Описание
get По умолчанию. Добавление данных формы в виде пары имя/значение к URL: URL?имя=значение&имя=значение.
post Отправка данных формы в качестве HTTP-транзакции POST.

Подробно о свойстве method

Браузер отправляет данные формы на сервер для обработки с помощью метода, установленного свойством method. Есть два метода: метод POST и метод GET.

Если используется метод POST, браузер будет отправлять данные в два шага. Сначала браузер устанавливает связь с сервером обработки формы, указанным в свойстве action, и после установления соединения браузер отправляет данные серверу по методу сегментированной передачи.

На сервере, как только приложение с стилем POST начинает выполняться, параметры должны быть прочитаны из указанного места, и до того, как приложение сможет использовать эти значения формы, эти параметры должны быть декодированы. Специфический сервер пользователя明确规定应用程序应该如何接受 эти параметры.

В другом случае используется метод GET, в этом случае браузер устанавливает соединение с сервером обработки форм, а затем отправляет все данные формы в одном передаче: браузер добавляет данные direkt nach der action URL формы. Между ними используется вопросительный знак для разделения.

Обычные браузеры могут передавать информацию формы любым из этих методов, но некоторые серверы принимают только данные одного из этих методов. Вы можете указать, какой метод использовать для обработки данных сервером, в атрибуте method (метод) тега <form>, чтобы определить, использовать POST или GET.

POST или GET?

Если серверная система обработки форм поддерживает как метод POST, так и метод GET, то какой метод вы должны выбрать? Вот несколько правил по этому поводу:

  • Если вы хотите получить наилучшую производительность передачи формы, вы можете использовать метод GET для отправки небольших форм с небольшим количеством коротких полей.
  • Некоторые серверные операционные системы ограничивают количество и длину командной строки, передаваемой напрямую приложению, в этом случае для форм с множеством полей или длинными текстовыми полями лучше использовать метод POST для отправки.
  • Если у вас мало опыта в написании серверных приложений для обработки форм, лучше выбрать метод GET. Если вы используете метод POST, вам нужно выполнить дополнительные работы по чтению и декодированию, что может не быть слишком сложно, но может быть не очень приятно для вас.
  • Если безопасность является проблемой, мы рекомендуем использовать метод POST. Метод GET напрямую включает параметры формы в URL приложения, что позволяет сетевым хакерам легко捕获 их и извлечь из журналов сервера. Если параметры включают такие чувствительные данные, как номер кредитной карты, это может незаметно угрожать безопасности пользователей. Приложения POST не имеют таких уязвимостей, и, по крайней мере, можно использовать шифрование при передаче параметров как отдельную транзакцию на сервер для обработки.
  • Если вам нужно вызывать серверное приложение вне формы и передавать ему параметры, вам нужно использовать метод GET, так как этот метод позволяет включать параметры, такие как форма, в качестве части URL. С другой стороны, приложения в стиле POST хотят, чтобы после URL была дополнительная передача данных от браузера, содержимое которой не должно быть частью содержимого традиционного тега <a>.

Ясно передавать параметры

Некоторые из этих рекомендаций могут служить объяснением выбора этого метода. Предположим, что у вас есть очень простая форма, которая содержит только два параметра x и y. При кодировании значений этих элементов они выглядят следующим образом:

x=28&y=66

Если форма использует method=GET, то URL для вызова серверного приложения будет выглядеть следующим образом:

http://www.example.com/example/program?x=28&y=66

В любое время мы можем создать традиционную тег <a>, чтобы использовать его для вызова формы с необходимыми параметрами, форма выглядит следующим образом:

<a href="http://www.example.com/example/program?x=28&y=66">

Единственная проблема в том, что символ & также является вставным символом в character entity. Если в атрибут href тега <a> вставить символ &, браузер заменит следующие символы соответствующей character entity.

Чтобы предотвратить это,我们必须 заменить символ & его эквивалентом в виде entity, то есть "&" или "&". После замены上面的引用服务器 приложения, который не является примером формы, будет выглядеть следующим образом:

<a href="http://www.example.com/example/program?x=28&y=66">

Поскольку все еще нельзя использовать символ & в URL и это может привести к путанице в будущем, мы рекомендуем серверам также接受分號 в качестве разделителя параметров. Вы также можете проверить документацию своего сервера, чтобы узнать, поддерживает ли он эту функцию.

Поддержка браузеров

Chrome Edge Firefox Safari Opera
Chrome Edge Firefox Safari Opera
Поддержка Поддержка Поддержка Поддержка Поддержка