开发中若遇到了需要相同域名的情况,比如利用cookie共享的sso策略,可以设置本地host映射到开发服务。设置域名,生效,正常开发。

但在公司中可能是内网,请求都需要经过代理,这时候可能会发现设置host没有作用。

此时可以将代理关掉,但关掉代理,sso的登录页却请求不通,而不用代理通常意味着不能上外网,查资料也不方便。

那么如何让代理和域名共存呢?

太长不看版:

  1. windows电脑中,在ie - 工具 - internert选项 - 链接 - 局域网设置 - 使用自动配置脚本选项下有个地址,通常就是本机使用的代理文件,以pac结尾。复制地址到浏览器,下载之。
  2. 搜索return "DIRECT”,找到直连的那些规则,复制一条,填入自己需要的开发域名。这些规则会直连,则会经过host,所以之后在本地host中设置对应的域名可生效。
  3. 如果ie设置不会定时重置,那么直接将地址填入ie设置中,本地文件地址也行。如果会重置,则使用chrome的Proxy SwitchOmega插件,选项 - 新建情景模式 - 选择pac,将上一步修改的pac文件内容填入,之后选择刚创建的模式。
  4. 前端开发的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和代理共存?的更多相关文章

  1. iOS - 开发中加载本地word/pdf文档说明

    最近项目中要加载一个本地的word/pdf等文件比如<用户隐私政策><用户注册说明>,有两种方法加载 > 用QLPreviewController控制器实现 步骤 : & ...

  2. Ios开发中UILocalNotification实现本地通知实现提醒功能

    这两天在做一个日程提醒功能,用到了本地通知的功能,记录相关知识如下: 1.本地通知的定义和使用: 本地通知是UILocalNotification的实例,主要有三类属性: scheduled time ...

  3. javascript设计模式与开发实践阅读笔记(6)——代理模式

    代理模式:是为一个对象提供一个代用品或占位符,以便控制对它的访问. 代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问的是替身对 ...

  4. Android开发中无处不在的设计模式——动态代理模式

    继续更新设计模式系列.写这个模式的主要原因是近期看到了动态代理的代码. 先来回想一下前5个模式: - Android开发中无处不在的设计模式--单例模式 - Android开发中无处不在的设计模式-- ...

  5. 在 Windows10 系统中安装 Homestead 本地开发环境

    在 windows10 系统中安装 homestead 本地开发环境 在 windows10 环境下安装 homestead 开发环境,网上有很多相关教程其中大多都是 mac 环境,很多大神都是用户的 ...

  6. C#开发中使用配置文件对象简化配置的本地保存

    C#开发中使用配置文件对象简化配置的本地保存 0x00 起因 程序的核心是数据和逻辑,开发过程中免不了要对操作的数据进行设置,而有些数据在程序执行过程中被用户或程序做出的修改是应该保存下来的,这样程序 ...

  7. Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  8. iOS开发 中的代理实现

    iOS开发 中的代理实现 关于今天为什么要发这篇文字的原因:今天在和同事聊天的时候他跟我说项目中给他的block有时候不太能看的懂,让我尽量用代理写,好吧心累了,那就先从写个代理demo,防止以后他看 ...

  9. iOS开发中打开本地应用、打开appStore应用、给app评分功能实现

    app开发中,通常会有邀请用户给app打分的功能.而在iOS中,正式应用都是通过appStore 下载的,因此给app 打分也只能在 appStore中.因此,需要从应用跳转到appStore.方法是 ...

随机推荐

  1. jchdl - GSL实例 - ComplementOne(一的补码)

    https://mp.weixin.qq.com/s/zZTnDdbCUCRGGpgpfAZsYQ   一的补码指对二进制数的每一位分别求补(二进制运算下0,1互为补数),实际运算即为对每一位取反.最 ...

  2. DOM对HTML元素的增删改操作和事件概念和事件监听

    DOM创建节点的方法: document.createElement(Tag),Tag必须是合法的HTML元素 DOM复制节点的方法: 节点cloneNode(boolean deep),当deep为 ...

  3. JAVASE(十八) 反射: Class的获取、ClassLoader、反射的应用、动态代理

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.反射(JAVA Reflection)的理解 1.1 什么是反射(JAVA Reflection) ...

  4. Java实现 LeetCode 516 最长回文子序列

    516. 最长回文子序列 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 ...

  5. C#基础篇——泛型

    前言 在开发编程中,我们经常会遇到功能非常相似的功能模块,只是他们的处理的数据不一样,所以我们会分别采用多个方法来处理不同的数据类型.但是这个时候,我们就会想一个问题,有没有办法实现利用同一个方法来传 ...

  6. KVM在线扩展虚拟机内存

    环境介绍 在KVM下有一台虚拟机内存不够需要扩展内存.宿主机地址是192.168.1.28.我需要扩展的虚拟机是centos1708vm03. 1.登陆上宿主机查看虚拟机配置 virsh dumpxm ...

  7. Android开源框架选择

    Android开源项目推荐之「网络请求哪家强」 Android开源项目推荐之「图片加载到底哪家强」 Android网络框架的封装 Android Volley+OkHttp3+Gson(Jackson ...

  8. MacOS配置.bash_profile,重启终端后配置失效和MacOS .zshrc does not exist问题

    MacOS配置.bash_profile,重启终端后配置失效和MacOS .zshrc does not exist问题 场景 ​ 在Mac中配置golang环境变量更改GOPATH路径,在~/.ba ...

  9. 【Transferable NAS with RL】2018-CVPR-Learning Transferable Architectures for Scalable Image Recognition

    Transferable NAS with RL 2018-CVPR-Learning Transferable Architectures for Scalable Image Recognitio ...

  10. <WP8开发学习笔记>动态修改启动时导航的第一个页面(如登录前启动页为LoginPage,登录后变为MainPage)

    很多时候我们需要在启动程序的时候根据状态改变初始导航页面,比如程序在启动的时候判断用户是否登录, 如果未登录则跳转到LoginPage.xaml否则跳转到MainPage界面. 这时候就要分析程序的启 ...