我知道HTTP方法是如何工作的以及它们的设计方式,但我很想知道在使用数据时,某些方法是否比其他方法更快。
在我正在研究的团队中,我注意到了很多类似下面的JQuery ajax请求:
$.ajax({url: "../dir/someFile.json", method: 'post', dataType: 'json',
error: function(...){ ... },
success: function(...){ ... }
});
我显然使用'get'方法,因为没有数据发送到此请求。这可能发生在队友复制和粘贴代码时。这也很好,似乎没有充分的理由将其更改为“获取”。
我认为在这种情况下使用'get'方法会更快,但我没有找到任何肯定的来源。
答案 0 :(得分:3)
有一些研究表明,某些浏览器会将POST请求分成多个数据包。这可能会对性能产生影响,您认为这会使请求变慢。但是,在测试中,POST似乎有时会更快。我不确定为什么会这样。
然而,在实践中,性能差异可以忽略不计,您应该按预期使用POST和GET。
读:
答案 1 :(得分:2)
至少在IE的历史版本中,存在POST传输额外数据包的问题。这里有一些讨论:
http://josephscott.org/archives/2009/08/xmlhttprequest-xhr-uses-multiple-packets-for-http-post/
我不知道这与当前的浏览器有多相关。
以下是文章中描述的测试结果:
答案 2 :(得分:0)
在所有条件相同的情况下,GET,POST或任何其他方法之间的网络性能没有差异。这完全取决于服务器如何处理GET与POST请求。例如,服务器可以尝试在POST上更新资源,但仅在GET上搜索它。
此外,使用GET,您可以发送数据。在jQuery中,它只是被序列化到查询字符串中($.get("someplace", data: { foo: "bar" })
被发送为$.get("someplace?foo=bar")
)。
答案 3 :(得分:0)
看起来很明显,但是当使用POST与GET时,你在方法名称中再使用一个字节。
此外,如果您要发送(少量)数据,使用GET将对数据进行URL编码(这意味着生成和发送的字节数将高于数据大小本身),而POST将消耗更多字节(通常),因为请求将另外包含Content-Type: application/x-www-form-urlencoded
标头,可能是Content-Length
标头加上相同的 URL编码数据,如GET。
如果您要发送一些二进制数据,则问题不会成立,因为您无法使用GET进行此操作。
我们在这里谈到便士,但如果你累积便士......
最后,GET请求将更短,并且对于相同的网络链路带宽,将比POST更快。
要发送二进制数据,PUT将比POST快(基于相同的逻辑,因为POST将使用multipart/form-data
编码头),但浏览器支持对PUT请求的限制更多。