一、什么是跨域问题   跨域是指一个页面想获取另一个页面中的资源,如果这两个页面的协议、域名、子域名、端口不同,或者两个页面一个为IP地址另一个为域名地址,这种情况下所进行的访问行动都是跨域的。而出于安全性的考虑,浏览器通常会限制跨域访问,不允许跨域请求资源。

JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。那什么是跨域呢,简单地理解就是因为JavaScript同源策略的限制,a.com域名下的js无法操作b.com或是c.a.com域名下的对象。

当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。不同域之间相互请求资源,就算作“跨域”。

JavaScript由于安全性方面的考虑,不允许页面跨域调用其他页面的对象,那么问题来了,什么是跨域问题?

答:这是由于浏览器同源策略的限制,现在所有支持JavaScript的浏览器都使用了这个策略。那么什么是同源呢?所谓的同源是指三个方面“相同”: 1,域名相同 2,协议相同 3,端口相同 例如:   http://www.abcd.com/index.html 请求 http://www.hui.com/service.php。

  http://www.a.com/a.js   http://www.a.com/b.js 同一域名 允许

  http://www.a.com/a.js   http://www.b.com/a.js 不同域名 不允许

  http://www.a.com:8000/a.js   http://www.a.com/b.js 同一域名不同端口 不允许

  https://www.a.com/a.js   http://www.a.com/b.js 同一域名不同协议 不允许

以上这些都属于存在跨域问题!!!

了解了什么是跨域,那么怎么定位自己的错误是跨域导致的呢?我一般是根据报错来定位。调用js时,我的报错如下:

html5 跨域请求 javascript 跨域请求_java

二、跨域问题如何解决

  目前我了解的解决跨域的几种方式:手写过滤器,手写拦截器,jsonnp,注解方式,配置nginx反向代理,共五种解决方式。

(我使用手写拦截器这种方式,亲测可用!)

###1. 手写过滤器实现

(1)写一个过滤器:

html5 跨域请求 javascript 跨域请求_java_02

在web.xml中配置过滤器和需要过滤的接口

html5 跨域请求 javascript 跨域请求_同源策略_03

经过以上配置,已经可以成功解决跨域了。