提问
1、什么是同源策略
同源策略是浏览器的一个属性,指的是protocol协议hostname域名port端口号完全相同的网站才可以互相引用和读取资源。
2、什么是跨域?跨域有几种实现形式
跨域有多种实现方式,
- 1降域
①比如把child.a.com和a.com和xxx.child.a.com都可以降域为a.com
②实现的话需要在两个需要进行跨域的网站script都写document.domain = 'a.com'进行降域
③其中ajax不受降域的影响,得用iframe在页面中引用另一个页面的这种方式
④域名只能往下设置,不能下去了再上来。比如xxx.child.a.com只能往下变成chlid.a.com或者再往下变成a.com。但是如果到了a.com就不能再回去到child.a.com、xxx.child.a.com
⑤降域的话有安全性的问题,如果一个子域名被攻击,多个被降域的域名都会被连带。
- 2 jsonp(JSON width padding)
①jsonp简单来说就是动态加载script
②比如a.com中通过script创建一个script然后通过appendChild()到页面上"<script src="//b.com/main.js?callback = xxx"></script>"
③注意callback = xxx,还有在a.com的页面上要写window.xxx = function(){};的方法。b.com/main.js生成xxx(data),返回到当前页面会执行xxx(data)的函数,这个就叫jsonp。
④data的参数是b.com中拿到的,因为如果写json格式(其实完全不用写json的格式)就会成xxx({'a':'1'})这种格式的,所以叫jsonp(json width padding)
⑤缺点:
如果a.com可以访问b.com,那么完全可以让c.com也访问b.com,解决方法有要么用正则过滤掉不应该出现的字符串,要么约定好一套数据,比如cookies来互相匹配
不能用post只能get
-
3 cors(cross-origin resource sharing跨域资源共享)
CORS在hppt秦秋附加一个头,来指定那些服务器来的跨域请求是被允许的,CORS有web服务器发出
post message(html5的功能)
分享的参考
3、jsonp 的原理是什么
首先json是一种数据格式,而jsonp是一种数据的调用方式。
这个协议允许用户传递一个callback参数给服务器端,然后服务器端会更具这个callback所附着的参数来响应数据,服务器端会按照这个callback作为函数名来包裹住json数据,这样客户端就返回了一个名为callback所对应名字的一个方法了。
演示
本地搭建服务器,演示同源策略
- 本地搭建服务器(如果使用 SAE 可创建不同的代码版本,这样可通过1.xxx.sinapp.com和2.xxx.sinapp.com 访问了)
- 修改 本地host,通过不同域名访问本地服务器。比如访问http://a.com/index.html, http://b.com/ajax.php,本质是
- 在 index.html 里使用 ajax 接口访问 http://b.com/ajax.php 里的数据。
- 查看输出报错
用jsonp解决突破同源策略限制
这里演示的都使用了jrg-vip8目录下的server
↓↓↓↓↓↓再是cross-origin resource sharing跨域资源共享↓↓↓↓↓↓↓↓