写了个前后端分离项目,前端使用Vue3,后端使用SpringBoot。虽然都运行在本地,都可以通过localhost访问,但问题在于端口号不一样,一样会触发跨域问题。尤其是浏览器对Cookies的限制最严格,根本不能在跨域的状态下正常运行。

设置请求头
如果不考虑Cookies的问题,普通的POST、GET等请求可以通过HttpHeader来告诉浏览器允许跨域。
response.setHeader("Access-Control-Allow-Origin", "http://localhost:5173") //填前端的网络地址
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
response.setHeader("Access-Control-Allow-Headers", "*")这样设置好以后就可以和后端API进行交互了,但是浏览器会忽略Set-Cookie字段,发送请求也不会携带Cookie,如果需要Cookie鉴权就不行了。
设置Cookie属性等
网上的一个方法,说是可以允许Cookie跨域,但是我试过后,还是不行。(文章地址)
再套一层代理
直接从源头解决,既然跨域那么麻烦,不跨域不就行了。用Nginx代理前端地址和后端地址,全部映射到本地的80端口,不仅能解决跨域问题,还不用另外去记各个服务的端口号了。
这里给出Nginx配置:
server {
listen 80;
server_name localhost;
# Spring-Boot后端 80
location /api/{
rewrite ^/api(/.*)$ $1 break; # 删除前缀
proxy_pass http://localhost:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# Vue前端 80
location /{
proxy_pass http://localhost:5173;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}各位如果觉得有用请点击下方的打赏,扫描二维码给我投币,创作不易,感谢支持!