2

当我使用Application Load Balancer (ALB)将我的 Web 应用程序部署到 AWS 环境时,我的一些 Web 服务端点不会返回任何数据,并且我的 Chrome 浏览器会针对某些 http 调用报告此错误:ERR_SPDY_PROTOCOL_ERROR

找到此建议后,我在 ALB 配置中禁用了HTTP/2支持,现在一切正常。

为什么我必须在 ALB中禁用HTTP/2 ?这里的根本问题是什么?我是否需要更改我的 Web 服务代码中的某些内容以便可以使用HTTP/2

更新

以下是响应标头:

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

正如以下答案之一所建议的那样,罪魁祸首可能是我的一个标题(到达的位置)的名称中有一个空格,这是无效/格式错误的。我会确保空格被破折号代替。

4

1 回答 1

5

通常意味着您的 HTTP/2 标头无效。HTTP/2 在这方面比 HTTP/1.1 更严格。

因此,名称中带有冒号、空格、新行(例如,在配置中打开引号但忘记关闭引号)等的 HTTP 标头名称是无效的(这些可以存在于标头值中,但不能存在于名称中)。

有关如何调试的详细信息,请参见此处:https ://www.michalspacek.com/chrome-err_spdy_protocol_error-and-an-invalid-http-header 。

将您的 HTTP/1.1 响应标头添加到您的问题中,也许能够为您指明正确的方向。

于 2019-01-09T21:16:04.047 回答