ERR_SPDY_PROTOCOL_ERROR在nginx中的含义是什么?

The*_*kus 37 nginx spdy

我和我的一些同事得到了net::ERR_SPDY_PROTOCOL_ERROR错误.

我们使用ngnix版本1.8.0.错误不稳定(难以复制),并且Ngnix错误日志没有此错误.

您如何建议我们抓住并解决这个问题?

Cha*_*esA 18

在尝试寻找ERR_SPDY_PROTOCOL_ERRORChrome上遇到的问题的帮助时,我遇到了这个问题.认为这可能会让其他人受益

我们的情况/解决方案:我们使用连接到EC2实例的AWS Application Load Balancer.我们在EC2上运行的脚本之一代理来自客户端浏览器的请求.我们最近更新了脚本 - 没有相关更改 - 并注意到Chrome和Safari对代理脚本的请求都开始失败.Chrome显示错误,当我们挖掘它时,我们可以看到此请求使用的是HTTP/2.Firefox请求继续正常工作.ERR_SPDY_PROTOCOL_ERROR

我们的解决方案:我们关闭了ALB中的HTTP/2支持.马上解决了这个问题.

AWS CLI命令:

aws elbv2 modify-load-balancer-attributes --load-balancer-arn <your_load_balancer_arn> --attributes Key=routing.http2.enabled,Value=false
Run Code Online (Sandbox Code Playgroud)


小智 14

我有同样的问题,检查你是否有足够的空间在Nginx分区/硬盘驱动器,我们添加一些,它对我们有用.


小智 10

TL; DR:如果要缓存资产,请检查nginx服务器上的驱动器空间.

我们的情景

我不确定在哪里发布我的答案,因为在获取ERR_SPDY_PROTOCOL_ERRORChrome 时可能是一个边缘情况(以及Firefox中等效的"无法加载资源"错误).但这篇文章帮助我缩小了罪魁祸首.它不是标题,gzip,重定向或adblock/ublock.

我们从机器部署了2个Web应用程序,两者都运行得很好.最近,我们部署了其中一个应用程序,其中包含对缓存资产的更改.部署完成后,我们立即ERR_SPDY_PROTOCOL_ERROR从Chrome 获得了.有趣的是,它正在接收一个HTTP 200,如果您直接导航到资产,Chrome将呈现资产.但是,在页面上加载资产会导致其失败.

足够的,其他Web应用程序非常好.调查Chrome上的网络内部,我们发现服务器正在关闭连接.几个小时后,我们确定这是因为我们的nginx服务器耗尽了驱动器空间.我不知道为什么这会导致资产在您直接导航时正确加载,但在加载页面时失败,但清除空间会立即修复问题.


lig*_*h05 5

从其他答案中可以看出,很多不同的原因都可能导致这种情况。对我来说,我有一个格式错误的标头,其他浏览器只是忽略了此标头(额外的:)。唯一的答案是调试提示,在加载损坏的页面时检出Chrome的net-internals事件:chrome:// net-internals /#events

对我来说,当我看到这条线时,我知道这是标题问题

t=65422 [st=53]      HTTP_TRANSACTION_READ_HEADERS  [dt=4]
                 --> net_error = -337 (ERR_SPDY_PROTOCOL_ERROR) 
Run Code Online (Sandbox Code Playgroud)

:从标头响应中删除多余的内容后,HTTP / 2开始在Chrome中运行。我建议从您的服务器获取原始响应并进行非常仔细的检查以确保没有语法错误。