繁体   English   中英

服务器响应中的“连接:保持活动”

[英]“Connection: Keep-Alive” in server response

我正在尝试建立由Apache服务器托管的从Silverlight应用程序到PHP页面的HTTP持久连接(即,不为每个HTTP请求创建新的TCP连接)。

为此,我需要Web服务器发送其HTTP响应,并将“连接”标头设置为“保持活动”。 客户端方面,似乎没有任何问题,因为从我阅读的内容来看,Silverlight提供的网络API基本上是浏览器网络功能的包装:因此,如果浏览器支持HTTP 1.1和Connection:Keep-Alive默认情况下,它的请求就可以了。 Content-Length的定义也很明确,因此服务器知道何时必须发送响应。 但是,服务器对PHP请求的响应会系统地将“ Connection:”设置为“ close”,从而终止连接并阻止持久连接。

我已经尝试了一些方法来解决此问题:不同的方法(GET和POST),在脚本的开头使用以下PHP代码明确为响应提供“ Connection:keep-alive”:

header("Connection: Keep-alive");

后者将期望的标头添加到响应中,这很好,但是稍后在响应标头中仍附加附加的“ Connection:close”。

它是PHP或Apache的一种功能,它强制执行“关闭”(我猜是出于某种安全性或性能目的),或者我只是在这里遗漏了什么?

提前致谢。

PS:通过嗅探数据包,我注意到很少有网站使用“ Keep-alive”并且重新建立了TCP连接。 在HTTP 1.1下,Keepalive是否不是默认行为和首选行为?

保持活动功能不适用于持久连接。

保持活动状态旨在减少网站的连接数量。 代替为网页中的每个图像/ css / javascript创建新的连接,许多请求将被重新使用相同的连接。

Apache中也有一些设置可以阻止这种情况,例如连接上的最大请求数或请求之间的超时。 因为每个连接都需要自己的线程,所以这也将很快占用您的资源。

您应该切换到针对此类工作的另一种解决方案。

对于使您的连接保持打开状态的服务,请访问http://orbited.orghttp://twistedmatrix.com/trac/

由于PHP不管理HTTP连接,因此它无法更改此设置。 您需要在服务器中进行设置。 例如,如果您使用的是mod_php,则可以在Apache中启用这种保持活动状态,

KeepAlive On

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM