C# 非持久HTTP 1.1连接比持久HTTP 1.1连接快?
我将EntityFramework4.0与RESTWeb服务结合使用。 在客户端,在数据/实体加载期间,客户端发出40个连续的web请求 当我将C# 非持久HTTP 1.1连接比持久HTTP 1.1连接快?,c#,entity-framework,http,rest,odata,C#,Entity Framework,Http,Rest,Odata,我将EntityFramework4.0与RESTWeb服务结合使用。 在客户端,在数据/实体加载期间,客户端发出40个连续的web请求 当我将HttpWebRequest.KeepAlive设置为false(Fiddler显示连接:在客户端-服务器通信中关闭标头)时,数据加载速度快了约50%(请求仍然是顺序的)-我想知道为什么 来自维基百科: HTTP持久连接,也称为HTTP保持活动,或HTTP连接重用,是使用相同的TCP连接发送和接收多个HTTP请求/响应,而不是为每个请求/响应对打开一个新
HttpWebRequest.KeepAlive
设置为false(Fiddler显示连接:在客户端-服务器通信中关闭标头)时,数据加载速度快了约50%(请求仍然是顺序的)-我想知道为什么
来自维基百科:
HTTP持久连接,也称为HTTP保持活动,或HTTP连接重用,是使用相同的TCP连接发送和接收多个HTTP请求/响应,而不是为每个请求/响应对打开一个新连接
来自MSDN:
当KeepAlive属性为true时,应用程序将与支持它们的服务器建立持久连接。
在使用HTTP/1.1时,默认情况下,“保持活动”为开/真
怎么了?如何提高持久性请求的速度?在客户端上,非持久性连接的每个IP并发连接数限制可能高于持久性连接。所以,当使用keep-alive时,客户端可能允许您有10个并行连接,但当不使用keep-alive时,您可以有15个并行连接 但只有在建立连接非常快的本地网络上,这才会更快。在internet上(RTT为5-200毫秒),您只需要3倍的RTT时间(SYN,SYN+ACK,ACK)即可开始新的连接。因此,特别是如果您有许多小请求(例如1kB以下的图像),保持活动的速度可以快4倍-因为您只设置了一次连接,然后发送1个数据包作为请求,接收1个数据包作为响应。但是如果没有keepalive,您需要3个数据包来开始,然后发送请求,然后接收响应,然后2个数据包来关闭连接