在 web 服务中最早放弃 POST 请求?
Earliest moment to abandon POST request in webservice?
我的网络服务中的一个 'security measures' 正在阻止大文件上传。
当发送的文件太大时,我想尽快取消文件上传请求。
由于文件上传请求将是最大的请求,我目前在 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
事件为时已晚,因为 post 数据流已在 TIdCustomHttpServer.DoExecute
中检索到。您可以使用 TIdCustomHTTPServer.OnHeadersAvailable
事件 - 较早触发 - 通过将 VContinueProcessing
设置为 False
.
来避免它
我的网络服务中的一个 'security measures' 正在阻止大文件上传。
当发送的文件太大时,我想尽快取消文件上传请求。
由于文件上传请求将是最大的请求,我目前在 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
事件为时已晚,因为 post 数据流已在 TIdCustomHttpServer.DoExecute
中检索到。您可以使用 TIdCustomHTTPServer.OnHeadersAvailable
事件 - 较早触发 - 通过将 VContinueProcessing
设置为 False
.