我的Web服务中的一个"安全措施"是阻止大文件上传
当发送过大的文件时,我想尽快取消文件上传请求。
由于文件上传的请求无论如何都将是最大的请求,我目前在TWebModule
:的BeforeDispatch
处理程序中有这段代码
procedure TWebModuleWebServices.WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
// Request that are too large are going to be dropped silently:
if Request.ContentLength > cMaxContentSize then
begin
Handled := true;
Exit;
end;
BeforeDispatch处理程序是此测试的最早阶段,还是有更好的位置
web服务是围绕TIdHTTPWebBrokerBridge
(=class(TIdCustomHTTPServer)
,请参阅IdHTTPWebBrokerBridge.pas
)构建的
对于Indy,TCustomWebDispatcher.BeforeDispatch
事件为时已晚,因为已在TIdCustomHttpServer.DoExecute
中检索到后期数据流。通过将VContinueProcessing
设置为False
,可以使用先前触发的TIdCustomHTTPServer.OnHeadersAvailable
事件来避免它。