Java + Vue前后端之间跨域问题完美解决
一、前言最近做了一个云服务相关的项目,整个系统架构:前后端彻底分离,前端采用Vue.js开发,后端采用Java开发,前后端通过接口耦合。笔者负责后端的开发,亲身经历了前端的跨域问题,并完美解决,下面介绍解决方案。二、问题浏览器对javascript同源策略的限制,导致a.cn不能访问b.cn的接口和数据,因为a.cn和b.cn不同源。什么是同源?(同域名+同端口+同协议)#协议跨域http://a
·
一、前言
最近做了一个云服务相关的项目,整个系统架构:前后端彻底分离,前端采用Vue.js开发,后端采用Java开发,前后端通过接口耦合。
笔者负责后端的开发,亲身经历了前端的跨域问题,并完美解决,下面介绍解决方案。
二、问题
- 浏览器对javascript同源策略的限制,导致a.cn不能访问b.cn的接口和数据,因为a.cn和b.cn不同源。
- 什么是同源?(同域名+同端口+同协议)
#协议跨域
http://a.com
https://a.com;
#端口跨域
http://a.com:1060
http://a.com:1061;
#域名跨域
http://a.com
http://b.com;
跨域错误提示(一般都会出现上述字样。)
login:1 Access to XMLHttpRequest at 'https://a.com/login'
from origin 'https://b.com' has been blocked by "CORS" policy:
Request header field oniontoken is not allowed by "Access-Control-Allow-Headers" in preflight response.
三、解决方案
分两种情况,一种是针对开发阶段,另一种是针对生产阶段。
3.1 开发阶段:
这时候出现跨域直接前端做个代理即可完美解决
3.2 生产阶段:
3.2.1 使用nginx代理:
除了3.1章节介绍的在前端工程配置文件里配置代理外,还需要在部署vue静态资源文件时,在nginx.conf配置文件中加上后台服务的地址和端口:
参考完整nginx.conf:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8080; # 前端监听端口
server_name localhost;
root /usr/vuejs/nginx/; #首页地址
index index.html; #首页
location / {
}
location ~^/server1[/\w*]*$ {
proxy_pass http://122.51.154.61:8086;
}
location ~^/server2[/\w*]*$ {
proxy_pass http://122.51.154.61:8088;
}
}
}
- 说明:
服务1: server1:8086
服务2: server2:8088
- 举例:假设前端部署在122.51.154.61上,访问前端主页:
122.51.154.61:8080/index.html
- 前端访问后台服务接口方式:
122.51.154.61:8086/server1/login
122.51.154.61:8088/server2/api/findAll
四、尾声
可能还有其他方法解决vue跨域问题,比如后端代码层面实现,代理域名实现等... 这里暂不做研究。
😁 作者:Teddy (公众号:鸡仓故事汇)
ok!到这里就大功告成,小编(Teddy)在这里先感谢大家的到来。
虽然不是太详细,小编已经很努力,给小编来个一键三连(点赞,关注,收藏),小编会越来越努力。。。
更多推荐
所有评论(0)