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”头并不意味着链接会永远持续,链接还是会被关闭的。

http协议Keep-Alive的更多相关文章

  1. MQTT 协议学习:007-Keep Alive 连接保活 与 对应报文(PINGREQ、PINGRESP)

    背景 keep alive 是 CONNECT 报文中可变头的一部分. 我们提到过 Broker 需要知道 Client 是否非正常地断开了和它的连接,以发送遗愿消息.实际上 Client 也需要能够 ...

  2. 简约之美Jodd-http--深入源码理解http协议

    Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...

  3. 理解 OpenStack 高可用(HA)(2):Neutron L3 Agent HA 之 虚拟路由冗余协议(VRRP)

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  4. 浅谈HTTPS和SSL/TLS协议的背景和基础

    相关背景知识要说清楚HTTPS协议的实现原理,至少要需要如下几个背景知识.大致了解几个基础术语(HTTPS.SSL.TLS)的含义大致了解HTTP和TCP的关系(尤其是"短连接"和 ...

  5. http2协议翻译(转)

    超文本传输协议版本 2 IETF HTTP2草案(draft-ietf-httpbis-http2-13) 摘要 本规范描述了一种优化的超文本传输协议(HTTP).HTTP/2通过引进报头字段压缩以及 ...

  6. Linux内核--网络栈实现分析(四)--网络层之IP协议(上)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7514017 更多请看专栏,地址 ...

  7. MQTT协议(一)

    MQTT(Message Queue Telemetry Transport),遥测传输协议,提供订阅/发布模式,更为简约.轻量,易于使用,针对受限环境(带宽低.网络延迟高.网络通信不稳定),可以简单 ...

  8. HTTP协议的头信息详解

    转载地址:http://blog.csdn.net/guoguo1980/article/details/2649658 HTTP(HyperTextTransferProtocol)是超文本传输协议 ...

  9. TCP/IP协议基础(转)

    转自 http://www.chinaunix.net 作者:Bernardus160  发表于:2003-12-03 17:33:15 TCP/IP协议基础 -------------------- ...

  10. HTTP协议学习

    面试过程中又一个常见的问题,http协议,因为做服务器开发如果用http协议的话,现在各种开源软件都封装好了,python中只需要简单的继承定义好的类,重写get或者post等方法,几行代码就可以搭建 ...

随机推荐

  1. Linux:配置Linux网络和克隆虚拟机并更改配置

    Linux学习笔记1:配置Linux网络和克隆虚拟机并更改配置   一.配置Linux网络 在安装Linux的时候,一定要保证你的物理网络的IP是手动设置的,要不然会在Linux设置IP连通网络的时候 ...

  2. day5-shutil模块

    一.概述 我们通过python操作文件时,除正常读写操作外,有时还需要进行拷贝.删除.打包等操作,虽然os模块提供了部分功能,但还是不够完善,这里要讲讲专业的高级的文件,文件夹,压缩包处理模块shut ...

  3. 【sparkStreaming】将DStream保存在MySQL

    package SparkDemo import java.sql.{Connection, DriverManager, PreparedStatement} import org.apache.s ...

  4. flash代码

    Flash常用的动作命令一.Flash中的常用命令:1.在当前帧停止播放 on(release){ stop();} 2.从当前帧开始播放 on(release){ play();} 3.跳到第 10 ...

  5. [置顶] Android RadioButton与TextView浪漫约会?

    情景一 今天主要实现一个国家与地区切换,就是当我们选中RadioButton时然后将值设置到TextView中,听着这需求应该不难对吧?那么我们就开始约会吧? 看下原型图 准备条件: 首先需要一个ra ...

  6. 可视化CNN神经网路第一层参数

    在上Andrew Ng的课的时候搜集到了课程里面自带的显示NN参数的代码,但是只能显示灰度图,而且NN里的参数没有通道的概念.所以想要获得可视化CNN的参数,并且达到彩色的效果就不行了. 所以就自己写 ...

  7. markdown 语法汇总

    Markdown是什么? Markdown是一种轻量级标记语言,它以纯文本形式(_易读.易写.易更改_)编写文档,并最终以HTML格式发布. Markdown也可以理解为将以MARKDOWN语言编写的 ...

  8. [QT][SQLITE][QTDEMO]qt5.8_sqlite数据库_demo

    qt环境:5.8 数据库:sqlite //-------------------------------------- sqlite 日期 搜索 -------------------------- ...

  9. session不一定非得要cookie开启才能使用。也可以使用get传递参数

    session不一定非得要cookie开启才能使用.也可以使用get传递参数 可以将session_id();设置为一个常量. define(’s_id‘ ,$_COOKIE['session_nam ...

  10. N位N进制里有多少个N

    32位二进制里有多少个1 https://blog.csdn.net/zhangsj1007/article/details/81411063 有这样一道计算机问题"32位二进制里面有多少个 ...