vue如何解决跨域
1. 什么是跨域
- 跨域本质是浏览器的一种给予同源策略的安全手段,是浏览器最核心的安全功能
- 所谓同源就是要protocol协议相同,host主机相同哥port端口相同
- 反之就是非同源,也就是跨域
- 跨域的结果就是浏览器拿不到数据
2. 如何解决
2.1 CROS(Cross-Origin Resource Sharing,跨域资源共享)
- CROS是一个系统,他由一系列传输的HTTP头组成,这些HTTP头决定浏览器是否阻止前端JS代码获取跨域请求的响应
- CROS实现起来非常方便,只需要增加一些HTTP头,让服务器能声明允许的访问来源,只要后端实现了CROS,就实现了跨域
- 我们可以设置response的HTTP头
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
2.2 Proxy
2.2.1 使用webpack proxy
2.2.2 服务端代理转发
const express=require('express')
const proxy=require('http-proxy-middleware')
const app=express()
app.use('api/',proxy({
target:'http://localhost:8080',
changeOrigin:false
}))
2.2.3 通过nginx实现代理
server {
listen 80;
# server_name www.josephxia.com;
location / {
root /var/www/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://127.0.0.1:3000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}