为什么GET方法比HTTP中的POST更快?

时间:2009-07-31 10:45:17

标签: http post get

我是网络编程的新手,只是很想知道将数据从一个页面发送到另一个页面的GET和POST方法。

据说GET方法比POST快,但我不知道为什么。 我能找到的一个原因是GET只能占用255个字符? 还有其他原因吗?请有人向我解释。

9 个答案:

答案 0 :(得分:43)

速度并不高。有很多情况下POST更适用。例如,搜索引擎将索引GET URL,浏览器可以将它们加入书签并使它们显示在历史记录中。因此,如果您执行基于GET请求修改数据库等操作,则可能会有害,因为某些机器人也可能会遍历该URL。

另一种情况可能是安全问题。如果您使用GET发布凭据,它将列在浏览器历史记录和服务器日志文件中。

答案 1 :(得分:41)

关于http post的另一件事是,当使用http标头Expect: 100-Continue时,它可以是2个调用。第一个浏览器使用“HTTP 100 Continue”发送http post标头和服务器回复。当浏览器收到此消息时,它会发送实际的正文。

http://omaralzabir.com/atlas_2__http_post_is_slower_and_it_s_default_in_atlas/

我认为这是作者正在寻找的答案。

答案 2 :(得分:28)

HTTP中存在一些关于GET和POST的误解。有一个主要的区别,GET必须是幂等的,而POST不一定是。这意味着GET不会产生任何副作用,即我可以多次向Web应用程序发送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)以获取更多详细信息。

答案 3 :(得分:9)

查看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时不应考虑性能。

答案 4 :(得分:7)

你应该把GET视为“一个可以去的地方”,将POST视为“做某事”。例如,应使用GET提交搜索表单,因为搜索结果页面是“地点”,用户希望将其加入书签或在以后从其历史记录中检索。如果您使用POST提交表单,则用户只能通过再次提交表单来重新创建页面。另一方面,如果您要执行诸如单击删除按钮之类的操作,则不希望使用GET提交此操作,因为只要用户返回到URL,操作就会重复。

答案 5 :(得分:6)

Just my few cents from 2016.

I am creating a simple message system. At first I used POST to receive new alerts. In jQuery I had:

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

And in PHP I used $_POST['stamp']. Even from localhost I got 90-100 ms for every request like this. I simply changed:

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

and in PHP switched to $_GET['stamp']. So a little less than 1 minute of changes. Now every request takes 30-40 ms.

So GET can be twice as fast as POST. Of course not always but for small amounts of data I get same results all the time.

答案 6 :(得分:3)

GET 略快,因为值在标头中发送,与 POST 不同在请求正文中,采用内容类型指定的格式。

通常内容类型是application / x-www-form-urlencoded,因此请求正文使用与查询字符串相同的格式:

参数=值&安培;还=另一 当您在表单中使用文件上载时,您可以使用multipart / form-data编码,它具有不同的格式。它更复杂。

答案 7 :(得分:1)

我同意其他答案,但没有提到可以缓存GET请求,而POST请求永远不会被缓存。我认为这是一些GET请求执行速度更快的主要原因。 (粗略地说这意味着有时候实际上没有发送任何请求。因此,实际上并不是GET请求更快,而是浏览器的缓存。)

HTTP方法:GET与POST:http://www.w3schools.com/tags/ref_httpmethods.asp

答案 8 :(得分:0)

POST会增加你的标题,只是增加标题,但差异应该可以忽略不计,所以我不明白为什么这应该是一个问题。

请记住,说HTTP的正确方法是仅对操作使用GET,对数据使用POST。您没有必要,但您也不希望Google机器人可以插入,删除或操作仅供人类处理的数据,因为它遵循它找到的链接