Delphi Berlin:TIdHTTPServer(Indy 10)KeepAlive的好处
我有一个处理Delphi Berlin:TIdHTTPServer(Indy 10)KeepAlive的好处,delphi,ssl,indy,idhttp,Delphi,Ssl,Indy,Idhttp,我有一个处理http和https请求的服务器 客户端和服务器之间的公共例程基于两个请求: 1) 用户请求带有url的文件,例如: 2) 服务器在响应头中进行一些检查并重定向到新url: location: https://example.com/files/10.zip 3) 浏览器在重定向到新url后,请求文件: 4) 服务器在响应流中发送文件“10.zip”: ResponseInfo.ContentStream := TFileStream.Create('C:\10.zip', f
http
和https
请求的服务器
客户端和服务器之间的公共例程基于两个请求:
1) 用户请求带有url的文件,例如:
2) 服务器在响应头中进行一些检查并重定向到新url:
location: https://example.com/files/10.zip
3) 浏览器在重定向到新url后,请求文件:
4) 服务器在响应流中发送文件“10.zip”:
ResponseInfo.ContentStream := TFileStream.Create('C:\10.zip', fmOpenRead or fmShareDenyNone);
所有例程都有两个请求(1,4),因此我禁用了会话并保持激活:
IdHTTPServer.KeepAlive := False;
IdHTTPServer.AutoStartSession := False;
IdHTTPServer.SessionState := False;
我认为keep alive只有在多次往返时才有巨大的好处,在我的场景中,当用户使用http时,这似乎是一个好主意,但是,当用户使用https时,这可能不是一个好主意,因为没有KeepAlive的每个请求都是一个新请求,https连接的初始设置成本要高得多
在IdHTTPServer
上启用KeepAlive对我的场景有一些性能好处吗
Apache2.4具有5秒的默认KeepAliveTimeout。对于IndyServer来说,这是一个很好的值,以秒为单位?删除该重定向,您就可以执行单个请求/响应。@Victoria我想了解KeepAlive是否对>1个请求具有性能优势。我明白了。也许你可以看看。对这个问题给出一个最终的答案是相当宽泛的。如果浏览器在几秒钟内发送多个后续请求,保持连接处于活动状态是有意义的。如果以分钟或小时为单位,则保持其活动状态是没有意义的。@ar099968如果您想了解KeepAlive是否具有性能优势,请分析代码并亲自查看(提示:确实如此,尤其是对于HTTPS。您的往返行程比您想象的要多)@Victoria目前没有。它在我的待办事项清单上。但是,您可以为连接设置
ReadTimeout
,如果客户端在超时时间过去之前没有发送新请求,则会引发异常以关闭连接删除该重定向,并且您只有一个请求/响应。@Victoria我想了解KeepAlive是否对>1个请求有性能优势。我明白了。也许你可以看看。对这个问题给出一个最终的答案是相当宽泛的。如果浏览器在几秒钟内发送多个后续请求,保持连接处于活动状态是有意义的。如果以分钟或小时为单位,则保持其活动状态是没有意义的。@ar099968如果您想了解KeepAlive是否具有性能优势,请分析代码并亲自查看(提示:确实如此,尤其是对于HTTPS。您的往返行程比您想象的要多)@Victoria目前没有。它在我的待办事项清单上。但是,您可以为连接设置ReadTimeout
,如果客户端在超时时间过去之前未发送新请求,则会引发异常以关闭连接