跨域问题的三种解决方案

213 阅读2分钟

跨域

说起跨域,我们不得不提的是同源 什么是同源呢? 同源= 协议 +域名 +端口 , 同源策略是指,若页面的源和页面运行过程中加载的源不一致时,出于安全考虑,浏览器会对跨域的资源访问进行一些限制**
当发送网络请求时,只要其中任何一个不相同,我们都称之为跨域

解决跨域问题的方式,常见的有:

  • 代理
  • CORS
  • JSONP

1JSONP 方案

JSONP的做法是:当需要跨域请求时,不使用AJAX,转而生成一个script元素去请求服务器,由于浏览器并不阻止script元素的请求,这样请求可以到达服务器。服务器拿到请求后,响应一段JS代码,这段代码实际上是一个函数调用,调用的是客户端预先生成好的函数,并把浏览器需要的数据作为参数传递到函数中,从而间接的把数据传递给客户端

JSONP有着致命的缺陷就是只能发送get请求,现在用的并不是很多

2 CORS 方案

这个方案主要是后端来做的,后端设置响应头,允许资源共享

//调用方法创建一个服务器
  const app = express()
//解析json格式的请求体
  app.use(express.json())
//解析查询字符串格式的
  app.use(exoress.urlencoded({extended:true}))
//第一种: 使用中间件函数来设置cors允许资源共享
  app.use((req.res.next)=>{
    //设置响应头 告诉浏览器任何地址都可以访问这个接口
    res.setHeader('Access-Cosntrol-Allow-Origin','*')
    //告诉浏览器支持这些方式
    res.setHeader('Access-Cosntrol-Allow-Methods','GET,POST,DELETE,PUT')
    next()
  })
//第二种 推荐使用插件
  const cors = require('cors')
  app.use(cors())

3 proxy代理方案

image.png

代码写在 vue-confog.js下的devserver中

image.png

修改配置之后,重启项目,