一次http请求,谁会先断开TCP连接?什么情况下客户端先断,什么情况下服务端先断?

nginx:Nginx深度调优实战 Nginx性能调优是一门平衡艺术,需要结合业务特点、硬件资源和流量模式进行针对性优化。本文介绍的方案已在阿里双11(峰值QPS 1.4亿)和字节跳动春晚红包(百万级长连接)等场景得到验证。真正的优化高手不仅掌握这些配置技巧,更能理解背后的计算机原理,做到知其然更知其所以然。建议读者在实际应用中持续监控、迭代优化,才能打造出真正高性能的Nginx服务。 阅读详情

内容转载自https://blog.youkuaiyun.com/wangpengqi/article/details/17245349

当然,在nginx中,对于http1.0与http1.1也是支持长连接的。什么是长连接呢?我们知道,http请求是基于TCP协议之上的,那么,当客户端在发起请求前,需要先与服务端建立TCP连接,而每一次的TCP连接是需要三次握手来确定的,如果客户端与服务端之间网络差一点,这三次交互消费的时间会比较多,而且三次交互也会带来网络流量。当然,当连接断开后,也会有四次的交互,当然对用户体验来说就不重要了。而http请求是请求应答式的,如果我们能知道每个请求头与响应体的长度,那么我们是可以在一个连接上面执行多个请求的,这就是所谓的长连接,但前提条件是我们先得确定请求头与响应体的长度。对于请求来说,如果当前请求需要有body,如POST请求,那么nginx就需要客户端在请求头中指定content-length来表明body的大小,否则返回400错误。也就是说,请求体的长度是确定的,那么响应体的长度呢?先来看看http协议中关于响应body长度的确定:

  1. 对于http1.0协议来说,如果响应头中有content-length头,则以content-length的长度就可以知道body的长度了,客户端在接收body时,就可以依照这个长度来接收数据,接收完后,就表示这个请求完成了。而如果没有content-length头,则客户端会一直接收数据,直到服务端主动断开连接,才表示body接收完了。
  2. 而对于http1.1协议来说,如果响应头中的Transfer-encoding为chunked传输,则表示body是流式输出,body会被分成多个块,每块的开始会标识出当前块的长度,此时,body不需要通过长度来指定。如果是非chunked传输,而且有content-length,则按照content-length来接收数据。否则,如果是非chunked,并且没有content-length,则客户端接收数据,直到服务端主动断开连接。

从上面,我们可以看到,除了http1.0不带content-length以及http1.1非chunked不带content-length外,body的长度是可知的。此时,当服务端在输出完body之后,会可以考虑使用长连接。能否使用长连接,也是有条件限制的。如果客户端的请求头中的connection为close,则表示客户端需要关掉长连接,如果为keep-alive,则客户端需要打开长连接,如果客户端的请求中没有connection这个头,那么根据协议,如果是http1.0,则默认为close,如果是http1.1,则默认为keep-alive。如果结果为keepalive,那么,nginx在输出完响应体后,会设置当前连接的keepalive属性,然后等待客户端下一次请求。当然,nginx不可能一直等待下去,如果客户端一直不发数据过来,岂不是一直占用这个连接?所以当nginx设置了keepalive等待下一次的请求时,同时也会设置一个最大等待时间,这个时间是通过选项keepalive_timeout来配置的,如果配置为0,则表示关掉keepalive,此时,http版本无论是1.1还是1.0,客户端的connection不管是close还是keepalive,都会强制为close。

如果服务端最后的决定是keepalive打开,那么在响应的http头里面,也会包含有connection头域,其值是”Keep-Alive”,否则就是”Close”。如果connection值为close,那么在nginx响应完数据后,会主动关掉连接。所以,对于请求量比较大的nginx来说,关掉keepalive最后会产生比较多的time-wait状态的socket。一般来说,当客户端的一次访问,需要多次访问同一个server时,打开keepalive的优势非常大,比如图片服务器,通常一个网页会包含很多个图片。打开keepalive也会大量减少time-wait的数量。

XILNIXSDK2018为FreeRTOS增加配置项的方法 在安装目录下找到目录:SDK\2018.1\data\embeddedsw\ThirdParty\bsp\freertos10_xilinx_v1_0\data 然后通过两个步骤来完成配置项的增加。 (1) 编辑文件freertos10_xilinx.mld,为配置界面增加项目用文本编辑器打开freertos10_xilinx.mld文件,通过手动编辑文件添加配置项如想添加FreeRTOS的con... 阅读详情

相关推荐

Windos安装Nginx

1、下载 链接:https://pan.baidu.com/s/13diesF95Wj9UK-JKRhsDWw 提取码:92x7 或者打开nginx的官网:http://nginx.org/ ,下载最新的稳定版本。 2、安装 下载完成后,解压到你想要解压的文件路径中,我解压到了D盘中,并把文件名改为nginx;进入文件内,打开nginx.exe文件,会出现一个一闪而过的页面,然后打开...

小达哥的博客 1万+

nginx服务占用百分之百

