如何在THttpClient中使用KeepAlive?

时间:2018-01-17 15:20:36

标签: delphi firemonkey

如果我执行以下方案:

MyHttpClient := ThttpClient.create;
MyHttpClient.Get('https://www.siteA.com');
MyHttpClient.Get('https://www.siteB.com');
MyHttpClient.Get('https://www.siteA.com');

对于https://www.siteA.com的每个请求,或仅针对第一个请求,并在第二个请求中重用,是否会建立http连接(以及https握手)?这适用于android / ios和windows

在这种情况下:

MyHttpClient1 := ThttpClient.create;
MyHttpClient1.Get('https://www.siteA.com');
MyHttpClient1.disposeOf;


MyHttpClient2 := ThttpClient.create;
MyHttpClient2.Get('https://www.siteA.com');
MyHttpClient2.disposeOf;

与上一个相同,http连接(以及https握手)是针对每个请求还是仅针对第一个请求进行,并且是第二个请求重用?

如何在android / ios下测试此行为?

1 个答案:

答案 0 :(得分:2)

在第一个示例中,您正在向不同的主机名发送请求,因此无论是否重用THTTPClient对象,都需要单独使用TCP连接和HTTPS握手 请求,即使主机名解析为相同的IP地址。 TCP连接完成握手后,不能通过现有TCP连接发送不同主机名的新握手。因此THTTPClient必须删除连接并在第2和第3个请求上创建新连接。 KeepAlive仅适用于对同一主机名的顺序请求。

在第二个示例中,您使用的是单独的THTTPClient对象,因此即使请求属于同一主机名,也会删除并重新连接TCP连接。 THTTPClient不会缓存对象之间的TCP连接。