文章目录
- vue如何解决跨域
- 1. 什么是跨域
- 2. 如何解决
- 2.1 CROS(Cross-Origin Resource Sharing,跨域资源共享)
- 2.2 Proxy
- 2.2.1 使用webpack proxy
- 2.2.2 服务端代理转发
- 2.2.3 通过nginx实现代理
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
- 就是找一个中间人作为代理,比如我们在使用webpack时,通过proxy实现代理
- 具体看这篇文章
一文大白话讲清楚webpack进阶——11——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;}
}