满足跨域的条件
1.域名不同,例如:
- a.com与b.com
- www.a.com与a.com(同一域名,不同二级域名)
- chs.a.com与en.a.com(主域名相同,子域名不同)
- a.com与70.32.92.74(对应ip地址)
2.协议不同,例如:http协议与https协议
3.端口不同,例如:a.com:80与a.com:8080
跨域的解决方法
1.document.domain + iframe(只有在主域相同的时候才能使用该方法)
2.location.hash + iframe
3.window.name + iframe
4.动态创建script
5.postMessage(HTML5中的XMLHttpRequest Level 2中的API)
6.JSONP
7.WebSocket
跨域的问题
1.为什么要跨域,跨域的原因是数据哪里传输受阻?
过程:客户端A首先向服务器发送请求,请求客户端B的跨域数据,服务器接受请求,处理请求,将跨域的数据返回给客户端A。但是在A浏览器解析数据时,由于A不认客户端B的数据,于是浏览器拒绝解析,故产生跨域问题。
2.JSONP解决跨域有哪些问题?
由于引用外部的资源文件没有跨域问题,比如引入外部JS或者引入外部IMG等,JSONP解决跨域的方式相当于是引入一个外部资源文件。
Jsonp是Json with Padding的缩写,就是“填充式Json”的意思。也就是说,是客户端发送一个跨域请求出去,服务端收到请求之后,将要返回的json格式的数据,填充在两端协商好的一个callback函数中,拼接成字符串返回回去。也就是说,返回的是一个匿名函数的执行,来调用callback函数。
JSONP只能采用GET方式请求数据,故客户端请求的数据是可以被看到的,所以说安全性上存在一些问题。故在使用JSONP解决跨域问题时,一般要求返回的数据是可以公开的数据,或者是一些不同用户都可以共用的接口。
总结:1)安全问题(请求代码中可能存在安全隐患)
2)要确定jsonp请求是否失败并不容易
3)只能采用GET方法