我正在使用REST开发一个datasnap服务器。当客户端尝试使用POST请求时,浏览器首先尝试执行OPTIONS请求,我的服务器无法响应。搜索我发现这是一个名为CORS(跨源资源共享)的浏览器安全问题,因为我的客户端与datasnap服务器位于不同的域中。
我应该怎么做,因为数据快照没有OPTIONS休息请求?
答案 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之间完成的。