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”头并不意味着链接会永远持续,链接还是会被关闭的。
spring如何启动的?这里结合spring源码描述了启动过程
SpringMVC是怎么工作的,SpringMVC的工作原理
spring 异常处理。结合spring源码分析400异常处理流程及解决方法
Mybatis Mapper接口是如何找到实现类的-源码分析