vue的proxy代理

本文探讨了浏览器的同源策略限制导致的跨域问题,介绍了Vue中使用proxy代理和Nginx反向代理的解决方案。重点讲述了如何配置Vue的devServer和nginx,让请求通过后端绕过浏览器的同源限制获取远程资源。
摘要由CSDN通过智能技术生成

一、跨域问题


        当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。
        出于浏览器的同源策略限制。同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻击。即便两个不同的域名指向同一个ip地址,也非同源。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)。

同源策略限制内容有:

Cookie、LocalStorage、IndexedDB 等存储性内容
DOM 节点
AJAX 请求发送后,结果被浏览器拦截了


有三个标签是允许跨域加载资源:

<img src=XXX>
<link href=XXX>
<script src=XXX>


        跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。        

二、vue解决跨域问题

   使用proxy代理,这种方法本质上仍然遵循了同源政策,只是换了一个请求的思路,将请求移至了后端。

同源政策是浏览器层面的限制。那么,如果我们不在前端跨域,而将“跨域”的任务交给后端服务,那么就规避了同源政策了。

(1)在Vue2中,proxy代理請求配置:

/config/index.js
proxyTable: {
    '/film': {
        target: 'https://m.maizuo.com',
        changeOrigin: true,
        pathRewrite: {
            '^/film': ''
        }
    },
},
(2)axios 请求部分:     
axios.get('/film/gateway.......’).then((res)=>{....})

        我们请求发送给devServer服务器,在由devServer服务器做一次转发,发送给数据接口服务器;请求发给devServer服务器不存在跨域(同源),而devServer请求是服务器与服务器之间,不存在跨域问题。这样就做到了http://localhost:8080//film/gateway请求https://m.maizuo.com/gateway的资源

(3)部署到nginx服务器,转发请求。

        使用 nginx 反向代理实现跨域,是最简单的跨域方式。只需要修改 nginx 的配置即可解决跨域问题,支持所有浏览器,支持 session,不需要修改任何代码,并且不会影响服务器性能。

        我们只需要配置nginx,在一个服务器上配置多个前缀来转发http/https请求到多个真实的服务器即可。

server {
    listen 80;
    server_name xxx.xxx.xxx.xxx;
    charset utf-8;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    client_max_body_size 75M;

    location /static {   
		alias /data/dist/static/;
	}
 
	location ^~/film/{       
		proxy_pass https://m.maizuo.com/;    #请求转向服务器
		add_header Content-Type "text/plain;charset=utf-8";
		add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Allow-Credentials' 'true';
		add_header 'Access-Control-Allow-Methods' 'GET, POST';	
	}
	location / {            
		root /data/dist/;    #根目录
		index index.html index.htm;     #默认页面,入口文件
	}

}

也可以先用vue搭建一个本地服务器运行打包后dist文件

1.npm install -g http-server

2.开启服务:  http-server ./dist

3.会出现访问地址,浏览器预览即可

参考链接:

跨域的几种解决方案_dralexsanderl的博客-CSDN博客_跨域解决方案

Vue中,可以使用代理proxy)配置来实现服务器代理代理配置可以在项目的vue.config.js文件中进行设置。通过使用代理,可以将前端请求发送到指定的后端接口地址。代理配置可以根据请求路径的不同进行匹配,并将请求转发到对应的后端接口。 在vue.config.js文件中,通过devServer的proxy属性来配置代理。可以为不同的请求路径设置不同的target(后端接口地址),changeOrigin(改变请求源),ws(启用WebSocket代理),secure(禁用安全检查)等属性。 例如,如果需要将请求路径以/abc开头的请求代理到http://XX.XX.XX.XX:8081这个后端接口地址,可以在proxy中进行如下配置: ```javascript devServer: { proxy: { "/abc": { target: "http://XX.XX.XX.XX:8081", changeOrigin: true, ws: true, secure: false } } } ``` 这样,在前端发送的请求中,以/abc开头的请求将被代理到http://XX.XX.XX.XX:8081这个后端接口地址。 另外,如果需要监测多个接口并进行代理,可以在proxy中写多个配置,每个配置对应一个目标后端接口地址。例如: ```javascript devServer: { proxy: { "/zzz": { target: "http://XX.XX.XX.XX:8082", changeOrigin: true, ws: true }, "/xxx": { target: "http://XX.XX.XX.XX:8083", changeOrigin: true, ws: true } } } ``` 这样,请求路径以/zzz开头的请求将被代理到http://XX.XX.XX.XX:8082这个后端接口地址,而请求路径以/xxx开头的请求将被代理到http://XX.XX.XX.XX:8083这个后端接口地址。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值