gpt4 book ai didi

delphi - 强制Http 1.0 idHttpServer和TIME_WAIT

转载 作者:行者123 更新时间:2023-12-03 12:06:41 26 4
gpt4 key购买 nike

Delv 2010,来自Svn的Last Indy源代码。

有谁知道我该如何强制TIDHttpServer发送HTTP 1.0响应,而不是发送HTTP 1.1?
我想摆脱持久连接(保持 Activity ),并且我希望客户端从服务器断开连接,而不是服务器从客户端断开连接(以避免服务器中的TIME_WAIT)。

一些数据:

客户端发出的请求(在本例中为Internet Explorer):

GET/HTTP/1.0
接受:/
接受语言:pt-BR
用户代理:Mozilla/4.0(兼容; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0 ; InfoPath.3; .NET4.0C; .NET4.0E)
主机:本地主机:114
连接:保持 Activity


我的Indy服务器的响应:

HTTP/1.1 200确定
连接方式:关闭
内容类型:text/html;字符集= ISO-8859-1
内容长度:2717


如您所见,客户端明确地告诉服务器使用http 1.0,但indy服务器的响应为http 1.1。

编辑:

我发现最好的解决方案是在OnCommandGet事件中进行设置:

AResponseInfo.CloseConnection:= False;
AResponseInfo.Connection:='关闭';

AResponseInfo.CloseConnection:= False使服务器不与客户端断开连接,而Connection:='close'使客户端与服务器断开连接,从而避免服务器TIME_WAIT。

最佳答案

在IdCustomHTTPServer.pas中

版本字符串“HTTP/1.1”在TIdHTTPResponseInfo.WriteHeader方法中进行了硬编码。

此类没有工厂可以覆盖,因此可以使用后代版本更改其行为。它是在TIdCustomHTTPServer.DoExecute中明确创建的

但是,由于您确实有源,因此您可以将硬编码字符串更改为“HTTP/1.0”,或更改其行为以基于属性设置进行响应。

同样设置IdHttpServer.KeepLive := False;将停止持久性 session ,但确实会导致服务器在请求结束时断开与客户端的连接。

关于delphi - 强制Http 1.0 idHttpServer和TIME_WAIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5082546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com