开发中如何让本地host和代理共存?
开发中若遇到了需要相同域名的情况,比如利用cookie共享的sso策略,可以设置本地host映射到开发服务。设置域名,生效,正常开发。
但在公司中可能是内网,请求都需要经过代理,这时候可能会发现设置host没有作用。
此时可以将代理关掉,但关掉代理,sso的登录页却请求不通,而不用代理通常意味着不能上外网,查资料也不方便。
那么如何让代理和域名共存呢?
太长不看版:
- windows电脑中,在ie - 工具 - internert选项 - 链接 - 局域网设置 - 使用自动配置脚本选项下有个地址,通常就是本机使用的代理文件,以pac结尾。复制地址到浏览器,下载之。
- 搜索return "DIRECT”,找到直连的那些规则,复制一条,填入自己需要的开发域名。这些规则会直连,则会经过host,所以之后在本地host中设置对应的域名可生效。
- 如果ie设置不会定时重置,那么直接将地址填入ie设置中,本地文件地址也行。如果会重置,则使用chrome的Proxy SwitchOmega插件,选项 - 新建情景模式 - 选择pac,将上一步修改的pac文件内容填入,之后选择刚创建的模式。
- 前端开发的webpack devServer中需要将域名检测给去掉,使disableHostCheck为true即可。
来龙去脉版:
这里记录一下分析过程和结果。
我们都知道,设置host到自己的开发服务可以误导浏览器让其保留cookie,但如果在公司内网中情况却有些复杂。
一开始有点懵懂,只是简单设置了本地host,结果设置完后发现host没生效。一直在找为啥没生效,查找一番得到一些需要更新缓存的方法。但都实践之后发现没用。
之后求助同事,从同事那里得知是因为内网中,需要把代理关掉才行,不然没法生效。但关掉代理,本地开发虽然可以用域名,但sso的登陆页面没法上,后端服务都没法调用,肯定不行。
之后开始漫长的求解之路。
打开ie设置,找到pac文件地址,放入浏览器地址下载,打算看看是个什么东西。不看不知道,定睛一看还有些熟悉,这不就是js嘛。上网搜了一下pac的语法,大概知道这是一个代理规则定义文件。作用是根据不同的原请求地址来定义不同的请求方式,或者直连,或者转发到不同代理服务。
知道这一点后,我离答案就近了一步。
分析一下,代理服务本质上是个用来转法的服务。它受到请求,解析请求的原目标,然后自己去请求这个目标地址,得到结果之后返回给原请求。正经代理服务的行为大概如此,而开发服务同样可以接收请求并且返回,只是不能转发。
但开发服务不需要转发,那么第一个答案出现了,给pac文件添加一条规则,让域名解析到开发服务。由于开发服务的端口是8080,我则直接转发到了127.0.0.1:8080。如果不填写端口,则默认转法到80端口。
添加之后,保存新文件到本地,填入该地址到ie设置中。尝试用域名请求开发服务,无果。在这里其实犯了个错,只是地址填错了。但当时还以为不支持本地地址,启动了一顿nodejs服务来托管文件。nodejs托管后发现生效,更让我对此深信不疑。总之,这个设置是支持本地地址的。
设置完后还要设置webpack的devServer。
devServer默认会检测域名,用来预防dns rebinding attack,但这里是用不着的,所以可以去掉。设置完后用打开域名发现已生效。填写的域名没加端口,因为按规则直接会转发到8080端口。但webpack的devServer不知道,所以它一直报错,原因是它使用了当前的端口,而当前用域名来访问时让端口不一样了。解决方法也简单,设置中指定port。
这时候几乎可以正常开发,但没过一会儿发现ie设置被系统重置了,改成了之前的远程地址,想必是有个定时任务之类的。想着取消这任务,无果。随后网上找了个修改设置的bat脚本,但实际修改时发现生效很慢,遂放弃。
这时候已经相当郁闷了,搞了半天还是不能舒服开发?
后来翻翻chrome的Proxy SwitchyOmega插件,迎来转机,发现可以创建一个支持pac脚本的模式。填入之前的pac内容后,浏览器就可以忽略系统的pac设置。
这时候,几乎完美了。
但后来打算总结便打算继续看看host为啥不生效,看到有人说并非不生效,而时代理优先级高,发出的请求如果已经被代理规则处理,则通常会转发到明确的服务器,不需要host去解析域名,则使得host看起来未生效。在这个启发下,才找到了pac中直连+设置host的方法。
这个方法优点在于不限定端口,如果有多个开发服务也可以同时满足,并且devServer可以自动寻找端口。总体而言灵活一些 。
开发中如何让本地host和代理共存?的更多相关文章
- iOS - 开发中加载本地word/pdf文档说明
最近项目中要加载一个本地的word/pdf等文件比如<用户隐私政策><用户注册说明>,有两种方法加载 > 用QLPreviewController控制器实现 步骤 : & ...
- Ios开发中UILocalNotification实现本地通知实现提醒功能
这两天在做一个日程提醒功能,用到了本地通知的功能,记录相关知识如下: 1.本地通知的定义和使用: 本地通知是UILocalNotification的实例,主要有三类属性: scheduled time ...
- javascript设计模式与开发实践阅读笔记(6)——代理模式
代理模式:是为一个对象提供一个代用品或占位符,以便控制对它的访问. 代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问的是替身对 ...
- Android开发中无处不在的设计模式——动态代理模式
继续更新设计模式系列.写这个模式的主要原因是近期看到了动态代理的代码. 先来回想一下前5个模式: - Android开发中无处不在的设计模式--单例模式 - Android开发中无处不在的设计模式-- ...
- 在 Windows10 系统中安装 Homestead 本地开发环境
在 windows10 系统中安装 homestead 本地开发环境 在 windows10 环境下安装 homestead 开发环境,网上有很多相关教程其中大多都是 mac 环境,很多大神都是用户的 ...
- C#开发中使用配置文件对象简化配置的本地保存
C#开发中使用配置文件对象简化配置的本地保存 0x00 起因 程序的核心是数据和逻辑,开发过程中免不了要对操作的数据进行设置,而有些数据在程序执行过程中被用户或程序做出的修改是应该保存下来的,这样程序 ...
- Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- iOS开发 中的代理实现
iOS开发 中的代理实现 关于今天为什么要发这篇文字的原因:今天在和同事聊天的时候他跟我说项目中给他的block有时候不太能看的懂,让我尽量用代理写,好吧心累了,那就先从写个代理demo,防止以后他看 ...
- iOS开发中打开本地应用、打开appStore应用、给app评分功能实现
app开发中,通常会有邀请用户给app打分的功能.而在iOS中,正式应用都是通过appStore 下载的,因此给app 打分也只能在 appStore中.因此,需要从应用跳转到appStore.方法是 ...
随机推荐
- jchdl - RTL实例 - And
https://mp.weixin.qq.com/s/86d_sFN0xVqk1xRaRyoAkg 使用rtl语法,实现简单的与门. 参考链接 https://github.com/wjcdx ...
- ffmpeg转码步骤源码实现的一点点浅析
ffmpeg转码实现的一点点浅析 ffmpeg转码过程对解码的处理封装在process_input()中(process_input()->decode_video()->decode() ...
- STC15系列通用-STC15F2K60S2/STCW4K32S4读取DHT11温湿度传感器数据串口输出代码实例工程免费下载
//为了方便大家调试,另附程序工程共大家下载,下载地址:https://www.90pan.com/b1908750 //************************** //程序说明:stc ...
- PAT 锤子剪刀布
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第 1 行给出正整数 ...
- HDU - 3591 The trouble of Xiaoqian 题解
题目大意 有 \(N\) 种不同面值的硬币,分别给出每种硬币的面值 \(v_i\) 和数量 \(c_i\).同时,售货员每种硬币数量都是无限的,用来找零. 要买价格为 \(T\) 的商品,求在交易中最 ...
- HashMap(三)之源码分析
通过分析HashMap来学习源码,那么通过此过程我们要带着这几个问题去一起探索 为什么要学习源码 怎么去学习 0.1 为什么要学习源码 这个问题,直接给出结论,学习源码肯定是有好处的,比如: 学习优秀 ...
- 没有国产主机,怎么开发:交叉编译和QEMU虚拟机
1. 背景 近期国产化的趋势越来越浓,包括国产操作系统.国产CPU等.时隔十多年,QQ for Linux也更新了.做为软件开发人员,"有幸"也需要适配国产化.至于国产化的意义等就 ...
- SpringBoot后端系统的基础架构
前言 前段时间完成了毕业设计课题--<基于Spring Boot + Vue的直播后台管理系统>,项目名为LBMS,主要完成了对直播平台数据的可视化展示和分级的权限管理.虽然相当顺利地通过 ...
- redis 深入理解redis 主从复制原理
redis 主从复制 master 节点提供数据,也就是写.slave 节点负责读. 不是说master 分支不能读数据,也能只是我们希望将读写进行分离. slave 是不能写数据的,只能处理读请求 ...
- [转] 允许root通过ssh远程登录
点击阅读原文 在Ubuntu中允许root远程访问 如果使用如xshell等远程工具首次通过root连接Ubuntu会提示拒绝访问,并不是密码不正确,而是Ubuntu默认禁止以root远程连接. 我们 ...