Keep-Alive 是什么?

概观

默认情况下,HTTP链接通常在请求完成之后关闭。这意味着服务端在完成响应的交付之后便关闭了TCP链接。为了让链接保持打开,来满足多请求,可以使用keep-alive 头信息。

没有Keep-Alive的情况下,HTTP是怎么工作的

  • 1.客户端需要重新创建一个链接和服务器交互,用以接收一个文件。
  • 2.客户端使用一个新的链接来向服务器请求HTML文件,这个连接在接收完文件的时候就会被关闭。
  • 3.浏览器解析HTML文件并检查完成网页的展示是否还需要其他文件。(例如css文件,js文件,图片)
  • 4.经过彻底的分析,浏览器再重新创建链接来请求这每一个文件。

我们需要Keep-Alive

创建多个链接可能会降低加载速度,同时也会利用服务器更多资源。我们可以通过启用Keep-Alive来克服这个问题,通过单个链接来传递这些文件,如此就避免了重复的创建和关闭新连接。如果没有启用Keep-Alive,展示一个网页的过程可能需要相当长的时间。

如何开启Keep-Alive

Keep-Alive的启用是通过在HTTP 头信息中明确声明来完成的。以apache web server为例,如果你有权限访问Apache的配置文件(httpd.conf),你可以在这里打开keep-alive。配置方法见下文。

3个影响Keep-Alive功能的属性。

Keep-live

使用“KeepAlive On”来启用,使用“KeepAlive Off”来禁用。开启之后的响应头大概如下:

HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Date: Thu, 15 Jan 2017 16:45:29 GMT
Content-Length: 1845
Keep-Alive: timeout=10, max=20
Server: Apache/2.4.9 (Unix) PHP/5.6.2

MaxKeepAliveRequests

用来设置KeepAlive链接的最大数量。合适的值取决于实际的情况。

KeepAliveTimeout

这个设置可以防止未使用的链接占用太长久。其实就是链接需要keep多久的问题。比如设置7到10秒通常就可以了。在流量较高的情况下这个值可能就得设置大一点了,以确保没有频繁的TCP链接重新启动。如果这个值设置太小了,那么也许就是去了keep-alive本身的目的了。

Keep-Alive的益处

  • 1.减少CPU使用:创建一个新的TCP链接会消耗一些资源,例如CPU和内存的使用。使链接保持存活的时间长一点可以避免频繁的创建新链接,从而减少资源使用。
  • 2.网页加载速度:使用同一个链接来加载多个文件可以是网页加载的快点。
  • 3.HTTPS:https非常消耗资源,所以强烈建议对https开启keep-alive,并尽可能使用HTTP/2进行一些调整。

如果你使用的是HTTP/1.1,它的实现方式与HTTP/1.0的keek-live不同,HTTP/1.1的链接默认是保持活跃的,它假定所有的链接都是持久的,除非响应头中包含:“Connection:close”头。但是如果不发送“Connection:close”头并不意味着链接会永远持续,链接还是会被关闭的。

Lua脚本在redis分布式锁场景的运用

CORS详解,CORS原理分析

Keep-Alive 是什么?

spring如何启动的?这里结合spring源码描述了启动过程

SpringMVC是怎么工作的,SpringMVC的工作原理

spring 异常处理。结合spring源码分析400异常处理流程及解决方法

Mybatis Mapper接口是如何找到实现类的-源码分析

使用Netty实现HTTP服务器

Netty实现心跳机制

Netty开发redis客户端,Netty发送redis命令,netty解析redis消息

Netty系列

