ПОЛУЧИТЬ или ПОСТАТЬ, какой метод использовать для отправки формы? - PullRequest
4 голосов
/ 28 февраля 2009

Я пишу веб-форму для моего приложения Ruby on Rails. Форма имеет текстовое поле, несколько флажков, набор переключателей и два текстовых поля.

Каковы плюсы и минусы использования GET поверх POST и наоборот. Я всегда думал, что вы должны использовать GET для получения формы и POST для отправки, но я только что узнал, что вы можете сделать и то и другое. Это действительно имеет значение? Приветствия.

<% form_tag({ :action => "create" }, :method => "get") do %>

Ответы [ 4 ]

17 голосов
/ 28 февраля 2009

GET-запросы всегда добавляются в URL, где POST отправляется вместе с телом запроса. Как вы заметили, оба могут быть использованы для извлечения и отправки данных, но есть некоторые различия:

  1. Поскольку GET отправляется с URL, размер которого ограничен максимальной длиной строки запроса. Это варьируется от браузера к браузеру, но обычно составляет не менее 2000 символов (в современных браузерах). Обычно это делает его неприемлемым для отправки больших текстовых полей (например, электронной почты).

  2. Поскольку команда GET отображается в строке запроса, она может быть легко изменена пользователем

  3. Поскольку команда GET находится в строке запроса, пользователям проще сделать закладку на определенной странице, если ваша страница будет работать с некоторыми сохраненными переменными состояния.

  4. POST обычно больше подходит для отправки данных, поскольку соответствует характеру запроса, в основном из-за ограничений, указанных выше.

5 голосов
/ 28 февраля 2009

Спецификации HTML технически определяют разницу между обоими, поскольку «GET» означает, что данные формы должны быть закодированы (браузером) в URL, а «POST» означает, что данные формы должны отображаться в теле сообщения.

Но рекомендуется использовать метод «GET», если обработка формы «идемпотентна», и только в этих случаях. В качестве упрощения можно сказать, что «GET» в основном предназначен только для получения (извлечения) данных, тогда как «POST» может включать в себя что-либо, например, хранение или обновление данных, или заказ продукта, или отправку электронной почты.

1 голос
/ 28 февраля 2009

Я думаю, что другие ответы касались основных вещей. Также я хочу добавить этот бит. Использование GET для критически важных данных, таких как отправка пароля по запросу GET, предоставит пароль больше, чем POST, поскольку он будет храниться в кэше истории браузера, кэше прокси, журналах сервера и т. Д.

1 голос
/ 28 февраля 2009

Зависит от того, семантически ли вы или нет. И GET, и POST имеют внутреннее значение, если вы создаете API на основе HTML. Но в целом GET используется для извлечения данных, POST используется для отправки данных.

Самым большим отличием является то, что GET помещает все данные в URL (который может быть ограничен по размеру), а POST отправляет их как часть данных HTTP-запроса. Если вы разрешаете ввод данных с помощью запросов GET, вы также значительно упрощаете использование веб-ресурсов, например CSRF. Кто-то может просто сделать предварительно заполненную ссылку на действие уязвимой формы (скажем, форму смены пароля?), Отправить ее ничего не подозревающим пользователям, которые щелкают по ней, и неосознанно сменить пароль.

Кроме того, ни один браузер не предупредит пользователя, если он обновит страницу GET, в которой вводятся данные (что может сделать дублирующую запись, если вы не будете осторожны), но на POST большинство браузеров отображают предупреждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...