【发布时间】:2026-01-20 06:40:01
【问题描述】:
Keep-Alive: 300
Proxy-Connection: keep-alive
我们知道HTTP连接在请求得到响应时关闭,那么keep-alive是什么意思,有人能详细说明一下吗?
【问题讨论】:
Keep-Alive: 300
Proxy-Connection: keep-alive
我们知道HTTP连接在请求得到响应时关闭,那么keep-alive是什么意思,有人能详细说明一下吗?
【问题讨论】:
这意味着可以保持连接打开以请求更多资源,例如图像和样式表。
【讨论】:
HTTP is state-less是错误的,在这种情况下它可以是全状态的,对吧?
stateless,我认为它与非持久连接相同......那你能举一个有状态协议的例子吗?
协议确实是无状态的,但是keep-alive表示客户端和服务器之间的连接应该保持打开状态。
打开 TCP 连接是一项相对重量级的操作,保持该连接打开可以避免与打开新连接相关的设置和拆卸成本。
【讨论】:
我们知道,当请求得到响应时,HTTP 连接已关闭
什么是 HTTP 连接?实际上,它是一个实现 HTTP 的套接字连接。只有在 HTTP1.0 中,每次响应后连接才会关闭。为了节省建立 TCP/IP 连接的成本,HTTP1.1 规定除非客户端发送标头
Connection:close
或者服务器返回相同的标头,然后套接字保持打开状态。您可以根据需要向此套接字提供任意数量的请求,并且响应将按照请求的顺序返回。这要求响应要么使用分块传输编码发送,要么包含内容长度标头,以便可以检测/计算每个响应的结尾。
proxy-connection 标头再次不同,仅与客户端和代理服务器之间的对话有关。
我推荐此页面作为协议的优秀指南。
【讨论】:
the responses will come back in the order that they were requested?可能后面的请求会更早得到响应,对吧?
Keep-alive 与状态无关。
在网络中,最昂贵的操作之一是反复打开和关闭连接。然而,现代 HTML 页面在技术上要求您准确地做到这一点:首先,获取页面,然后获取每个资源并重复,直到您拥有所有内容。由于这会非常慢,HTTP/1.1 允许代理保持连接活动,直到他从服务器获得他想要的一切。
Keep-alive基本上是网络浏览器告诉服务器不要挂断。
【讨论】:
这个问题已经回答并接受了,但我想详细解释一下:
keep-alive 不能永远保持一个连接;应用程序 在服务器中运行决定了保持 连接活动,并且在大多数情况下您可以配置此限制。
在 HTTP/1.1 中,默认使用 Keep-alive。如果客户端有其他请求,他们将为它们使用相同的连接。
无状态一词并不意味着服务器没有能力保持 一个连接。它只是意味着服务器无法识别任何 任意两个请求之间的关系。
【讨论】: