欢迎光临散文网 会员登陆 & 注册

【跨域请求】【前端】什么是CORS,教你解决跨域问题

2023-03-08 21:57 作者:目标力扣Knight  | 我要投稿

跨域请求原理模拟以及解决

项目文件结构

 ├── bin
 ├── index.html
 ├── index.js
 ├── node_modules
 ├── package-lock.json
 ├── package.json
 ├── public
 ├── routes
 └── views

整体思路

90端口是客户端,91端口是服务端。在模拟跨域时,使用浏览器访问了90端口,而90端口返回的H5文件中包含了请求91页面的脚本

此时由于本地IP相同端口不同,发生了跨域现象;

  1. 方案一,通过在服务器端修改响应头实现允许跨域
  2. 配置js文件 D:\BaiduSyncdisk\Frontend\nodejsPro\index.js
 var express = require('express');
 
 var app = express();
 app.use(express.static(__dirname));
 app.listen(90);
 
 var app2 = express();
 app2.get('/', function(req, res){
  // 1. 修改响应头。是服务端配置允许同源策略吗?
  res.header('Access-Control-Allow-Origin', '*');
  res.send("您好");
 })
 app2.listen(91);
  1. 修改默认响应页面的脚本 D:\BaiduSyncdisk\Frontend\nodejsPro\index.html
 <body>
   <h4>Hello everyone!</h4>
   <script>
     fetch("http://localhost:91/").then(res=>res.text()).then(data=>{alert(data)})
   </script>
 </body>
  1. 方案二: JSON, 即利用H5中开放策略的 script标签捕获其他页面的JS脚本
  2. H5页面编写函数和跨域脚本 D:\BaiduSyncdisk\Frontend\nodejsPro\index.html
 <!DOCTYPE html>
 <html lang="en">
 <head>
   <meta charset="UTF-8">
   <title>Title</title>
 </head>
 <body>
   <h4>Hello everyone!</h4>
   <script>
     function f(data) {
       alert(data);
       console.log(typeof data);
    }
   </script>
   <script src="http://localhost:91?callback=f"></script>
 </body>
 </html>
  1. 服务端定制回调参数 D:\BaiduSyncdisk\Frontend\nodejsPro\index.js
 var express = require('express');
 
 // 90端口是客户端,91端口是服务端。在模拟跨域时,使用浏览器访问了90端口,而90端口返回的H5文件中包含了请求91页面的脚本
 // 此时由于本地IP相同端口不同,发生了跨域现象;
 var app = express();
 app.use(express.static(__dirname));
 app.listen(90);
 
 var app2 = express();
 app2.get('/', function(req, res){
   var funcname = req.query.callback;
   res.send(funcname + "('您好')");
 })
 app2.listen(91);
  1. 参考与引用
 # 创建NodeJS项目
 https://www.cnblogs.com/chongsaid/p/nodejs_getStart.html
 # Jsonp定义
 https://zh.wikipedia.org/wiki/JSONP
  1. 121


【跨域请求】【前端】什么是CORS,教你解决跨域问题的评论 (共 条)

分享到微博请遵守国家法律