背景
我负责的鹰眼监控服务上线,部署完成,页面不能打开,通过接口观察发现,sse的连接不能拿到持续的推送响应数据,偶发能拿到部分数据
分析
1.能够正常请求,拿到http的响应数据(部分/不全),证明dns解析及nginx转发正常
2.手动调用服务服务(线上)接口,正常推送响应数据,证明服务本身没问题
3.测试及开发环境调用接口,正常推送响应数据,证明nginx的配置没问题(使用完全相同的配置)
4.查看服务器日志,全部是[Caused by: java.io.IOException: Connection reset by peer]错误,说明是远端关闭了连接
5.综合以上考虑,还是nginx转发或者前端的ha主动断掉了连接,但与运维确认后发现,测试环境ha和nginx配置也一模一样
陷入僵局,接下来,如何分析呢。死马当活马医,手动curl一下,分析请求,拿到如下一些数据
在对比一下测试环境和开发环境,好像没有HTTP2(h2),与运维确认,测试环境没有配置h2的插件,线上配置过。再多个可用和不可用的人员同时请求几个服务发现,确实请求的是h2的均不能使用,能够使用的均走的是HTTP/1.1 协议
跟踪
网上查询相关资料,完全没有任何可用信息,大多数只提到h2使用多路复用协议,可以使用Web-push功能,但如何在h2协议中配置sse,均没有找到资料。
疑问
1.为何部分人员请求相同地址拿到是不同的协议(均使用默认curl或者浏览器直接打开)
2.同时支持h2和http/1.1协议时,如何兼容配置