Cloudfront:HTTP/2 合规性问题
Cloudfront: HTTP/2 compliance issue
我求助于 Whosebug,因为 AWS 不提供免费套餐的技术支持。
有人报告了使用 httpx 的问题,我维护的 ruby HTTP 客户端库:https://gitlab.com/honeyryderchuck/httpx/issues/64
该报告是在最近升级以改进 HTTP/2 解析器规范合规性之后发布的。尽管该库现在通过了 h2spec,但似乎存在从云端请求的合法问题,因为它们似乎不符合规范的明显部分:当流量控制 window 超过 2 ** 31 - 1 被通告,发件人不得允许它并且 return 流量控制错误。
是否正确?
你是对的,流量控制window不能超过2^31-1,as indicated in the specification。
初始流量控制 window 是 65535,而不是从 Cloudfront 发送的 65536,因此随后将流量控制 window 扩大 2147418112 产生 2^31,差一对于流量控制来说太大了window。
您的客户端正确发送了一个 GO_AWAY 错误 FLOW_CONTROL_ERROR。
sbordet 回答不完全正确。
流量控制 window 不能超过 2^31-1 字节并且初始流量控制 window 大小为 65535 字节是正确的。然而,CloudFront 发送错误值 65536 的部分是不正确的,因为允许任何端点修改默认初始 window 大小,如 RFC7540 Sec 6.9.2:
中所述
Both endpoints can adjust the initial window size for new streams by including a value for SETTINGS_INITIAL_WINDOW_SIZE in the SETTINGS frame that forms part of the connection preface.
请注意,此设置仅适用于新流,而不适用于连接流量控制window 大小。连接流控制 window 大小只能通过 WINDOW_UPDATE 帧更新,如 RFC 下一行所述:
The connection flow-control window can only be changed using WINDOW_UPDATE frames.
因此,在 CloudFront 将 SETTINGS_INITIAL_WINDOW_SIZE 更新为 65536 字节后,连接流量控制 window 仍为 65535 字节,因此接下来的 WINDOW_UPDATE 2147418112 字节将其增加到 2 ^31-1 字节(根据 RFC,这是一个有效值),而不是 2^31 字节。
我求助于 Whosebug,因为 AWS 不提供免费套餐的技术支持。
有人报告了使用 httpx 的问题,我维护的 ruby HTTP 客户端库:https://gitlab.com/honeyryderchuck/httpx/issues/64
该报告是在最近升级以改进 HTTP/2 解析器规范合规性之后发布的。尽管该库现在通过了 h2spec,但似乎存在从云端请求的合法问题,因为它们似乎不符合规范的明显部分:当流量控制 window 超过 2 ** 31 - 1 被通告,发件人不得允许它并且 return 流量控制错误。
是否正确?
你是对的,流量控制window不能超过2^31-1,as indicated in the specification。
初始流量控制 window 是 65535,而不是从 Cloudfront 发送的 65536,因此随后将流量控制 window 扩大 2147418112 产生 2^31,差一对于流量控制来说太大了window。
您的客户端正确发送了一个 GO_AWAY 错误 FLOW_CONTROL_ERROR。
sbordet 回答不完全正确。
流量控制 window 不能超过 2^31-1 字节并且初始流量控制 window 大小为 65535 字节是正确的。然而,CloudFront 发送错误值 65536 的部分是不正确的,因为允许任何端点修改默认初始 window 大小,如 RFC7540 Sec 6.9.2:
中所述Both endpoints can adjust the initial window size for new streams by including a value for SETTINGS_INITIAL_WINDOW_SIZE in the SETTINGS frame that forms part of the connection preface.
请注意,此设置仅适用于新流,而不适用于连接流量控制window 大小。连接流控制 window 大小只能通过 WINDOW_UPDATE 帧更新,如 RFC 下一行所述:
The connection flow-control window can only be changed using WINDOW_UPDATE frames.
因此,在 CloudFront 将 SETTINGS_INITIAL_WINDOW_SIZE 更新为 65536 字节后,连接流量控制 window 仍为 65535 字节,因此接下来的 WINDOW_UPDATE 2147418112 字节将其增加到 2 ^31-1 字节(根据 RFC,这是一个有效值),而不是 2^31 字节。