【vue】令人头疼的 CORS

跨域:

浏览器抛出 No 'Access-Control-Allow-Origin' header is present on the requested resource的错误~

什么是 CORS 问题

跨域资源共享(CORS)是一种浏览器机制,它允许网页从不同的域请求资源。CORS 与同源策略(SOP)结合使用,控制不同源之间的资源共享。同源策略是浏览器强制执行的安全特性,防止网页在没有明确权限的情况下向不同源发送请求。而 CORS 则是允许特定源访问资源的机制。

浏览器出现CORS 错误,这通常是由于服务器未正确配置 CORS 头导致的。

相对简单的修复

修改后端添加适当的 CORS 头

Access-Control-Allow-Origin:将其设置为你的 Vue.js 应用的源,或者在开发期间使用通配符(*),但不推荐在生产环境中使用通配符。

Access-Control-Allow-Methods:允许的 HTTP 方法,如 GET, POST, PUT, DELETE, OPTIONS。

Access-Control-Allow-Headers:允许的请求头,如 Content-Type, Authorization。

Node.js Express 

  • app.use((req, res, next) => {
      res.header('Access-Control-Allow-Origin', 'http://your-vuejs-app.com');
      res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
      res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
      next();
    });
  • 当使用自定义请求头、非 GET/POST 方法或特定内容类型时,浏览器会发送一个预检 OPTIONS 请求。你需要确保服务器能够正确处理这些请求,并返回必要的头。

当后端由自己控制时,这是最简单的解决方案

但是……

跨域调用第三方 API 或资源

1、使用代理服务器

服务器(自己后端)的反向代理绕过浏览器的 CORS 限制。

2、CORS 代理(这个还没试过)

fetch('https://proxy.corsfix.com/?https://example.com/api')
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((err) => console.error(err));

dev模式下临时解决方案

1、浏览器 CORS 解除阻止器

浏览器扩展或设置可以暂时禁用 CORS

2、本地代理(常用)

module.exports = {
  devServer: {
    proxy: {
      '^/api': {
        target: '<url>',
        ws: true,
        changeOrigin: true,
      },
      '^/foo': {
        target: '<other_url>',
      },
    },
  },
};

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值