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 相关文章推荐
javascript forEach通用循环遍历方法
Oct 11 Javascript
一个背景云变换js特效 鼠标移动背景云变化
Dec 28 Javascript
js中 关于undefined和null的区别介绍
Apr 16 Javascript
JS实现图片横向滚动效果示例代码
Sep 04 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
Nov 19 Javascript
jQuery中hide()方法用法实例
Dec 24 Javascript
学习JavaScript设计模式(多态)
Nov 25 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
Jul 01 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
Sep 12 Javascript
JavaScript如何获取一个元素的样式信息
Jul 29 Javascript
微信小程序监听用户登录事件的实现方法
Nov 11 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
Jul 22 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
用函数读出数据表内容放入二维数组
2006/10/09 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
php共享内存段示例分享
2014/01/20 PHP
php根据年月获取季度的方法
2014/03/31 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
php错误日志简单配置方法
2016/07/11 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
php 将json格式数据转换成数组的方法
2018/08/21 PHP
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
解析利用javascript如何判断一个数为素数
2016/12/08 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
2018/04/03 Javascript
JavaScript笛卡尔积超简单实现算法示例
2018/07/30 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
python实现矩阵乘法的方法
2015/06/28 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
django中模板的html自动转意方法
2018/05/27 Python
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
意大利奢侈品零售商:ilDuomo Novara
2019/09/11 全球购物
2014年开学第一课活动方案
2014/03/06 职场文书
帮一个朋友写的求职信
2014/08/09 职场文书
大学生心理健康教育心得体会
2016/01/12 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书