来自维基百科上的这篇文章:
HTTP 1.0 没有正式支持 Keepalive 消息。在 HTTP 1.1 中,所有连接都被认为是持久的,除非另有声明。
- 这是否意味着使用这种机制我实际上可以模拟一个 TCP 套接字连接?
- 使用它可以使服务器“推送”数据到客户端吗?
- 所有的 HTTP 连接,甚至是我用来连接 Stack Overflow 的那个都是“HTTP 持久的”吗?
- 服务端推送的COMET技术是不是利用这种 HTTP 长连接的机制来向客户端推送数据?
- 这是否意味着使用这种机制我实际上可以模拟一个 TCP 套接字连接?
并非如此,套接字具有更多功能和灵活性。
- 使用它可以使服务器“推送”数据到客户端吗?
不是直接的,它仍然是一个请求/响应协议;持久连接只是意味着客户端可以使用相同的底层套接字发送多个请求并接收相应的响应。
- 所有的 HTTP 连接,甚至是我用来连接 Stack Overflow 的那个都是“HTTP 持久的”吗?
除非您的浏览器(或特殊服务器)另有说明,否则是的。
- 服务端推送的 COMET 技术是不是利用这种 HTTP 长连接的机制来向客户端推送数据?
有点(至少用于流媒体),但上面有很多生奶油。还有其他 Comet 实现方法,例如隐藏的 iframe 和 AJAX 长轮询,可能不需要持久连接(无论如何,这给了一些防火墙 &c 适合;-)。
实际上,HTTP 服务器可以将数据“推送”到已连接的 http 客户端,而无需客户端请求。请参阅http://en.wikipedia.org/wiki/Push_technology上的“HTTP 服务器推送” 。但是,它似乎确实被普遍实施。