HTTP持久连接与TCP套接字连接的区别

9

从维基百科的这篇文章中可以了解到:

在HTTP 1.0中,保活消息并未得到官方支持。在HTTP 1.1中,所有连接都被视为持久连接,除非另有声明。

  • 这是否意味着我可以使用此机制模拟TCP套接字连接?
  • 使用此机制,我能否让服务器向客户端“推送”数据?
  • 所有HTTP连接,甚至是我用来连接Stack Overflow的连接,“HTTP持久”吗?
  • 服务器推送的COMET技术是否使用此HTTP持久连接机制向客户端推送数据?

1
HTTP 持久连接只是一种优化。它没有任何行为差异。如果你想向客户端流式传输数据,可以使用分块编码。 - derobert
1
@derobert:什么是分块编码? - Kevin Boyd
2个回答

10
  • 这是否意味着使用这种机制,我实际上可以模拟TCP套接字连接?

不完全是,套接字有许多更多的功能和灵活性。

  • 使用这个机制,我可以让服务器向客户端“推送”数据吗?

不能直接,它仍然是一个请求/响应协议;持久连接只是表示客户端可以使用相同的底层套接字发送多个请求并接收相应的响应。

  • 所有的HTTP连接,即使是我用来连接Stack Overflow的连接,“HTTP持久”吗?

除非您的浏览器(或特殊服务器)另有说明,否则是的。

  • 服务器推送的COMET技术是否使用HTTP持久连接的这种机制向客户端推送数据?

有点类似(至少对于流式传输),但是还加了很多奶油。还有其他Comet实现方法,例如隐藏的iframes和AJAX长轮询,可能不需要持久连接(这会引起一些防火墙等问题)。


1
你说“套接字具有更多的功能和灵活性”。相对于HTTP持久连接,这些特性是什么?它们提供了什么样的灵活性? - Kevin Boyd
2
TCP套接字对谁何时以及如何通信没有任何限制 - 任何一方都可以随时发送字节而不必等待另一方("全双工"),流并非本质上被分成定义长度的消息等块。您需要在其上使用更高层的协议来放弃某些灵活性,将混乱变为有序:HTTP仅是其中一种协议,是一种非对称的半双工请求/响应协议,具有明确定义长度的消息(内容长度标头或分块)。客户端可以将请求依次排队,服务器必须对每个请求做出响应。 - Alex Martelli

1

实际上,HTTP服务器可以在未被客户端请求的情况下向连接的HTTP客户端“推送”数据。请参见http://en.wikipedia.org/wiki/Push_technology中的“HTTP服务器推送”。然而,这似乎并不常见。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接