You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 12 Datasnap Server如何识别并接收OPTIONS请求?

解决Datasnap Server无法处理OPTIONS请求的问题

默认的TDSHTTPServer仅处理与Datasnap相关的GET/POST请求,不会响应OPTIONS预检请求,你可以通过以下步骤实现支持:

  • 利用TDSHTTPServer的OnCommandOther事件处理OPTIONS请求
    由于TDSHTTPServer基于Indy的TIdHTTPServer,它提供了OnCommandOther事件用于处理标准GET/POST之外的HTTP命令。你可以在这个事件中拦截OPTIONS请求并返回合规的响应:

    1. 在你的Datasnap Server项目中,找到TDSHTTPServer组件,为它添加OnCommandOther事件处理函数。
    2. 在事件函数中判断请求命令是否为OPTIONS,然后构造响应:
      procedure TYourServerForm.DSHTTPServerCommandOther(AContext: TIdContext;
        ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
      begin
        if UpperCase(ARequestInfo.Command) = 'OPTIONS' then
        begin
          AResponseInfo.ResponseNo := 200;
          // 根据业务需求调整CORS头,比如限制允许的Origin、Headers等
          AResponseInfo.CustomHeaders.Add('Access-Control-Allow-Origin: *');
          AResponseInfo.CustomHeaders.Add('Access-Control-Allow-Methods: GET, POST, OPTIONS');
          AResponseInfo.CustomHeaders.Add('Access-Control-Allow-Headers: Content-Type, Authorization');
          AResponseInfo.ContentText := '';
        end;
      end;
      
  • 关键说明

    • 上述代码中的CORS头可根据实际场景调整,比如将Access-Control-Allow-Origin设为具体客户端域名而非*,提升安全性。
    • 确保你的Delphi版本支持TDSHTTPServer的OnCommandOther事件(大部分XE及之后版本都支持)。
    • 处理完OPTIONS请求后,客户端后续的GET/POST请求就能正常被Datasnap Server识别处理。

内容的提问来源于stack exchange,提问作者szpliter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 06:54:56