Blogger Information
Blog 119
fans 3
comment 1
visits 94384
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
实例演示跨域请求(CORS、JSONP)
赵大叔
Original
641 people have browsed it

跨域请求

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操作相对复杂,但是没有限制。
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:跨域看来是整明白了, 辛苦
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
1 comments
Mannix 2020-05-23 18:03:17
小心配置不当造成的敏感信息泄漏。
1 floor
Author's latest blog post