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

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

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

9 ответов

Решение

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

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

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

http://omaralzabir.com/atlas_2__http_post_is_slower_and_it_s_default_in_atlas/

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

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

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

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

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

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

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

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

Просто мои несколько центов с 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. Конечно, не всегда, но для небольших объемов данных я получаю одинаковые результаты все время.

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

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

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

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

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

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

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

Другие вопросы по тегам