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 相关文章推荐
求解开jscript.encode代码的asp函数
Feb 28 Javascript
动态表格Table类的实现
Aug 26 Javascript
神奇的7个jQuery 3D插件整理
Jan 06 Javascript
js模拟hashtable的简单实例
Mar 06 Javascript
浅析JavaScript中命名空间namespace模式
Jun 22 Javascript
JavaScript中数组的22种方法必学(推荐)
Jul 20 Javascript
JavaScript箭头(arrow)函数详解
Jun 04 Javascript
javascript ES6 新增了let命令使用介绍
Jul 07 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
Jan 23 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
Nov 01 Javascript
vue实现购物车功能(商品分类)
Apr 20 Javascript
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
详解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中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
use jscript List Installed Software
2007/06/11 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
Python是编译运行的验证方法
2015/01/30 Python
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
python计算文本文件行数的方法
2015/07/06 Python
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
浅谈Python爬虫基本套路
2019/03/25 Python
python游戏开发之视频转彩色字符动画
2019/04/26 Python
Python class的继承方法代码实例
2020/02/14 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
银河香水:Galaxy Perfume
2019/03/25 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
宣传保护环境的公益广告词
2014/03/13 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
中职生求职信
2014/07/01 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
小学师德师风整改措施
2014/10/27 职场文书
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android