Nginx 启用 h2 Chrome 报 net::ERR_SPDY_PROTOCOL_ERROR错误

发布于 2022-09-04 19:10:30 字数 319 浏览 14 评论 0

在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

浮生面具三千个 2022-09-11 19:10:30

nginx配置ssl_prefer_server_ciphers   on;目的是默认会优先根据客户端选择加密算法.
两种解决方案:一种是不使用http2,另一种是不设置ssl_prefer_server_ciphers,所以这里建议看网站自身是否有更严格的传输加密要求.

可以试下这个方式.

遇见了你 2022-09-11 19:10:30

主要由于http2对一个域名只会发出一次tcp请求,如果你图片很多的话,在nginx默认的时间内,肯定是一些图片数据是没有被服务端发送过来,所以造成超时报错。nginx设置服务端向客户端传输数据的超时时间。

send_timeout  300s;#客户端传输数据的超时时间

设置后我的请求时间已经超出了默认时间(大概是1.5min)

薄凉少年不暖心 2022-09-11 19:10:30

你好 我的情况跟你是一样的?你当时怎么解决的呢?

月朦胧 2022-09-11 19:10:30

今天正好碰到这个问题,说一下我的解决思路,
1.在chrome中无法打开,但是firefox可以
2.关闭http2,该问题消失,开启http2该问题出现
综上断定和http2有关。
随后排查代码,(php的)
发现如下问题,代码中有很多

header('HTTP/1.1 404 Not found');

改为

header($_SERVER['SERVER_PROTOCOL'].' 404 Not found');//自动适配http 1.1和2协议

发现大部分出现该错误的页面消失,但是仍然有1个页面,依然有该问题,排查代码发现了错误之处:

header('302 Moved temporarily');

改成

header($_SERVER['SERVER_PROTOCOL'].' 302 Moved temporarily');

问题解决。

后续:
http2 对 http header 头的校验很严格,不允许不规范的header,所以改为符合规范的header即可。。

淡淡離愁欲言轉身 2022-09-11 19:10:30
    proxy_buffer_size 64k;
    proxy_buffers   4 32k;
    proxy_busy_buffers_size 64k;
    client_max_body_size  120m;
    client_body_buffer_size 20M;
    proxy_read_timeout 150;
   增加以上配置就可以了
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文