http1.0 http1.1 keepalive

简介:

1、背景

    KeepAlive是就是通常所称的长连接。KeepAlive带来的好处是可以减少tcp连接的开销,这对于短response body的请求效果更加明显。同时,可以为采用HTTP协议的交互式应用提供良好的session支持。

    HAPxoxy作为一款开源的LoadBalance,其最新的1.3.22(Stable版本)不能支持KeepAlive。(其中自从1.4.dev5开始也支持Client端的KeepAlive)  

2、KeepAlive的原理

    在HTTP1.0和HTTP1.1协议中都有对KeepAlive的支持。其中HTTP1.0需要在request中增加”Connection: keep-alive“ header才能够支持,而HTTP1.1默认支持。

    HTTP1.0 KeepAlive支持的数据交互流程如下:

    a)Client发出request,其中该request的HTTP版本号为1.0。同是在request中包含一个header:”Connection: keep-alive“。

    b)Web Server收到request中的HTTP协议为1.0及”Connection: keep-alive“就认为是一个长连接请求,其将在response的header中也增加”Connection: keep-alive“。同是不会关闭已建立的tcp连接。

    c)Client收到Web Server的response中包含”Connection: keep-alive“,就认为是一个长连接,不close tcp连接。并用该tcp连接再发送request。(跳转到a))

HTTP1.1 KeepAlive支持的数据交互流程如下:

    a)Client发出request,其中该request的HTTP版本号为1.1。

    b)Web Server收到request中的HTTP协议为1.1就认为是一个长连接请求,其将在response的header中也增加”Connection: keep-alive“。同是不会关闭已建立的tcp连接。

    c)Client收到Web Server的response中包含”Connection: keep-alive“,就认为是一个长连接,不close tcp连接。并用该tcp连接再发送request。(跳转到a))

3、Patch实现思路

   HAProxy client KeepAlive支持的patch主要解决三个问题:

   a)”Connection: keep-alive“ header处理问题

   参见KeepAlive的原理,client KeepAlive对于这个header的处理是在对开启client KeepAlive的frontend上经过的response中增加”Connection: keep-alive“ header;

   b)怎么处理重新触发client发过来的request的时机问题

   从KeepAlive的原理中可以得知,next request是在完成before request的response被client接收的情况下才发出。因此需要在向client写完before request的response后才能触发。而写完response可以通过计算response中body的长度信息得到(Content-Length或者Chunk信息)

   c)怎么触发NOT_FIRST request

   在Haproxy中对于对于连接的管理是通过session这个数据结构来实现的。触发NOT_FIRST request就通过重置session这个数据结构来实现。

4、Patch的配置方式

    配置方式为在每个Proxy的Front中配置添加:

    option cli_keepalive

5、patch代码

附件为基于该版本的Client KeepAlive Patch。

该Patch只支持Client端的KeepAlive。


本文转自守住每一天51CTO博客,原文链接:http://blog.51cto.com/liuyu/279164,如需转载请自行联系原作者

相关文章
|
6月前
|
缓存 网络协议 安全
Android网络面试题之Http基础和Http1.0的特点
**HTTP基础:GET和POST关键差异在于参数传递方式(GET在URL,POST在请求体),安全性(POST更安全),数据大小限制(POST无限制,GET有限制),速度(GET较快)及用途(GET用于获取,POST用于提交)。面试中常强调POST的安全性、数据量、数据类型支持及速度。HTTP 1.0引入了POST和HEAD方法,支持多种数据格式和缓存,但每个请求需新建TCP连接。**
59 5
|
6月前
|
缓存 网络协议 Android开发
Android网络面试题之Http1.1和Http2.0
HTTP/1.1 引入持久连接和管道机制提升效率,支持分块传输编码和更多请求方式如PUT、PATCH。Host字段指定服务器域名,RANGE用于断点续传。HTTP/2变为二进制协议,实现多工处理,头信息压缩和服务器推送,减少延迟并优化资源加载。HTTP不断发展,从早期的简单传输到后来的高效交互。
81 0
Android网络面试题之Http1.1和Http2.0
|
存储 缓存 网络协议
Http1.0和Http1.1的区别?Http1.1和Http2.0的区别
Http1.0和Http1.1的区别?Http1.1和Http2.0的区别
129 1
|
缓存 网络协议 开发者
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
1184 0
HTTP1.0、HTTP1.1 、HTTP2.0和HTTP3.0 的区别【面试题】
|
缓存 网络协议 C++
HTTP1.0 vs HTTP1.1 vs HTTP2.0
HTTP1.0 vs HTTP1.1 vs HTTP2.0
109 0
|
缓存 网络协议 前端开发
【计算机网络】HTTP1.0、HTTP1.1 和 HTTP2.0的详细分析
目录前言HTTP1.0HTTP1.1HTTP2.0总结 前言 在1.0时代中,html从Web服务器传送到客户端。 在2.0时代中,多了一些css,js等前端语言的更新。 影响http的两个主要因素有:带宽以及延迟 网络拨号更加影响带宽 延迟的话主要通过:一个主机中浏览器对同个域名的链接限制、dns的解析时长、三次握手的连接时长等 HTTP1.0 主要用在简单的网页和浏览器中 具体的一个模式为: 建立连接 发出请求信息 响应信息 关掉连接 存在一个带宽的浪费,比如传输一部分数据,却传输了整个对象进
458 1
【计算机网络】HTTP1.0、HTTP1.1 和 HTTP2.0的详细分析
|
存储 缓存 网络协议
|
Web App开发 存储 缓存
探索http1.0到http3.0的发展史,详解http2.0
实例代码探索http1.0到http3.0的发展史,详细拆解http2.0,队头阻塞的解决方案,分层帧,多路复用,传输层的伟大变革
295 0
探索http1.0到http3.0的发展史,详解http2.0
netty系列之:搭建客户端使用http1.1的方式连接http2服务器
netty系列之:搭建客户端使用http1.1的方式连接http2服务器
|
前端开发 网络协议 Java
HTTP、 HTTP1.1、 HTTP/2的区别
HTTP、 HTTP1.1、 HTTP/2的区别 在过去十年中,Web 技术已经取得了种种进展。从基本的 HTML 开始,网页发展出更丰富的外观和感觉,变得更加直观,对用户更加友好并且越来越大放异彩。
2446 0