Blogger Information
Blog 145
fans 7
comment 7
visits 164681
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JS相关知识:跨域请求(CORS/JSONP)
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
Original
776 people have browsed it

代码练习:

1.CORS跨域请求:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <button>跨域请求-CORS</button>
  10. <div class="body"></div>
  11. </body>
  12. <script>
  13. var btn = document.querySelector("button");
  14. btn.addEventListener(
  15. "click",
  16. function () {
  17. // 1. 创建Ajax对象
  18. var xhr = new XMLHttpRequest();
  19. // 2. 监听请求
  20. xhr.onreadystatechange = function () {
  21. if (xhr.readyState === 4 && xhr.status === 200) {
  22. console.log(xhr.responseText);
  23. document.querySelector(".body").innerHTML = xhr.responseText;
  24. }
  25. };
  26. // 3. 初始化请求参数
  27. xhr.open("GET", "http://php.edu/login_regist/login.php", true);
  28. // 4. 发送请求
  29. xhr.send(null);
  30. },
  31. false
  32. );
  33. </script>
  34. </html>

服务器端代码:

  1. <?php
  2. header("Access-Control-Allow-Origin:http://js.edu");
  3. if(isset($_COOKIE['user'])){
  4. // echo 'OK';
  5. // exit('<script>alert("登陆成功!");location.href="index.php";</script>');
  6. exit('<script>alert("已经登陆,请勿重复等登陆!");location.href="index.php";</script>');
  7. }
  8. ?>
  9. <!DOCTYPE html>
  10. <html lang="en">
  11. <head>
  12. <meta charset="UTF-8">
  13. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  14. <title>用户注册</title>
  15. <style>
  16. * {
  17. margin: 0;
  18. padding: 0;
  19. }
  20. h2 {
  21. /* display: block; */
  22. width: 350px;
  23. margin: 0 auto;
  24. text-align: center;
  25. padding-top: 10px;
  26. box-sizing: border-box;
  27. }
  28. form {
  29. margin: 10px auto;
  30. width: 350px;
  31. height: 250px;
  32. background-color: #5384e8;
  33. display: flex;
  34. flex-flow: column nowrap;
  35. justify-content: space-evenly;
  36. align-content: center;
  37. align-items: center;
  38. font-size: 1.2rem;
  39. }
  40. form:hover {
  41. box-shadow: 0 0 5px #626262;
  42. }
  43. form>.button {
  44. width: 280px;
  45. display: flex;
  46. justify-content: space-evenly;
  47. }
  48. form>.button>input {
  49. width: 100px;
  50. height: 30px;
  51. background-color: #00bb00;
  52. border: none;
  53. border-radius: 15px;
  54. }
  55. form>.button>input:hover {
  56. background-color: red;
  57. color: white;
  58. }
  59. a {
  60. color: white;
  61. text-decoration: none;
  62. }
  63. </style>
  64. </head>
  65. <body>
  66. <h2>用户注册</h2>
  67. <form action="handle.php?action=select" method="POST">
  68. <!-- <fieldset> -->
  69. <!-- <legend align="center">用户注册</legend> -->
  70. <div>
  71. <label for="username">账户:</label>
  72. <input type="email" required name="username" id="username" placeholder="example@163.com">
  73. </div>
  74. <div>
  75. <label for="p2">密码:</label>
  76. <input type="password" required name="p2" id="p2" placeholder="不少于六位">
  77. </div>
  78. <!-- </fieldset> -->
  79. <div class="button">
  80. <input type="submit" value="登陆">
  81. <input type="reset" value="重置">
  82. </div>
  83. <div>
  84. <a href="regist.php">没有账号,点击此处注册!</a>
  85. </div>
  86. </form>
  87. </body>
  88. </html>

运行效果:

2.JSONP代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <button>跨域请求JSONP</button>
  10. </body>
  11. <script>
  12. function output() {
  13. var h1 = document.createElement("h2");
  14. h1.innerHTML = "测试成功";
  15. document.body.appendChild(h1);
  16. }
  17. var btn = document.querySelector("button");
  18. btn.onclick = function () {
  19. var script = document.createElement("script");
  20. script.src = "http://php.edu/cors/demo.php";
  21. document.head.appendChild(script);
  22. };
  23. </script>
  24. </html>

服务器端代码:

  1. <?php
  2. echo 'output()';

生成结果图

总结

1.了解跨域请求CORS和CSRF跨站请求伪造
2.同源策略:是要求协议 域名 端口完全相同,这是一种安全机制,禁止浏览器通过脚本发起跨区域请求例如XMLHtppRequest,但允许通过html标签跨域请求;
3.CORS脚本跨域请求的目标允许访问设置:header('Access-Control-Allow-Origin:$url');$url有三种:网站名(协议域名端口)|*(允许任何跨域请求)|true(带cookie的跨域请求)
4.JSONP跨域请求:通过脚本生成一个带有src的script标签来访问跨域目标文件,目标文件返回信息,处理生成新的脚本(script)代码并执行生成新的页面内容;(一般是提前写一个函数,目标文件返回函数名调用函数,执行生成新的内容);

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
0 comments
Author's latest blog post