Python超级HTTP20Connection以1024字节的块发送数据

问题描述

我正在尝试使用超级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字节长,它以流ID = 1的形式作为三个单独的正文片段发送。虽然我认为这应该是完全正确的,但这是我能找到的正常HTTP / 2 POST(使用curl --http2-prior-kNowledge和失败的HTTP / 2 POST(使用hyper)之间的唯一区别。当我使用curl时,它以单个数据包(长度为2557字节)发送数据,服务器成功响应。但是,当我使用hyper发送带有相同标头的相同数据时,会失败(404)。因此,我试图将数据发送到单个数据包中,而不是分成三个部分。有提示吗?

解决方法

我发现可以通过在源代码中对此进行全局更改来进行更改:

hyper-0.7.0 / hyper / http20 / stream.py:MAX_CHUNK = 1024

我不知道是否可以在每个连接或每个会话的基础上进行更改。出于某种原因,即使我像这样大块发送它,我仍然会从服务器收到404错误。

最后的问题是,hyper仅使用服务器的IP发送:Authority标头。服务器需要标头包含IP:Port。