博主信息
博文 119
粉丝 3
评论 1
访问量 121308
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
实例演示跨域请求(CORS、JSONP)
赵大叔
原创
849人浏览过

跨域请求

CORS: 跨域资源共享
JSONP:通过标签和属性发起一个跨域
同源策略:多个页面协议域名端口完全一样
同源策略: 针对脚本,不针对标签
如果服务器上脚本设置允许访问,则可以访问,允许访问请求头header('Access-Control-Allow-origin: // + 允许访问的域名')

1、CORS 演示代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Ajax-GET</title>
  6. <!--从后端拿数据到前端-->
  7. </head>
  8. <script>
  9. // 1. 创建Ajax对象
  10. var xhr = new XMLHttpRequest();
  11. // 2. 监听请求
  12. xhr.onreadystatechange = function () {
  13. if (xhr.readyState === 4 && xhr.status === 200) {
  14. console.log(xhr.responseText);
  15. }
  16. };
  17. // 3. 初始化请求参数
  18. xhr.open("GET", "http://php.io/0518/test1.php", true);
  19. // 4. 发送请求
  20. xhr.send(null);
  21. </script>
  22. <body>
  23. <button>CORS跨域请求</button>
  24. <h2></h2>
  25. </body>
  26. </html>

演示效果截图:


2、JSONP 演示代码:

请求返回的数据通过回调函数来处理

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>跨域请求-JSONP</title>
  6. </head>
  7. <body>
  8. <button>跨域请求-JSONP</button>
  9. </body>
  10. <script>
  11. // 1. 准备好回调处理函数
  12. function handle(jsonData) {
  13. console.log(jsonData);
  14. var data = JSON.parse(jsonData);
  15. console.log(data);
  16. // 将接口返回的数据渲染到页面中
  17. var ul = document.createElement("ul");
  18. ul.innerHTML += "<li>" + data.title + "</li>";
  19. ul.innerHTML += "<li>姓名:" + data.user.name + "</li>";
  20. ul.innerHTML += "<li>邮箱: " + data.user.email + "</li>";
  21. document.body.appendChild(ul);
  22. }
  23. // 2. 点击按钮发起一个基于JSONP的跨域请求
  24. var btn = document.querySelector("button");
  25. btn.addEventListener("click", function () {
  26. var script = document.createElement("script");
  27. script.src = "http://php.io/0518/test2.php?jsonp=handle&id=3";
  28. document.head.appendChild(script);
  29. }, false);
  30. </script>
  31. </html>
  1. <?php
  2. // 这里返回的是JOSN格式,只支持utf-8,要设置字符集
  3. header('content-type:text/html;charset=utf-8');
  4. $callback = $_GET['jsonp'];
  5. $id = $_GET['id'];
  6. // 根据查询条件返回不同内容
  7. $users = [
  8. '{"name":"admin", "email":"admin@php.cn"}',
  9. '{"name":"alam", "email":"alam@php.cn"}',
  10. '{"name":"oanh", "email":"oanh@php.cn"}',
  11. ];
  12. if(array_key_exists(($id-1), $users)) {
  13. $user = $users[$id-1];
  14. }
  15. $json = '{"title":"用户信息", "user":'.$user.'}';
  16. echo $callback .'('.json_encode($json).')';

演示效果截图:

总结

  • 两种常用跨域请求方式,CORS 操作相对简单,但是不一定能用,需要服务器允许。JSONP操作相对复杂,但是没有限制。
批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:跨域看来是整明白了, 辛苦
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
1条评论
Mannix 2020-05-23 18:03:17
小心配置不当造成的敏感信息泄漏。
1楼
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学