Как выбрать между методами GET и POST в формах HTML? - PullRequest
21 голосов
/ 21 сентября 2008

Я хотел бы знать все плюсы и минусы использования этих двух методов. В частности, последствия для веб-безопасности.

Спасибо.

Ответы [ 17 ]

37 голосов
/ 21 сентября 2008

Для выбора я использую это простое правило:

GET для чтения. (чтение данных и их отображение)

POST для всего, что пишет (например, обновление таблицы базы данных, удаление записи и т. Д.)

Другое соображение заключается в том, что GET подвергается максимальной длине URI и, конечно, не может обрабатывать загрузку файлов.

На этой странице есть хорошее резюме .

24 голосов
/ 21 сентября 2008

И GET, и POST имеют свое место. Вы не должны полагаться ни на кого из них в вопросах безопасности.

GET запросов

  • легко кэшируются
  • легко закладываются
  • подлежит ограничению длины URI
  • может показывать параметры в журналах доступа

POST-запросы

  • позволяет загружать файлы
  • допускает большие данные
  • не показывает параметры в адресной строке браузера

Хотите ли вы, чтобы результат отправки формы был в закладки (например, поиск в Google)? Используйте GET .

Хотели бы вы, чтобы результат отправки формы был cachable ? Используйте GET .

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

Вам нужны загрузки файлов ? Используйте POST .

12 голосов
/ 21 сентября 2008

GET не должен иметь побочных эффектов: http://www.w3.org/DesignIssues/Axioms.html#state

Формы POST следует использовать, когда отправка имеет побочные эффекты.

Ни один из методов не имеет реального влияния на безопасность, используйте SSL, если вы беспокоитесь о безопасности.

4 голосов
/ 21 сентября 2008

В дополнение к прекрасным ответам, например, от Микке, я хочу отметить важное различие в том, как интерфейсы браузера обрабатывают страницы, запрошенные с помощью GET и POST.

Если вы перезагрузите страницу, запрошенную GET, браузер просто снова получит URL-адрес (с сервера или из кэша). Однако если вы перезагрузите POST, браузер выдаст немного сбивающее с толку предупреждение о повторной публикации данных, пользователь может затем отменить (что приводит к еще более запутанной «просроченной» странице). То же самое, если вы используете back или history, чтобы вернуться на страницу, которая является результатом POST.

Это, конечно, основано на различной семантике: GET-запросы должны быть идемпотентными, то есть вы можете делать это несколько раз, ничего не меняя. POST, с другой стороны, предназначены для действий с побочными эффектами, таких как подписка на что-то, покупка чего-либо, публикация комментария на форуме. Обычно пользователь не ожидает повторения этого действия при перезагрузке, поэтому предупреждение имеет смысл. Тем не менее, избегайте использования POST, если действие безопасно повторяется (например, поиск), так как предупреждение не является необходимым и просто вводит пользователя в заблуждение.

Замечание, касающееся безопасности: если у вас есть поле пароля в GET-форме, пароль будет замаскирован для любопытных глаз при вводе, однако он будет отчетливо виден в адресной строке при нажатии кнопки Отправить! Но, кроме того, в GET и POST нет реальной безопасности, поэтому используйте SSL, если это важно.

3 голосов
/ 21 сентября 2008
2 голосов
/ 21 сентября 2008

GET передает данные в URL, POST передает те же данные в HTTP-содержимом, оба они одинаковы с точки зрения безопасности (то есть совершенно небезопасны, если вы сами ничего не делаете, например, с использованием HTTPS). *

GET ограничен максимальной длиной URL-адреса, поддерживаемой браузером и веб-сервером, поэтому его можно использовать только в кратких формах.

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

1 голос
/ 21 сентября 2008

Если вы передаете такие вещи, как пароли или другую конфиденциальную информацию, всегда используйте POST и убедитесь, что вы используете SSL, чтобы данные не передавались между клиентом и сервером в виде открытого текста.

С точки зрения безопасности, недостатком использования GET является то, что все отправленные данные будут в URL-адресе и поэтому будут храниться локально на клиенте в истории браузера.

1 голос
/ 05 ноября 2012

Метод GET и POST в HTTP - два самых популярных метода, используемых для передачи данных с клиента на сервер с использованием протокола HTTP (Hyper Text Transfer Protocol). И GET, и POST могут использоваться для отправки запроса и получения ответа, но между ними существует существенная разница.

