cors
- 1、有兼容性问题。
- 2,通过后端设置响应头
(Access-Control-Allow-Origin),里面可以设置两种形式,一种是‘*’,允许所有请求跨域,另一种是设置指定的具体地址,它只允许指定的这个地址跨域。
jsonp
- 1、不好的地方,只支持get请求,但是兼容性比较好;
- 2,原理就是利用在HTML中一些带有src的标签,比如说script标签,利用标签的漏洞,它不会有跨域问题,因为script标签是用来引入外部资源的,它在引入外部资源的时候,并不会受浏览器同源策略的限制,我们正是通过这个漏洞,在向后端发起请求后,后端有所返回,我们在路径url上拼接一个我们当前页面的函数(callback),后端拿到这个函数,当后端把这个函数返回并执行的时候,那么它在返回的过程中,它会把这句代码加入到我们前端document中script的标签中,这个时候这个代码执行完之后,它就拿着这段代码,去window的全局作用域去找传给后端的函数,在这个过程中我们携带我们的参数就能拿到
- 2、它是一种非正式的数据交换协议。
domain
- 1、它的缺陷:只能是主域名相同,子域名不同或者端口不同的情况下才能完成跨域,前提条件就是主域名必须相同
- 2、通过document.domain设置两个需要跨域的页面的同样的主域名,通过iframe,就可以进行跨域了;
postMessagre
- 1、 它是由h5提出的;
- 2、一个通过window.addEventListener去监听message事件,另一个通过window.postMessage,第一个参数是要传的数据,第二个是要传给谁的具体的地址。
设置正向代理
- 我们自己可以起一个node服务,因为服务端和服务端交互是没有跨域问题的,跨域是浏览器同源策略的一个限制,它不属于服务器端,我们可以通过用node去写一个中间层然后去请求另一个服务器,拿到数据以后我们在我们的服务器上去解决跨域,然后把拿到的数据返回去。
window.name
- 在同一个type下,它会认为是同一个窗口,通过window.name进行传参
- 只有window.name可以做到这么传参,其他是不可以做到的
- 它也有不好处,就是它所支持的数据量有限,一般为2M,IE和firefox下可以大致32M左右。