被 http2 坑了一把,nginx 1.9.15/1.10.0 + http2 + post + safari 有严重 bug

2016-08-20 08:11:06 +08:00
 fancy20
惭愧在公司官网上了 http2 ,有一部分注册 post 请求发送时返回错误 0x0 ,后来通过错误回调的统计发现大部分是 safari(好像还有 edge)出现这个问题, safari 能稳定复现, chrome 不能复现,关闭 http2 后 safari 不能复现。

具体就是,打开 http2 站点页面,等待几分钟不动(或看下面连接里说可以断网再连接上),接下来在页面上的操作,比如我们的注册是 ajax 的 post 请求会返回 0x0 错误,看 safari 的调试页面网络请求都没发。贴两个连接:

https://openradar.appspot.com/26406397
http://stackoverflow.com/questions/37309940/nginx-http-2-http-post-safari-error

猜测是 safari 的 http2 socket 超过 idle 后,即使有新请求也不会重新连接,直接报连接错误。。

这次给我的教训就是生产环境还是不要玩这类太新的东西了。。

@qgy18
20881 次点击
所在节点    站长
27 条回复
fancy20
2016-08-20 14:05:10 +08:00
@rrfeng 不是,在 MacBook 上的 Safari 稳定复现,但 chrome 没问题。根据统计 edge 可能也有问题,但我们没测试
qgy18
2016-08-20 14:19:57 +08:00
https://imququ.com/post/nginx-http2-post-bug.html

好了,文章写好了。

非常感谢 @fancy20 提供这一信息,我之前一直以为 Nginx 是在主线版和稳定版同时修复的这个问题。
今天才发现, Nginx 当前稳定版根本就没修,这太危险了。

btw , https 是会引入一堆新问题,但现在运营商已经越来越没节操,再难也得上啊。
fancy20
2016-08-20 14:27:31 +08:00
@qgy18 分析透彻,赞!经常打开你的博客看,感觉文章都很用心
fcicq
2016-08-20 15:35:02 +08:00
这只能证明不用来自 HTTP2 JP 社区的实现, 后果自负.
hyuwang
2016-08-21 03:09:06 +08:00
感谢...LZ 救了我
差点也准备上 production
huijiewei
2016-09-07 12:39:56 +08:00
也就是说可以考虑替换掉 nginx 了。

这种恶性的 bug 竟然不在 stable 版本修复
josephus
2017-07-12 21:58:08 +08:00
@huijiewei
NGINX 如此稳定高性能,又如此年轻有活力。
如今哪个公司没使用?搞笑吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/300566

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX