1
fancy20 OP 问题就是导致用户打开我们官网,上来就直接注册没问题。但他看了一会儿官网介绍,再注册就提示错误了。。看了从 5 月份上了 http2 后就有这类错误发生,但一直没察觉,看统计大约有 100 多次。。
|
2
bigzhu 2016-08-20 08:49:41 +08:00
我有类似问题,主要是图片加载上,图太多的时候,不再会等着慢慢加载,似乎迅速 timeout ,后面的直接提示错误(忘记错误码了),显示加载失败。
|
3
MrMario 2016-08-20 09:49:08 +08:00 via iPhone
具体哪个 Safari 版本?
|
4
ivmm 2016-08-20 10:06:22 +08:00
不新了吧, Nginx 支持 h2 都已经有个一年了。
|
5
FrankFang128 2016-08-20 10:27:59 +08:00 via Android
什么是 0x0 错误
|
6
fancy20 OP |
7
qgy18 2016-08-20 11:06:37 +08:00 2
@fancy20
是有这个问题,我之前也遇到了,还研究了一下,我争取本周末写一个文章详细介绍下这个问题。 这个是 nginx 的锅,应该跟 http/2 关系不大。 https://trac.nginx.org/nginx/ticket/959#comment:18 https://blog.crashed.org/fixing-nginx-bugs-with-nghttp2/ |
8
qgy18 2016-08-20 11:22:39 +08:00
要避免这个问题,要么升级到 nginx 1.11.0+(第二位奇数表示是 nginx 的主线版本,偶数是稳定版本);要么使用 nghttp2 等其它软件做为 http/2 接入层。
两者风险都挺大的,建议楼主先在生产环境关闭 http/2 。 |
9
ThreeBody 2016-08-20 11:23:44 +08:00 via Android
我之前用 lnmp.org 的一键安装包安装的 nginx ,用 httpt2 后,如果目录后面没有 /就会出现 504 gateway time out ,我一直以为是我自己配置错了,最试了一下用 ssl ,所有问题都消失了
后来干脆不用 http2 了 |
10
kn007 2016-08-20 11:25:39 +08:00
一直用新版,没有啥问题
|
11
rrfeng 2016-08-20 12:18:43 +08:00
这个我遇到过。
我们的现象是 iOS 客户端在发起 POST 请求的时候很大概率会直接失败。 就是 http2 在建立连接的时候一个预发送数据的窗口问题,很难说是谁的错…… nginx 并没有违反协议,但是和 http client 采取了不同的策略。 所以 1.11 加了一个新的配置项。 |
12
LazyZhu 2016-08-20 12:27:11 +08:00
哎呀,可在 1.10.x 打补丁啊
|
13
qgy18 2016-08-20 12:38:34 +08:00
@rrfeng
To avoid unnecessary latency, clients are permitted to send additional frames to the server immediately after sending the client connection preface, without waiting to receive the server connection preface. 客户端可以在建立连接的时候发送其它帧(也应该包括 DATA 帧),但是 Nginx 这时候的 initial window 是 0 ,所以回了一个 REFUSED_STREAM ,这时候部分浏览器直接报错而不是重试。 格式感觉这还是 Nginx 的锅。 @LazyZhu Nginx 已经明确表示,这个补丁不会移植到 1.10.x 。他们认为: 1.10.x 是稳定版,而 HTTP/2 本来就属于「不稳定」的功能,要用 HTTP/2 就上主线版。 We don't backport features to the stable branch (that's what we call stable, no enhancements). It receives only critical bug fixes. If you use such new, very complicated and actively developing protocol as HTTP/2 then it's naturally that you have to stay with the mainline branch. |
14
anjunecha 2016-08-20 12:38:56 +08:00 via iPhone
之前遇到过,后来索性在服务器上就去掉了 http2
|
15
just1 2016-08-20 12:57:44 +08:00 via Android
一直在用 1.9.7 ,会有这个问题嘛
|
17
rrfeng 2016-08-20 13:10:49 +08:00
1.10 就不能用了
或者自己打 patch 反正 1.11 也发布了 |
18
fancy20 OP @qgy18 已经关了,当时觉得稳定版应该没太大问题了就开了,否则也不会去掉 spdy 啊
太难了…甚至想去掉 https 降到 http 了,改 https 导致了一大堆问题,已经因此荣登公司“持续最久”,“引发问题最多” bug 榜榜首。之前在某度的时候,搜索改 https 有个 http 引用的问题找到我,一堆人催着赶紧解决,本来就很忙还催的要命,当时很生气,现在总算明白了… |
19
rrfeng 2016-08-20 13:50:59 +08:00
|
20
fancy20 OP @qgy18 ssl 太难了…我们有个模块是用户申请注册后给用户发邮件的,用的 javamail 和腾讯企业邮箱,上个月突然有一天同事说最近 3 天都没人注册啊(邮件会抄送他邮件组),然后发现是邮件都没发出去,在服务器上打了一堆 java 网络日志都是握手失败,但我 mac 同样代码就没问题。。最后发现服务器用的 jdk 是 1.8.51 ,我 mac 是 1.8.45 ,腾讯改了 ssl 配置,他新的 cipher 在 1.8.51 被 Oracle 改为不安全已废弃的,各种参数显式指定使用都不行,换了 1.8.45 的 sdk 解决。。腾讯为啥要改呢, Oracle 为啥要改呢。。。太难了
|
21
fancy20 OP @rrfeng 不是,在 MacBook 上的 Safari 稳定复现,但 chrome 没问题。根据统计 edge 可能也有问题,但我们没测试
|
22
qgy18 2016-08-20 14:19:57 +08:00 1
https://imququ.com/post/nginx-http2-post-bug.html
好了,文章写好了。 非常感谢 @fancy20 提供这一信息,我之前一直以为 Nginx 是在主线版和稳定版同时修复的这个问题。 今天才发现, Nginx 当前稳定版根本就没修,这太危险了。 btw , https 是会引入一堆新问题,但现在运营商已经越来越没节操,再难也得上啊。 |
24
fcicq 2016-08-20 15:35:02 +08:00
这只能证明不用来自 HTTP2 JP 社区的实现, 后果自负.
|
25
hyuwang 2016-08-21 03:09:06 +08:00
感谢...LZ 救了我
差点也准备上 production |
26
huijiewei 2016-09-07 12:39:56 +08:00
也就是说可以考虑替换掉 nginx 了。
这种恶性的 bug 竟然不在 stable 版本修复 |