vue 项目使用 ArcGIS 服务提示跨域问题, nginx 反向代理也不行 - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
Elissa

vue 项目使用 ArcGIS 服务提示跨域问题, nginx 反向代理也不行

  •  
  •   Elissa Jun 9, 2021 2152 views
    This topic created in 1815 days ago, the information mentioned may be changed or developed.

    单位内部有个 ArcGIS 的服务器,现在需要加载上面的地理要素图层,已经确认 ArcGIS 服务器是允许跨域的,之前使用 Jq 或原生 JS 写没有跨域问题,vue 使用 ArcGIS API for JS 4.19

    直接访问提示跨域问题,代码和报错如下

    let AHDX_ZH0717 = new TileLayer({ title: "AHDX_ZH0717", url: "http://10.34.x.x:6080/arcgis/rest/services/AHDX_ZH0717/MapServer", }); map.add(AHDX_ZH0717); // 提示跨域信息 Access to image at 'http://10.34.x.x:6080/arcgis/rest/services/AHDX_ZH0717/MapServer/tile/7/52/105?blankTile=false' from origin 'http://127.0.0.1:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 

    然后想到了使用 nginx 反向代理,nginx 配置文件如下

    location /gisserver { add_header Access-Control-Allow-Origin '*'; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; proxy_pass http://10.34.x.x:6080/arcgis/; proxy_read_timeout 600s; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # ArcGIS Server 要求必须添加 X-Forwarded-Host 反代标头 proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } 

    此时 vue 项目的代码改为(nginx 在本地 9090 端口)

    let AHDX_ZH0717 = new TileLayer({ title: "AHDX_ZH0717", url: "http://127.0.0.1:9090/gisserver/rest/services/AHDX_ZH0717/MapServer", }); map.add(AHDX_ZH0717); // 提示跨域配置重复 Access to fetch at 'http://127.0.0.1:9090/gisserver/rest/services/AHDX_ZH0717/MapServer?f=json' from origin 'http://127.0.0.1:8080' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values 'http://127.0.0.1:8080, *', 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. / 如果注释掉 nginx 配置文件的跨域设置则提示 Access to image at 'http://127.0.0.1:9090/gisserver/rest/services/AHDX_ZH0717/MapServer/tile/7/52/106?blankTile=false' from origin 'http://127.0.0.1:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 

    现在头都大了,有没有好兄弟知道咋解决

    Elissa
        1
    Elissa  
    OP
       Jun 9, 2021
    现在在浏览器直接访问瓦片的 url 正常,直接访问和反代都可以
    ZhaoHuiLiu
        2
    ZhaoHuiLiu  
       Jun 9, 2021
    @Elissa
    图片能直接访问和反代可以,而程序不可以是因为下面的原因:
    浏览器的 canvas 调用了 瓦片 像素二进制数据,如果你的图片跨域的话,那么 canvas 是不允许修改跨域的图片的。

    Nginx 完美解决前后端分离端口号不同导致的跨域问题
    https://blog.csdn.net/z69183787/article/details/104952462
    Elissa
        3
    Elissa  
    OP
       Jun 9, 2021
    @ZhaoHuiLiu 已经用 nginx 了,还是会有跨域的问题
    SmiteChow
        4
    SmiteChow  
       Jun 10, 2021
    "已经确认 ArcGIS 服务器是允许跨域的"你这个确认不对,浏览器提示没有'Access-Control-Allow-Origin'就一定没有
    ZhaoHuiLiu
        5
    ZhaoHuiLiu  
       Jun 10, 2021
    @Elissa http://127.0.0.1:9090 和 http://127.0.0.1:8080 端口不一样啊,这也是跨域啊
    Elissa
        6
    Elissa  
    OP
       Jun 10, 2021
    @ZhaoHuiLiu 所以我在本机的 nginx 也配置了允许跨域,但是一加上就提示跨域重复(详情见正文 // 提示跨域配置重复)
    About     Help     Advertise     Blog     API     FAQ     Solana     2757 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 01:12 PVG 09:12 LAX 18:12 JFK 21:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86