HTTP 1.0 持久连接 -- Keep-Alive

http1.1版本之前 许多浏览器和服务器扩展了持久连接

使用 Connection:Keep-Alive 的首部来操作 tcp 的持久连接

实现HTTP/1.0 keep-alive连接的客户端可以通过包含Connection: Keep-Alive首部请求将一条连接保持在打开状态。如果服务器愿意为下一条请求将连接保持在打开状态,就在响应中包含相同的首部(参见图4-14)。如果响应中没有Connection: Keep-Alive首部,客户端就认为服务器不支持keep-alive,会在发回响应报文之后关闭连接。

HTTP/1.0 keep-alive事务首部的握手过程

Keep-Alive 选项

当使用Connection: Keep-Alive 首部时可以附加一个 Keep-Alive首部来调节 keep-alive 的行为

timeout max 都是响应首部发出的 分别表示 服务器希望将连接保持在活跃状态的时间和服务器希望为多少个事务保持此连接的活跃状态,它们都是一个估计值并不是一个承诺值。

此外还可以添加任意未经处理的形如 name[=value]的属性 主要用于诊断和调试

Connection: Keep-Alive

Keep-Alive: max=5, timeout=120

上面的例子表示服务器最多还会为另外5个事务保持连接的活跃状态或者将空闲状态的活跃连接保持两分钟

Keep-Alive连接的限制和规则

1. http/1.0 中keep-alive不是默认使用的 客户端必须发送一个带有 Connection:Keep-Alive 的请求首部的请求来激活 keep-alive 连接

2. Connection:Keep-Alive 首部必须跟随所有希望保持持久连接的报文一起发送:

如果客户端没有发送Connection:Keep-Alive 服务器将会在请求之后关闭连接

如何客户端发现在响应中没有Connection:Keep-Alive首部,则可以知道服务器在发出响应之后会关闭连接

3. 保持持久连接报文实体必须要有正确Content-Length,这样事务处理才能正确的检测出一条报文的结束和另一条报文的结束。

4. 代理和网关必须执行Connection首部的规则。代理或网关必须在将报文转发出去或将其高速缓存之前,删除在Connection首部中命名的所有首部字段以及Connection首部自身。严格来说,不应该与无法确定是否支持Con-nection首部的代理服务器建立keep-alive连接,以防止出现哑代理问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本篇文章篇幅比较长,先来个思维导图预览一下。 一、概述 1.计算机网络体系结构分层 2.TCP/IP 通信传输流 ...
    涤生_Woo阅读 55,508评论 24 557
  • 本文是《图解HTTP》读书笔记的第二篇,主要包括此书的第六章内容,因为第六章的内容较多,而且比较重要,所以单独写为...
    lijiankun24阅读 5,245评论 0 6
  • 1. 网络基础TCP/IP HTTP基于TCP/IP协议族,HTTP属于它内部的一个子集。 把互联网相关联的协议集...
    yozosann阅读 8,766评论 0 20
  • 连接管理 重点 http是如何使用tcp连接的; tcp连接的时延、瓶颈以及存在的障碍 http的优化包括并行连接...
    shenyifu阅读 4,166评论 0 3
  • 没过多久,又见你悱恻缠绵 我一个男人,对你不屑的看一眼,把你当成渣男 我一个男人,自幼天高立命,拼搏坚持 把和我有...
    导演张升志阅读 5,017评论 0 0