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 &&和||运算法的另类使用技巧
Nov 28 Javascript
JavaScript浏览器选项卡效果
Aug 25 Javascript
有关javascript的性能优化 (repaint和reflow)
Apr 12 Javascript
JavaScript排序算法之希尔排序的2个实例
Apr 04 Javascript
JQuery遍历json数组的3种方法
Nov 08 Javascript
jQuery动态创建元素以及追加节点的实现方法
Oct 20 Javascript
webpack入门必知必会
Jan 16 Javascript
vue组件间通信子与父详解(二)
Nov 07 Javascript
vue+vue-router转场动画的实例代码
Sep 01 Javascript
深度了解vue.js中hooks的相关知识
Jun 14 Javascript
Vue数据双向绑定原理实例解析
May 15 Javascript
vue 防止页面加载时看到花括号的解决操作
Nov 09 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中的escape函数
2013/06/29 PHP
PHP 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
php生成shtml类用法实例
2014/12/09 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
PHP SOCKET编程详解
2015/05/22 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
jQuery实现的form转json经典示例
2017/10/10 jQuery
关于Vue组件库开发详析
2018/07/01 Javascript
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
Vue 动态组件与 v-once 指令的实现
2019/02/12 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
Node.js系列之发起get/post请求(2)
2019/08/30 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
详解python列表生成式和列表生成式器区别
2019/03/27 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
Python笔记之facade模式
2019/11/20 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
python 批量将中文名转换为拼音
2021/02/07 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
网站设计师的岗位职责
2013/11/21 职场文书
电子商务系毕业生自荐信
2014/05/29 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript