Keep-Alive模式:
我们知道Http协议采用“请求-应答”模式,当使用普通模式,即非Keep-Alive模式时,每个请求/应答,客户端和服务器都要新建一个连接,完成之后立即断开连接;当使用Keep-Alive模式时,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
http1.0中默认是关闭的,需要在http头加入”Connection: Keep-Alive”,才能启用Keep-Alive;
http 1.1中默认启用Keep-Alive,如果加入”Connection: close “才关闭。目前大部分浏览器都是用http1.1协议,也就是说默认都会发起Keep-Alive的连接请求了,所以是否能完成一个完整的Keep- Alive连接就看服务器设置情况。下图是普通模式和长连接模式的请求对比:

开启Keep-Alive的优缺点:
优点:Keep-Alive模式更加高效,因为避免了连接建立和释放的开销。
缺点:长时间的Tcp连接容易导致系统资源无效占用,浪费系统资源。

当保持长连接时,如何判断一次请求已经完成?
Content-Length
Content-Length表示实体内容的长度。浏览器通过这个字段来判断当前请求的数据是否已经全部接收。
所以,当浏览器请求的是一个静态资源时,即服务器能明确知道返回内容的长度时,可以设置Content-Length来控制请求的结束。但当服务器并不知道请求结果的长度时,如一个动态的页面或者数据,Content-Length就无法解决上面的问题,这个时候就需要用到Transfer-Encoding字段。

Transfer-Encoding
Transfer-Encoding是指传输编码,在上面的问题中,当服务端无法知道实体内容的长度时,就可以通过指定Transfer-Encoding: chunked来告知浏览器当前的编码是将数据分成一块一块传递的。当然, 还可以指定Transfer-Encoding: gzip, chunked表明实体内容不仅是gzip压缩的,还是分块传递的。最后,当浏览器接收到一个长度为0的chunked时, 知道当前请求内容已全部接收。

Keep-Alive timeout:
Httpd守护进程,一般都提供了keep-alive timeout时间设置参数。比如nginx的keepalive_timeout,和Apache的KeepAliveTimeout。这个keepalive_timout时间值意味着:一个http产生的tcp连接在传送完最后一个响应后,还需要hold住keepalive_timeout秒后,才开始关闭这个连接。
当httpd守护进程发送完一个响应后,理应马上主动关闭相应的tcp连接,设置 keepalive_timeout后,httpd守护进程会想说:”再等等吧,看看浏览器还有没有请求过来”,这一等,便是keepalive_timeout时间。如果守护进程在这个等待的时间里,一直没有收到浏览器发过来http请求,则关闭这个http连接。

Tcp的Keepalive:
连接建立之后,如果客户端一直不发送数据,或者隔很长时间才发送一次数据,当连接很久没有数据报文传输时如何去确定对方还在线,到底是掉线了还是确实没有数据传输,连接还需不需要保持,这种情况在TCP协议设计中是需要考虑到的。
TCP协议通过一种巧妙的方式去解决这个问题,当超过一段时间之后,TCP自动发送一个数据为空的报文(侦测包)给对方,如果对方回应了这个报文,说明对方还在线,连接可以继续保持,如果对方没有报文返回,并且重试了多次之后则认为链接丢失,没有必要保持连接。

tcp keep-alive是TCP的一种检测TCP连接状况的保鲜机制。tcp keep-alive保鲜定时器,支持三个系统内核配置参数:
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_time = 1800
keepalive是TCP保鲜定时器,当网络两端建立了TCP连接之后,闲置(双方没有任何数据流发送往来)了tcp_keepalive_time后,服务器就会尝试向客户端发送侦测包,来判断TCP连接状况(有可能客户端崩溃、强制关闭了应用、主机不可达等等)。如果没有收到对方的回答(ack包),则会在 tcp_keepalive_intvl后再次尝试发送侦测包,直到收到对方的ack,如果一直没有收到对方的ack,一共会尝试 tcp_keepalive_probes次,每次的间隔时间在这里分别是15s, 30s, 45s, 60s, 75s。如果尝试tcp_keepalive_probes,依然没有收到对方的ack包,则会丢弃该TCP连接。TCP连接默认闲置时间是2小时,一般设置为30分钟足够了。

