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

如何在Delphi中使用MARS REST API Library时启用CORS?

在MARS-Curiosity Delphi REST Library中启用CORS解决跨域问题

问题分析

你遇到的CORS错误根源是MARS默认未配置跨域响应头,浏览器的同源策略会拦截不同源的JavaScript请求——尽管API实际返回了200 OK,但因缺少Access-Control-Allow-Origin头,浏览器直接阻断了响应内容的读取。

解决步骤

MARS内置了专门的CORS中间件来处理跨域请求,只需在API启动配置中启用即可:

1. 引用必要单元

在项目的主启动文件(通常是Server.dpr或初始化模块)中,添加CORS相关单元引用:

uses
  MARS.Core.CORS;

2. 注册CORS中间件

找到TMARSApplication的初始化代码,添加CORS中间件注册逻辑:

var
  LMARSApplication: TMARSApplication;
begin
  LMARSApplication := TMARSApplication.Create;
  try
    // 注册CORS中间件
    LMARSApplication.AddMiddleware(TCORSMiddleware.Create);
    
    // 你的其他API配置(端口、资源注册等)
    LMARSApplication.SetPort(8080);
    LMARSApplication.RegisterResource(TPersonProfileResource);
    
    LMARSApplication.Run;
  finally
    LMARSApplication.Free;
  end;
end.

3. 自定义CORS规则(可选)

如果需要更精细的跨域控制(比如指定允许的源、HTTP方法),可以在创建中间件时传入配置回调:

LMARSApplication.AddMiddleware(TCORSMiddleware.Create(
  function(const ACORSConfig: TCORSConfig): Boolean
  begin
    // 生产环境建议替换为具体前端域名,而非通配符*
    ACORSConfig.AllowOrigin.Add('http://localhost');
    // 允许POST请求方法
    ACORSConfig.AllowMethods.Add('POST');
    // 允许请求携带Content-Type头
    ACORSConfig.AllowHeaders.Add('Content-Type');
    // 允许携带凭证(如Cookie)
    ACORSConfig.AllowCredentials := True;
    Result := True;
  end
));

4. 验证配置

重启MARS API服务后,再次用你的JavaScript代码测试。此时响应头会包含Access-Control-Allow-Origin,浏览器将不再拦截请求。

额外提示

  • 生产环境避免使用*作为允许源,应指定具体的前端域名,降低安全风险。
  • 若你的请求包含自定义头或需要发送凭证,必须在CORS配置中对应开启AllowHeaders和AllowCredentials。

内容的提问来源于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 08:37:37