什么是跨域问题

刘佳 242

跨域问题指的是:浏览器不能执行其他网站的脚本的问题。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。所谓浏览器同源是指,域名,协议,端口均相同。通常解决跨域问题的方法有以下2种:1.前端方法就用jsonp;2.后端配置解决跨域。

解决跨域的方法:

1.前端方法就用jsonp

jsonp是前端解决跨域最实用的方法

原理就是html中 的link,href,src属性都是不受跨域影响的,link可以调用远程的css文件,href可以链接到随便的url上,图片的src可以随意引用图片,script的src属性可以随意引入不同源的js文件

看下面代码,a.html页面中有一个func1方法,打印参数ret

<body>

<script type=”text/javascript”>

function func1(ret){

console.log(ret)

}

</script>

<script src=”http://192.168.100.150:8081/zhxZone/webmana/dict/jsonp.js” type=”text/javascript” charset=”utf-8″></script>

</body>

而引入的jsonp.js中的代码为:

func1(111)

可想而知结果会打印出 111,也就是说a页面获取到了jsonp.js中的数据,数据是以调用方法并将数据放到参数中返回来的

但是这样获取数据,必须a.html中的方法名与js中的引用方法名相同,这样就是麻烦很多,最好是a.html能将方法名动态的传给后台,后台返回的引入方法名就用我传给后台的方法名,这样就做到了由前台控制方法名

总之要做到的就是前台像正常调接口一样,后台要返回回来js代码即可。

2.后台配置解决跨域

要说前端解决跨域用jsonp最好,但我更喜欢通过配置后台设置

同样,因为我用的java,所有我只能列举java的配置方法

我用的是 maven,spring mvc

首先在pom.xml中引入依赖

<!–跨域依赖–>

<dependency>

<groupId>com.thetransactioncompany</groupId>

<artifactId>cors-filter</artifactId>

<version>1.7.1</version>

</dependency>

<dependency>

<groupId>com.thetransactioncompany</groupId>

<artifactId>java-property-utils</artifactId>

<version>1.9</version>

</dependency>

<dependency>

然后在web.xml配置过滤器

<!–为了允许跨域访问–>

<filter>

<filter-name>CorsFilter</filter-name>

<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>CorsFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

这样前端就可以尽情跨域请求数据了。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部