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 相关文章推荐
获得所有表单值的JQuery实现代码[IE暂不支持]
May 24 Javascript
jQuery ui插件的使用方法代码实例
May 08 Javascript
在jquery中combobox多选的不兼容问题总结
Dec 24 Javascript
点击弹出层效果&弹出窗口后网页背景变暗效果的实现代码
Feb 10 Javascript
JQuery表单验证插件EasyValidator用法分析
Nov 15 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
May 28 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
Sep 29 Javascript
如何用webpack4带你实现一个vue的打包的项目
Jun 20 Javascript
JavaScript循环遍历你会用哪些之小结篇
Sep 28 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
Jun 09 Javascript
webpack DllPlugin xxx is not defined解决办法
Dec 13 Javascript
利用vue3+ts实现管理后台(增删改查)
Oct 30 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中inlcude()性能对比详解
2012/09/16 PHP
PHP APC的安装与使用详解
2013/06/13 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
Laravel框架查询构造器 CURD操作示例
2019/09/04 PHP
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
12个非常有创意的JavaScript小游戏
2010/03/18 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
js Date概念详细介绍
2013/11/22 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
node.js中的console用法总结
2014/12/15 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
Python 基础教程之闭包的使用方法
2017/09/29 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
django解决订单并发问题【推荐】
2019/07/31 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
文明学生标兵事迹
2014/01/21 职场文书
春节请假条
2014/04/11 职场文书
爱我中华教学反思
2014/04/28 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python