【发布时间】:2016-01-07 19:38:19
【问题描述】:
我想知道如果它想向我的http服务器发送大量数据(如大二进制文件),是否可以停止连接?如果可能,那么如何。
【问题讨论】:
-
这个重复? stackoverflow.com/questions/280684/size-of-uploaded-file。请参阅1st answer there 以获取答案。 (可以查看
Content-length) -
@Rik:假设客户端发送了一个
Content-Length。它可以改用chunked传输编码,也可以改用MIMEmultipart/form-data帖子,两者都是自终止的,不使用Content-Length。 -
@RemyLebeau 是的,我知道
Content-Length不是必需的(它也在那个答案中)。这就是我链接到它的原因。在这种情况下,您可以在文件变得太大时开始读取并中止。但是您发送411的解决方案也是(一个不错的)解决方案(除非您正在处理执行分块传输编码或 MIME 多部分/表单数据发布的客户端应用程序并且无法更改它们的方式发送文件)。 -
TIdHTTPServer完成所有读取操作,因此为了实现读取和中止方法,您需要创建一个自定义TStream类来覆盖Write()(或使用 @987654333 @ 带有OnWrite事件处理程序)在达到限制时引发异常,然后在上传期间使用TIdHTTPServer.OnCreatePostStream事件提供该流类的实例。 -
好吧,这实际上是一个非常酷的想法。我会检查 Content-Length 值并实现我的自定义流女巫将阻止所有尝试上传超过我允许的数据的尝试
标签: indy