我正在尝试建立从 Silverlight 应用程序到由 Apache 服务器托管的 PHP 页面的 HTTP 持久连接(即,不为每个 HTTP 请求创建新的 TCP 连接)。
为此,我需要网络服务器发送其 HTTP 响应,并将“Connection”标头设置为“Keep-alive”。客户端,似乎没有任何问题,因为 Silverlight 提供的网络 API 基本上是浏览器网络功能的包装,从我读过的内容来看:所以如果浏览器支持 HTTP 1.1 和 Connection: Keep-Alive默认情况下,它的请求,没关系。Content-Length 也被很好地定义,以便服务器知道它何时必须发送响应。但是,服务器对 PHP 请求的响应系统地将“连接:”设置为“关闭”,从而结束连接并阻止持久连接。
我已经尝试了一些方法来解决这个问题:不同的方法(GET 和 POST),在我的脚本开头使用以下 PHP 代码显式地为响应提供“连接:保持活动”:
header("Connection: Keep-alive");
后者将预期的标头添加到响应中,这很好,但是稍后仍会在响应标头中附加一个附加的“连接:关闭”。
它是 PHP 或 Apache 的一个特性,它强制“关闭”(出于某种安全或性能目的,我猜)还是我只是在这里遗漏了一些东西?
提前致谢。
PS:通过嗅探数据包,我注意到没有多少网站使用“保持活动”并且重新建立了 TCP 连接。Keepalive 不是 HTTP 1.1 下的默认和首选行为吗?