一、当nginx达到100%时,也就是服务器负载突然上升。 (1)利用top命令查看cpu使用率较高的php-cgi进程  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 10747 www 18 0 360m 22m 12m R 100.6 0.3 0:02.60 php-cgi 10709 www 16 0 359m 28m

林子懿0509 8万+

物理服务器跨机柜热迁移:零中断双平面实战方案

物理服务器热迁移是指在不中断业务连接、不重置TCP会话、不丢失数据库事务的前提下,将带状态的裸金属服务器从一个机柜平滑迁移到另一个机柜。其核心原理在于规避TCP连接绑定性、交换机MAC老化机制与应用心跳超时等底层协议限制,通过构建网络与供电双平面实现流量软过渡。该技术具备强确定性、低合规风险与高SLA保障能力,广泛应用于金融核心系统、证券行情平台及电商订单中心等对RTO要求严苛的生产环境。本文聚焦真实落地的双平面架构设计、ALB网卡绑定、PDU相位匹配与优雅退出机制。

weixin_30457465的博客 479

Nginx 详解

✅ Nginx(engine x)是一个高性能、高并发、轻量级的Web 服务器和反向代理服务器✅ 同时支持:HTTP 服务器、反向代理、负载均衡、缓存、动静分离等功能网站服务器(如静态页面、图片、视频服务)反向代理(隐藏真实服务器)负载均衡(分发请求)接口限流、黑白名单HTTPS 终端、SSL卸载知识点快速回答Nginx 为什么高性能?IO 多路复用(epoll),异步非阻塞,单线程高并发负载均衡策略有哪些?轮询、权重、ip_hash、least_conn动静分离怎么做?

m0_69529796的博客 5万+

FA 新增资产API Demo

DECLARE l_trans_rec fa_api_types.trans_rec_type; l_dist_trans_rec fa_api_types.trans_rec_type; l_asset_hdr_rec fa_api_types.asset_hdr_rec_type; l_asset_desc_rec fa_a

chosen1brain的专栏 2142

从零开始之stm32之CAN通信

CAN通信极简教程(小白友好版),从小白的视角了解并实现简单的STM32F103的CAN通信,直接上手。

qq_30993593的博客 1306

一次http请求,谁会先断开TCP连接?什么情况下客户端先断,什么情况下服务端先断?【转】

(转自:https://m635674608.iteye.com/blog/2388243) 我们有2台内部http服务(nginx): 201:这台服务器部署的服务是account.api.91160.com,这个服务是供前端页面调用; 202:这台服务器部署的服务是hdbs.api.91160.com, 这个服务是供前端页面调用; 近期发现,这2台服务器的网络连接中,TIM...

Uaena的博客 1153

平衡小车动力学建模

两轮自平衡小车由车体和双轮两部分组成,可以看成一个移动的倒立摆,分别对车轮和车体进行力学分析,建立动力学模型,最后,通过对两者的分析给出系统的状态空间表达式。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjiPEUVJ-1679470559950)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230322110521545.png)]

qq_23096319的博客 9056

一次http请求,谁会先断开TCP连接?什么情况下客户端先断,什么情况下服务端先断?...

我们有2台内部http服务(nginx): 201:这台服务器部署的服务是account.api.91160.com,这个服务是供前端页面调用; 202:这台服务器部署的服务是hdbs.api.91160.com,    这个服务是供前端页面调用;   近期发现,这2台服务器的网络连接中,TIME_WAIT 数量差别很大,201的TIME_WAIT大概20000+,202的TIME...

xiaomin1991222的专栏 732

1.2 Spring AI V1.1.2版本 架构全景:模块拆解与设计哲学

Override// 检查请求的 Token 数量throw new TokenLimitExceededException("请求超出 Token 限制");@Override// 记录实际消耗的 Token@Override// 最先执行// 接口// 不同实现// 使用方无需改变定义抽象,保证可移植性提供 Fluent API,提升开发体验Advisor 机制提供扩展点,支持灵活定制模块化设计让你只引入需要的依赖自动配置。

小林夕程的博客 220

手把手教你学Simulink——基于Simulink的多轮PMSM同步驱动交叉耦合控制

摘要:本文针对多轮PMSM同步驱动系统的负载不均、参数差异等问题,提出基于Simulink的交叉耦合控制解决方案。通过实时补偿轮间同步误差,实现同步误差<1%、转矩脉动<5%的性能提升。文章详细介绍了系统架构、核心算法(包括PMSM数学模型和偏差耦合控制算法)、Simulink建模步骤及参数设置,并通过仿真验证了稳态和动态性能。同时提供了工程调试建议和完整代码实现,为多轮驱动系统开发提供实用参考。该方案计算量小,可移植性强,适用于电动汽车、AGV等应用场景。

MHD0815的博客 140

http连接,谁会先断开TCP连接?什么情况下客户端先断,什么情况下服务端先断?

对于http1.0协议来说,如果响应头中有content-length头,则以content-length的长度就可以知道body的长度了,客户端在接收body时,就可以依照这个长度来接收数据,接收完后,就表示这个请求完成了。而如果没有content-length头,则客户端会一直接收数据,直到服务端主动断开连接,才表示body接收完了。 而对于http1.1协议来说,如果响应头中的Transfe...

