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

使用Delphi的MARS REST API库时如何允许自定义请求头解决CORS问题?

解决MARS-Curiosity中CORS策略阻止自定义请求头的问题

问题根源

浏览器发起跨域请求时会触发OPTIONS预检请求,你的MARS服务返回的Access-Control-Allow-Headers响应头中未包含API_Key字段,导致浏览器拦截后续POST请求。Postman不受浏览器CORS策略限制,因此可以正常请求。

解决方案

在MARS中通过全局CORS配置添加允许的自定义请求头,具体有两种实现方式:

方式一:代码中配置CORS

在MARS应用启动时,直接配置CORS参数,允许指定的源、请求头和方法:

var
  LMARSApp: TMARSApplication;
  LCORSConfig: TMARSCORSConfiguration;
begin
  LMARSApp := TMARSApplication.Create(nil);
  try
    // 初始化CORS配置
    LCORSConfig := LMARSApp.Configuration.CORS;
    LCORSConfig.Enabled := True;
    
    // 允许你的前端源(根据实际情况调整)
    LCORSConfig.AllowedOrigins.Add('http://localhost');
    
    // 添加允许的请求头,包含自定义的API_Key
    LCORSConfig.AllowedHeaders.Add('Content-Type');
    LCORSConfig.AllowedHeaders.Add('API_Key');
    
    // 允许必要的请求方法(预检请求需要OPTIONS)
    LCORSConfig.AllowedMethods.Add('POST');
    LCORSConfig.AllowedMethods.Add('OPTIONS');
    
    // 注册你的资源类
    LMARSApp.AddResource<TPersonResource>('/person');
    
    LMARSApp.Run;
  finally
    LMARSApp.Free;
  end;
end;

方式二:通过配置文件(mars.cfg)配置

如果你的MARS应用使用配置文件管理参数,可以在[CORS]节点中添加以下配置:

[CORS]
Enabled=True
AllowedOrigins=http://localhost
AllowedHeaders=Content-Type,API_Key
AllowedMethods=POST,OPTIONS

验证配置

配置完成后重启MARS服务,再次发起JavaScript请求:

  • 浏览器会先发送OPTIONS预检请求,服务端返回的响应头中会包含Access-Control-Allow-Headers: Content-Type,API_Key
  • 预检通过后,浏览器会正常发送POST请求,不再触发CORS错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:02:40