页面树结构
转至元数据结尾
转至元数据起始

一、为什么会出现跨域问题

出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)/域名(Domain Name)和端口号(port)。只要页面的协议、主机/域名和端口与请求地址的没有完全一样,就认为是不同源。

二、什么是跨域

向不同源(不同协议、不同域名或者不同端口)发送XHR请求,浏览器认为该请求不受信任,禁止请求,具体表现为请求后不正常响应。

也就是说,当一个请求url的协议、主机/域名、端口三者之间任意一个与当前页面url(一般是浏览器地址栏的地址)不同即为跨域。

当前页面url被请求(集成)页面url是否跨域原因
http://www.test.com/http://www.test.com/index.html同源(协议、域名、端口号相同)
http://www.test.com/https://www.test.com/index.html协议不同(http/https)
https://www.test.com/http://www.test.com/协议不同(https/http)
http://www.test.com/http://www.test2.com/主域名不同(test/test2)
http://www.test.com/http://blog.test.com/子域名不同(www/blog)
http://www.test.com:8080/http://www.test.com:18080/端口号不同(8080/18080)

三、第三方与smartbi相互集成的跨域问题

1、第三方集成smartbi

第三方的页面中使用了iframe等标签引用了smartbi的url,如果第三方系统地址和smartbi是跨域的,此时会因为跨域引起多种问题

(1)chrome内核浏览器,第三方页面集成能成功登录的链接,但是无法免密登录,仍然跳转到了登录页。见单点登录集成,通过谷歌浏览器80版本及以上访问Smartbi报表,有时会跳转到Smartbi登录界面

(2)苹果移动设备(iPhone、iPad),第三方页面集成能成功登录的链接,但是无法免密登录,仍然跳转到了登录页

2、smartbi集成第三方

常见于smartbi的web链接、电子表格URL链接控件、交互式仪表盘的URL链接组件中填写了第三方系统的地址,如果第三方系统地址和smartbi是跨域的,此时会因为跨域引起多种问题,如
(1)第三方页面展示不正常,跟直接在浏览器打开第三方地址显示的内容不同,此时在smartbi页面打开浏览器F12,一般能看到跨域的错误提示,如下图:

这代表F12打印出的origin后的url地址是smartbi集成的第三方地址,但是该地址跟当前浏览器访问的smartbi的地址是跨域的,由于跨域,部分js代码无法正常执行,因此第三方页面显示异常。


四、解决方案:部署代理

最佳的方案是通过代理将两个系统代理为同一个域,假定在部署代理前,smartbi的域为A,第三方系统的域为B,在部署代理和集成时有如下几种方案:

1、将第三方系统代理到协议端口一致的A域,此时smartbi单独访问和smartbi集成第三方系统使用代理后的A域的地址,第三方系统在需要集成smartbi时也使用A域的地址。

需要借助第三方代理(如iis、nginx、F5等)。

2、将smartbi代理到协议端口一致的B域,此时smartbi单独访问和smartbi集成第三方系统使用代理后的B域的地址,第三方系统在需要集成smartbi时也用B域的地址。

如果第三方系统是java web应用,可以使用smartbi_proxy部署到第三方的java应用服务器,也可以借助第三方代理(如iis、nginx、F5等);

如果第三方系统是非java web应用,需要借助第三方代理(如iis、nginx、F5等)

3、将smartbi和第三方系统代理到新的域,称之为C域,实现通过C域后有两个地址能分部访问smartbi和第三方系统,这两个地址的协议端口要统一,此时smartbi单独访问、第三方系统单独访问、smartbi和集成第三方系统相互集成都采用C域的地址。

需要借助第三方代理(如iis、nginx、F5等)。

参考链接:

1、什么是跨域?跨域解决方法 https://blog.csdn.net/weixin_66375317/article/details/124545878

2、什么是跨域?怎么解决? https://zhuanlan.zhihu.com/p/442610509

  • 无标签