使用webpack-dev-server解决跨域问题(详解)

首先,跨域问题的是如何产生的:浏览器的同源策略 (服务器可以不遵守)。

请求方式为XHR时,如果客户端和服务端之间满足三个条件中的任意一个都会产生跨域:

1.协议不同;2.域名不同;3.端口不同

只有协议、域名、端口都相同时才符合同源策略。

项目上线部署之后如果满足同源策略是不会产生跨域问题的,但是在前后端分离的主流模式下,开发时就一定会碰见跨域问题,利用dev-server解决跨域的原理:将所有ajax请求发送给devServer服务器,再由devServer服务器做一次转发,发送给服务器,由于ajax请求是发送给devServer服务器的,所以不存在跨域,而devServer由于是用node平台发送的http请求,自然也不涉及到跨域问题。借助这一特性,我们可以进行代理转发,利用 node 监听 web 服务器开启的端口,并进行代理转发;

在vue.config.js文件中配置devserver实现跨域的详解:

假设主机名为 localhost:8080 , 需要请求 API 的 url 是 http://192.168.2.3:8080/user/list

将'/api'设置为:http://192.168.2.3:8080, 那么在具体定义api的时候需要将api拼接成:'baseurl(http://localhost:8080)/api/user/list',通过devserver代理为(http://192.168.2.3:8080/user/list)

原因是不做任何处理时url是http://localhost:8080/user/list

proxy设置'/api'后代表对路径为/api开头的api做代理转发,那么需要首先在拼接url时拼上/api,即http://localhost:8080/api/user/list

然后代理主机名及端口(或者域名)http://localhost:8080/api/user/list 代理为 http://192.168.2.3:8080/api/user/list

但是多了/api,这不是理想的url,所以通过pathRewrite,将'/api'重写为'',url最终为http://192.168.2.3:8080/user/list



最终在封装http请求之后,将'/api'拼在path前面,即可实现跨域访问。



还有一个问题就是,现在后端基本都用微服务,或许不同模块,服务器会启用不同的端口,那么前端只配置单个字符串开头的代理便不够用了,

例如服务器还是192.168.2.3这个ip,但是用户模块服务端口为8080,角色模块服务端口为8081,这时就可以配置两个以解决模块化的问题。


将/user添加在后端api/user/getList的前面
将/role添加在后端api  /role/getRoleList的前面
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容