Что быстрее post или get
Почему метод GET быстрее, чем POST в HTTP?
Я просто новичок в веб-программировании и просто любопытно узнать abt Get и Post методы отправки данных с одной страницы на другую страницу.
9 ответов
дело не в скорости. Есть много случаев, когда POST более применим. Например, поисковые системы индексируют URL-адреса GET, а браузеры могут добавлять их в закладки и отображать в истории. В результате, если вы предпринимаете такие действия, как изменение БД на основе запроса GET, это может быть вредным, так как некоторые боты могут также пересекать URL.
другой случай может быть проблемой безопасности. Если вы отправляете учетные данные с помощью GET, они будут перечислены в истории браузера и журнале сервера файлы.
еще одна вещь о http post-это может быть 2 вызова, когда HTTP-заголовок Это. Первый браузер отправляет заголовки HTTP post и ответы сервера с «HTTP 100 Continue». Когда браузер получает это, он отправляет фактическое тело.
Я думаю, что это ответ, который искал автор.
существует несколько неправильных представлений о GET и POST в HTTP. Существует одно основное различие: GET должен быть идемпотентным, а POST-нет. Это значит, что никаких побочных эффектов не будет.e я могу отправить GET в веб-приложение столько раз, сколько хочу (думаю, нажав Ctrl+R или F5 много раз), и запросы будут «безопасными»
Я не могу сделать это с POST, сообщение может изменить данные на сервере. Например, если я заказываю товар в интернете товар должен быть добавлено с сообщением, потому что состояние изменено на сервере, количество добавленных элементов увеличилось на 1. Если я сделал это с сообщением и нажал обновить в браузере, браузер предупреждает меня, если я сделаю это с помощью GET, браузер просто отправит запрос.
на сервере GET vs POST-это чистое соглашение, т. е. я как разработчик должен убедиться, что я кодирую сообщение на сервере до не повторить вызов. Существуют различные способы сделать это, но это другое вопрос.
чтобы фактически ответить на вопрос, если я использую GET или POST для выполнения той же задачи, нет разницы в производительности.
вы можете прочитать RFC (http://www.w3.org/Protocols/rfc2616/rfc2616.html) для получения более подробной информации.
глядя на протокол http, POST или GET должны быть одинаково легко и быстро разобрать. Я бы сказал, что нет никакой разницы в производительности.
взгляните на необработанные заголовки HTTP
http GET
http POST
С моей точки зрения, производительность не должна учитываться при сравнении GET и POST.
вы должны думать о GET как «место, чтобы пойти», и опубликовать как»что-то делать». Например, форма поиска должна быть отправлена с помощью GET, потому что страница результатов поиска является «местом», и пользователь захочет добавить ее в закладки или получить ее из своей истории позже. Если вы отправляете форму с помощью POST, пользователь может только воссоздать страницу, отправив форму снова. С другой стороны, если бы вы должны были выполнить такое действие, как нажатие кнопки Удалить, вы бы не захотели отправлять это с GET, поскольку действие будет повторяться всякий раз, когда пользователь возвращается к URL-адресу.
просто мои несколько центов с 2016 года.
Я создаю простую систему сообщений. Сначала я использовал POST для получения новых предупреждений. В jQuery у меня было:
Так GET может быть в два раза быстрее, чем POST. Конечно не всегда, но для небольших объемов данных, которые я получаю те же результаты.
GET и немного быстрее потому что значения отправляются в заголовок в отличие от в должности значения отправляются в запросе тело, в формате, указанном типом содержимого.
обычно тип содержимого application / x-www-form-urlencoded, поэтому тело запроса использует тот же формат, что и строка запроса:
параметр=значение&и=другой При использовании загрузки файла в форме используется multipart / form-кодировка данных вместо этого, которая имеет другой формат. Все гораздо сложнее.
Я согласен с другими ответами, но не упоминалось, что запросы GET могут быть кэшированы, а запросы POST никогда не кэшируются. Я думаю, что это основная причина того, что некоторые запросы GET выполняются быстрее. (Из-грубо это означает, что иногда запрос фактически не отправляется. Следовательно, на самом деле это не запрос GET, который быстрее, но кэш Вашего браузера.)
POST будет расти ваши заголовки больше, просто делая его больше, но разница должна быть незначительной, поэтому я не вижу, почему это должно быть проблемой.
просто имейте в виду, что правильный способ говорить HTTP-использовать GET только для действий и POST для данных. Вам не нужно, но вы также не хотите иметь случай, когда боты Google могут, например, вставлять, удалять или манипулировать данными, которые предназначены только для человека, просто потому, что он следует по ссылкам находки.
Метод GET или метод POST. Что лучше?
Недавно задумался что лучше и вот соображения на эту тему. Протокол HTTP, известный каждому благодаря интернету, имеет два самых часто используемых вида запросов GET и POST. В большинстве случаев применимы оба метода и оба будут хорошо работать. Однако бывают ситуации, когда использование того или иного метода дает определенные преимущества. Рассмотрим несколько ситуаций, когда есть смысл предпочесть метод GET или POST.
Для начала, вспомним как работает HTTP протокол. Допустим, вы хотите посетить какой-то сайт.
1. Ваш браузер делает запрос к серверу, на котором находится интересуемый сайт.
2. Сервер анализирует запрос, что-то делает, и отправляет ответ.
Да, это сверхупрощенная схема, но по сути именно так все и работает.
Именно в первом шаге ваш браузер решает, какой вид запроса использоть, GET или POST.
Так в чем же разница?
GET имеет формат вида: GET http://www.site.com/index.html HTTP/1.1
Данная комманда говорит серверу “Дай мне файл index.html, который находится в директории (на сайте) http://www.site.com/“.
Все, что вы вводите в адрессной строке браузера “переводится” в GET запросы.
В GET запросе также можно указывать параметры, которые нужно передать файлу. Именно здесь и выходит на сцену POST.
То есть, мы можем не только запрашивать какие-то конкретные статические файлы, но и передавать динамическим файлам какие-то значения, именно через строку запроса: GET http://www.site.com/index.php?param=value&boom=345&check=1 HTTP/1.1
Итак, все что мы видим в адрессной строке и любые ссылки, на которые можно нажать или скопировать — все они используют GET. Этот вид запроса позволяет вам посылать информацию на сервер, делать с ней что-то на сервере, и возвращать результат.
Теперь немного о POST.
Запросы в формате POST имеею ту же функциональнасть что и GET, но есть разница в формате.
POST может “симулировать” GET запрос, можно указывать параметры как и в заголовке запроса, так и в теле. В HTML формах выможете указать как отправлять информацию на сервер при помощи аттрибута method:
По умолчанию всегда используется GET, и не только в формах.
Так что же лучше? Что выбрать?
Однозначного ответа нет, все зависит от ситуации и желаемого результата.
Плюсы GET
1. Страницу всегда можно сохранить в закладках (СЕО-дружелюбен).
2. Он быстрее POST, так как вся информация находится в заголовках.
3. Информация, посылаемая на сервер, всегда видима (в адрессной строке).
Минусы GET
1. Иноформация, посылаемая на сервер, всегда видима (в адрессной строке).
2. Объем информации, которую можно отправить, ограничен.
Плюсы POST
1. Можно отправить много информации на сервер, объем неограничен.
2. Отправляемая информация не показывается в адрессной строке. Удобно, если нужны красивые URL.
Но ее все равно можно легко увидеть. Не используйте POST как способ защиты сайта!
Минусы POST
1. Медленнее, чем GET, так как анализируются заголовки и тело запроса.
2. Страницы, сгенерированные как результат запроса POST, нельзя добавить в закладки (СЕО-недружелюбен).
Ипользуйте POST, когда на сервер нужно отправить что-то для сохранения. Например, данные нового зарегистрированного пользователе, или какой-то файл.
Используйте GET, если вам нужно что-то от сервера, но сервер ничего не будет сохранять, или объем отправляемов вами информации легко помещается адрессной строке. Например, страница поиска на вашем сайте будет более удобное, если использовать GET, так как на сервер отправляется всего лишь какая-то фраза или слово, и сервер просто отправляет кучу информации в ответ. К тому же, страницу результатов можно будет добавить в закладки.
Блог Vaden Pro
GET или POST? – вот в чем вопрос!
В последнее время в сложившейся практике разработки сайтов наибольшую популярность получили два типа HTTP запросов: GET и POST. Казалось бы ничего сложного в этих двух понятиях нет, но начинающие и неопытные веб-разработчики очень часто допускают непростительные ошибки при выборе определенного метода. Главным образом это происходит по той причине, что эти 2 разные пути могут привести к одному и тому же результату. Ценой неправильного выбора типа запроса может быть угроза безопасности ресурса или информационная перегрузка сервера.
Итак, чтобы не допускать принятие неправильных решений, следует подробнее разобрать суть обоих методов. Это позволит докопаться до истины и вывести веб-разработчика на верный путь.
Очень действенный метод восприятия информации – это ассоциативное мышление, поэтому предлагаю придумать для каждого понятия ассоциацию и связывать функциональные возможности с этим предметом. Обратимся к названиям методов, а точнее к их переводу на русский язык. К примеру, GET переводится, как получать, другими словами получить запрос. А вот POST можно трактовать, пересылка письма по почте. Для программиста это значит, что такой метод будет связан с передачей информации на сервер. Это тот необходимый минимум, который научит новичка не путаться в этих понятиях. Однако, если простые лендинги с формой отправки данных – это для Вас не предел, тогда подойдем в плотную к этому вопросу.
Безопасные и небезопасные HTTP запросы
Изучив спецификацию HTTP 1.1, можно констатировать тот факт, что классификация разновидностей методов запросов насчитывает два типа: безопасный и небезопасный запрос.
Теперь стоит разъяснить суть каждого из методов. Безопасными называются те запросы, которые не имеют никакого влияния на ресурс, они просто запрашивают и помогают считывать информацию. Примером такого запроса является отображение картинки – через ее адрес идет запрос на сервер в указанную директиву, где должен находится файл с картинкой. Такой тип запроса распространяется на методы HEAD и GET.
На заметку
Безопасный метод – это еще не гарантия отсутствия проблем. Ущерб может нанести зацикливание определенного типа запроса, даже если он и безопасный.
Теперь обратимся к понятию небезопасного запроса. Такой метод предусматривает внесение изменений определенным данным на сайте. Наиболее вероятные проблемы возникают в том случае, когда запрос осуществляется повторно или без надобности. В качестве примера следует отметить такие процессы, как онлайн-регистрация, пересылание сообщения или веб-платежи. Пот такой тип запроса относят POST, PUT и DELETE методы.
Идемпотентные методы
Это сложное для восприятия и произношения понятие означает способность некоторых из методов предоставлять одни и те же данные при многочисленных запросах. Та ситуация, когда информация была обновлена, во внимание не берется. Изъясняясь более понятно, это тот случай, когда при запросе файла по одному и тому же адресу будет выводиться постоянно одна и та же информация (например, картинка). Такая способность присуща GET, PUT, DELETE методам.
На этом будем завершать анализ методов. Теперь вы можете убедиться в том, что не совсем POST похож на GET. Поэтому при выборе метода в первую очередь следует проанализировать поставленные цели для ресурса, а затем, исходя из принятых решений, делать выбор. Да, стоит отметить, что по умолчанию работает метод GET.
Для удобности привожу шпаргалку, которая в большинстве случаев направит разработчика на верный путь и позволит принять верное решение:
Хоть и шпаргалка не сможет помочь в специфических и сложных ситуациях, но для решения стандартных задач будет неоценимым помощником.
Руководство по выбору между GET и POST
К сожалению на практике встречается множество несостыковок в использовании GET вместо POST и наоборот. Оба HTTP метода могут приводить к одинаковым результатам, но их некорректное использование может привести к неожиданным и потенциально опасным последствиям.
Поэтому, что-бы быть уверенным в том, что мы делаем все правильно, я представляю Вам руководство по выбору между GET и POST.
Давайте вспомним, что в строках запросов, пара переменная/значение, передается в GET через вот такой URL запрос:
а в POST запросе она передается в теле заголовка:
Основы: GET против POST
Правило #1: Используйте GET для безопасных действий и POST для небезопасных
RFC указывает Интернет браузерам на то, что пользователей необходимо предупреждать о повторном использовании POST запроса, потому что это действие потенциально небезопасно (к примеру оформление онлайн оплаты).
Однако, пока браузер соблюдает это требование RFC, может поясним почему POST должен использоваться для небезопасных действий, и почему мы не должны использовать POST для безопасных?
Просто примите к сведению то, что GET запросы используются чаще:
Примечание: Если Вам необходимо извлекать лучшее из обоих методов, небезопасное действие можно превратить в безопасное сделав его идемпотентным и таким образом обезопаситься от возможной проблемы многочисленных повторений запросов. Вы назначаете каждому запросу свой уникальный ID и проверяете его на сервере, был ли запрос с таким ID обработан ранее. На самом деле все небезопасные действия должны быть идемпотентными, так как пользователя не остановят никакие предупреждения.
GET против POST: копаем глубже
Правило #2: Используйте POST для операций с важной информацией
Так как в GET запросах строка запроса находится в открытом виде, мы должны заботиться о своей безопасности и о том, что пользователи будут работать с важными данными, такими как пароли или номера кредитных карт:
1. Наши пользователи могут и не догадываться об этом, передавая важные данные через URL другим лицам или когда история серфинга в их браузере может быть просмотрена другими пользователями этого компьютера (хотя это может и не сработать при работе с AJAX ориентированными сервисами).
2. Мы сами нарушаем закон о частной информации, сохраняя, к примеру, в логах своего сервера номера CV2s с кредитных карт пользователей.
Правило #3: Используйте POST для операций с большими данными
Несмотря на то, что RFC не описывает такой параметр, как длина URL, Internet Explorer упорно придерживается мнения, что максимальная длина URL не может превышать 2,048 символов, это накладывает некоторые ограничения на использование GET.
Правило #4: Используйте GET в AJAX приложениях
Когда используется XMLHttpRequest, браузеры реализуют POST как двухпроходный процесс (сперва посылают заголовок, а затем данные). Это означает, что GET запросы более отзывчивые, что так необходимо для хорошего AJAX окружения.
Итоги
Хотя правила обычно существуют для убедительных причин, хорошо бы знать то, что за ними скрывается. Я сам ненавижу правила, у которых нет объяснений и надеюсь, что все вышесказанное поможет Вам уяснить правила различий GET против POST.
Выбирая между этими двумя методами необходимо иметь некоторое чутье и я думаю следующая схема поможет Вам в этом выборе:
Что быстрее post или get
Шустрый
Профиль
Группа: Участник
Сообщений: 81
Регистрация: 20.10.2005
Где: Украина
Репутация: нет
Всего: нет
Ustix IT Group
Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар
Репутация: 32
Всего: 69
Опытный
Профиль
Группа: Участник
Сообщений: 298
Регистрация: 13.3.2005
Где: Ирландия
aprok, если ты не используешь больше сотни этих глобавльных массивов и если сервак не пень 166, думаю ты не заметишь особой разницы, за тем исключение что гет передается через хедеры, следовательно в нем только может быть 255 символов, если сколероз не подводит
Мудрый.
Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004
Репутация: 122
Всего: 261
Бывалый
Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит
Репутация: 3
Всего: 6
Velichko Anton
Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург
Репутация: 2
Всего: 18
Цитата(Bastet @ 20.11.2005, 23:34) |
ИМХО, использование GET или POST определяется далеко не скоростью. |
А разница то вприципе не существенна, оба прозачны, оба передаются заголовками, только у одного есть ограничение по длине, а у другого нет.
Цитата(mr @ 20.11.2005, 06:44) |
за тем исключение что гет передается через хедеры, |
И пост тоже
Пример:
Код |
POST /XLSJOB/xlsPop.aspx HTTP/1.0 Host: 192.100.0.3 Content-Type: application/x-www-form-urlencoded Content-Length: 26 var=Инфа на ХХ символов +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Даже если посмотреть на вид заголовков, можно сказать что POST и GET примерно одинаковы по скорости, если инфа одинаковая.
^аВаТаР^ сообщение>>
Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а
Репутация: 2
Всего: 134
Мудрый.
Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004
Репутация: 122
Всего: 261
Цитата(Mayk @ 23.11.2005, 20:08) |
Кстати, а данные что передаются через POST тоже escape’ят пробелы в %20? |
Вроде нет. По крайней мере я ещеь не разу не встречал в ПОСТ данных %20.
^аВаТаР^ сообщение>>
Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а
Репутация: 2
Всего: 134
Мудрый.
Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004
Репутация: 122
Всего: 261
^аВаТаР^ сообщение>>
Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а
Репутация: 2
Всего: 134
Цитата(Mal @ 24.11.2005, 02:14) |
Mayk о чем ты? Как ты можешь судить о том на сколько быстро отправляются данные по сети? невохможно это. Можно в среднем считать, но не точно. |
А нам и не нужно точно. Просто если представить «идеальную» сеть с моментальной передачей данных, то POST будет быстрее, так как для получения на получение строки из GET’а придётся тратить больше усилий, заменяя в частности ‘%20’ пробелами(в POST’е ты сам сказал этого нет => усилия не тратятся).
[я предполагаю что скрипту все же надо строку типа «a b» а не «a%20b»]
Но задержка данных в сети несоизмеримо больше времени, необходимого на декодирование GET’а.
(так как передача занимает порядка миллисекунд, а декодирование %20%20%20%20%20 в 5 пробелов выполняется явно быстрее 1 мс)
И таким образом по большему счету всё равно как передавать.
Ustix IT Group
Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар
Репутация: 32
Всего: 69
Мудрый.
Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004
Репутация: 122
Всего: 261
Опытный
Профиль
Группа: Участник
Сообщений: 298
Регистрация: 13.3.2005
Где: Ирландия
Брутальный буратина
Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес
Репутация: нет
Всего: 115
[ Время генерации скрипта: 0.1708 ] [ Использовано запросов: 21 ] [ GZIP включён ]
|