浅谈Http长连接和Keep-Alive以及Tcp的Keepalive相关推荐

  1. 浅谈防火墙长连接与短连接

    浅谈防火墙长连接与短连接 引言:在银行项目日常投产中,开发人员会发现系统上线后应用访问数据库连接中断的问题,这很有可能是因为应用程序与数据库之间的连接使用了长连接.当应用程序与数据库建立的同一个TCP ...

  2. 应用服务器与数据库之间是长连接,要接收多个 tcp 长连接不断发送的数据并存储,哪些数据库或数据存储方案比较合适?...

    在服务器建立服务端,与多个 tcp 连接保持长连接,服务端会根据客户端发送的 token 验证确定是否保持长连接建立"session"缓存, 在某个状态开启时(我称为存储状态),要 ...

  3. 最长不下降子序列java代码_浅谈最长不下降子序列与最长上升子序列

    唔,最长不下降子序列与最长上升子序列曾是困扰蒟蒻多时的一个问题,应该也有一些人分不清这2个的求法吧. 首先n^2算法肯定是都能分清的,因为不下降和上升的区别是连续的2个能不能相等,只需要在判断的时候判 ...

  4. 把C#.NET程序移植到DB2上的经验浅谈(C#连接DB2可以用IBM.Data.DB2.dll)

    感谢博客园不再封杀,差点儿搬家的念头都产生了,博客园还是有大胸怀,继续留在博客园写口水文应该没错,娱乐自己.娱乐大家,给枯燥的编程生活增加一点儿笑料,也给大家充当个开心果,让大家高兴一下下.轻松一下下 ...

  5. 浅谈sql之连接查询

    SQL之连接查询 一.连接查询的分类 sql中将连接查询分成四类: 内链接 外连接 左外连接 右外连接 自然连接 交叉连接 二.连接查询的分类 数据库表如下: 1.学生表 2.老师表 3.班级表 表用 ...

  6. 浅谈用python连接 功率分析仪(Power Analyzer) 和 数位万用表(Digital Multimeter)

    Python是一种功能十分强大的语言,不论是做软件还是硬件,python都能占据一席之地.在这里我们会涉及到一些电子工程(electrical engineering)方面的知识.在很多芯片设计开发公 ...

  7. 浅谈AS2 传输/连接

    近期有很多公司被要求与国外客户建立AS2连接,之前只知道类似于FTP或者SFTP连接协议,从未听说过这个协议呀,可以具体讲讲吗? AS2传输定义? AS2,是Applicability Stateme ...

  8. 浅谈对全连接层的理解

    先上百度百科: 全连接层的每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来.由于其全相连的特性,一般全连接层的参数也是最多的.例如在VGG16中,第一个全连接层FC1有4096个节点 ...

  9. 浅谈对全连接层的理解2

    全连接就是一种无损的卷积的过程,会大大占用计算机的计算力,用于提取图片中或数据中的特征值.为了提高提取成功的准确率降低误差,全连接层的数量一般多,比如3*3*5的经过处理的数据层,我们要提取其中的特征 ...

  10. 浅谈TCP协议与DDOS

    本节内容 1.TCP协议浅谈 1.HTTP连接 2.SOCKET原理 3.TCP介绍 4.TCP连接的三次握手与四次挥手 2.DDOS 1.什么是DDOS 2.攻击原理 3.防护方法 4.其他攻击方式 ...

最新文章

  1. 关于GC.Collect在不同机器上表现不一致问题
  2. SMACH专题(一)----安装与初探
  3. 【深度学习】用于小目标检测的一个简单高效的网络
  4. 一个类型初始值设定项引发异常
  5. 为什么工厂招人越来越不容易?是招工难还是待遇低?
  6. VS2013 安装配置 C++ boost 库
  7. android逐行写入读取_Android外部存储-读取,写入,保存文件
  8. Google 最高级别工程师的教育梦
  9. 普元工作流EOS Workflow 学习笔记
  10. 【C++课程设计】基于单向链表的通讯录管理程序
  11. Envi辐射定标及大气校正
  12. SSIS script task发邮件
  13. python 神奇时钟项目_第一个python小程序——即时动态时钟(代码解读)
  14. 哪里有免费的ASP空间?
  15. 【计算机组成原理】学习笔记----第一章 计算机系统概述
  16. 小议车辆环境视觉基础前视感知
  17. python白森_江白森002.
  18. 熊猫浏览器panda发布了!Enjoy it ! download! http://redpandas.cn or http://redpanda.sourceforge.net
  19. vep加密视频破解转换翻录为mp4教程
  20. Rolan 1.3.8 屏蔽强制更新

热门文章

  1. C++ Primer 5th - 1.1 编写一个简单的C++程序
  2. 单片机节日彩灯c语言,单片机节日彩灯控制器的设计Proteus仿真
  3. matlab神经网络工具箱简介
  4. Android蓝牙音量调节,安卓 蓝牙音量控制 Bluetooth Volume Control v2.40 付费高级特别版...
  5. vs mysql 开发erp_ERP vs MRP的区别
  6. Ubuntu 16.04 安装 搜狗输入法
  7. k均值聚类算法原理和TensorFlow实现
  8. AutoCAD2000~2010完整版下载地址
  9. 用netbean搭建第一个struts的web项目
  10. psp android 模拟器,安卓psp模拟器