Keep-Alive 是什么?的更多相关文章

  1. SQL Server 2012故障转移的looksalive check和is alive check

    什么是looksalive check和is alive check SQL Server故障转移集群是建立在windows集群服务上的一种热备的高可用方案.在集群运行过程中,windows集群服务定 ...

  2. Keeping Async Methods Alive

    Consider a type that will print out a message when it’s finalized, and that has a Dispose method whi ...

  3. 转载:有关SQL server connection Keep Alive 的FAQ(3)

    转载:http://blogs.msdn.com/b/apgcdsd/archive/2012/06/07/sql-server-connection-keep-alive-faq-3.aspx 这个 ...

  4. 转载:有关SQL server connection Keep Alive 的FAQ(2)

    转: http://blogs.msdn.com/b/apgcdsd/archive/2012/05/18/sql-server-connection-keep-alive-faq-2.aspx 在下 ...

  5. Keep Alive

    跳板机时经常出现连接被断开的情况.如果发生这种情况,请在客户端配置Keep Alive设置,具体方法参考如下: Windows: secureCRT:Properties -> Terminal ...

  6. How to Keep Alive SSH Sessions

    How to Keep Alive SSH Sessions Many NAT firewalls time out idle sessions after a certain period of t ...

  7. keep alive的相关介绍

        无论Windows还是linux,Keepalive就三个配置参数.下文以linux环境为介绍. Technorati 标签: keepalive     tcp_sock结构体中有三个有关的 ...

  8. linux下socket keep alive讲解

    [需求] 不影响服务器处理的前提下,检测客户端程序是否被强制终了.[现状]服务器端和客户端的Socket都设定了keepalive属性.服务器端设定了探测次数等参数,客户端.服务器只是打开了keepa ...

  9. [Server Running] [Node.js, PM2] Using PM2 To Keep Your Node Apps Alive

    PM2 is a production process manager for Node.js applications with a built-in load balancer. It allow ...

  10. 【转】Linux下socket keep alive讲解

    [需求]不影响服务器处理的前提下,检测客户端程序是否被强制终了.[现状]服务器端和客户端的Socket都设定了keepalive属性.服务器端设定了探测次数等参数,客户端.服务器只是打开了keepal ...

随机推荐

  1. 洛谷P1066 2^k进制数(题解)(递推版)

    https://www.luogu.org/problemnew/show/P1066(题目传送) (题解)https://www.luogu.org/problemnew/solution/P106 ...

  2. 安卓上用Termux终端模拟器安装MC Forge 1.12.2服务器!

    本教程重度新手向,大神勿喷(因为楼主本人就是Linux小白)! 为了让教程合乎简约至上的原则,将不在基本操作上赘述 测试环境:酷派大神Note3 Android5.0 2GBRAM 未root 截图是 ...

  3. App测试全(转自鲁德)

    1.App测试流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间. 1.3测试资源 ...

  4. Linux 三剑客(Awk、Sed、Grep)

    grep/egrep 主要作用:给搜索过滤出来的内容加上颜色和排除功能 常用参数 -V 打印grep的版本号 -E 解释PATTERN作为扩展正则表达式,也就相当于使用egrep. 或操作 -F 解释 ...

  5. 为vue添加公用方法,vue添加通用方法

    common.js var common =function() { return{ f1:function(){ console.log("this is common f1().&quo ...

  6. expdp/impdp使用

    Oracle11G数据泵expdp/impdp使用并行与压缩技术备份与恢复 环境准备创建directory对象create or replace directory expdp_dir as '/ex ...

  7. 使用Docker安装SonarQube

    需先安装docker和docker-compose.见:https://www.cnblogs.com/hackyo/p/9280042.html 在任意目录下新建文件docker-compose.y ...

  8. [Deep Learning] 正则化

    在总结正则化(Regularization)之前,我们先谈一谈正则化是什么,为什么要正则化. 个人认为正则化这个字眼有点太过抽象和宽泛,其实正则化的本质很简单,就是对某一问题加以先验的限制或约束以达到 ...

  9. [译]Ocelot - Rate Limiting

    原文 Ocelot支持对上游做访问限流,这样就可以保证下游不要负载太大了. 如果要启用访问限流,需要做如下配置: "RateLimitOptions": { "Clien ...

  10. springboot springmvc拦截器 拦截POST、PUT、DELETE请求参数和响应数据,并记录操作日志

    1.操作日志实体类 @Document(collection = "operation_log") @Getter @Setter @ToString public class O ...