有个http的服务端接口,用网页上ajax的方式请求此接口时,总是第一次正常返回200,第二次再请求时就pending。服务端是用lua开发的skynet框架运行的服务,服务类本身没什么特别,跟语言和框架没什么关系。无论客户端怎么写请求代码,都是一次好一次挂起的间隔出现。用专门的接口测试工具apifox测试,也是相同的一次好一次挂起。但是用项目自带的一个管理系统请求相同接口就次次正常,此管理系统是用nodejs写的,代码里是调用一个三方的request库来请求http接口。
问题解决:在服务端代码里添加response的header :[‘connection’] = ‘close’ ,之后,客户端就一切正常了,怎么请求都是200的。
分析:一次http会话是长连接还是短连接是由服务端控制的!服务器返回响应里header属性有 Connection:close,客户端收到就关闭此次连接。我遇到这个问题的服务端是短连接的,必须返回此header给前端,否则前端以为是长连接,下次请求复用原来的连接,但是服务端已经断开了,所以下次请求是发不出去的,只能一直挂起。
罪魁祸首:nodejs的管理后台起到了误导作用,它本身就只有短连接,所以不管服务端返回什么header都是一次请求建一个新连接。但是正规的浏览器和api接口工具都是按套路走的,所以造成一次好一次坏的运行结果。
版权声明:本文为maximiliansheng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。