在Web服务中放弃POST请求的最早时刻



我的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事件来避免它。

最新更新