为什么我必须在 AWS Application Load Balancer 中禁用 HTTP/2 以防止 ERR_SPDY_PROTOCOL_ERROR?
Why did I have to disable HTTP/2 in AWS Application Load Balancer to prevent ERR_SPDY_PROTOCOL_ERROR?
当我使用 Application Load Balancer (ALB) 将我的 Web 应用程序部署到 AWS 环境时,我的一些 Web 服务端点不会return 任何数据和我的 Chrome 浏览器会针对某些 http 调用报告此错误:ERR_SPDY_PROTOCOL_ERROR
找到 this recommendation 后,我在我的 ALB 配置中禁用了 HTTP/2 支持,现在一切正常。
为什么我必须在我的 ALB 中禁用 HTTP/2?这里的根本问题是什么?我是否需要更改我的 Web 服务代码中的某些内容以便我可以使用 HTTP/2?
更新
这是回复headers:
HTTP/1.1 200
Date: Wed, 09 Jan 2019 21:39:13 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Locations Reached: Data to populate locations reached map
正如下面的一个答案所暗示的那样,罪魁祸首可能是我的 headers(到达的位置)之一的名称中有一个 space,即 invalid/malformed.我会确保 space 被破折号替换。
通常意味着您有一个无效的 HTTP/2 header。 HTTP/2 在这方面比 HTTP/1.1 更严格。
因此 HTTP header 名称中带有冒号、空格、换行符(例如,打开引号但忘记关闭配置中的引号)等名称中的名称无效(这些可以存在于 header 值但不在名称中)。
有关如何调试的详细信息,请参阅此处:https://www.michalspacek.com/chrome-err_spdy_protocol_error-and-an-invalid-http-header。
将您的 HTTP/1.1 回复 header 添加到您的问题中,也许能够为您指明正确的方向。
当我使用 Application Load Balancer (ALB) 将我的 Web 应用程序部署到 AWS 环境时,我的一些 Web 服务端点不会return 任何数据和我的 Chrome 浏览器会针对某些 http 调用报告此错误:ERR_SPDY_PROTOCOL_ERROR
找到 this recommendation 后,我在我的 ALB 配置中禁用了 HTTP/2 支持,现在一切正常。
为什么我必须在我的 ALB 中禁用 HTTP/2?这里的根本问题是什么?我是否需要更改我的 Web 服务代码中的某些内容以便我可以使用 HTTP/2?
更新
这是回复headers:
HTTP/1.1 200
Date: Wed, 09 Jan 2019 21:39:13 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Locations Reached: Data to populate locations reached map
正如下面的一个答案所暗示的那样,罪魁祸首可能是我的 headers(到达的位置)之一的名称中有一个 space,即 invalid/malformed.我会确保 space 被破折号替换。
通常意味着您有一个无效的 HTTP/2 header。 HTTP/2 在这方面比 HTTP/1.1 更严格。
因此 HTTP header 名称中带有冒号、空格、换行符(例如,打开引号但忘记关闭配置中的引号)等名称中的名称无效(这些可以存在于 header 值但不在名称中)。
有关如何调试的详细信息,请参阅此处:https://www.michalspacek.com/chrome-err_spdy_protocol_error-and-an-invalid-http-header。
将您的 HTTP/1.1 回复 header 添加到您的问题中,也许能够为您指明正确的方向。