0

我刚刚在http://www.w3.org/Protocols/rfc2616/rfc2616.html浏览了 http 1.1 的规范,并遇到了关于连接的部分http://www.w3.org/Protocols/rfc2616/rfc2616- sec8.html#sec8

" HTTP/1.1 和早期版本的 HTTP 之间的一个显着区别是持久连接是任何 HTTP 连接的默认行为。也就是说,除非另有说明,客户端应该假设服务器将保持持久连接,即使在错误响应之后从服务器。

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

然后我还浏览了https://www.rfc-editor.org/rfc/rfc2965上关于 http 状态管理的部分,该部分在其第 2 部分中说

“目前,HTTP 服务器响应每个客户端请求,而不将该请求与先前或后续请求相关联;”

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

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

4

2 回答 2

0

基本上,是的,这是有道理的,但 HTTP 持久连接用于消除连接处理的管理 TCP/IP 开销(例如连接/断开连接/重新连接等)。这并不是要说明通过连接移动的数据的状态,这就是您所说的。

于 2012-12-20T05:13:26.163 回答
0

不会。例如,请求路径中可能有一个中间(例如代理或反向代理),它聚合来自多个 TCP 连接的请求。

请参阅http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p1-messaging-21.html#intermediaries

于 2012-12-20T07:56:41.603 回答