经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
跨域和解决方案:JSONP绕过实现,CORS绕过介绍
来源:cnblogs  作者:HelloCoderRookie  时间:2021/1/4 9:39:50  对本文有异议
题目
  1. 什么是跨域?
  2. JSONP
  3. CORS(服务端支持)
知识点
  • 同源策略
  • 跨域解决方案
同源策略
  1. ajax请求的时候,浏览器基于安全的需求要求当前网页和server端必须同源
  2. 同源:协议,域名,端口,三者必须一致。前端页面请求:http://a.com;请求API:https://b.com/apix/xx , 这两个url不同源,产生跨域问题。
为什么会有JSONP? 因为在HTML标签中有一些标签和属性不受同源策略的限制。其中script就是。
  1. <img src="跨域的图片地址"> 可以用于统计打点,可以使用第三方统计服务???
  2. <link href="跨域的CSS地址"> 可以使用CDN,一般外域
  3. <script src="跨域的js地址"></script> 实现JSONP????具体实现
  4. 总而言之,这几个都可以不收浏览器同源策略的限制
  • 所有的跨域,都必须经过server端的允许和配合
  • 未经过server端的配合就实现跨域,说明浏览器有漏洞,危险!

JSONP的具体实现

前导知识

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

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

  • 同理于

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

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

  1. script可以跨域
  2. 服务端可以拼接任务数据返回
  3. 所以script就可以经过服务端配合就可以获得跨域数据
JSONP实现

前端页面demo:

  1. //前端页面定义好函数
  2. <script>
  3. window.callback = function(x) {
  4. console.log(x);
  5. }
  6. let script = document.createElement('script');
  7. script.src = "http://localhost/getData.js";
  8. btn.addEventListener('click', function() {
  9. document.body.appendChild(script);
  10. });
  11. </script>

服务端返回数据:

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

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

CORS-服务端设置http-header来实现跨域---纯服务端的操作!
  1. response.setHeader('Access-Control-Allow-Origin','url');//url填写允许访问的地址
  2. response.setHeader('Access-Control-Allow-Header','X-Requested-With');
  3. response.setheader('Access-Control-Allow-Methods','PUT,POST,GET,DELETE,OPTIONS');
  4. //接受跨域的cookie
  5. response.setHeader("Access-Control-Allow-Credentails","true");
知识点的总结:
  • 同源策略跨域

  • JSONP

  • CORS

原文链接:http://www.cnblogs.com/rookie123/p/14220143.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号