Indy HTTP 服务器不允许上传大文件

Indy HTTP server do not allow upload large files

我想知道如果要向我的 http 服务器发送大量数据(如大二进制文件),是否可以停止连接?如果可能,那么如何。

是的,有时可能,但可能全部不可能。

TIdHTTPServer有一个OnHeadersAvailable事件,在客户端的请求header被读取之后,请求body被读取之前触发。该事件使您可以访问 headers。您可以检查 Content-Length header 的值,如果它不适合您的需要,那么您可以将事件的 VContinueProcessing 参数设置为 False 以拒绝请求。如果要自定义发送回客户端的错误消息,请使用 OnHeadersBlocked 事件根据需要提供您自己的 ResponseNoResponseTextContentText 值。

请注意,这仅在客户端发送 Content-Length header 时有效。这不是严格要求的,具体取决于上传的性质。客户端可以使用 chunked 传输编码,或 MIME multipart/form-data post,两者都是 self-terminating 格式,不依赖于 Content-Length header。如果你想坚持让客户端发送 Content-Length header,如果缺少 header,你可以使用 411(要求长度)响应代码拒绝请求。