Cross-origin resource sharing (CORS) is a mechanism that enables resources to be shared across domains. Typically this isn’t allowed to prevent security issues. To enable on your DataSnap REST server you can use the following code per MVP Nirav Kaku from India.
All you need to do is add a custom header in the Response before dispatching the result on the DataSnap server…
procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin // allows cross domain calls Response.SetCustomHeader('Access-Control-Allow-Origin', '*'); if Assigned(FServerFunctionInvokerAction) then FServerFunctionInvokerAction.Enabled := AllowServerFunctionInvoker; end;
It is useful for DataSnap server developers who want their REST calls to be supported via AJAX using JavaScript from a different server.
Note: CORS is security feature of the browser so there could be some dependency there. Tested with Firefox, Chrome and IE and it seems to be working fine.
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition
FServerFunctionInvokerAction ?? unknown identifier
Hi Tony this is usually a field you have created in your web module as part of your own code. It has a signature like this:
FServerFunctionInvokerAction: TWebActionItem;
You can see an example of such a usage here: https://github.com/kmerlotti/DatasnapAvancado/blob/master/04%20RequestFilters/Server/WebModuleUnit1.pas
This article is quite old but the advice in it regarding CORS is still relevant.