`

有关http Keep-Alive 的详细解释

 
阅读更多
Keep-Alive通俗地讲,就是所谓的持久连接,对于http这种大量的短连接的服务来说,开启持久连接的好处可以节省大量的TCP连接过程的开销,据apache的官方文档称对包含大量图片的HTML文档造成的延时起到50%的加速作用。而同时现有操作系统越来越先进,建立连接的开销越来越小,像linux 2.6的epoll,freebsd的kqueue,可以让程序不产生新进程或新线程的情况就能同时服务N多连接。与此同时,客户端比如IE,Firefox也可以同时开多个线程取内容,如果开了Keepalive,反而有可能使服务器端管理大量的等待超时的tcp连接,使服务器端资源耗尽,而导致响应速度变慢。那么http的Keep-Alive到底是启用还是关闭呢?
说到Keep-Alive这个参数不得不说说这个参数在HTTP/1.0跟HTTP/1.1的一些区别,HTTP/1.0的默认情况下,是不会使用Keep-Alive的,仅当客户端的头指定使用持久连接这个参数而且是要服务器预先知道传输内容的长度时才会与HTTP/1.0的客户端建立持久连接,这意味着那些长度不定的内容,诸如php等动态页面内容、SSI页面、以及服务器端生成的目录列表等内容一般来说将无法使用与HTTP/1.0客户端建立的持久连接。而对于HTTP/1.1的客户端来说,如果没有进行特殊指定,持久连接将是默认的连接方式。如果客户端请求的是未知长度的内容时将使用分块编码的方式进行传输,也就是大家在http头中看到的chunked。
由于http协议基于tcp协议,当然http协议也需要tcp的3次握手的过程,而对于一个完整的HTTP/1.0的请求和响应它有以下的一个请求过程
建立tcp连接 (syn; ack, syn2; ack2; 三个分组握手完成)
请求
响应
关闭连接 (fin; ack; fin2; ack2 四个分组关闭连接)
而对于一个完整的HTTP/1.1的请求和响应:
建立tcp连接 (syn; ack, syn2; ack2; 三个分组握手完成)
请求
响应


请求
响应
关闭连接 (fin; ack; fin2; ack2 四个分组关闭连接)
如果请求和响应都只有一个分组,那么HTTP/1.0至少要传输11个分组,才拿到一个分组的数据。而Keep-Alive可以更充分的利用这个已经建立的连接,避免的频繁的建立和关闭连接,减少网络拥塞。虽然Keep-Alive可以节约分组,提升响应速度,但是一旦超出某个平衡点,由于为了保持过多的连接,创建了太多的进程,导致系统不堪重负,系统响应变慢,而对于HTTP/1.0来说可以充分利用浏览器默认最大并发连接数比HTTP/1.1多的好处,实现不增加新域名的开销而更高的并行下载,减少域名解释的开销(注:IE6,7在HTTP/1.0中默认最大并发连接数为4,在HTTP/1.1中默认最大并发连接数为2,IE8都为6,Firefox2在HTTP/1.0中默认最大并发连接数为2 在HTTP/1.1中默认最大并发连接数为8,firefox3默认都是6),根据10年7月Google索引的42亿个网页的统计报告,每张网页里包含29.39个图片,7.09个外部脚本,3.22个外部CSS样式表,如果设置了Keep-Alive并且合理控制Keep-AliveTimeOut这个参数可以大量的节约连接的开销,提高相应速度。如果设置不好,在大并发的情况小,因维持大量连接而使服务器资源耗尽,而对于目前国内大部分的用户使用的还是IE6,7的情况下关闭Keep-Alive可以充分利用浏览器默认最大并发连接数的好处实现不增加额外的开销页面快速的展示。
分享到:
评论

相关推荐

    Nextjs-keep-alive-demo.rar

    Nextjs-keep-alive 实现,vue中有这个专门的keep-alive插件,但是react没有,更别提nextjs了,这是现成的项目demo。 next9,10,11,12,13,14 及以上都可以用。直接使用或者移植到你的项目,非常方便。集成了发送...

    vue中keep-alive,include的缓存问题

    最后,当在实际项目中遇到`keep-alive`相关的问题时,务必检查版本号,确保你的Vue版本支持`include`属性。对于多层嵌套路由的情况,需要特别注意`keep-alive`的嵌套使用和`include`属性的动态绑定,以确保缓存逻辑...

    利用Keep-Alive处理Socket网络异常断开的方法

    本文将详细介绍如何利用Keep-Alive机制来检测并处理Socket网络异常断开的情况。 #### 二、网络异常的类型 网络异常主要包括两种类型: 1. **客户端程序异常**:指客户端应用程序由于某些原因(如崩溃、异常退出等...

    HTTP协议Keep-Alive模式详解

    下面是关于 Keep-Alive 模式的详细解释: 一、什么是 Keep-Alive 模式 Keep-Alive 模式是 HTTP 协议中的一种机制,它使客户端到服务器端的连接保持有效,从而避免了每个请求和应答都新建一个连接,并立即断开连接...

    彻底揭秘keep-alive原理(小结)

    keep-alive用法:动态组件&vue-router keep-alive源码解析 keep-alive组件及其包裹组件的钩子 keep-alive组件及其包裹组件的渲染 二、keep-alive介绍与应用 2.1 keep-alive是什么 keep-alive是一个抽象组件:它...

    vue keep-alive请求数据的方法示例

    本篇文章将详细介绍 Vue Keep-Alive 请求数据的方法示例,并提供解决方案来解决 keep-alive 属性的设置问题。 标题:Vue Keep-Alive 请求数据的方法示例 描述:本篇文章主要介绍了 Vue Keep-Alive 请求数据的方法...

    keep-alive.7z

    标题“keep-alive.7z”可能是指一个包含有关`keep-alive`使用示例的压缩文件。这个压缩包很可能包含了使用Vue.js实现`keep-alive`功能的代码文件,可能包括HTML、CSS和JavaScript文件,用于展示如何在实际项目中应用...

    vue使用keep-alive切换页面,2种方法实现页面保持滚动位置.zip

    下面我们将详细探讨两种使用`keep-alive`在Vue中实现页面保持滚动位置的方法。 首先,理解`keep-alive`的基本用法。`keep-alive`是一个抽象组件,它包裹动态组件时,会缓存该组件实例,而不是销毁它。在组件切换...

    vue.js内置组件之keep-alive组件使用

    `keep-alive`是Vue.js框架中的一个内置组件,用于实现组件的缓存功能,避免在切换组件时销毁和重新创建实例,从而提高性能并保持组件的状态。在使用`keep-alive`时,它会包裹动态组件,并在不活动时缓存组件实例。 ...

    umi-plugin-keep-alive:用于基于React激活的umijs

    umi-plugin-keep-alive 中文说明 | 此 <KeepAlive> 功能基于 在线示例 umi 多 tabs 示例: 使用方法 安装 npm install umi-plugin-keep-alive --save # or yarn add umi-plugin-keep-alive 从 umi 中导出 KeepAlive...

    keep-alive的介绍及使用

    如果需要频繁切换路由,这个时候就可以考虑用keep-alive了,来达到避免数据的重复请求的目的 keep-alive用来缓存组件,避免多次加载相应的组件,减少性能消耗。 简单一点来说就是从页面A链接到其他页面后回退到页面A...

    深入理解与使用keep-alive(配合router-view缓存整个路由页面)

    本文将详细介绍如何配合`router-view`使用`<keep-alive>`来缓存整个路由页面。 首先,`<keep-alive>`是一个抽象组件,它的主要作用是将被包含的组件保留在内存中,避免在组件切换时销毁和重建。这在处理那些数据量...

    vue中keep-alive内置组件缓存的实例代码

    将要缓存的组件使用 keep-alive 包裹住即可。 keep-alive优点的介绍: 1. 切换组件时,当前组件不会触发销毁的生命周期钩子。也就是说不会销毁了。 2. 切换回来时,也不会重新创建。(既然都没有被销毁,哪里来的...

    vue中进入详情页记住滚动位置的方法(keep-alive)

    本文将介绍如何通过使用Vue的内置组件keep-alive来实现进入详情页时记住滚动位置的方法。 首先,了解keep-alive组件的基本作用是必要的。keep-alive是Vue提供的一个抽象组件,它用来缓存不活动的组件实例,而不是...

    vue组件 keep-alive 和 transition 使用详解

    1.keep-alive 能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 相似, 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件...

    vue中keep-alive的用法及问题描述

    在做电商有关的项目中,当我们第一次进入列表页需要请求一下数据,当我从列表页进入详情页,详情页不缓存也需要请求下数据,然后返回列表页,这时候我们使用keep-alive来缓存组件,防止二次渲染,这样会大大的节省...

    Vue中keep-alive组件的深入理解

    Vue.js 是一款流行的前端框架,它的`keep-alive`组件是一个非常实用的功能,用于缓存组件实例,防止在路由切换时...理解并熟练运用`keep-alive`及其相关的解决策略,可以帮助开发者构建更高效、用户体验更好的应用。

    keep-alive不能缓存多层级路由菜单问题解决

    在Vue.js应用中,`keep-alive`组件用于缓存组件状态,以便在导航到其他页面后仍能保留之前的状态,从而提高用户体验。然而,在处理多层级路由菜单时,可能会遇到`keep-alive`无法正确缓存的问题。这个问题通常发生在...

    Vue keep-alive组件页面缓存控制示例

    在Vue中,`<keep-alive>`组件是一个特殊的组件,用于缓存子组件的状态,防止页面在切换时重新渲染,从而提高用户体验。本示例主要探讨如何使用`<keep-alive>`组件进行页面缓存控制。 `<keep-alive>`的基本用法是在...

    springboot-keepalive设置测试

    server.tomcat.keep-alive-timeout=60000 # keep-alive超时时间,单位毫秒 ``` 在进行keepalive测试时,我们通常会使用像Jodd库这样的HTTP客户端工具,它可以模拟不同场景下的HTTP请求,以便检查keepalive功能的...

Global site tag (gtag.js) - Google Analytics