react 、vue 跨域
何为跨域:当当前页面地址的协议、域名、端口三者之间任意一个与请求地址的不同即为跨域
当前页面地址 | 被请求的地址 | 是否跨域 | 原因 |
---|
http://www.hxhshr.com:8080/ | http://www.hxhshr.com:8080/login | 否 | 同源(协议/域名/端口号相同) | http://www.hxhshr.com:8080/ | https://www.hxhshr.com:8080/ | 跨域 | 协议不同(http/https) | http://www.hxhshr.com:8080/ | http://bbb.hxhshr.com:8080/ | 跨域 | 域名不同(www/bbb) | http://www.hxhshr.com:8080/ | http://www.hxhshr.cn:8080/ | 跨域 | 域名不同(com/cn) | http://www.hxhshr.com:8080/ | http://www.bbb.com:8080/ | 跨域 | 域名不同(hxhshr/bbb) | http://www.hxhshr.com:8080/ | http://www.hxhshr.com:8081/ | 跨域 | 端口号不同(8080/8081) |
解决跨域方法1:http-proxy-middleware中间件
前提:
//新版node中-save参数可以省略不写
npm i http-proxy-middleware
第一步:在src目录下新建setupProxy.js文件(文件名称必须是这个)
然后写入
const { createProxyMiddleware } = require("http-proxy-middleware");
module.exports = function (app) {
app.use(
createProxyMiddleware("/api", {
target: "http://localhost",
changeOrigin: true,
logLevel: "debug",
pathRewrite: { "^/api": "" },
}),
createProxyMiddleware("/apq", {
target: "http://localhost:8080",
changeOrigin: true,
pathRewrite: { "^/apq": "" },
})
);
};
配置说明:我这个文件可以代理多个,这就为以后项目做大了,有很多台服务器做准备,一个createProxyMiddleware是一个代理,app相当于工厂,createProxyMiddleware是工厂里的房子。
当然配置多个代理你可以用多个工厂,一个工厂一个房子也行,只不过有点浪费,比如:
const { createProxyMiddleware } = require("http-proxy-middleware");
module.exports = function (app) {
app.use(
createProxyMiddleware("/api", {
target: "http://localhost",
changeOrigin: true,
logLevel: "debug",
pathRewrite: { "^/api": "" },
})
);
app.use(
createProxyMiddleware("/apq", {
target: "http://localhost:8080",
changeOrigin: true,
logLevel: "debug",
pathRewrite: { "^/apq": "" },
})
);
};
第二步:发送请求(利用axios)
前提下载axios
npm i axios
记得要文件引入axios import axios from "axios";
axios.get("/api/findUsers").then(
(res) => {
console.log(res);
},
(err) => {
console.log(err);
}
);
axios.get("/apq/findUsers1").then(
(res) => {
console.log(res);
},
(err) => {
console.log(err);
}
);
第三步测试:开启两台服务器一个80端口接口是/findUsers,一个8080端口接口是/findUsers1,
去前端测试吧: 启动项目: 浏览器:
|