Webpack之proxyTable 解决开发环境的跨域问题

本文介绍如何利用Vue CLI中的proxyTable配置项解决跨域问题。通过设置target和changeOrigin参数,可以实现在开发环境中代理到目标服务器,避免浏览器同源策略限制。

和后端联调时总是会面对恼人的跨域问题,最近基于Vue开发项目时也遇到了这个问题,两边各自想了一堆办法,查了一堆资料,加了一堆参数,最后还得我把自己的localhost映射成上线时将要使用的域名。
今天翻看代码时,突然发现vue-cli的config文件里有一个参数叫proxyTable,看这个名字就感觉能解决问题,于是我就去搜了一下,果然。在vuejs-templates,也就是vue-cli的使用的模板插件里,有关于API proxy的说明,使用的就是这个参数。
https://vuejs-templates.github.io/webpack/proxy.html
这个参数主要是一个地址映射表,你可以通过设置将复杂的url简化,例如我们要请求的地址是api.xxxxxxxx.com/list/1,可以按照如下设置:

proxyTable: {
  '/list': {
    target: 'http://api.xxxxxxxx.com',
    pathRewrite: {
      '^/list': '/list'
    }
  }
}

这样我们在写url的时候,只用写成/list/1就可以代表api.xxxxxxxx.com/list/1.
那么又是如何解决跨域问题的呢?其实在上面的'list'的参数里有一个changeOrigin参数,接收一个布尔值,如果设置为true,那么本地会虚拟一个服务端接收你的请求并代你发送该请求,这样就不会有跨域问题了,当然这只适用于开发环境。增加的代码如下所示:

proxyTable: {
  '/list': {
    target: 'http://api.xxxxxxxx.com',
    changeOrigin: true,
    pathRewrite: {
      '^/list': '/list'
    }
  }
}

vue-cli的这个设置来自于其使用的插件http-proxy-middleware
github:https://github.com/chimurai/http-proxy-middleware
深入了解的话可以看该插件配置说明,似乎还支持websocket,很强大的插件。

Vue项目中,Webpack提供了proxyTable配置项,用于解决开发环境下的请求问题。通过配置proxyTable,可以将前端的请求代理到指定的后端服务器,从而绕过浏览器的同源策略限制。以下是具体的配置步骤和代码示例: 参考资源链接:[Vue开发中配置与Nginx部署详解](https://wenku.youkuaiyun.com/doc/645c986995996c03ac3ce2f8?spm=1055.2569.3001.10343) 1. 打开项目的config文件夹下的index.js文件。 2. 在dev环境的配置中找到proxyTable部分。 3. 设置代理规则,例如,将所有以'/api'开头的请求代理到后端服务。示例配置如下: ```javascript proxyTable: { '/api': { target: '***', // 指定后端服务地址 changeOrigin: true, // 处理,设置为true允许代理服务器修改请求头中的HOST字段 pathRewrite: { '^/api': '' // 重写请求路径,去除URL中的'/api' } } } ``` 这样配置后,前端发送的请求如`***`会被代理到`***`。 当项目从开发环境迁移到生产环境,并部署到服务器上时,需要对Nginx进行配置,以处理问题。Nginx可以通过设置适当的HTTP头信息来支持CORS,允许资源共享。以下是Nginx配置的示例: 1. 在Nginx配置文件中(通常位于`/etc/nginx/nginx.conf`或者`/etc/nginx/sites-available/`目录下),找到或创建一个server块。 2. 在该server块中,添加一个location块来指定需要支持的路径,并添加CORS相关的header配置: ```nginx location /api { proxy_pass *** 后端服务地址 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; # 添加CORS相关的header add_header 'Access-Control-Allow-Origin' '*'; # 可以指定名替代'*'以提高安全性 add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; } ``` 以上配置中,`Access-Control-Allow-Origin`字段设置了允许的源,`Access-Control-Allow-Methods`设置了允许的HTTP方法,`Access-Control-Allow-Headers`则定义了允许的HTTP请求头。 通过上述的Webpack和Nginx配置,即可在Vue项目中实现请求的处理,确保在开发和生产环境下的请求都能够正常进行。同时,建议仔细阅读官方文档和相关资料,以更深入理解配置的原理和细节。 参考资源链接:[Vue开发中配置与Nginx部署详解](https://wenku.youkuaiyun.com/doc/645c986995996c03ac3ce2f8?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值