Webpack devServer中的 proxy 实现跨域的解决


Posted in Javascript onJune 15, 2018

Webpack dev server使用http-proxy解决跨域问题

文档资料

webpack关于webpack-dev-server开启proxy的官方介绍

Vue-cli proxyTable 解决开发环境的跨域问题——虽然这篇是写vue的,不过用在webpack-dev-server上也是一样的

http-proxy-middleware——webpack-dev-server的实现方法其实是对这个的封装

配置http-proxy

在webpack的配置文件(webpack.config.js)中进行配置

module.exports = {
 ...此处省略一万字

 // webpack-dev-server的配置
 devServer: {
 historyApiFallback: true,
 hot: true,
 inline: true,
 progress: true,
 port: 3000,
 host: '10.0.0.9',
 proxy: {
 '/test/*': {
 target: 'http://localhost',
 changeOrigin: true,
 secure: false
 }
 }
 },

 ...此处省略一万字
};

上述配置中,关于http-proxy的只是 proxy:

 {...} 中的值

调用接口

为了方便起见,下面使用jquery封装好的ajax函数进行示范

$.ajax({
 // url: 'http://10.0.0.9:3000/test/testFetch/Login.php', // 这样不行
 url: '/test/testFetch/Login.php', // 这样行
 type: 'post',
 data: {
 app_id: '13751313169',
 password: '123456',
 user_name: 'Nicholas'
 },
 success: function(data) {
 console.log(data);
 }
});

proxy中的部分参数说明
'/test/*' 以及 target:
 'http://localhost'

从名字就能看出,这个实际上是将匹配 '/test/*' 这种格式的API的域名重定向为 'http://localhost'

结合上面的 “调用接口” 可以看出, url:
 '/test/testFetch/Login.php' 这句,实际上会自动补充前缀,也就是说,url:
 '/test/testFetch/Login.php' 等价于 url: 'http://10.0.0.9:3000/test/testFetch/Login.php'

但是,我们使用了http-proxy进行重定向,这样的话,url:
 '/test/testFetch/Login.php' 等价于 url: 'http://localhost/test/testFetch/Login.php'

changeOrigin

  • true/false, Default: false - changes the origin of the host header to the target URL
  • 本地会虚拟一个服务端接收你的请求并代你发送该请求——这个是别人的说法
  • 我试了一下,就算这个参数设置成 false 也有部分情况是可以的,具体原因不详,所以还是将其设置成 true 吧

secure

  • true/false, if you want to verify the SSL Certs

pathRewrite

例子: pathRewrite:
 {'^/api': ''}

Object-keys will be used as RegExp to match paths

我猜,这里是将 '^/api' 使用 '' 代替(只是我猜,没是成功,估计是我的正则表达式写得不行)

附上使用Fetch API的代码

上述代码与 “调用接口” 中使用 $.ajax() 实现的效果是一样的

let testAsync = async function () {
 var feeling = {
 app_id: '13751313169',
 password: '123456',
 user_name: 'Nicholas'
 };

 var fetchParams = {
 method: 'post',
 headers: {
 'Accept': 'application/json',
 'Content-Type': 'application/json'
 },
 credentials: 'include', // 将凭证也带上(例如cookies)
 body: JSON.stringify(feeling),
 };

 let temp = await fetch('/test/testFetch/Login.php', fetchParams).then(response => response.text());
 console.log(temp); // 这个就是一个json对象
 return temp;
};

let data = testAsync(); // async函数返回值是一个Promise对象
console.log(data); // 这个是一个Promise对象

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery tools系列 expose 学习
Sep 06 Javascript
浅谈jQuery中replace()方法
May 13 Javascript
如何让一个json文件显示在表格里【实现代码】
May 09 Javascript
JavaScript仿聊天室聊天记录
Dec 27 Javascript
jQuery滚动监听实现商城楼梯式导航效果
Mar 06 Javascript
利用JavaScript实现栈的数据结构示例代码
Aug 02 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
Feb 22 Javascript
vue页面离开后执行函数的实例
Mar 13 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
Apr 10 Javascript
JS将时间秒转换成天小时分钟秒的字符串
Jul 10 Javascript
原生js实现随机点餐效果
Dec 10 Javascript
利用js canvas实现五子棋游戏
Oct 11 Javascript
详解webpack的proxyTable无效的解决方案
Jun 15 #Javascript
vue中axios的封装问题(简易版拦截,get,post)
Jun 15 #Javascript
vue和webpack打包项目相对路径修改的方法
Jun 15 #Javascript
webpack公共组件引用路径简化小技巧
Jun 15 #Javascript
微信小程序自定义tab实现多层tab嵌套功能
Jun 15 #Javascript
微信小程序实现自定义modal弹窗封装的方法
Jun 15 #Javascript
详解vue组件开发脚手架
Jun 15 #Javascript
You might like
PHP爆绝对路径方法收集整理
2012/09/17 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
CSDN轮换广告图片轮换效果
2007/03/27 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
Angularjs中的页面访问权限怎么设置
2016/11/11 Javascript
js初始化验证实例详解
2016/11/26 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
微信小程序制作表格的方法
2019/02/14 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
python3 logging日志封装实例
2020/04/08 Python
python多进程下的生产者和消费者模型
2020/05/07 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
医科大学生的自我评价
2013/12/04 职场文书
理财学专业自荐书
2014/06/28 职场文书
党的生日演讲稿
2014/09/10 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
js中Object.create实例用法详解
2021/10/05 Javascript
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL
OpenFeign实现远程调用
2022/08/14 Java/Android