Nginx 启用 h2 Chrome 报 net::ERR_SPDY_PROTOCOL_ERROR错误
在nginx配置 h2, 当加载很多图片的时候,后面一部分图片加载不出来,在chrome 报GET https://test.com/img/001.jpg net::ERR_SPDY_PROTOCOL_ERROR
,
前面十几张图片是可以加载出来的,在移动端和 edge 都是可以加载出来的nginx 1.10.3
chrome 57.0.2987.110
查了一下原因,chrome 逐渐抛弃 SPDY,而h2 使用的是 ALPN 协议进行协商的,和SPDY没什么关系啊!为什么会出现这种错误的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
nginx配置ssl_prefer_server_ciphers on;目的是默认会优先根据客户端选择加密算法.
两种解决方案:一种是不使用http2,另一种是不设置ssl_prefer_server_ciphers,所以这里建议看网站自身是否有更严格的传输加密要求.
可以试下这个方式.
主要由于http2对一个域名只会发出一次tcp请求,如果你图片很多的话,在nginx默认的时间内,肯定是一些图片数据是没有被服务端发送过来,所以造成超时报错。nginx设置服务端向客户端传输数据的超时时间。
你好 我的情况跟你是一样的?你当时怎么解决的呢?
今天正好碰到这个问题,说一下我的解决思路,
1.在chrome中无法打开,但是firefox可以
2.关闭http2,该问题消失,开启http2该问题出现
综上断定和http2有关。
随后排查代码,(php的)
发现如下问题,代码中有很多
改为
发现大部分出现该错误的页面消失,但是仍然有1个页面,依然有该问题,排查代码发现了错误之处:
改成
问题解决。
后续:
http2 对 http header 头的校验很严格,不允许不规范的header,所以改为符合规范的header即可。。