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


Posted in Javascript onJanuary 13, 2018

文档资料

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'

  1. 结合上面的 “调用接口” 可以看出, url: '/test/testFetch/Login.php' 这句,实际上会自动补充前缀,也就是说,url: '/test/testFetch/Login.php' 等价于 url: 'http://10.0.0.9:3000/test/testFetch/Login.php'
  2. 但是,我们使用了http-proxy进行重定向,这样的话,url: '/test/testFetch/Login.php' 等价于 url: 'http://localhost/test/testFetch/Login.php'

changeOrigin

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

secure

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

pathRewrite

  1. 例子: pathRewrite: {'^/api': ''}
  2. Object-keys will be used as RegExp to match paths
  3. 我猜,这里是将 '^/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 相关文章推荐
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
Dec 08 Javascript
JSON格式化输出
Nov 10 Javascript
jQuery选择器及jquery案例详解(必看)
May 20 Javascript
JavaScript实现经典排序算法之选择排序
Dec 28 Javascript
js中作用域的实例解析
Mar 16 Javascript
jQuery Plupload上传插件的使用
Apr 19 jQuery
angularjs实现过滤并替换关键字小功能
Sep 19 Javascript
JavaScript实现的文本框placeholder提示文字功能示例
Jul 25 Javascript
Vue.js 十五分钟入门图文教程
Sep 12 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
Jun 11 Javascript
javascript面向对象三大特征之多态实例详解
Jul 24 Javascript
ES6中Set和Map用法实例详解
Mar 02 Javascript
vuejs实现递归树型菜单组件
Jan 13 #Javascript
在vue中通过axios异步使用echarts的方法
Jan 13 #Javascript
详解基于vue-cli配置移动端自适应
Jan 13 #Javascript
javascript用rem来做响应式开发
Jan 13 #Javascript
深入理解ES6之数据解构的用法
Jan 13 #Javascript
详解ES6语法之可迭代协议和迭代器协议
Jan 13 #Javascript
详解如何在React组件“外”使用父组件的Props
Jan 12 #Javascript
You might like
php下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
ThinkPHP的URL重写问题
2014/06/22 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
js textarea自动增高并隐藏滚动条
2009/12/16 Javascript
javascript一些实用技巧小结
2011/03/18 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
python通过yield实现数组全排列的方法
2015/03/18 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
2019/07/22 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
2020/09/16 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
傲盾软件面试题
2015/08/17 面试题
Linux操作面试题
2015/02/11 面试题
外贸业务员的岗位职责
2013/11/23 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers