Подтвердить что ты не робот

Как выбрать методы GET и POST в HTML-формах?

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

Спасибо.

4b9b3361

Ответ 1

Чтобы выбрать между ними, я использую это простое правило:

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

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

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

Эта страница содержит хорошее резюме.

Ответ 2

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

Запросы GET

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

Запросы POST

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

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

Вы хотите, чтобы результат представления формы был cachable? Используйте GET.

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

Ответ 6

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

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

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

Ответ 7

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

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

Ответ 8

Используйте GET, если вы хотите, чтобы результат был закладок.

Ответ 9

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

POST в наши дни не намного безопаснее с помощью бесплатных инструментов, таких как Fiddler и co. вы можете легко захватывать ценности. Но нет реального количества длины или количества значений, которые вы можете отправить таким образом, и ваши URL-адреса выглядят более дружелюбными.

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

Ответ 10

Дэвид М ответь мой голос.

Я просто хотел добавить один предмет, о котором я слышал, может быть, это была городская легенда?

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

Ответ 11

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

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

http://en.wikipedia.org/wiki/Post/Redirect/Get

Ответ 12

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

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

Ответ 13

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

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

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

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

Ответ 14

Метод GET и POST в HTTP - два наиболее популярных метода, используемых для передачи данных с клиента на сервер с использованием протокола HTTP (протокол передачи гипертекста). И 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 POST HTTP-запрос обозначается методом 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, в то время как метод POST передает параметр запроса в тело запроса. Запрос GET может передавать только ограниченное количество данных, тогда как метод POST может передавать большой объем данных на сервер. Запрос GET может быть помещен в закладки и кэширован в отличие от запросов POST. GET используется в основном для просмотра (например, SQL SELECT), в то время как POST используется в основном для целей обновления (например, SQL INSERT или UPDATE).

Ссылка здесь

Ответ 15

Один раз, я заметил на днях, и это был настоящий "ДУХ!". момент для меня.

У нас есть сторонняя поисковая система на нашем сайте, и они используют метод GET для размещения поискового запроса в своем коде. Кроме того, у меня был некоторый код, который искал возможные атаки SQL-инъекций в querystring. Мой код искажал все, потому что он искал слова типа "EXEC", "UPDATE", "DELETE" и т.д. Ну, получается, что пользователь искал "EXECUTIVE MBA", а мой код нашел "EXEC" в "EXECUTIVE" и запретил их IP.

Поверьте мне, я не хвастаюсь своим кодом, просто говорю, что выбор между GET и POST имеет далеко идущие последствия, кроме "я хочу, чтобы мои пароли отображались в querystring".

Ответ 16

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

Ответ 17

Оба набора значений легко контролируются хакерами или другими материалами, но GET менее безопасен в том смысле, что он очень заметен, что значения (прямо в адресной строке).

Используйте SSL для обеспечения безопасности, если это необходимо.

Хороший совет: всегда используйте POST для форм, используйте querystrings (? value = products), когда вы не публикуете какие-либо вещи, но пытаетесь получить определенную страницу, например страницу продукта. Следовательно, имена POST и GET:)