博客列表 >跨域请求CORS与JSONP

跨域请求CORS与JSONP

Jason
Jason原创
2020年05月29日 17:39:20725浏览

跨域请求CORS与JSONP

CORS是什么?

CORS是一个W3C标准,全称是“跨域资源共享”.它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

同源策略

  • 多个页面的协议,域名,端口完全相同,他们就遵循了“同源策略”

CORS怎么用?

前台部分

  1. <title>跨域请求</title>
  2. </head>
  3. <body>
  4. <button>跨域请求</button>
  5. <h2></h2>
  6. </body>
  7. <script>
  8. var btn = document.querySelector("button");
  9. btn.addEventListener(
  10. "click",
  11. function () {
  12. // 创建AJAX对象
  13. var xhr = new XMLHttpRequest();
  14. // 监听请求
  15. xhr.onreadystatechange = function () {
  16. if (xhr.readyState === 4 && xhr.status === 200){
  17. console.log(xhr.responseText);
  18. document.querySelector("h2").innerHTML = xhr.responseText;
  19. }
  20. };
  21. // 初始化请求参数
  22. xhr.open("GET","http://m.xt520.xyz/cors.php",true);
  23. xhr.send(null);
  24. },
  25. false
  26. );
  27. </script>

后台部分:

  1. <?php
  2. header('Access-Control-Allow-Origin:*');
  3. header('content-type:text/html;charset=utf-8');
  4. echo "这是服务器上的资源";
  5. flush();
  6. ?>

效果图:

注意点:

1.Access-Control-Allow-Origin:表示允许任何域名跨域访问,如果需要指定域名才允许跨域访问,只需把Access-Control-Allow-Origin:允许的域名

JSOP怎么用?

前台部分:

  1. <body>
  2. <button>跨域请求——JSONP</button>
  3. <script>
  4. // 1.准备好处理回调函数
  5. function handle(jsonData) {
  6. console.log(jsonData);
  7. var data = JSON.parse(jsonData);
  8. console.log(data);
  9. // 将接口返回的数据渲染到页面中
  10. var ul = document.createElement("ul");
  11. ul.innerHTML += "<li>" + data.title + "</li>";
  12. ul.innerHTML += "<li>姓名" + data.user.name + "</li>";
  13. ul.innerHTML += "<li>邮箱" + data.user.email + "</li>";
  14. document.body.appendChild(ul);
  15. }
  16. // 2.点击按钮发起一个基于JSONP的跨域请求
  17. var btn = document.querySelector("button");
  18. btn.addEventListener(
  19. "click",
  20. function () {
  21. var script = document.createElement("script");
  22. script.src = "http://m.xt520.xyz/1.php?jsonp=handle&id=2";
  23. document.head.appendChild(script);
  24. },
  25. false
  26. );
  27. </script>
  28. </body>

后台部分:

  1. <?php
  2. header('content-type:text/html;charset=utf-8');
  3. $callback = $_GET['jsonp'];
  4. $id = $_GET['id'];
  5. // 模仿接口,根据查询条件返回不同的内容
  6. $users = [
  7. '{"name":"zhangsan","email":"youku@qq.com"}',
  8. '{"name":"lisi","email":"yahoo@google"}',
  9. '{"name":"tina","email":"keep@qq.com"}',
  10. ];
  11. if (array_key_exists(($id-1),$users)) {
  12. $user = $users[$id-1];
  13. }
  14. $json = '{
  15. "title":"学生表",
  16. "user":'.$user.'
  17. }';
  18. echo $callback . '(' . json_encode($json). ')';

效果图:

总结

通过老师两个案例的讲解,我大概了解了跨域请求,能够做什么,它主要用在数据交互,一个页面引用另一个页面,用异步请求获取数据,实现数据的共享。跨域主要说的是AJAX请求无法完成,这个时候就用我们的CORS和JSONP技术来解决这个难题。感觉自己又学会了一个好东西,开心。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议