当启用身份验证时,超过一定大小的http发布失败

2024-04-19 04:08:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经使用Flask(python2.7,当前的Flask和dependencies)开发了一个相当简单的web服务,其中客户端向服务器发布大量JSON并获得响应。你知道吗

在没有启用身份验证的情况下,这是100%有效的;直接发布到我的服务非常有效。你知道吗

将HTTP摘要身份验证添加到端点会导致客户端在发送回401-authentication-Required响应后产生“断管”错误。。。但前提是JSON大块大于22k

如果POST中传输的JSON hunk低于~22k,那么客户机将得到401响应,并按照预期愉快地回复身份验证数据。你知道吗

我不确定确切的尺寸界限是。。。我成功测试的最大字节是21766字节,而失败的最小字节是43846字节。您会注意到32k正好在这个范围内,32k可能是缓冲区的一个不错的默认大小。。。这听起来像是缓冲区大小的问题。你知道吗

使用Python客户端(内置“请求”模块)和C++客户端(使用Qt的HTTP客户端类之一)来观察问题。当运行Flask应用程序“单机版”(即通过app.run())时,以及通过mod\uwsgi在Apache后面运行时,都会发现这个问题。在这两种情况下都没有启用SSL。你知道吗


Tags: 服务器身份验证webjsonhttp客户端flaskauthentication
1条回答
网友
1楼 · 发布于 2024-04-19 04:08:00

具体如下:

  1. 您的客户端在没有身份验证的情况下发布JSON数据
  2. 服务器接收请求(不一定在一个长块中,它可能在parst中)
  3. 服务器评估请求并发现它没有提供凭据,因此决定停止处理请求并答复401。你知道吗

服务器端短,消耗全部,没有时间在中间中断POST请求。随着POST大小的增加,中断未经授权的POST请求的机会更高。你知道吗

您的客户有两种选择:

要么立即开始发送凭据。你知道吗

或者尝试/捕获损坏的管道,并通过形成适当的基于摘要的请求对其作出反应。你知道吗

第一种感觉是,有些东西坏了,但这是一种相当合理的方法——想象一下,有人可以发布大量post请求,在没有授权的情况下消耗服务器上的资源。在这种情况下,服务器的反应似乎是合理的。你知道吗

相关问题 更多 >