如果我执行以下方案:
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下测试此行为?
答案 0 :(得分:2)
在第一个示例中,您正在向不同的主机名发送请求,因此无论是否重用THTTPClient
对象,都需要单独使用TCP连接和HTTPS握手 请求,即使主机名解析为相同的IP地址。 TCP连接完成握手后,不能通过现有TCP连接发送不同主机名的新握手。因此THTTPClient
必须删除连接并在第2和第3个请求上创建新连接。 KeepAlive仅适用于对同一主机名的顺序请求。
在第二个示例中,您使用的是单独的THTTPClient
对象,因此即使请求属于同一主机名,也会删除并重新连接TCP连接。 THTTPClient
不会缓存对象之间的TCP连接。