it-swarm.com.ru

Когда мне следует использовать метод GET или POST? Какая разница между ними?

В чем разница при использовании метода GET или POST? Какой из них более безопасен? Каковы (не) преимущества каждого из них?

( аналогичный вопрос )

214
Adriana

Это не вопрос безопасности. Протокол HTTP определяет запросы типа GET как idempotent , в то время как POST могут иметь побочные эффекты. На простом английском языке это означает, что GET используется для просмотра чего-либо без его изменения, а POST используется для изменения чего-либо. Например, страница поиска должна использовать GET, а форма, которая изменяет ваш пароль, должна использовать POST.

Также обратите внимание, что PHP немного запутывает понятия. Запрос POST получает входные данные из строки запроса и через тело запроса. Запрос GET просто получает входные данные из строки запроса. Таким образом, запрос POST является расширенным набором запроса GET; Вы можете использовать $_GET в запросе POST, и может даже иметь смысл иметь параметры с одинаковыми именами в $_POST и $_GET, которые означают разные вещи.

Например, допустим, у вас есть форма для редактирования статьи. Идентификатор статьи может быть в строке запроса (и, следовательно, доступен через $_GET['id']), но допустим, что вы хотите изменить идентификатор статьи. Новый идентификатор может затем присутствовать в теле запроса ($_POST['id']). Хорошо, возможно, это не лучший пример, но я надеюсь, что он иллюстрирует разницу между ними.

234
troelskn

Когда пользователь вводит информацию в форме и нажимает кнопку Отправить, существует два способа отправки информации из браузера на сервер: в URL-адресе или в теле HTTP-запроса.

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

Альтернативой методу GET является метод POST. Этот метод упаковывает пары имя/значение внутри тела HTTP-запроса, что обеспечивает более чистый URL-адрес и не накладывает ограничений на размер выходных данных форм. Это также более безопасно.

75
IAdapter

Лучший ответ был первым.

Ты используешь:

  • GET когда вы хотите получить данные (GET DATA).
  • POST когда вы хотите отправить данные (POST DATA).
37
alex

Есть два распространенных значения "безопасности" при использовании GET. Поскольку данные отображаются в строке URL-адреса, возможно, кто-то, глядя через плечо на адресную строку/URL-адрес, может просмотреть что-то, к чему он не должен быть привязан, например, файл cookie сеанса, который потенциально может быть использован для захвата вашего сеанса. Имейте в виду у всех есть телефоны с камерой.

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

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

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

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

Другие уже проделали хорошую работу по освещению семантических различий и части "когда" в этом вопросе.

19
Einstein

Я использую GET, когда извлекаю информацию из URL и POST когда отправляю информацию в URL.

17
Mark Biek

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

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

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

15
Grant

Это документ W3C объясняет использование HTTP GET и POST.

Я думаю, что это авторитетный источник.

Краткое содержание (раздел 1.3 документа):

  • Используйте GET, если взаимодействие больше похоже на вопрос (т. Е. Это безопасная операция, такая как запрос, операция чтения или поиск).
  • Используйте POST, если:
    • Взаимодействие больше похоже на заказ, или
    • Взаимодействие изменяет состояние ресурса таким образом, что пользователь будет воспринимать (например, подписка на услугу), или
    • Пользователь будет нести ответственность за результаты взаимодействия.
13
chus

Методы Get и Post не имеют ничего общего с используемой вами серверной технологией, они работают одинаково в php, asp.net или Ruby. GET и POST являются частью протокола HTTP. Как было отмечено, POST является более безопасным. POST формы также не кэшируются браузером. POST также используется для передачи больших объемов данных.

10
sarsnake

Причина использования POST при внесении изменений в данные:

  • Веб-ускоритель, такой как Google Web Accelerator, будет щелкать все (GET) ссылки на странице и кэшировать их. Это очень плохо, если ссылки вносят изменения в вещи.
  • Браузер кэширует GET-запросы, поэтому, даже если пользователь щелкает ссылку, он может не отправить запрос на сервер для выполнения изменения.
  • Чтобы защитить ваш сайт/приложение от CSRF, вы должны использовать POST. Чтобы полностью защитить ваше приложение, вы должны также сгенерировать уникальный идентификатор на сервере и отправить его вместе с запросом.

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

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

8
Sarel Botha

GET и POST являются методами HTTP, которые могут достичь аналогичных целей

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

Никогда не используйте GET при отправке паролей, кредитной карты или другой конфиденциальной информации !, данные видны всем в URL, могут быть кэшированы данные. GET безвреден, когда мы перезагружаемся или перезваниваем, кнопка будет отмечена как книга, параметры останутся в истории браузера, разрешены только ASCII символы.

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

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

6
user3540599
  1. Метод GET используется для отправки менее конфиденциальных данных, тогда как метод POST используется для отправки конфиденциальных данных.
  2. Используя метод POST, вы можете отправить большой объем данных по сравнению с методом GET.
  3. Данные, отправленные методом GET, видны в строке заголовка браузера, тогда как данные, отправленные методом POST, невидимы.
1
Dhirendra

Используйте метод GET, если вы хотите получить ресурсы из URL. Вы всегда можете увидеть последнюю страницу, если нажмете кнопку "Назад" в своем браузере, и она может быть добавлена ​​в закладки, поэтому она не так безопасна, как метод POST.

Используйте метод POST, если вы хотите "отправить" что-то в URL. Например, вы хотите создать учетную запись Google и вам может потребоваться заполнить всю подробную информацию, а затем нажать кнопку "Отправить" (здесь вызывается метод POST), после успешной отправки, и попытаться нажать кнопку "Назад" в своем браузере. , вы получите ошибку или новую пустую форму вместо последней страницы с заполненной формой.

0
rObOtAndChalie