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 相关文章推荐
解读IE和firefox下JScript和HREF的执行顺序
Jan 12 Javascript
jQuery学习笔记之Helloworld
Dec 22 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
Apr 12 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
Sep 13 Javascript
三种方式获取XMLHttpRequest对象
Apr 21 Javascript
JS实现的颜色实时渐变效果完整实例
Mar 25 Javascript
浅谈js中的引用和复制(传值和传址)
Sep 18 Javascript
vue小白入门教程
Apr 02 Javascript
基于Vue2x的图片预览插件的示例代码
May 14 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
Nov 23 Javascript
Vue混入mixins滚动触底的方法
Nov 22 Javascript
Vue的data、computed、watch源码浅谈
Apr 04 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实现仿Google分页效果的分页函数
2015/07/29 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
webpack4.x CommonJS模块化浅析
2018/11/09 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
python登录QQ邮箱发信的实现代码
2013/02/10 Python
python的urllib模块显示下载进度示例
2014/01/17 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
在Python的Django框架中加载模版的方法
2015/07/16 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
基于python实现音乐播放器代码实例
2020/07/01 Python
python 读取、写入txt文件的示例
2020/09/27 Python
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
小露珠教学反思
2014/04/30 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
求职导师推荐信范文
2015/03/27 职场文书
房屋质量投诉书
2015/07/02 职场文书
Django使用redis配置缓存的方法
2021/06/01 Redis
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers