码迷,mamicode.com
首页 > 移动开发 > 详细

ios http2客户端访问nginx失败bug

时间:2017-09-12 11:10:24      阅读:576      评论:0      收藏:0      [点我收藏+]

标签:png   交流   str   seconds   image   全面   init   原因   时延   

我们将项目迁入腾讯云后,外网访问流量转发如下
外网---》大禹BGP(BGPAntiDDoS)高防----》lbc(LoadBalance cluster)----》lb-----》project

ios开发同事在用ios客户端访问项目发现请求失败,但是偶尔会成功。ios客户端访问默认http2,并且请求接口为post请求.根据如下定位了nginx版本对ios客户端的bug。

原因:(

为了减少网络时延,不少 HTTP/2 客户端会在建立 HTTP/2 连接时同时发送其它帧,包括用来 POST 数据的 DATA 帧。
而 Nginx 在客户端接受到 SETTINGS 帧之前,一直将初始窗口大小(initial window size)设置为 0。
也就是说,客户端收到 SETTINGS 帧之前发送的 DATA 帧,会被 Nginx 以 REFUSED_STREAM 帧拒绝。而部分客户端在收到 REFUSED_STREAM 帧之后,
会提示连接失败,而不是发起重试,这就是产生 Bug 的原因。

https://imququ.com/post/nginx-http2-post-bug.html

https://stackoverflow.com/questions/36907767/nsurlerrordomain-code-1004-for-few-seconds-after-app-start-up

我检查了lb nginx的版本1.11。断定是腾讯云负载层lbc的问题。跟腾讯云交流后,发现他们也有在灰度测试升级版本(ios请求偶尔会成功的原因),经沟通,全面升级lbc版本至1.11

最终问题解决。

 

 

技术分享

ios http2客户端访问nginx失败bug

标签:png   交流   str   seconds   image   全面   init   原因   时延   

原文地址:http://www.cnblogs.com/guozefeng/p/7508933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!