【发布时间】:2020-12-16 20:27:19
【问题描述】:
我正在尝试使用超 0.7.0 作为客户端发送一些 HTTP/2 数据。数据在发送到服务器之前被分成 1024 字节的段(让我很懊恼)。当我查看 HTTP/2 SETTINGs 数据包时,我看不到任何可以将大小降低到 64 kB 以下的东西,我认为这是连接和流的默认值。有没有办法知道为什么选择 1024,以及如何增加它?
我试过了:
from hyper import HTTP20Connection
from hyper.http20.window import BaseFlowControlManager
...
class LargerWindowControlManager(BaseFlowControlManager):
def __init__(self, *args, **kwargs):
super().__init__(64000)
...
remote_connection = HTTP20Connection(f'{remote_node}', timeout=600)
remote_connection.network_buffer_size = 256000
...
remote_connection.request('POST', f'{path}', body=data, headers=headers, window_manager=LargerWindowControlManager)
我的data 大约有 2557 字节长,它在 Stream ID = 1 中作为三个单独的正文片段发送。虽然我认为这应该是完全有效的,但这是我在工作 HTTP/2 POST(使用curl --http2-prior-knowledge)和失败的 HTTP/2 POST(使用hyper)之间找到的唯一区别。当我使用curl 时,它会以单个数据包(长度为 2557 字节)发送数据,并且服务器会成功响应。但是,当我使用 hyper 发送具有相同标头的相同数据时,我遇到了失败 (404)。所以我试图让数据在一个数据包中发送,而不是分成三个数据包。有什么建议吗?
【问题讨论】: