首页 / 浏览问题 / 云GIS / 问题详情
iClientOpenlayers引用本地iServer服务跨域
251EXP 2023年05月24日
使用vs2017打开一个网站项目并在本地运行,然后引用本地iServer11.0.1上的data服务,但会报跨域,iServer11.0.1里面只加了一个data服务,请问这是什么原因?

引用代码如下:

function getAnalyzedData() {
    new ol.supermap.DatasetService(dataUrl).getDatasets("KenkeiResultDemo", function (serviceResult) {
        try {
            var datasetNames = serviceResult.result.datasetNames;
            datasetsSelect = document.getElementById("analyzedDataSel");
            for (let i = 0, len = datasetNames.length; i < len; i++) {
                datasetsSelect.options[i + 1] = new Option(datasetNames[i], datasetNames[i]);
            }
        }
        catch (e) { console.log("getDatasets error."); }
    });
}

跨域报错如下:

Access to fetch at 'http://localhost:8090/iserver/services/data-KenkeiDemo/rest/data/datasources/name/KenkeiResultDemo/datasets.json' from origin 'http://localhost:61974' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. Have the server send the header with a valid value, or, if an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

之前iServer10.1.2请求是正常的,换成11.0.1就这样了,请问是iServer设置有什么问题吗

1个回答

您好,iServer 启动后默认允许来自任意域的跨域请求访问成功,通过修改 web.xml 配置文件(位于【SuperMap iServer 安装目录】\webapps\iserver\WEB-INF目录下)来配置跨域访问的白名单,如下所示:<init-param> 
  <param-name>cors.allowed.origins</param-name> 
  <param-value>*</param-value> 
</init-param> 

其中<param-value>的默认值为*,表示允许来自任意域的跨域请求访问成功。您可以检查一下iserver是否配置是否允许任意域的跨域请求访问成功。

如果iserver端未限制跨域的话,需要自行排查跨域原因,可以参考:https://blog.csdn.net/qq991658923/article/details/121293506

3,143EXP 2023年05月24日
...