Vue如何配置代理绕过跨域问题

跨域产生的原因?

由于浏览器的 同源策略,在出现 域名、端口、协议有一种不一致时,就会出现跨域,属于浏览器的一种安全限制。

解决跨域的方案

jsonp 跨域:动态创建script,再请求一个带参网址实现跨域通信.缺点就是只能实现 get 一种请求

function jsonp(url, jsonpCallback, success) {
     
  let script = document.createElement('script')
  script.src = url
  script.async = true
  script.type = 'text/javascript'
  window[jsonpCallback] = function(data) {
     
    success && success(data)
  }
  document.body.appendChild(script)
}
jsonp('http://xxx', 'callback', function(value) {
     
  console.log(value)
})

document.domain + iframe跨域:两个页面都通过js强制设置document.domain为基础主域,就实现了同域.但是仅限主域相同,子域不同的跨域应用场景

跨域资源共享CORS: 只服务端设置Access-Control-Allow-Origin即可,前端无须设置,若要带cookie请求:前后端都需要设置 CORS 需要浏览器和后端同时支持。IE 8 和 9 需要通过 XDomainRequest 来实现。 浏览器会自动进行 CORS 通信,实现 CORS 通信的关键是后端。只要后端实现了 CORS,就实现了跨域。 服务端设置 Access-Control-Allow-Origin 就可以开启 CORS。 该属性表示哪些域名可以访问资源,如果设置通配符则表示所有网站都可以访问资源。

nginx反向代理接口跨域:同源策略是浏览器的安全策略,不是HTTP协议的一部分。服务器端调用HTTP接口只是使用HTTP协议,不会执行JS脚本,不需要同源策略,也就不存在跨越问题

postMessage :这种方式通常用于获取嵌入页面中的第三方页面数据。一个页面发送消息,另一个页面判断来源并接收消息

// 发送消息端
window.parent.postMessage('message', 'http://test.com')
// 接收消息端
var mc = new MessageChannel()
mc.addEventListener('message', event => {
     
  var origin = event.origin || event.originalEvent.origin
  if (origin === 'http://test.com') {
     
    console.log('验证通过')
  }
})

WebSocket协议跨域:

var ws = new WebSocket("wss://echo.websocket.org");
ws.onopen = function(evt) {
     
  console.log("Connection open ...");
  ws.send("Hello WebSockets!");
};
ws.onmessage = function(evt) {
     
  console.log( "Received Message: " + evt.data);
  ws.close();
};
ws.onclose = function(evt) {
     
  console.log("Connection closed.");
}

上述介绍完毕,我这里想说的是,Vue脚手架解决跨域只能在开发时测试时使用,打包完毕,VueCLI解决跨域脱离环境就不能生效了
最简单的解决还是配置NGINX
更多详情:https://blog.csdn.net/liangcha007/article/details/84789837

SpringBoot的后端之前也解决过跨越问题
前后端分离项目也可以:
将dist包放到SpringBoot项目resource的static文件夹下,配置一下模板渲染(或者把dist里的内容直接放template包下),使前后端项目不跨域
SpringBoot后端配置跨域:
比如:https://www.cnblogs.com/XtsLife/p/11383451.html

你可能感兴趣的:(Vuejs学习,nginx,vue.js,前端,前端框架,javascript)