8

我知道 HTTP 方法的工作原理以及它们的设计目的,但我很想知道某些方法在仅用于获取数据时是否比其他方法更快。
在我正在工作的团队中,我注意到很多 JQuery ajax 请求,如下所示:

$.ajax({url: "../dir/someFile.json", method: 'post', dataType: 'json',
    error: function(...){ ... },
    success: function(...){ ... }       
});

我显然会使用“get”方法,因为没有数据发送到这个请求。这可能发生在队友复制和粘贴代码时。这也很好用,似乎没有充分的理由将其更改为“获取”。

我认为在这种情况下使用'get'方法会更快,但我没有找到任何确认这一点的消息来源。

4

4 回答 4

3

有一些研究表明,一些浏览器会将一个 POST 请求分成多个数据包。这可能会对性能产生影响,您认为这会使请求变慢。但是,在测试中,POST 似乎有时会更快。我不确定这是为什么。

然而,在实践中,性能差异可以忽略不计,您应该按预期使用 POST 和 GET。

读:

于 2012-08-06T18:31:44.380 回答
2

至少在 IE 的历史版本中,存在 POST 传输额外数据包的问题。在这里对此进行一些讨论:

http://josephscott.org/archives/2009/08/xmlhttprequest-xhr-uses-multiple-packets-for-http-post/

不过,我不知道这与当前的浏览器有多大关系。

以下是文章中描述的测试结果:

  • IE 6 – 2 个数据包
  • IE 7 – 2 个数据包
  • IE 8 – 2 个数据包
  • Firefox 3.0.13 – 1 个数据包
  • Firefox 3.5.2 – 1 个数据包
  • Opera 9.27 – 2 个数据包
  • Safari 4.0.3 – 2 个数据包
  • Chrome 2.0.172.43 – 2 个数据包
于 2012-08-06T18:25:04.007 回答
1

这似乎很明显,但是当使用 POST 与 GET 时,您在方法名称中使用了一个字节。

此外,如果您有(很少)数据要发送,使用 GET 将对数据进行 URL 编码(这意味着生成和发送的字节数将高于数据本身的大小),而 POST 将消耗更多字节(通常) 因为请求将另外包含一个Content-Type: application/x-www-form-urlencoded标头,可能是一个Content-Length标头加上与 GET相同的URL 编码数据。

如果你有一些二进制数据要发送,这个问题就不成立了,因为你不能用 GET 来做。

我们在这里谈论便士,但是如果您积累便士...

最后,GET 请求会更短,并且对于相同的网络链路带宽,它会比 POST 更快。

要发送二进制数据,PUT 将比 POST 更快(基于相同的逻辑,并且因为 POST 将使用multipart/form-data编码标头),但浏览器对 PUT 请求的支持更有限。

于 2017-08-04T19:32:04.683 回答
0

在所有条件相同的情况下,GET、POST 或任何其他方法之间的网络性能没有差异。这完全取决于服务器如何处理 GET 与 POST 请求。例如,服务器可能会尝试在 POST 上更新资源,但仅在 GET 上搜索它。

此外,使用 GET,您可以发送数据。在 jQuery 中,它只是被序列化为查询字符串($.get("someplace", data: { foo: "bar" })作为 发送$.get("someplace?foo=bar"))。

于 2012-08-06T18:24:34.287 回答