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中的隐式类型转换
Dec 05 Javascript
jsPDF导出pdf示例
May 02 Javascript
javascript实现图片循环渐显播放的方法
Feb 24 Javascript
基于jquery实现复选框全选,反选,全不选等功能
Oct 16 Javascript
jquery判断页面网址是否有效的两种方法
Dec 11 Javascript
jQuery日程管理插件fullcalendar使用详解
Jan 07 Javascript
通过构造函数实例化对象的方法
Jun 28 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
Mar 07 Javascript
Vue中使用canvas方法总结
Feb 12 Javascript
vue响应式系统之observe、watcher、dep的源码解析
Apr 09 Javascript
初学node.js中实现删除用户路由
May 27 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
Nov 08 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 服务器配置(使用Apache及IIS两种方法)
2009/06/01 PHP
使用php计算排列组合的方法
2013/11/13 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
PHP实现文件上传与下载
2020/08/28 PHP
javascript动画浅析
2012/08/30 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Python实现简易Web爬虫详解
2018/01/03 Python
pow在python中的含义及用法
2019/07/11 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
python飞机大战 pygame游戏创建快速入门详解
2019/12/17 Python
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
广告学专业自荐信范文
2014/02/24 职场文书
应用心理学专业求职信
2014/08/04 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书