记一次配置fiddler转发请求(HTTPS)不生效的解决过程

一、背景
同一个域名,其中一个前缀开头的请求需要分到192.168.187.170:8089才能正常访问,8089为web应用监听端口,也就是说这类特殊的请求不通过nginx处理

前提:公司网络架构为:nginx–>web应用–>rpc服务

二、首次配置
fiddler script OnBeforeRequest方法中增加如下配置

if (oSession.uriContains('www.zhuanzhuan.com') ){
    oSession.bypassGateway = true;
 	oSession["x-overridehost"] = "192.168.187.170:8089";
}

打开chrome,请求指定url,看是否生效
https://www.zhuanzhuan.com/aaaa/bbbb/cccc
在这里插入图片描述
在这里插入图片描述
页面显示“无法访问此网站”,chrome F12 控制台没有看到请求,并且fiddler Sessions中也没有看到请求;是不是https引起的呢?
使用http请求访问一下
在这里插入图片描述
可以看到接口可以正常返回,并且页面显示正确的结果

三、再战
通过第二章节的尝试,大概可以知道https请求处理不了,但是项目中因为涉及外部门,修改前端请求的url太麻烦,而且也没有真实的模拟线上环境,那么接下来就解决https代理的问题
先确认fiddler是否已经配置的监听https,检验通过,fiddler配置没有问题
在这里插入图片描述
在检查其他fiddler的其他配置时,才发现Rules中隐藏了CONNECTs,取消勾选;再次使用https访问请求
在这里插入图片描述
再次使用https请求url
在这里插入图片描述
在这里插入图片描述
这次虽然接口还是请求失败,但是起码有请求的记录了?,为啥http请求可以生效,https就失败呢?并且Tunnel to www.zhuanzhuan.com:443是干啥的咧?此处省略一顿google操作。。。
秘密在这https://www.joji.me/zh-cn/blog/the-http-connect-tunnel/
在这里插入图片描述
也就是说使用https时,浏览器需要先使用CONNECT请求一下域名的443端口,只有这次请求正常返回200时,才会继续进行真正的接口请求
修改fiddler脚本,在判断条件中增加!oSession.HTTPMethodIs(“CONNECT”),只有不是CONNECT的请求才修改host和端口

if (!oSession.HTTPMethodIs("CONNECT") &&oSession.uriContains('www.zhuanzhuan.com') ){
    oSession.bypassGateway = true;
    oSession["x-overridehost"] = "192.168.187.170:8089";
}

再次请求https的url
在这里插入图片描述
在这里插入图片描述
这又是什么鬼!!还是不行的喽,不过这个时候已经有了明确的错误信息了

四、终极之战
“由于意外的数据包格式,握手失败”这个信息好像很重要!这个时候我忽然想起来,公司的证书时配置在nginx上,本次需求时绕过nginx直接把请求打到web应用上,所以https 的CONNECT请求,web应用处理不了
那就再次修改fiddler script,把请求的url也改了嘛,改成http 不就好了?!修改如下,FiddlerObject.alert这个方法只是为了弹窗展示一下,修改之后的结果是否正确

if (!oSession.HTTPMethodIs("CONNECT") &&oSession.uriContains('www.zhuanzhuan.com') ){
    oSession.bypassGateway = true;
		
    //下面这两种方式,任选一种就行
	oSession.fullUrl = "http://www.zhuanzhuan.com" + oSession.PathAndQuery;
	//oSession.fullUrl = "http://192.168.187.170:8089"+oSession.fullUrl.Replace("https://www.zhuanzhuan.com","");
	FiddlerObject.alert("oSession.fullUrl: "+oSession.fullUrl+" oSession.PathAndQuery: "+oSession.PathAndQuery);
         	
	oSession["x-overridehost"] = "192.168.187.170:8089";
}

再次访问https的url,结果如下,可以正常返回了
在这里插入图片描述

五、总结
实现http请求分发到指定的ip:port有多种方式,AutoResponder 方式也满足需求。整个请求的处理链路需要熟悉,fiddler真实太强大了,目前还没有遇到fiddler处理不了的情况。

参考资料:https://www.joji.me/zh-cn/blog/the-http-connect-tunnel/

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值