跨域和解决方案:JSONP绕过实现,CORS绕过介绍

题目
  1. 什么是跨域?
  2. JSONP
  3. CORS(服务端支持)
知识点
  • 同源策略
  • 跨域解决方案
同源策略
  1. ajax请求的时候,浏览器基于安全的需求要求当前网页和server端必须同源
  2. 同源:协议,域名,端口,三者必须一致。前端页面请求:http://a.com;请求API:https://b.com/apix/xx , 这两个url不一样源,产生跨域问题。
为何会有JSONP? 由于在HTML标签中有一些标签和属性不受同源策略的限制。其中script就是。
<img src="跨域的图片地址"> 能够用于统计打点,可使用第三方统计服务???
<link href="跨域的CSS地址"> 可使用CDN,通常外域
<script src="跨域的js地址"></script> 实现JSONP????具体实现

总而言之,这几个均可以不收浏览器同源策略的限制
  • 全部的跨域,都必须通过server端的容许和配合
  • 未通过server端的配合就实现跨域,说明浏览器有漏洞,危险!

JSONP的具体实现javascript

前导知识html

  • 访问 http://immoc.com ,服务端必定返回html文件吗?答案是否认的。前端

  • 服务器能够任意动态拼接数据返回,只要符合类型格式便可。java

  • 同理于ajax

  • <script scr="http://imooc.com/getData.js"></script>

因此:就有了JSONP这种跨域的实现方式:就是经过前端动态的建立script标签,借用src属性来发起跨域请求。json

  1. script能够跨域
  2. 服务端能够拼接任务数据返回
  3. 因此script就能够通过服务端配合就能够得到跨域数据
JSONP实现

前端页面demo:api

//前端页面定义好函数
<script>
  window.callback = function(x) {
    console.log(x);
  }
  let script = document.createElement('script');
  script.src = "http://localhost/getData.js";
	btn.addEventListener('click', function() {
  	document.body.appendChild(script);
  });
</script>

服务端返回数据:跨域

response.write(`callback({name:"Bob"})`);

而后浏览器接收到callback({name:"Bob"}); ,根据javascript解析。这里就是直接输出:{name:"Bob"}浏览器

CORS-服务端设置http-header来实现跨域---纯服务端的操做!
response.setHeader('Access-Control-Allow-Origin','url');//url填写容许访问的地址
response.setHeader('Access-Control-Allow-Header','X-Requested-With');
response.setheader('Access-Control-Allow-Methods','PUT,POST,GET,DELETE,OPTIONS');

//接受跨域的cookie
response.setHeader("Access-Control-Allow-Credentails","true");
知识点的总结:
  • 同源策略跨域安全

  • JSONP

  • CORS

相关文章
相关标签/搜索