起因
某项目近期nginx配置升级了http2配置,最初用的好好的。某日突然反馈大量图片不显示,并且我们的测试机均不复现,遂排查之、
问题说明
远程了复现问题的电脑,发现了大量的ERR_HTTP2_PROTOCOL_ERROR报错。搜索了一波,这个问题可太抽象了,产生原因也是千奇百怪,感觉是一大类问题的统称。
没办法只能自己排查,先看看chrome的网络事件:
感觉没什么有效信息,但是注意基本上所有产生改报错的请求都是大概10s左右,并且报错信息是server reset stream。感觉就像前端请求timeout,浏览器主动cancel一样。
那是不是服务端有相关配置呢?看了看nginx配置:
发现了nginx把请求返回事件配置成10s了,这样玩是吧。。 将之改到合理范围,问题解决。
思考
为啥在开启http2之前,配了这个10s的超时时间没有这个问题呢?
原因应该是http2开启了分帧传输,页面初始化时,资源并发较大,大量资源都在占用带宽,所以一起超过了10s。而http1.1虽然有tcp链接限制,但是一个tcp下载一个资源,所以返回能确保资源在10s内下载完毕。