详解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的数组的扩展实例代码
Jul 09 Javascript
检测jQuery.js是否已加载的判断代码
May 20 Javascript
jQuery 在光标定位的地方插入文字的插件
May 10 Javascript
js中的getAttribute方法使用示例
Aug 01 Javascript
jQuery实现隔行背景色变色
Nov 24 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
Sep 04 Javascript
解决JS请求服务器gbk文件乱码的问题
Oct 16 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
Apr 28 Javascript
AngularJS指令详解及示例代码
Aug 16 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
Jan 03 Javascript
react-router 路由切换动画的实现示例
Dec 03 Javascript
微信小程序实现音频文件播放进度的实例代码
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将session放入memcached的设置方法
2014/02/14 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
nodejs基础应用
2017/02/03 NodeJs
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
vue实现移动端省市区选择
2019/09/27 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
Python 从相对路径下import的方法
2018/12/04 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
学术会议欢迎词
2014/01/09 职场文书
八年级历史教学反思
2014/01/10 职场文书
ktv中秋节活动方案
2014/01/30 职场文书
学习决心书范文
2014/03/11 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
公积金接收函格式
2015/01/30 职场文书
信用卡工资证明范本
2015/06/19 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python
python中pymysql包操作数据库方法
2022/04/19 Python