非持久化的 HTTP 1.1 连接比持久化连接更快吗?

4
我正在使用Entity Framework 4.0与REST Web服务一起使用。在客户端,数据/实体加载期间,客户端正在进行40个连续的Web请求。
当我将HttpWebRequest.KeepAlive设置为false(Fiddler在客户端-服务器通信中显示Connection: Close头)时,数据加载速度提高了50%(请求仍然是连续的) - 我想知道为什么。 来自维基百科: HTTP持久连接,也称为HTTP保持活动或HTTP连接重用,是使用相同的TCP连接发送和接收多个HTTP请求/响应的概念,而不是为每个单独的请求/响应对打开新连接。 来自MSDN: 当KeepAlive属性为true时,应用程序会与支持它们的服务器建立持久连接。 在使用HTTP/1.1时,Keep-Alive默认为on/true。 问题出在哪里?如何加速持续请求?

有关为什么Keepalive可以加速连接的相关答案:https://networkengineering.stackexchange.com/a/13464/3675 - Eddie
1个回答

1

也许在客户端中,对于非持久连接,每个IP的并发连接限制比持久连接更高。因此,在使用keep-alive时,客户端可能允许您同时拥有10个连接,但是当不使用keep-alive时,您可以拥有例如15个并行连接。

但这只会在本地网络上更快,因为建立连接非常快。在互联网上(RTT为5-200毫秒),您需要3倍的RTT时间(SYN,SYN + ACK,ACK)才能开始新连接。因此,特别是如果您有许多小请求(例如1kB以下的图像),则keep-alive的速度可以快4倍-因为您仅设置一次连接,然后发送1个数据包作为请求并接收1个数据包作为响应。但是没有keepalive,您需要3个数据包来开始,然后发送请求,然后接收响应,然后2个数据包来关闭连接。


1
三次握手需要进行三个“单向”传输(A->B,B->A,A->B)。在第三步骤中,A已经可以发送HTTP请求,因此请求可以在一个往返时间后开始。 - Zac67

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接