HTTP和会话

HTTP和会话,http,session,web,session-state,stateful,Http,Session,Web,Session State,Stateful,我刚刚浏览了http 1.1 at的规范,遇到了一个关于连接的部分,其中说 “HTTP/1.1与早期版本的HTTP之间的一个显著区别是,持久连接是任何HTTP连接的默认行为。也就是说,除非另有说明,否则客户端应假定服务器将保持持久连接,即使在服务器做出错误响应之后也是如此 持久连接提供了一种机制,通过该机制,客户端和服务器可以发出关闭TCP连接的信号。此信号通过连接头字段(第14.10节)发出。一旦发出关闭信号,客户端不得在该连接上再发送任何请求。” 然后我还看了一节关于http状态管理的文章,

我刚刚浏览了http 1.1 at的规范,遇到了一个关于连接的部分,其中说

“HTTP/1.1与早期版本的HTTP之间的一个显著区别是,持久连接是任何HTTP连接的默认行为。也就是说,除非另有说明,否则客户端应假定服务器将保持持久连接,即使在服务器做出错误响应之后也是如此

持久连接提供了一种机制,通过该机制,客户端和服务器可以发出关闭TCP连接的信号。此信号通过连接头字段(第14.10节)发出。一旦发出关闭信号,客户端不得在该连接上再发送任何请求。”

然后我还看了一节关于http状态管理的文章,在第2节中说

目前,HTTP服务器响应每个客户端请求,而不将该请求与以前或以后的请求关联

RFC2616中关于需要有持久连接的一节还说,在持久连接之前,每次客户端希望获取url时,它必须为每个新请求建立一个新的TCP连接


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

基本上,是的,这是有意义的,但HTTP持久连接用于消除连接处理(例如连接/断开连接/重新连接等)的管理TCP/IP开销。这并不是说任何关于数据在连接中移动的状态,这正是您所说的。

否。例如,请求路径中可能有一个中介(如代理或反向代理),用于聚合来自多个TCP连接的请求


请参阅。

好的,谢谢您的回答。我理解您的观点。但实际上,这本身就是我的问题,“为什么不能说明数据在连接中移动的状态?”看一下,如果数据是通过同一连接发送的,这显然意味着它是由实际打开conn的同一客户机发送的。因此,现在对于每个后续请求(通过同一conn),都知道该请求来自同一客户机。如果我没有错的话,正是因为这个原因,我们实际上需要有单独的状态管理机制,http是一种无状态协议。那么,客户端如何通知主机正在发送新数据呢?HTTP不是流数据协议,它是基于连接的。因此,根据定义,每个连接(即使它是一个纯粹的逻辑连接,而不是一个持久的物理连接)都需要有一个以头、体和结尾开头的连接。我知道你要做什么了,无论如何,你自己制定一个协议。但就目前而言,系统中已经没有太多的开销,这就是为什么人们不使用其他任何东西的原因:因为这种方法工作得很好。谢谢,它现在有了更好的意义。从现在起,我必须重新考虑这件事。再次感谢。你能详细说明一下吗。。也许有一个例子。