Какая разница при использовании GET
или POST
метод? Какой из них более безопасен? Каковы (не) преимущества каждого из них?
Какая разница при использовании GET
или POST
метод? Какой из них более безопасен? Каковы (не) преимущества каждого из них?
Ответы:
Это не вопрос безопасности. Протокол HTTP определяет запросы типа GET как идемпотентные , в то время как POST могут иметь побочные эффекты. На простом английском языке это означает, что GET используется для просмотра чего-либо без изменения, в то время как POST используется для изменения чего-либо. Например, страница поиска должна использовать GET, а форма, которая изменяет ваш пароль, должна использовать POST.
Также обратите внимание, что PHP немного путает понятия. Запрос POST получает входные данные из строки запроса и через тело запроса. Запрос GET просто получает входные данные из строки запроса. Таким образом, запрос POST является расширенным набором запроса GET; Вы можете использовать $_GET
в запросе POST, и он даже может иметь смысл иметь параметры с тем же именем в $_POST
и $_GET
что означают разные вещи.
Например, допустим, у вас есть форма для редактирования статьи. Идентификатор статьи может быть в строке запроса (и, следовательно, доступен через $_GET['id']
), но допустим, что вы хотите изменить идентификатор статьи. Новый идентификатор может затем присутствовать в теле запроса ( $_POST['id']
). Хорошо, возможно, это не лучший пример, но я надеюсь, что он иллюстрирует разницу между ними.
Когда пользователь вводит информацию в форме и нажимает кнопку Отправить, существует два способа отправки информации из браузера на сервер: в URL-адресе или в теле HTTP-запроса.
Метод GET, который использовался в предыдущем примере, добавляет пары имя / значение в URL. К сожалению, длина URL-адреса ограничена, поэтому этот метод работает только при наличии только нескольких параметров. URL-адрес может быть сокращен, если форма использует большое количество параметров или если параметры содержат большие объемы данных. Кроме того, параметры, передаваемые по URL-адресу, отображаются в поле адреса браузера и не являются лучшим местом для отображения пароля.
Альтернативой методу GET является метод POST. Этот метод упаковывает пары имя / значение внутри тела HTTP-запроса, что обеспечивает более чистый URL-адрес и не накладывает ограничений на размер выходных данных форм. Это также более безопасно.
Лучший ответ был первым.
Ты используешь:
GET
также вполне способен «отправлять» данные, поэтому не очень точный ответ.
Есть два распространенных значения «безопасности» при использовании GET
. Поскольку данные отображаются в строке URL-адреса, возможно, кто-то, глядя через плечо на адресную строку / URL-адрес, может просмотреть что-то, к чему он не должен быть привязан, например, файл cookie сеанса, который потенциально может быть использован для захвата вашего сеанса. Имейте в виду, что у каждого есть телефон с камерой.
Другое значение безопасности связано GET
с тем, что GET
переменные регистрируются в журнале доступа большинства веб-серверов как часть запрашиваемого URL-адреса. В зависимости от ситуации, нормативного климата и общей чувствительности данных это может вызвать опасения.
Некоторые клиенты / брандмауэры / системы IDS могут не одобрять GET
запросы, содержащие чрезмерное количество данных, и поэтому могут давать ненадежные результаты.
POST
поддерживает расширенные функции, такие как поддержка двоичного ввода из нескольких частей, используемого для загрузки файлов на веб-серверы.
POST
требуется заголовок длины содержимого, который может увеличить сложность реализации клиента для конкретного приложения, поскольку размер представляемых данных должен быть известен заранее, чтобы клиентский запрос не формировался в инкрементном инкрементном режиме. Возможно, это небольшая проблема для тех, кто выбирает злоупотребление HTTP
, используя его как транспорт RPC (удаленный вызов процедур).
Другие уже проделали хорошую работу по освещению семантических различий и части «когда» в этом вопросе.
Я использую GET при извлечении информации из URL и POST при отправке информации по URL.
Вы должны использовать POST, если имеется много данных или что-то вроде конфиденциальной информации (для действительно важных вещей также требуется безопасное соединение).
Используйте GET, если вы хотите, чтобы люди могли добавлять вашу страницу в закладки, потому что все данные включены в закладку.
Просто будьте осторожны с людьми, нажимающими REFRESH с помощью метода GET, потому что данные будут отправляться снова каждый раз без предупреждения пользователя (POST иногда предупреждает пользователя о повторной отправке данных).
Этот документ W3C объясняет использование HTTP GET и POST.
Я думаю, что это авторитетный источник.
Резюме (раздел 1.3 документа):
- Используйте GET, если взаимодействие больше похоже на вопрос (т. Е. Это безопасная операция, такая как запрос, операция чтения или поиск).
- Используйте POST, если:
- Взаимодействие больше похоже на заказ, или
- Взаимодействие изменяет состояние ресурса так, как его воспринимает пользователь (например, подписка на услугу), или
- Пользователь будет нести ответственность за результаты взаимодействия.
Методы Get и Post не имеют ничего общего с используемой вами серверной технологией, они работают одинаково в php, asp.net или ruby. GET и POST являются частью протокола HTTP. Как отмечалось, POST более безопасен. POST-формы также не кэшируются браузером. POST также используется для передачи больших объемов данных.
Причина использования POST при внесении изменений в данные:
Кроме того, не помещайте конфиденциальную информацию в строку запроса (только для GET), поскольку она отображается в адресной строке, закладках и журналах сервера.
Надеюсь, это объясняет, почему люди говорят, что POST является «безопасным». Если вы передаете конфиденциальные данные, вы должны использовать SSL.
GET
и POST
HTTP-методы, которые могут достичь аналогичных целей
GET
в основном предназначен только для получения (извлечения) данных, у A GET
не должно быть тела, поэтому кроме файлов cookie единственное место для передачи информации - это URL-адрес, а URL-адреса ограничены по длине, GET
менее безопасны по сравнению с POST
тем, что отправляемые данные являются частью URL
Никогда не используйте GET
при отправке паролей, кредитных карт или другой конфиденциальной информации !, данные видны всем в URL, могут быть кэшированы данные.
GET
безвреден, когда мы перезагружаемся или перезваниваем, кнопка будет отмечена как книга, параметры остаются в истории браузера, разрешены только символы ASCII.
POST
может включать в себя все, что угодно, например, хранение или обновление данных, или заказ продукта, или отправка электронной почты. POST
У метода есть тело.
POST
метод защищен для передачи конфиденциальной и конфиденциальной информации на сервер, он не будет виден в параметрах запроса в URL и параметры не сохраняются в истории браузера. Нет ограничений на длину данных. Когда мы перезагружаемся, браузер должен предупредить пользователя о том, что данные собираются быть повторно отправленными. POST
метод не может быть добавлен в закладки
Используйте метод GET, если вы хотите получить ресурсы из URL. Вы всегда можете увидеть последнюю страницу, если нажмете кнопку «Назад» в своем браузере, и она может быть добавлена в закладки, поэтому она не так безопасна, как метод POST.
Используйте метод POST, если вы хотите «отправить» что-то на URL. Например, вы хотите создать учетную запись Google и вам может потребоваться заполнить всю подробную информацию, а затем нажать кнопку «Отправить» (здесь вызывается метод POST) после успешной отправки и попытаться нажать кнопку «Назад» в своем браузере. , вы получите ошибку или новую пустую форму вместо последней страницы с заполненной формой.
GET
Метод:
Используется только для отправки 256 символов даты
При использовании этого метода информацию можно увидеть в браузере
Это метод по умолчанию, используемый формами
Это не так безопасно.
POST
Метод:
Используется для отправки неограниченных данных.
При использовании этого метода информация не отображается в браузере.
Вы можете явно упомянуть POST
метод
Это более надежно, чем GET
метод
Это обеспечивает более продвинутые функции