首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器响应中的"Connection: Keep-Alive“

服务器响应中的"Connection: Keep-Alive“
EN

Stack Overflow用户
提问于 2010-06-08 00:42:52
回答 2查看 66.3K关注 0票数 13

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

为此,我需要set服务器发送其HTTP响应,并将"Connection“标头设置为"Keep-alive”。在客户端,似乎没有任何问题,因为Silverlight提供的网络API基本上是浏览器网络功能的包装器,根据我所读到的:所以如果浏览器支持HTTP 1.1和Connection: Keep-Alive作为默认的请求,那就没问题了。Content-Length也得到了很好的定义,这样服务器就知道什么时候必须发送响应。但是,服务器对PHP请求的响应系统地将" connection :“设置为"close",从而结束连接并阻止持久连接。

我已经尝试了一些方法来解决这个问题:不同的方法(GET和POST),在我的脚本开头使用以下PHP代码显式地向响应提供"Connection: keep-alive“:

代码语言:javascript
复制
header("Connection: Keep-alive");

后者将预期的报头添加到响应中,这很好,但稍后仍会在响应报头中附加一个额外的"Connection: close“。

它是PHP或Apache的一个强制执行"close“的特性(我猜是出于某种安全或性能目的),还是我在这里遗漏了什么?

提前谢谢。

附注:通过嗅探数据包,我注意到使用"Keep-alive“的网站并不多,TCP连接被重新建立。Keepalive不是HTTP1.1下的默认和首选行为吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-08 00:53:04

Keep-Alive功能不适用于持久连接。

Keep-Alive旨在减少网站的连接数量。不是为网页中的每个图像/css/javascript创建一个新的连接,许多请求将重复使用相同的连接。

在Apache中也有一些设置可以阻止这一点,比如连接上的最大请求数或请求之间的超时。这也会非常快地消耗你的资源,因为每个连接都需要自己的线程。

您应该切换到另一个解决方案,这是为这类工作而设计的。

对于保持连接打开的服务,您可以查看http://orbited.orghttp://twistedmatrix.com/trac/

票数 26
EN

Stack Overflow用户

发布于 2010-06-08 03:25:05

由于PHP不管理HTTP连接,因此无法更改此设置。您需要在服务器中进行设置。例如,如果您使用的是mod_php,可以在Apache中像这样启用keep-alive,

代码语言:javascript
复制
KeepAlive On
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2991386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档