博客列表 >跨域请求实战

跨域请求实战

海阔天空
海阔天空原创
2020年05月23日 22:39:24591浏览

跨域请求

方法一:CORS 跨域资源共享

  • 同源策略
  1. 多个页面的 协议,域名,端口 完全相同,则认为他们遵循了“同源策略”。
  2. 同源策略是一种安全机制。浏览器禁止通过脚本发起跨域请求,但是允许通过html标签属性跨域。
  • cors
  1. 允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

CORS 跨域访问代码

  1. cors.html
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>跨域请求-CORS</title>
  8. </head>
  9. <body>
  10. <button>跨域请求-CORS</button>
  11. <h2></h2>
  12. <script>
  13. var btn = document.querySelector("button");
  14. btn.addEventListener(
  15. "click",
  16. function () {
  17. //创建Ajax对象
  18. var xhr = new XMLHttpRequest();
  19. //监听请求
  20. xhr.onreadystatechange = function () {
  21. if (xhr.readyState === 4 && xhr.status === 200) {
  22. console.log(xhr.responseText);
  23. document.querySelector("h2").innerHTML = xhr.responseText;
  24. }
  25. };
  26. //初始化请求参数
  27. xhr.open("GET", "http://js.edu:90/0522/text.php", true);
  28. //发送请求
  29. xhr.send(null);
  30. },
  31. false
  32. );
  33. </script>
  34. </body>
  35. </html>
  36. text.php
  37. <?php
  38. header('Access-Control-Allow-Origin:http://php11.edu:90');
  39. echo "这是通过CORS进行的跨域访问!";
  40. flush();

CORS 跨域请求 效果图

方法二:jsonp 跨域请求

  1. jsonp.html
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>跨域请求-JSONP</title>
  8. </head>
  9. <body>
  10. <button>跨域请求-JSONP</button>
  11. <script>
  12. //准备好回调处理函数
  13. function handle(jsonData) {
  14. console.log(jsonData);
  15. var data = JSON.parse(jsonData);
  16. console.log(data);
  17. //将接口返回的数据渲染到页面中
  18. var ul = document.createElement("ul");
  19. ul.innerHTML += "<li>" + data.title + "</li>";
  20. ul.innerHTML += "<li>姓名:" + data.user.name + "</li>";
  21. ul.innerHTML += "<li>邮箱:" + data.user.email + "</li>";
  22. document.body.appendChild(ul);
  23. }
  24. //点击按钮发起一个基于JSONP的跨域请求
  25. var btn = document.querySelector("button");
  26. btn.addEventListener(
  27. "click",
  28. function () {
  29. var script = document.createElement("script");
  30. script.src = "http://js.edu:90/0522/text2.php?jsonp=handle&id=3";
  31. document.head.appendChild(script);
  32. },
  33. false
  34. );
  35. </script>
  36. </body>
  37. </html>
  38. text2.php
  39. <?php
  40. header("content-type:text/html;charset:utf-8");
  41. $callback=$_GET['jsonp'];
  42. $id=$_GET['id'];
  43. //模仿接口,根据查询条件返回不同的内容
  44. $users=[
  45. '{"name":"admin","email":"admin@php.cn"}',
  46. '{"name":"peter","email":"peter@php.cn"}',
  47. '{"name":"mike","email":"mike@php.cn"}',
  48. ];
  49. if (array_key_exists(($id-1),$users)){
  50. $user=$users[$id-1];
  51. }
  52. $json='{
  53. "title":"用户信息表",
  54. "user": '.$user. '
  55. }';
  56. echo $callback.'('.json_encode($json).')';

JSONP 跨域请求效果图

总结:

  • javascript 语法与 php 有相似之处,老师对比讲授便于发现异同,方便记忆。
  • 跨域请求,除了img,a等标签可以实现外,利用CORS、JSONP可以实现脚本跨域。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议