【问题标题】:HTTP is statel-less,so what does it mean by keep-alive?HTTP是无状态的,那么keep-alive是什么意思?
【发布时间】:2026-01-20 06:40:01
【问题描述】:
Keep-Alive: 300
Proxy-Connection: keep-alive

我们知道HTTP连接在请求得到响应时关闭,那么keep-alive是什么意思,有人能详细说明一下吗?

【问题讨论】:

    标签: http-headers http-proxy


    【解决方案1】:

    这意味着可以保持连接打开以请求更多资源,例如图像和样式表。

    【讨论】:

    • 所以说HTTP is state-less是错误的,在这种情况下它可以是全状态的,对吧?
    • 不,HTTP 确实是无状态的。这意味着服务器返回的数据不依赖于用户之前的任何操作。 Cookie 和其他非 HTTP 方法使 Web 看起来是有状态的,例如使用户能够在网站上登录和退出。这种意义上的状态与连接无关。
    • 好像我一直在错误地理解stateless,我认为它与非持久连接相同......那你能举一个有状态协议的例子吗?
    • 例如 TCP 是一个有状态的协议。基本上,执行某种握手的每个协议都是有状态的。见mama.indstate.edu/users/shri/State.html
    【解决方案2】:

    协议确实是无状态的,但是keep-alive表示客户端和服务器之间的连接应该保持打开状态。

    打开 TCP 连接是一项相对重量级的操作,保持该连接打开可以避免与打开新连接相关的设置和拆卸成本。

    【讨论】:

    • 如果连接是持久的,怎么可能是无状态的?
    • 是的,连接是准持久的,直到客户端的资源完成服务。但是一旦服务器完成发送资源,连接就会关闭,使其成为无状态的。
    【解决方案3】:

    我们知道,当请求得到响应时,HTTP 连接已关闭

    什么是 HTTP 连接?实际上,它是一个实现 HTTP 的套接字连接。只有在 HTTP1.0 中,每次响应后连接才会关闭。为了节省建立 TCP/IP 连接的成本,HTTP1.1 规定除非客户端发送标头

    Connection:close
    

    或者服务器返回相同的标头,然后套接字保持打开状态。您可以根据需要向此套接字提供任意数量的请求,并且响应将按照请求的顺序返回。这要求响应要么使用分块传输编码发送,要么包含内容长度标头,以便可以检测/计算每个响应的结尾。

    proxy-connection 标头再次不同,仅与客户端和代理服务器之间的对话有关。

    我推荐此页面作为协议的优秀指南。

    HTTP Made Really Easy

    【讨论】:

    • 如果连接是持久的,如何确保the responses will come back in the order that they were requested?可能后面的请求会更早得到响应,对吧?
    • 这是服务器的责任。给定单个套接字上的请求顺序,则服务器必须以相同的顺序响应。
    【解决方案4】:

    Keep-alive 与状态无关。

    在网络中,最昂贵的操作之一是反复打开和关闭连接。然而,现代 HTML 页面在技术上要求您准确地做到这一点:首先,获取页面,然后获取每个资源并重复,直到您拥有所有内容。由于这会非常慢,HTTP/1.1 允许代理保持连接活动,直到他从服务器获得他想要的一切。

    Keep-alive基本上是网络浏览器告诉服务器不要挂断。

    【讨论】:

    • 那跟有状态有什么关系呢?
    • 在 HTTP 中,什么都没有,因为 HTTP 是一个无状态协议。 HTTP 中的每个请求都是在真空中进行的。对比 TCP,您发送的每个后续数据包都是前一个数据包的延续。 TCP 需要注意每个数据包的接收方式,以便它可以为更高的协议(如 HTTP)构建有意义的消息。这就是协议有状态的原因:每个请求/数据包都是对话的一部分,而不是单个请求/数据包
    【解决方案5】:

    这个问题已经回答并接受了,但我想详细解释一下:

    keep-alive 不能永远保持一个连接;应用程序 在服务器中运行决定了保持 连接活动,并且在大多数情况下您可以配置此限制。

    在 HTTP/1.1 中,默认使用 Keep-alive。如果客户端有其他请求,他们将为它们使用相同的连接。

    无状态一词并不意味着服务器没有能力保持 一个连接。它只是意味着服务器无法识别任何 任意两个请求之间的关系。

    【讨论】:

      最近更新 更多