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

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

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

9 ответов


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

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


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

http://omaralzabir.com/atlas_2__http_post_is_slower_and_it_s_default_in_atlas/

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


существует несколько неправильных представлений о 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

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 как "место, чтобы пойти", и опубликовать как"что-то делать". Например, форма поиска должна быть отправлена с помощью 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 и немного быстрее потому что значения отправляются в заголовок в отличие от в должности значения отправляются в запросе тело, в формате, указанном типом содержимого.

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

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


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

HTTP методы: GET vs. POST:http://www.w3schools.com/tags/ref_httpmethods.asp


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

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