再谈arcgis portal的CORS


CORS, Cross Origin Resource Sharing,跨域资源共享。

ArcGIS API for javascript一直支持CORS,如果你用的 Web服务器支持CORS的话,那就不需要代理来执行跨域请求。

官方:如果 Web 服务器上未启用 CORS,则需要代理来绕过这些资源的安全性。但显然IIS 也可以启用CORS 。

如果服务是使用ArcgGIS Server发布的,则api会自动发送请求以查看是否支持CORS。可以打开自己的server看一下:

http://10.45.204.xx8:6080/arcgis/admin/login,使用用户密码登录,可以看到

如果安装的托管ArcGIS Portal联合的 arcgis server:

设置为所有人(公开)就没有弹登录窗口。私有的话应该也可以通过token来解决: https://blog.csdn.net/qq_40376439/article/details/104260652

但是引用Portal 的webmap(portal的地理信息交互显示,可以包含底图,图层,范围,图例,导航工具缩放平移查地点书签)

但在web场景展示中,前端加载大量的数据,模型数据,超过浏览器限定级别了,要设置代理(请求超过2048字符,一般是用一个多边形作为输入参数的时候一般都容易超过)

在官网里搜proxy pages with the API ,这里https://developers.arcgis.com/javascript/latest/proxies/

据说可以通过配置代理,不使用openssl,不使用token来避免登录,但没有成功:

        // esriConfig.request.proxyUrl='/proxy/proxy.ashx'
        // esriConfig.proxyUrl='https://portal.valu.com/arcgis'
        // esriConfig.request.forceProxy = true;
        

        urlUtils.addProxyRule({
            urlPrefix: "https://portal.valu.com/arcgis/sharing/rest",
            proxyUrl: "/proxy/proxy.ashx"
        },
        {
            urlPrefix: "https://portal.valu.com/server/rest/services",
            proxyUrl: "/proxy/proxy.ashx"
        });

配置赛程

 ESRI在 github上有个项目代码,用于代理方式解决跨域问题

proxy目录解压到iis 下,配置映射

 如遇到 模块列表中必须要有IsapiModule或cgiModule 类似错误,则在控制面板 -> 程序和功能 -> 打开或关闭Windows功能(这几步可以简化为Win+R运行OptionalFeatures) -> Internet信息服务 -> 万维网服务 -> 应用程序开发功能,把cgi ,asp.net等勾选,安装即可解决。

 

 测试代码:


  
    "utf-8" />
    "viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no" />
    ArcGIS API

    

    "stylesheet" href="https://js.arcgis.com/4.18/esri/themes/light/main.css">
    

    

  
  
    
"viewDiv">

总之,我的代理没有配置成功