ПОЛУЧИТЬ против ПОЧТЫ

HTTP ПОЧТА запросы предоставляют дополнительные данные от клиента (браузера) на сервер в теле сообщения. Напротив, ПОЛУЧИТЬ запросы включают в себя все необходимые данные в URL. Формы в HTML могут использовать любой метод, указав Метод = "POST" или Метод = "GET" (по умолчанию) в элемент. Указанный метод определяет способ отправки данных формы на сервер. Когда метод GET, все данные формы закодированы в URL, добавлены к действие URL как параметры строки запроса. При POST данные формы появляются в теле сообщения HTTP-запроса.

Сравнительная таблица

GET против POST сравнительная таблица
ПОЛУЧИТЬПОЧТА
история Параметры остаются в истории браузера, потому что они являются частью URL Параметры не сохраняются в истории браузера.
BOOKMARKED Можно добавить в закладки. Не может быть в закладки.
Кнопка НАЗАД / повторное представление поведения GET-запросы повторно выполняются, но не могут быть повторно отправлены на сервер, если HTML хранится в кэше браузера.. Браузер обычно предупреждает пользователя о необходимости повторной отправки данных.
Тип кодирования (атрибут enctype) применение / х-WWW-форм-urlencoded multipart / form-data или application / x-www-form-urlencoded Использовать многочастное кодирование для двоичных данных.
параметры Можно отправить, но данные параметров ограничены тем, что мы можем вставить в строку запроса (URL). Безопаснее всего использовать менее 2K параметров, некоторые серверы обрабатывают до 64K Может отправлять параметры, включая загрузку файлов, на сервер.
Взломанный Проще взломать для сценария детишек Труднее взломать
Ограничения на тип данных формы Да, разрешены только символы ASCII. Нет ограничений. Двоичные данные также разрешены.
Безопасность GET менее безопасен по сравнению с POST, потому что отправленные данные являются частью URL. Таким образом, он сохраняется в истории браузера и журналах сервера в виде открытого текста.. POST немного безопаснее, чем GET, потому что параметры не сохраняются в истории браузера или в журналах веб-сервера..
Ограничения на длину данных формы Да, поскольку данные формы указаны в URL-адресе, а длина URL-адреса ограничена. Безопасное ограничение длины URL-адреса часто составляет 2048 символов, но зависит от браузера и веб-сервера.. Нет ограничений
Юзабилити Метод GET не должен использоваться при отправке паролей или другой конфиденциальной информации. Метод POST, используемый при отправке паролей или другой конфиденциальной информации.
видимость Метод GET виден всем (он будет отображаться в адресной строке браузера) и имеет ограничения на количество отправляемой информации.. Переменные метода POST не отображаются в URL.
Сохраненная копия Можно кэшировать Не кэшируется

Содержание: ПОЛУЧИТЬ против ПОЧТЫ

  • 1 Различия в подаче формы
    • 1.1 Плюсы и минусы
  • 2 Различия в обработке на стороне сервера
  • 3 Рекомендуемое использование
  • 4 Как насчет HTTPS?
  • 5 ссылок

Различия в подаче формы

Принципиальная разница между METHOD = "GET" и METHOD = "POST" является то, что они соответствуют разные HTTP-запросы, как определено в спецификациях HTTP. Процесс отправки для обоих методов начинается одинаково - набор данных формы создается браузером и затем кодируется способом, указанным ENCTYPE атрибут. За METHOD = "POST ENCTYPE атрибут может быть многочастному / форм-данных, или применение / х-WWW-форм-urlencoded, тогда как для METHOD = "GET", только применение / х-WWW-форм-urlencoded разрешено. Этот набор данных формы затем передается на сервер.

Для отправки формы с METHOD = "GET" браузер создает URL, принимая значение действие атрибут, добавление ? затем добавляем набор данных формы (закодированный с использованием типа содержимого application / x-www-form-urlencoded). Затем браузер обрабатывает этот URL-адрес, как если бы он переходил по ссылке (или как если бы пользователь вводил URL-адрес напрямую). Браузер разделяет URL-адрес на части и распознает хост, а затем отправляет этому хосту запрос GET с оставшейся частью URL в качестве аргумента. Сервер берет это оттуда. Обратите внимание, что этот процесс означает, что данные формы ограничены кодами ASCII. Особое внимание следует уделить кодированию и декодированию символов других типов при передаче их через URL в формате ASCII..

Отправка формы с METHOD = "POST" вызывает отправку запроса POST, используя значение действие атрибут и сообщение, созданные в соответствии с типом содержимого, указанным ENCTYPE атрибут.

