跨域:当前页面中的某个接口请求的地址和当前页面的地址如果协议、域名、端口有一项不同,就说明跨域了。
跨域限制的原因:浏览器为了保证网页的安全,出台了同源协议策略。
跨域报错信息:
跨域解决方案:
CORS:目前最常用的一种解决方案,通过设置后端允许跨域实现(在服务端响应客户端的时候,请求头中带上Access-Control-Allow-Origin,“*”)。
// 设置允许跨域访问该服务, cors
app.all('*', function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type','mytoken');
next();
});
JSONP:实现原理:1、动态创建一个script标签。2、将目标数据的地址放到script标签的src属性中,并在请求地址中拼接callback参数并携带回调函数名。3、定义回调函数,当数据请求成功之后,回调函数被调用。 JSONP有着明显的缺点,即其只能支持GET请求
代理:
// vue 的开发服务器代理配置
// vue.config.js
module.exports = {
devServer: { // 配置开发服务器
proxy: { // 配置代理
"/api": { // 若请求路径以 /api 开头
target: "http://dev.taobao.com", // 将其转发到 http://dev.taobao.com
},
},
},
};