Что такое GET HTTP-запрос? Протокол HTTP поддерживает несколько методов запроса, которые вы можете использовать при отправке запроса по протоколу HTTP или HTTPS. GET является одним из них. Как следует из названия, метод GET - это получение страницы с HTTP-сервера. Одним из важных свойств запроса GET является то, что любой параметр запроса или параметр запроса передается в виде строки в кодировке URL, добавляемой с помощью «?» символ, который делает его небезопасным, потому что любая информация, которую вы передаете в строке URL, видна всем.

Когда использовать HTTP GET-запрос Как я уже сказал, метод GET небезопасен и, следовательно, не является подходящим выбором для передачи конфиденциальных данных, но метод GET чрезвычайно полезен для извлечения статического контента с веб-сервера. Вот несколько примеров, где использование метода GET имеет смысл: Нет побочного эффекта повторного запроса. например, нажав на ссылку, которая указывает на другую страницу. не имеет значения, если вы нажмете на ссылку дважды или трижды, это также дает возможность браузеру сервера перехватить ответ для более быстрого поиска. Вы не передаете конфиденциальную и конфиденциальную информацию. вместо этого вы просто передаете некоторые данные конфигурации или идентификатор сеанса. Вы хотите, чтобы URL-адрес, указанный в HTTP-запросе GET, был доступен для закладки. Данные, которые необходимо отправить на сервер, невелики и могут безопасно размещаться с максимальной длиной URL-адреса, поддерживаемой всеми браузерами. Как правило, разные браузеры имеют разные ограничения на длину URL-адреса, но их ограничение является хорошим выбором.

Что такое метод POST HTTP HTTP-запрос POST обозначается методом: POST в HTTP-запросе. В методе POST данные не отправляются как часть строки URL на сервер, а в POST данные отправляются как часть тела сообщения. Почти весь запрос аутентификации отправляется методом POST в мире HTTP. Метод POST безопасен, потому что данные не видны в строке URL и могут быть безопасно зашифрованы с использованием HTTPS для дополнительной безопасности. Вся конфиденциальная и конфиденциальная информация, отправляемая на сервер, должна отправляться по запросу POST и через HTTPS (HTTP с SSL). Метод POST также используется для отправки информации на сервер, любой информации, которая может изменить состояние приложения, например, добавление товара в корзину, осуществление платежей и т. Д. Вот несколько примеров, в которых следует рассмотреть использование метода POST в HTTP-запросе: Используйте POST, если вы отправляете большие данные, которые невозможно вписать в URL в случае GET. Используйте метод POST, если вы передаете конфиденциальную и конфиденциальную информацию на сервер, например user_id, пароль, номер счета и т. д. Используйте метод POST, если вы отправляете данные, которые могут изменить состояние приложения, например, добавление товаров в корзину для передачи этой корзины для обработки платежей. Используйте POST, если вы пишете защищенное приложение и не хотите показывать параметры запроса в URL.

Разница между методом GET и POST в протоколе HTTP Большая часть различий между GET и POST уже обсуждалась в соответствующем разделе. Все зависит от требований, когда вы хотите выбрать GET и POST, и знание этих различий поможет вам принять это решение.

Метод GET передает параметр запроса в URL String, а метод POST передает параметр запроса в теле запроса. Запрос GET может передавать только ограниченный объем данных, тогда как метод POST может передавать большой объем данных на сервер. GET-запрос может быть добавлен в закладки и кэширован в отличие от POST-запросов. GET в основном используется для целей просмотра (например, SQL SELECT), а POST в основном используется для целей обновления (например, SQL INSERT или UPDATE).

Ссылка отсюда

0 голосов
/ 16 сентября 2010

Одной из проблем безопасности в GET, которую часто упускают из виду, является то, что журнал веб-сервера содержит полный URL-адрес каждого доступа к странице. Для запросов GET это включает все параметры запроса. Это сохраняется в журнале сервера в виде обычного текста, даже если вы получаете безопасный доступ к сайту.

Журналы сервера часто используются приложениями статистики сайта, так что их может видеть не только администратор сервера.

То же самое относится и к сторонним программам отслеживания, таким как Google Analytics - они записывают полный URL-адрес страницы, снова включая параметры запроса GET, и сообщают об этом пользователю аналитики.

Поэтому, если вы отправляете конфиденциальные данные (пароли, номера карт и т. Д.), Даже если они отправлены через AJAX и никогда не отображаются в фактической строке URL браузера, вы всегда должны использовать POST.

0 голосов
/ 21 сентября 2008

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

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