Sinatra/Nginx/ELBv2 API 仅在 Chrome 58 或更高版本上生成 ERR_SPDY_PROTOCOL_ERROR

Sinatra/Nginx/ELBv2 API 仅在 Chrome 58 或更高版本上生成 ERR_SPDY_PROTOCOL_ERROR

我有一个具有以下堆栈的 API:

Sinatra <=HTTPS/TLS=> Nginx <=HTTPS/TLS=> ALB(ELBv2)

这是一个基本的 URL 缩短器,它会向浏览器发送 301 重定向以转到更长的 URL。它运行了一两年都没出现问题,但自从 Chrome 58 以来,我现在在 Chrome 中从 API 重定向时收到 ERR_SPDY_PROTOCOL_ERROR。常规页面返回正常,其他浏览器也运行正常。回复肯定是由 ALB 发送的,因为我看到流量,并且 CloudWatch 或 Nginx 或 Sinatra 的日志中没有报告任何错误。

我已经向 AWS Support 提交了一张票,但并没有得到太多帮助。有其他人见过类似的事情吗?我甚至不知道该如何修复这个问题,因为我的 nginx 甚至没有配置为使用 SPDY 或 HTTP2。

编辑:这是失败尝试和正常工作(通过 curl)的 ALB 示例访问日志:

h2 2017-06-21T15:30:01.438546Z app/aws-example-net/019315b3036f76ac 184.75.37.61:59367 10.252.14.202:443 0.000 0.004 0.000 301 301 30 1170 "GET https://aws.example.net:443/short/-OpLPG8h HTTP/2.0" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:us-east-1:XXXXXXXXXXXX:targetgroup/ecs-prod-e-urlshortener/7c6cddcc83c91aeb "Root=1-594a90f9-41b321bf039f142a083cb587"
h2 2017-06-21T15:30:06.928711Z app/aws-example-net/019315b3036f76ac 184.75.37.61:19376 10.252.14.202:443 0.000 0.004 0.000 301 301 46 1170 "GET https://aws.example.net:443/short/-OpLPG8h HTTP/2.0" "curl/7.50.1" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:us-east-1:XXXXXXXXXXXX:targetgroup/ecs-prod-e-urlshortener/7c6cddcc83c91aeb "Root=1-594a90fe-2f1b92043fe3030461e84219"

编辑2:

curl -vvv 的净化输出示例:

https://pastebin.com/Ws553Mxj

答案1

我们刚刚遇到了这个问题。我们的应用程序设置了“Content-Length”标头并使用了 gzip。显然 http/2 不喜欢这种组合!

删除“Content-Length”即可正常工作。

相关内容