如何在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
相关产品推荐
相关产品推荐

