同源策略
浏览器故意设置的一个功能限制,主要是为了保护用户隐私。CORS和JSONP是跨域的两种方法。JSONP是对IE的妥协。
浏览器规定:若JS运行在源A里,那么只能获取源A的数据,而不能获取源B的数据,即是不允许跨域。 问题的根源:浏览器无法区分正常请求者和黑客,他们只有referer不一样,所以不同源的页面之间,不准相互访问数据
同源策略知识限制了数据访问,我们引用js,css和图片时,我们只是在引用,我们并不知道其内容
源
1
2
window.origin
<!-- 或者 location.origin -->
可以得到当前源 源=协议+域名+端口号
如果两个url的协议、域名、端口号完全一致,那么这两个url是同源的 ## CORS CORS:跨域资源共享 如果要共享数据,需要提前声明
例如 qq.com在响应头写zhan.com可以访问,具体语法:
1
Access-Control-Allow-Origin:"http://example.com:8888"
## JSONP JSONP和json并没有什么直接的关系,JSONP主要是用于IE的跨域需求,因为IE并不支持CORS
JSONP的原理:虽然我们不可以直接访问.json数据,但是我们可以访问.js文件,然后让.js夹带我们需要的数据即可 实现:创建一个script标签,请求一个js,js夹带我们需要的数据,由于是script标签,只可以发GET请求,所以JSONP不支持POST请求,并且JSONP不能像ajax一样详细的得到状态码和请求头,只能知道是失败还是成功