weixin_39366864的博客 3225

手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战

摘要: 本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理,通过滑模观测器估算反电动势,结合PLL抑制抖振;2)系统架构,替代编码器信号;3)Simulink建模流程,涵盖Clarke变换、SMO离散化实现、PLL设计等关键步骤;4)参数整定指南和工程实践要点,如启动策略和故障处理。该方法具有成本低、可靠性高的优势,适用于家电、电动车等场景,仿真结果显示角度误差±5°,速度动态跟随良好。文章还提供了调试建议和常见问题解决方案。

MHD0815的博客 136

一次http请求,谁会先断开TCP连接?

我们有2台内部http服务(nginx):201:这台服务器部署的服务是account.api.91160.com,这个服务是供前端页面调用;202:这台服务器部署的服务是hdbs.api.91160.com, 这个服务是供前端页面调用;近期发现,这2台服务器的网络连接中,TIME_WAIT 数量差别很大,201的TIME_WAIT大概20000+,202的TIME_W...

weixin_34059951的博客 877

(ICLR 2025)【源码讲解+复现】TIMER-XL: Long-Context Transformers for Unified Time Series Forecasting

本文提出了一种统一的多变量时序预测模型Timer-XL,其核心创新包括:1)采用自回归解码器架构,将多变量时序预测统一为next-token预测问题;2)设计TimeAttention机制,通过相对位置编码和因果掩码捕获时序位置和变量间交互;3)支持长上下文预训练以提升零样本迁移能力。模型架构包含嵌入层、时间感知注意力块和预测头,采用MSE损失进行端到端训练。实验表明该方法在多种时序任务上表现优异,特别是在长跨度预测和少样本场景下。代码实现提供了完整的模型定义、数据加载和训练流程,支持自定义配置参数。

1146

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Wireshark 抓包,TCP 的连接与断开

Wireshark是一个网络封包分析软件。帮你撷取网络封包,并尽可能显示出最为详细的网络封包资料。 Wireshark 可以获取HTTP,也能获取HTTPS,但是不能解密HTTPS,只能帮你捕获包,没有密钥是看不懂HTTPS 的,HTTPS 可以使用Charles 。Https 抓包。 直接网上下载安装Wireshark ,打开界面如下, 双击后开始抓包 你会发现Wireshar...

huidev的博客 3292

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

TCP 连接中的TIME_WAIT

原文:http://blog.youkuaiyun.com/wangpengqi/article/details/17245349 这就有个细节,一次http请求,谁会先断开TCP连接?什么情况下客户端先断,什么情况下服务端先断? 百度后,找到原因,主要有http1.0和http1.1之间保持连接的差异以及http头中connection、content-length、Transfer-encoding等...

weixin_30794499的博客 76

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

socket closed是什么意思_【网络通信】大量TIME_WAIT状态的连接会造成什么影响,如何优化?...

上一篇文章中,我们聊到了有个朋友面头条被问及到大量网络通信的基础知识,其中聊到了TIME_WAIT状态相关的问题,TIME_WAIT相关知识点涉及到了TCP的四次握手。为什么这块的内容经常被面试官问及到呢,因为这块体现的不仅仅是基础扎不扎实的问题,还涉及到了你未来在实战当中解决棘手问题的潜力有多少。TCP的四次握手在我们开发中经常被使用到,例如HTTP通信、数据库连接等等各种通信连接。有...

weixin_39946300的博客 1576

Android 进程通信之 Socket (顺便回顾 TCP UDP)

OSI 七层网络模型 TCP/IP 四层模型 可以看到,TCP/IP 模型 的网络接口层对应 OSI 模型的物理层、数据链路层,应用层对应会话层、表示层和应用层每一层的功能如下: 应用层:应用程序为了访问网络所使用的一层 数据以应用内部使用的格式进行传送,然后被编码成标准协议的格式 比如万维网使用的 HTTP 协议,传输文件的 FTP 协议等等 传输层:响应...

android开发笔记 285

从美团运维笔试真题看运维工程师必备技能与面试准备

运维工程师面试中,网络基础、Linux命令、Shell脚本与负载均衡始终是核心考点。从TCP三次握手的状态转换到HTTP状态码的实战含义,再到DNS解析链路对故障排查的影响,每一个基础知识点都直接映射着线上业务的稳定运行。掌握CPU飙高、磁盘空间满等典型问题的定位方法,理解Nginx负载均衡算法与健康检查的配置逻辑,能让你在面对笔试和真实故障时更具条理。Shell脚本背后的自动化思维,以及故障排查中‘先宏观后微观’的分层思路,更是拉开候选人差距的关键。以美团2017年运维笔试真题为参照,梳理这些高频考点背后

weixin_34080951的博客 270
上一篇: InstallAppProgress: Installation error code: -7 Android打包安装出错
下一篇: 工作中遇到的两个jsp致命的错误
JianfeiMa
博客等级 码龄10年 61粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值