我正在用REST开发一个datasnap服务器。当客户端尝试使用POST请求时,浏览器首先尝试执行OPTIONS请求,但我的服务器无法响应。搜索时,我发现了一个名为CORS (Cross Origin Resource Sharing)的浏览器安全问题,因为我的客户端与datasnap服务器位于不同的域中。
既然data snap没有OPTIONS rest请求,我该怎么办??
发布于 2016-09-03 08:28:04
您可以将Datasnap服务器设置为响应WebModule BeforeDispatch事件上的任何CORS请求。
procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.SetCustomHeader('Access-Control-Allow-Origin','*');
if Trim(Request.GetFieldByName('Access-Control-Request-Headers')) <> '' then
begin
Response.SetCustomHeader('Access-Control-Allow-Headers', Request.GetFieldByName('Access-Control-Request-Headers'));
Handled := True;
end;
if FServerFunctionInvokerAction <> nil then
FServerFunctionInvokerAction.Enabled := AllowServerFunctionInvoker;
end;发布于 2014-09-30 01:19:24
解决方法:对HTTP (Apache HTTP)使用反向代理服务器,并配置Apache,以便OPTIONS请求将由不同的HTTP服务器应答。从外部看,客户端将无法看到差异,因为所有通信都是在客户端和Apache之间完成的。
https://stackoverflow.com/questions/24743344
复制相似问题