- http短连接,一般是服务器端主动关闭连接(历史原因 https://www.zhihu.com/question/24338653)
-
http 请求header头中通过Connection: 头字段来指定是否需要keep-alive。 其中http1.0和http1.1关于Connection头又有不同点
- http1.0不支持keepalive,所以发送头为Connection默认为closed(Connection: close)。 即告诉服务器发送完请求后服务器就主动断开连接(所以服务器会出现timewait)。 需要在http头加入"Connection: Keep-Alive",才能启用Keep-Alive
- http1.1 默认的Connection头就是keep-alive(即Connection: keep-alive),除非显式指定Connection: close。但具体是否建立长连接还要看服务器那边是否支持keep-alive,如果nginx(或apache)将keepalive关闭,则建立的还是短连接,服务器发送完请求后就关闭连接了。如果建立了长连接了,则具体应该有哪方主动关闭连接需要看情况(见4)
-
Connection头具体值
- 请求:
- close(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了)。
- keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求)。
- 响应:
- close(连接已经关闭)。
- keep-alive(连接保持着,在等待本次连接的后续请求)。
- Keep-Alive: timeout。这个值能够让一些浏览器主动关闭连接,这样服务器就不必要去关闭连接了。(见4)
- 请求:
-
http 响应response头中的Connection字段的keepalive属性
响应头Keep-Alive: timeout。这个值能够让一些浏览器主动关闭连接,这样服务器就不必要去关闭连接了。 -
注意不同浏览器怎么处理“keep-alive”头
- MSIE和Opera忽略掉"Keep-Alive: timeout=<N>" header.
- MSIE保持连接大约60-65秒,然后发送TCP RST
- Opera永久保持长连接
- Mozilla keeps the connection alive for N plus about 1-10 seconds.
- Konqueror保持长连接N秒
-
Http keepalive 和tcp keepalive的区别
http keep-alive与tcp keep-alive,不是同一回事,意图不一样。http keep-alive是为了让tcp活得更久一点,以便在同一个连接上传送多个http,提高socket的效率。而tcp keep-alive是TCP的一种检测TCP连接状况的保鲜机制。tcp keep-alive保鲜定时器,支持三个系统内核配置参数:/proc/sys/net/ipv4/tcp_keepalive_time/proc/sys/net/ipv4/tcp_keepalive_intvl/proc/sys/net/ipv4/tcp_keepalive_probes
keepalive是TCP保鲜定时器,当网络两端建立了TCP连接之后,闲置idle(双方没有任何数据流发送往来)了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分钟足够了。
也就是说,仅当nginx的keepalive_timeout值设置高于tcp_keepalive_time,并且距此tcp连接传输的最后一个http响应,经过了tcp_keepalive_time时间之后,操作系统才会发送侦测包来决定是否要丢弃这个TCP连接。一般不会出现这种情况,除非你需要这样做。
- 浏览: 136827 次
- 性别:
- 来自: 北京
相关推荐
从提供的文件信息中,我们可以提取出有关于Nginx与Tomcat以及客户端之间请求的长连接配置不一致问题的分析解决知识点。同时,文件中提到了Linux系统中netstat命令的用法,我们可以从这部分内容中提取出与网络连接...
"Socket长连接demo"是一个实际工作场景中常见的需求,尤其是在需要持续数据交互的应用中,如实时监控、在线游戏或者服务器与客户端之间的即时消息传递。本示例主要探讨如何在Java中建立并维护一个长连接。 首先,...
【标题】:“打造上千万长连接及Oracle调优”涵盖了两个主要的知识领域,一是网络连接管理,特别是HTTP长连接的实现与优化,二是数据库性能优化,尤其是针对Oracle数据库的调优技术。 【描述】虽然没有提供具体的...
【Comet技术详解:HTTP长连接的服务器推送】 在软件开发领域,尤其是在Web应用程序的设计中,"服务器推"技术已经成为解决实时数据传输需求的关键。传统的Web系统采用客户端发起请求、服务器响应的方式工作,但这并...
在Android开发中,TCP长连接是一种常见的网络通信方式,它用于维持客户端与服务器之间的持久连接,以便于数据的高效传输。TCP(Transmission Control Protocol)是一种面向连接、可靠的传输协议,适用于需要频繁交互...
Comet是一种基于HTTP长连接的“服务器推”技术,它被设计用来解决Web应用程序中实时数据传输的问题。传统的HTTP协议采用请求-响应模型,客户端发起请求,服务器返回响应,这在许多实时性要求高的场景下(如监控系统...
- **长连接**:在HTTP/1.x中,每次请求和响应都需要建立和关闭连接,效率较低。而在HTTP/2及Go-HiMagpie网关中,通常采用TCP长连接来减少握手和断开连接的开销,提高性能。长连接使得客户端和服务器可以复用一个...
页面间隔半秒钟更新时间***使用Comet开发http长连接示例分享,详细地介绍了如何使用Comet技术在***环境下,通过HTTP长连接实现页面定时更新的功能。 知识点一:Comet技术概述 Comet是一种Web应用模型,允许服务器端...
TCP/IP长连接服务是网络通信中的一个重要概念,它与传统的短连接服务相对。在短连接中,每次数据传输完成后,连接会被关闭,下次传输时需要重新建立连接。而长连接则是在一次连接建立后,保持连接不断开,可以进行多...
这个类可能会扩展`MySqlConnection`,增加一些属性来跟踪连接的状态,例如是否正在使用、创建时间等。 接下来,`TestConnectionPool.cs`文件包含了测试代码,用于验证连接池的正确性和性能。测试代码可能包括以下...
以下是对这个封装的DBCP连接池的一些关键知识点的详细说明: 1. **数据库连接池原理**:数据库连接池的核心思想是在应用程序启动时预创建一组数据库连接,并将它们存储在内存中。当需要执行数据库操作时,程序从池...
以下是一些关键步骤和知识点: 1. **初始化Winsock**: 在开始任何网络操作之前,我们需要调用`WSAStartup`函数来初始化Winsock库。这个函数会加载所需的DLL并设置相应的版本信息。 2. **创建服务器套接字**: ...
5. **性能监控**:为了优化系统性能,连接池通常需要提供一些监控指标,如当前连接数、等待队列长度、连接存活时间等,以便开发者进行调优。 6. **异常处理**:在数据库连接出现异常时,连接池应有相应的处理策略,...
2. 零空闲连接检查:HikariCP采用了一种称为“连接泄漏探测”的机制,可以在连接长时间未使用时自动关闭,避免了空闲连接占用资源。 3. 连接有效性验证:定期检查连接的有效性,确保连接在使用前是可用的。 4. 快速...
大家应该都知道,在Android端实现TCP长连接场景其实不多,我们最熟悉的不过推送和HTTP协议的实现(OkHttp),本文讨论的是在实现推送长连接的情况下怎么来做性能优化,下文只是我的一点拙见,有不妥之处还望指出,...
以下是一些关键点: 1. **性能优秀**:Druid经过优化,具有较高的性能和稳定性,在连接池性能测试中表现出色。 2. **强大的监控能力**:内置WebStatFilter和StatViewServlet,可以实时监控数据库访问性能,提供SQL...
- 对于带有16点DC输入/16点NPN输出的DCPU单元,文档提供了连接信息。 7. 参考信息和附加资源 - 文档中提到了参考信息和附加资源,比如随附的“KeySheet”(密钥表),这些是文档或电缆套件中附带的,用以辅助用户...
C3P0提供了一些额外的功能,如自动检测失效的连接并尝试恢复,以及自动调整连接池大小。在`c3p01`、`c3p02`和`c3p03`文件中,可能分别包含C3P0的不同版本或配置说明。 5. **Tomcat内置的连接池**: Tomcat服务器...