Почему метод GET быстрее, чем POST в HTTP? - PullRequest
41 голосов
/ 31 июля 2009

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

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

Ответы [ 9 ]

43 голосов
/ 31 июля 2009

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

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

41 голосов
/ 15 марта 2011

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

http://omaralzabir.com/atlas_2__http_post_is_slower_and_it_s_default_in_atlas/

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

28 голосов
/ 31 июля 2009

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

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

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

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

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

9 голосов
/ 31 июля 2009

Глядя на протокол 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.

7 голосов
/ 31 июля 2009

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

6 голосов
/ 04 апреля 2016

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

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

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

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

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

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

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

3 голосов
/ 14 августа 2014

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

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

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

1 голос
/ 22 ноября 2014

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

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

0 голосов
/ 31 июля 2009

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

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

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