奇怪的http接口,客户端请求一次成功,下一次就挂起

本文揭示了服务端使用Lua的Skynet框架与浏览器ajax请求间的HTTP连接问题。通过添加`Connection: close`头,解决了客户端后续请求挂起的问题,分析了长连接与短连接的区别,以及Node.js管理后台的误导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有个http的服务端接口,用网页上ajax的方式请求此接口时,总是第一次正常返回200,第二次再请求时就pending。服务端是用lua开发的skynet框架运行的服务,服务类本身没什么特别,跟语言和框架没什么关系。无论客户端怎么写请求代码,都是一次好一次挂起的间隔出现。用专门的接口测试工具apifox测试,也是相同的一次好一次挂起。但是用项目自带的一个管理系统请求相同接口就次次正常,此管理系统是用nodejs写的,代码里是调用一个三方的request库来请求http接口。

问题解决:在服务端代码里添加response的header :['connection'] = 'close' ,之后,客户端就一切正常了,怎么请求都是200的。

分析:一次http会话是长连接还是短连接是由服务端控制的!服务器返回响应里header属性有 Connection:close,客户端收到就关闭此次连接。我遇到这个问题的服务端是短连接的,必须返回此header给前端,否则前端以为是长连接,下次请求复用原来的连接,但是服务端已经断开了,所以下次请求是发不出去的,只能一直挂起。

罪魁祸首:nodejs的管理后台起到了误导作用,它本身就只有短连接,所以不管服务端返回什么header都是一次请求建一个新连接。但是正规的浏览器和api接口工具都是按套路走的,所以造成一次好一次坏的运行结果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值