【发布时间】:2011-02-28 19:14:36
【问题描述】:
我正在尝试建立从 Silverlight 应用程序到由 Apache 服务器托管的 PHP 页面的 HTTP 持久连接(即不为每个 HTTP 请求创建新的 TCP 连接)。
为此,我需要网络服务器发送其 HTTP 响应,并将“Connection”标头设置为“Keep-alive”。客户端,似乎没有任何问题,因为 Silverlight 提供的网络 API 基本上是浏览器网络功能的包装,从我读过的内容来看:所以如果浏览器支持 HTTP 1.1 和 Connection: Keep-Alive默认情况下,它的请求,没关系。 Content-Length 也很好定义,以便服务器知道什么时候 它必须发送响应。但是,服务器对 PHP 请求的响应系统地将“Connection:”设置为“close”,从而终止连接并阻止持久连接。
我尝试了一些方法来解决这个问题:不同的方法(GET 和 POST),在我的脚本开头使用以下 PHP 代码显式地为响应提供“连接:保持活动”:
header("Connection: Keep-alive");
后者将预期的标头添加到响应中,这很好,但是稍后仍会在响应标头中附加一个附加的“连接:关闭”。
它是 PHP 或 Apache 的一个特性,它强制“关闭”(我猜是出于某种安全或性能目的)还是我只是在这里遗漏了什么?
提前致谢。
附: : 通过嗅探数据包,我注意到没有多少网站使用“保持活动”并且重新建立 TCP 连接。 Keepalive 不是 HTTP 1.1 下的默认和首选行为吗?
【问题讨论】:
-
这可能是 apache,而不是 PHP——据我所知,PHP 无法控制它。您可以通过尝试通过同一连接请求静态文件来进行验证。 Apache 指令:httpd.apache.org/docs/2.2/mod/core.html#keepalive
标签: php apache http keep-alive