同源策略、跨域、jsonp

提问

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服务器发出


    比如这就是CORS
  • post message(html5的功能)
    分享的参考

3、jsonp 的原理是什么
首先json是一种数据格式,而jsonp是一种数据的调用方式。
这个协议允许用户传递一个callback参数给服务器端,然后服务器端会更具这个callback所附着的参数来响应数据,服务器端会按照这个callback作为函数名来包裹住json数据,这样客户端就返回了一个名为callback所对应名字的一个方法了。

演示

本地搭建服务器,演示同源策略

  1. 本地搭建服务器(如果使用 SAE 可创建不同的代码版本,这样可通过1.xxx.sinapp.com和2.xxx.sinapp.com 访问了)
  1. 修改 本地host,通过不同域名访问本地服务器。比如访问http://a.com/index.html, http://b.com/ajax.php,本质是
  2. 在 index.html 里使用 ajax 接口访问 http://b.com/ajax.php 里的数据。
  3. 查看输出报错
首先配置好host
在index页面写好如上代码放入body即可
main.js如上配置
data就这么简单的写一下
在浏览器输入a.com打开页面无法获取data的数据,因为被同源策略禁止了

用jsonp解决突破同源策略限制

这里演示的都使用了jrg-vip8目录下的server
首页的代码这么写
controller里面写方法
router里面写好方法的指向
这是a.com会出来的效果啦,用了jsonp达到

↓↓↓↓↓↓再是cross-origin resource sharing跨域资源共享↓↓↓↓↓↓↓↓

达成效果
弄一个名为data的文本文件
test.js下app.use设置响应头
首页用ajax获取b.com下的data
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容