[英]“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.org和http://twistedmatrix.com/trac/
由于PHP不管理HTTP连接,因此它无法更改此设置。 您需要在服务器中进行设置。 例如,如果您使用的是mod_php,则可以在Apache中启用这种保持活动状态,
KeepAlive On
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.