it-swarm.com.ru

Почему метод GET быстрее, чем POST в HTTP?

Я только новичок в веб-программировании и просто любопытно узнать о методах отправки и отправки данных с одной страницы на другую.

Говорят, что метод Get быстрее, чем Post, но я не знаю, почему это так Одна из причин, по которой я смог найти, заключается в том, что Get может брать с ним только 255 символов? Есть ли другие причины, пожалуйста, кто-нибудь объяснит мне?

39
Embedd_Khurja

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

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

42
Mehrdad Afshari

Еще одна вещь, связанная с постом http, это то, что при использовании заголовка http Expect: 100-Continue может быть 2 вызова. Первый браузер отправляет заголовки HTTP-сообщения и сервер отвечает «HTTP 100 Продолжить». Когда браузер получает это, он отправляет фактическое тело.

http://omaralzabir.com/atlas_2__http_post_is_slower_and_it_s_default_in_atlas/

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

41
Kyle Nunery

Есть несколько неправильных представлений о GET и POST в HTTP. Есть одно основное отличие: GET должен быть идемпотентом, в то время как POST не должен быть. Это означает, что GET не вызывают побочных эффектов, то есть я могу отправлять GET в веб-приложение столько раз, сколько захочу (думаю, нажимая Ctrl + R или F5 много раз), и запросы будут «безопасными».

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

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

Чтобы ответить на вопрос, использую ли я GET или POST для выполнения одной и той же задачи, разница в производительности отсутствует.

Вы можете прочитать RFC ( http://www.w3.org/Protocols/rfc2616/rfc2616.html ) для более подробной информации. 

28
Kevin Jones

Глядя на протокол http, POST или GET должно быть одинаково легко и быстро разобрать. Я бы сказал, что разницы в производительности нет. 

Посмотрите на необработанные заголовки HTTP

http GET

GET /index.html?userid=joe&password=guessme HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0

http POST

POST /login.jsp HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0
Content-Length: 27
Content-Type: application/x-www-form-urlencoded

userid=joe&password=guessme

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

9
Robert

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

7
Tim Booker

Просто мои несколько центов с 2016 года.

Я создаю простую систему сообщений. Сначала я использовал POST для получения новых предупреждений. В jQuery у меня было:

$.post('/a/alerts', 'stamp=' + STAMP, function(result)
{
});

А в PHP я использовал $ _POST ['stamp']. Даже с локального хоста я получал 90-100 мс за каждый запрос, подобный этому .. Я просто изменил:

$.get('/a/alerts?stamp=' + STAMP, function(result)
{
});

и в PHP переключился на $ _GET ['stamp']. Так что чуть менее 1 минуты изменений. Теперь каждый запрос занимает 30-40 мс .

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

6
Tom

GETis немного быстрее потому что значения отправляются в заголовке в отличие отPOSTзначения отправляются в запросе body , в формат, который указывает тип содержимого.

Обычно тип содержимого - application/x-www-form-urlencoded, поэтому тело запроса использует тот же формат, что и строка запроса:

параметр = значение & также = другой Когда вы используете загрузку файла в форме, вместо этого вы используете кодировку multipart/form-data, которая имеет другой формат. Это сложнее.

2
Waqleh

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

Методы HTTP: GET против POST: http://www.w3schools.com/tags/ref_httpmethods.asp

1
AXO

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

Просто помните, что правильный способ говорить по HTTP - это использовать GET только для действий и POST для данных. Вам не нужно, но вы также не хотите, чтобы боты Google могли, например, вставлять, удалять или манипулировать данными, предназначенными только для обработки человеком, просто потому, что он переходит по найденным ссылкам. ,.

0
Hans