2012-12-20 60 views
0

我只是通过HTTP 1.1的规范就在http://www.w3.org/Protocols/rfc2616/rfc2616.html和跨有关连接http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8节说HTTP和会话

来到“HTTP/1.1和更早版本的HTTP之间的显著区别在于持久连接是所有HTTP连接的默认行为,也就是说,除非另有说明,否则客户端应该假设即使在服务器发生错误响应后,服务器也会保持持久连接。服务器可以发出TCP连接关闭的信号,这个信号发生在Connection头f中(第14.10节)。一旦收到信号,客户端绝不能在该连接上发送更多的请求。 “

然后,我还通过HTTP状态管理的章节就在http://tools.ietf.org/html/rfc2965是说,在其第2节

‘目前,HTTP服务器,每个客户端请求不涉及该请求到前面或后面的请求作出回应;’

大约需要有在2616持久连接一节也说,持续连接之前的每一次客户端希望获取一个网址就必须建立对每一个新的请求一个新的TCP连接。

现在我的问题是,如果我们有在http/1.1中持久连接,如上所述,客户端不需要为每个新请求建立一个新的连接。它可以通过同一连接发送多个请求。因此,如果服务器知道每个后续请求都是通过同一个连接传送的,请求是否来自同一个客户端,这不是很明显吗?因此,这仅仅不足以维持状态,并且这对于服务器来说理解请求来自同一客户端就足够了吗?在这种情况下,为什么需要独立的国家管理机制?

回答

0

基本上,这是有道理的,但HTTP持久连接用于消除连接处理的管理TCP/IP开销(例如连接/断开连接/重新连接等)。这并不是要说通过连接传输数据的状态,这就是你正在谈论的内容。

+0

好的,谢谢你的回复。我理解你的观点。但实际上它本身就是我的问题,“为什么不能说关于数据在连接上移动的状态呢?看看数据是否通过同一个连接发送,这显然意味着它是由实际打开conn的同一个客户端发送的。因此,现在对于每个后续请求(通过同一个conn),已知请求来自同一个客户端。如果我没有错,那是因为这个原因,我们实际上需要有单独的状态管理机制,并且http是一个无状态协议。 – qre0ct

+0

那么,客户端如何通知主机新的数据正在发送? HTTP不是流式数据协议,它是基于连接的。因此,根据定义,每个连接(即使它纯粹是一个持久的物理连接上的逻辑连接)需要以标题,正文和结尾开头。我明白你要去哪里,并且尽一切办法,制定你自己的协议。但就目前而言,系统中已经没有太多的开销,这就是为什么人们不使用其他任何东西:因为这种方式工作得很好。 – L0j1k

+0

感谢它现在有更好的意义。我现在必须从此开始工作。再次感谢。 – qre0ct