带CORS的Delphi XE4 Datasnap

时间:2014-07-14 18:31:31

标签: delphi rest http cors datasnap

我正在使用REST开发一个datasnap服务器。当客户端尝试使用POST请求时,浏览器首先尝试执行OPTIONS请求,我的服务器无法响应。搜索我发现这是一个名为CORS(跨源资源共享)的浏览器安全问题,因为我的客户端与datasnap服务器位于不同的域中。

我应该怎么做,因为数据快照没有OPTIONS休息请求?

2 个答案:

答案 0 :(得分:2)

您可以将Datasnap Server设置为回答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;

答案 1 :(得分:0)

解决方法:对HTTP(Apache HTTP)使用反向代理服务器,并配置Apache以便OPTIONS请求将由其他HTTP服务器应答。从外部来看,客户端将无法看到差异,因为所有通信都是在客户端和Apache之间完成的。