非持久HTTP 1.1连接比持久连接快

本文关键字:连接 HTTP | 更新日期: 2023-09-27 18:18:45

我正在使用实体框架4.0与REST web服务。在客户端,在加载数据/实体期间,客户端发出40个连续的web请求。

当我将HttpWebRequest.KeepAlive设置为false时(Fiddler显示Connection: Close headers在客户端-服务器通信中),数据加载更快约50%(请求仍然是顺序的)-我想知道为什么。

从维基百科:

HTTP持久连接,也称为HTTP保持活动,或HTTP连接重用,是使用相同的TCP连接发送和接收多个HTTP请求/响应的思想,而不是为每个单独的请求/响应对打开一个新的连接。

从MSDN

: 当KeepAlive属性为true时,应用程序将与支持它们的服务器建立持久连接。当使用HTTP/1.1时,Keep-Alive默认为/true。

´s错了什么?如何加快持久请求的速度?

非持久HTTP 1.1连接比持久连接快

可能在客户端限制为no。对于非持久连接,每个IP的并发连接数要高于持久连接。因此,当使用keep-alive时,客户端可能允许你有10个并行连接,但当不使用keep-alive时,你可以有15个并行连接。

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