react-解决 fetch 跨域问题:Access to fetch at xxx from origin yyy has been blocked by CORS policy

1、报错

在这里插入图片描述

2、解决

方法一:修改 package.json

在 package.json 中添加代码

"proxy": "http://tingapi.ting.baidu.com" // 这是你要访问的域

然后重新运行,否则会报如下错误:修改了 package.json 需要重启
在这里插入图片描述
请求成功:
在这里插入图片描述

方法二:使用 http-proxy-middleware(常用)

安装

cnpm install http-proxy-middleware --save

配置:在 src 下新建一个 setupProxy.js ,添加如下代码

const proxy = require('http-proxy-middleware')

module.exports = function (app) {
  app.use(
    'api',
    proxy({
      target: 'http://localhost:3100', // 你要访问的地址
      changeOrigin: true
    })
  )
}

重启遇到问题:
在这里插入图片描述
百度之后,在一篇博客中发现原来是 http-proxy-middleware 版本更新带来的问题

0.x.x版本的引用方式
const proxy = require('http-proxy-middleware');
1.0.0版本的引用方式
const { createProxyMiddleware } = require('http-proxy-middleware');

修改成以下,重启

const { createProxyMiddleware } = require('http-proxy-middleware')

module.exports = function (app) {
  app.use(
    'api',
    createProxyMiddleware({
      target: 'http://localhost:3100',
      changeOrigin: true
    })
  )
}

成功


3、关于跨域

常用解决方法:

  • jsonp
  • CORS
  • 代理 proxy

3.1 什么是跨域

在这里插入图片描述

3.2 常用解决方案

开发模式下:react、vue都提供了解决方案
生产模式下:jsonp、cors、iframe、postMessage、……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值