【跨域请求】【前端】什么是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相同端口不同,发生了跨域现象;
- 方案一,通过在服务器端修改响应头实现允许跨域
- 配置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);
- 修改默认响应页面的脚本
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>
- 方案二: JSON, 即利用H5中开放策略的
script
标签捕获其他页面的JS脚本 - 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>
- 服务端定制回调参数
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);
- 参考与引用
# 创建NodeJS项目 https://www.cnblogs.com/chongsaid/p/nodejs_getStart.html # Jsonp定义 https://zh.wikipedia.org/wiki/JSONP
- 121