Плюсы и минусы

Поскольку данные формы отправляются как часть URL, когда ПОЛУЧИТЬ используется --

  • Данные формы ограничены кодами ASCII. Особое внимание следует уделить кодированию и декодированию символов других типов при передаче их через URL в формате ASCII. С другой стороны, двоичные данные, изображения и другие файлы могут быть отправлены через METHOD = "POST"
  • Все заполненные данные формы видны в URL. Кроме того, он также сохраняется в истории просмотра веб-страниц / журналах пользователя для браузера. Эти проблемы делают ПОЛУЧИТЬ менее безопасный.
  • Однако одно из преимуществ данных формы, отправляемых как часть URL-адреса, состоит в том, что можно создавать закладки для URL-адресов, использовать их напрямую и полностью обойти процесс заполнения формы..
  • Существует ограничение на количество отправляемых данных формы, поскольку длина URL-адресов ограничена..
  • Детям сценариев легче разоблачить уязвимости в системе, чтобы взломать их. Например, Ситибанк был взломан путем изменения номеров счетов в строке URL.[1] Конечно, опытные хакеры или веб-разработчики могут выявить такие уязвимости, даже если используется POST; это просто немного сложнее. В целом, сервер должен с подозрением относиться к любым данным, отправляемым клиентом, и защищаться от небезопасных прямых ссылок на объекты..

Различия в обработке на стороне сервера

В принципе обработка данных отправленной формы зависит от того, METHOD = "GET" или METHOD = "POST". Поскольку данные кодируются по-разному, необходимы разные механизмы декодирования. Таким образом, вообще говоря, изменение МЕТОДА может потребовать изменения в сценарии, который обрабатывает представление. Например, при использовании интерфейса CGI сценарий получает данные в переменной среды (QUERYSTRING), когда ПОЛУЧИТЬ используется. Но когда ПОЧТА данные формы передаются в стандартный поток ввода (STDIN) и количество байтов для чтения дается заголовком Content-length.

Рекомендуемое использование

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

Из блога разработчиков Dropbox:

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

Запрос «GET» часто кэшируется, тогда как запрос «POST» вряд ли может быть. Для систем запросов это может оказать значительное влияние на эффективность, особенно если строки запросов просты, поскольку кеши могут обслуживать наиболее частые запросы..

В некоторых случаях, используя ПОЧТА рекомендуется даже для идемпотентных запросов:

  • Если данные формы будут содержать символы не ASCII (например, акцентированные символы), затем METHOD = "GET" в принципе неприменима, хотя может работать на практике (в основном для символов ISO Latin 1).
  • Если набор данных формы большой - скажем, сотни символов - тогда METHOD = "GET" может вызвать практические проблемы с реализациями, которые не могут обрабатывать такие длинные URL.
  • Вы можете избежать METHOD = "GET" чтобы сделать его менее видимым для пользователей, как работает форма, особенно для того, чтобы сделать скрытые поля (INPUT TYPE = "HIDDEN") более скрытыми, не появляясь в URL. Но даже если вы используете скрытые поля с METHOD = "POST", они все равно будут отображаться в исходном коде HTML.

Как насчет HTTPS?

Обновлено 15 мая 2015 г. В частности, при использовании HTTPS (HTTP поверх TLS / SSL) POST обеспечивает большую безопасность, чем GET?

Это интересный вопрос. Скажем, вы делаете запрос GET на веб-страницу:

 ПОЛУЧИТЕ https://www.example.com/login.php?user=mickey&passwd=mini 

Предполагая, что ваше интернет-соединение контролируется, какая информация об этом запросе будет доступна для снуппера? Если вместо этого используется POST, а данные пользователя и passwd включены в переменные POST, это будет более безопасно в случае соединений HTTPS?

Ответ - нет. Если вы сделаете такой запрос GET, злоумышленнику, отслеживающему ваш веб-трафик, будет известна только следующая информация:

  1. Тот факт, что вы установили соединение HTTPS
  2. Имя хоста - www.example.com
  3. Общая длина запроса
  4. Длина ответа

Часть пути URL-адреса, т. Е. Фактическая запрашиваемая страница, а также параметры строки запроса защищены (зашифрованы), пока они находятся «по проводам», т. Е. В пути по пути к целевому серверу. Ситуация точно такая же для запросов POST.

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

Ссылки

  • Википедия: POST (HTTP)
  • Методы HTTP-запроса
  • HTTP Post - W3.org
  • HTTP Get - W3.org
  • HTTPS скрывает URL-адреса, к которым осуществляется доступ? - Обмен стека