自集成式 HTTP 代理方案

news2025/1/21 2:52:42

前言

大部分程序员,想必都会有一个常用的抓包代理工具;  

但在座的各位,可曾见过这样一款集成在 Web 应用中的代理工具?

,时长00:45

它是明显区别于传统代理工具的,有以下特性:

  • 零安装、零配置,Web 点击即用、APP 扫码即用;(不是开盖即食,而是直接喂到嘴里
  • 分享 URL 链接(或二维码),即可远程调试 HTTP 协助他人或调试移动设备
  • 用户可远程相互共享代理配置,无需手动导入导出

以一个场景举例

  1. 你是一个前端开发,当后端接口还没准备好(或有 Bug 时),产品或设计师想体验效果
  2. 传统办法,你配好接口 Mock,让产品使用你的设备体验
  3. 当前方案,你配好接口 Mock,发一个 URL 链接给产品即可远程体验

它的原理是将代理服务与应用(Web 网页或 APP)集成,从而大幅降低用户(研测产运)的使用成本。

图片

应用集成代理服务对应的 SDK,自动转发请求到代理服务

传统代理工具的主要成本

  • 下载安装代理程序,甚至收费
  • 配置系统代理(移动端更烦)、https 证书
  • 同事之间共享代理规则(手动导入导出文件)

这些成本带来各种烦恼,也将非技术岗位拒之门外。  

场景:中午去吃饭的时候,手机突然断网;原来是刚刚网络调试,配置了系统代理!

笔者曾尝试过多款代理工具,始终有不满意的地方,多年前在自己的开源项目 [Erra][1] 中探索新的代理方案,仍然不满意,遂放弃。  

现将 Erra 的代理服务与工作中的应用集成,借鉴 [whistle][2] 的规则,再重新实现 UI 交互,终觉尚可。

以下对比笔者曾长期使用过的代理工具。

Charles

LightProxy

FF-Proxy

下载安装 APP

配置操作系统代理

安装信任 HTTPS 证书

Mock 方式

UI

文本规则

UI + 文本规则

Mock 规则共享

导出规则文件

复制规则文本

在线分享

远程调试

通用 HTTP 请求代理

安装部署服务

该方案改进了工作中高频对特定应用(公司产品的域名、APP) 进行网络调试的体验和效率;

该方案是一个增强型能力,与通用代理工具(Charles、LightProxy 等)没有任何冲突,不会影响习惯使用通用代理工具的同学。

接下来介绍该方案的技术实现思路。

方案原理概览

图片

总结分为四个部分

  1. 与应用集成,将请求转发到代理服务,由代理服务转发请求到目标服务
  2. 代理服务提供网络调试界面(UI),允许用户查看网络请求、配置 Mock 规则
  3. 代理服务记录请求,并同步到 UI 界面
  4. 代理服务在转发请求前、收到响应后,按 Mock 规则篡改请求内容

应用集成

与应用集成是当前方案区别与代理工具的根本所在,也是能实现零安装、零配置便捷性的原因

集成是将代理服务对应的 SDK 注入到业务系统(网页或 APP)中,SDK 会拦截并转发请求到代理服务。

集成 SDK 的方式介绍以下两种,更多拦截注入技巧请阅读 [​​Web 终极拦截技巧(全是骚操作)​​][3]。

自动注入 SDK

1. 配置 DNS 使 `ff-*` (混合泛解析)指向代理服务,代理转发 html 请求时自动注入 SDK

  • 注入脚本示例`resp.body.replace('<head>', '<head><script src="/ff-sdk.js"></script>')`

2. 假设目标域名为 `live.bilibili.com`,使用 `ff-live.bilibili.com` 访问代理服务即可自动注入

该方式无需业务项目对接,适合多个域名(系统)需要接入的场景。

注:ff-sdk.js 即需要注入,在客户端环境运行的的 SDK

 手动注入 SDK

手动往前端项目的 HTML 中写入`<script src="/ff-sdk.js"></script>`

,或打包构建时自动注入。

接入项目较少,或没有 DNS 配置权限,则可采用该方式接入。

拦截转发请求

向页面注入 SDK(`ff-sdk.js`)后, 根据 URL Query 参数决定是否开启拦截转发请求。  

若 URL 参数包含 `ff-proxy-id` 即启动拦截转发,参数值是随机生成 id,用于隔离不同用户数据。  

拦截转发的实现原理是重写 `fetch, xhr, WebSocket` 等对象,将请求转到代理服务,如何转发请看下文请求变换协议;  

另外还需要重写 `open, a, iframe` 的目标链接,确保页面跳转(或嵌入)场景也能继续保持 URL 前缀(`ff-`)和 Query 参数(`ff-proxy-id`) 的状态。

// 接口性能监控,打开 https://example.com/, 在控制台执行以下代码
const _fetch = window.fetch;
window.fetch = (...args) => {
  const startTime = performance.now();
  return _fetch(...args).finally(() => {
    console.info('接口耗时:', Math.round(performance.now() - startTime), 'ms');
  });
};


await fetch('//example.com');

重写系统 API 以实现拦截的更多技巧,请阅读 [​​Web 终极拦截技巧(全是骚操作)​​][3]。

移动端 APP 支持

1. 向网络库注册一个拦截器

2. 扫描特制的二维码后,拦截器开始转发请求

3. 扫码后 APP 还需要修改 WebView 容器的 URL,添加前缀(`ff-`)和 Query 参数

   - 前缀和参数的内容在二维码中获取

HTTP 请求变换协议

SDK 拦截 HTTP 请求转到代理服务,然后还原再转到目标服务,其关键在于变换与还原请求的协议

原始请求,直接指向目标服务 (_以 curl 风格描述请求_)

`curl -v https://api.live.bilibili.com/test`

URL 添加前缀 `ff-` 请求会转到代理服务,因为代理服务注册了 DNS 混合泛解析规则`ff-*`;  

再添加 HTTP Header `x-ff-proxy-id` 用于隔离不同用户的数据。

`curl -v 'http://ff-api.live.bilibili.com/test' -H 'x-ff-proxy-id: xxx'`

代理服务移除 URL 中的前缀与 Header,即还原成原始请求,再发送给目标服务;  

同时,根据 `x-ff-proxy-id` 将该请求同步给对应 UI 界面。

代理服务与 UI 交互

图片

代理服务作为远程中心节点,跟客户端(UI界面)使用 WebSocket 保持通信,代理服务会按照 `ff-proxy-id` 只同步当前用户的数据,数据包括抓包记录、Mock 规则、资源。

资源是用来管理内容较大的 Request、Response body,方便用于 Mock 替换 HTTP 内容。

通过 URL `ff-proxy.bilibili.com/ui/` 即可访问 UI 界面。

图片

抓包

代理服务每次代理请求都会根据 `ff-proxy-id` 的值,将请求内容 copy 一份发送给客户端,这就实现了远程调试。  

所以该方案实现远程调试是非常自然的,传统代理工具相对麻烦是因为它工作在用户的设备上,远程调试必须通过手动设置系统代理来实现连接。

比如,手机上访问接口  

`curl -v 'http://ff-api.live.bilibili.com/test' -H 'x-ff-proxy-id: xxx'`

任何用户在任何设备上打开了 `ff-proxy.bilibili.com/ui/xxx` 页面, 即可远程看到请求的详细内容。

图片

Mock 规则

代理服务还能接受客户端提交的 Mock 规则,在转发请求前、收到响应后,按规则篡改请求内容。

支持对 HTTP 请求内容的基本修改(添加、删除、替换),即可满足绝大部分 Mock 诉求;  

HTTP 请求内容指

  • Request: URL、Header、Body,
  • Response: StatusCode、Header、Body

图片

规则借鉴了 [whistle][2] 并做了大量简化,同时也提供 UI 配置以降低使用门槛。

图片

规则解析

  1. 定义规则语法
  2. 使用 [peggy][4] 按语法将字符串解析为 AST(抽象语法树)
  3. 将 AST 转换为 js 函数实现
  4. 函数会检测代理的请求是否命中规则,命中后按规则描述篡权请求内容

规则相对简单,使用语法解析是为了保持扩展性,字符串处理多写几个条件判断也能实现。

数据存储

数据(Mock 规则、资源)存储在浏览器的 indexedDB 中,每次连接时同步到代理服务进行解析;  

所以,代理服务是一个干净的、只维持临时状态的服务,非常方便部署与扩展。

相对传统代理的缺点

方案的优点写在了文章开头,这里有必要总结一下缺点,感兴趣的同学自行斟酌。

  • 需要部署、维护代理服务
  • 该方案以系统维护者的一次性部署成本,交换多个用户安装、配置软件的成本
  • 有一定侵入性
  • 该方案不是一个透明的中间节点,会修改业务系统的行为(注入 SDK 拦截转发)
  • PS:DNS 集成方式,可让业务系统无感自动接入,最小化影响
  • 不具备通用性 
  • 该方案无法调试系统网络请求,无法调试未接入的业务系统、APP

总结

该方案的原理是将代理服务与应用集成,从而改进了工作中高频对特定应用进行网络调试的体验和效率。

所以,实施的前提是:一定的团队规模让(效率体验改进)收益大于付出(代理系统部署维护成本)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1673948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么?免费使用GPT-4o?

⭐简单说两句⭐ ✨ 正在努力的小叮当~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &a…

十一、 进行个人信息保护认证的流程是怎样的?

2022 年 11 月 18 日&#xff0c;国家市场监督管理总局和国家网信办发布的《认证公告》以及附件《认证规则》&#xff0c;对开展个人信息保护认证的流程进行了细节说明&#xff0c;包括认证委托、技术验证、现场审核、认证结果评价和批准等环节。《认证公告》指出“从事个人信息…

越来越真的Deepfake再次引起网安界的关注

当地时间5月6日&#xff0c;全球网络安全领域最受关注的年度盛会 RSAC 2024在美国旧金山隆重开幕。当天&#xff0c;被誉为“安全圈奥斯卡”的创新沙盒大赛也决出了冠军&#xff0c;Reality Defender凭借其创新性的深度伪造&#xff08;Deepfake&#xff09;检测平台摘得桂冠&a…

合合信息携手业界专家,解码数据资产管理方法与入表的关键路径

随着财政部印发的《企业数据资源相关会计处理暂行规定》提出企业数据资产入表相关办法&#xff0c;《数据资产评估指导意见》中进一步规范数据资产评估行为&#xff0c;细化数据资产评估操作要求&#xff0c;对解决数据要素市场建设中的“数据赋值”难题提供了有效方案。数据资…

直播预约丨《袋鼠云大数据实操指南》No.2:实时开发,如何成为数据智能化的有效驱动力

近年来&#xff0c;新质生产力、数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮&#xff0c;持续冲击并革新着企业数字化转型的观念视野&#xff0c;昭示着一个以数据为核心驱动力的新时代正稳步启幕。 面对这些引领经济转型的新兴概念&#xff0c;为了更好地服务于客户…

HCIA和HCIP区别大吗?小白请看这

华为认证以其专业性和实用性受到了业界的广泛认可。 HCIA、HCIP、HCIP这三个级别&#xff0c;你会选哪个&#xff1f;IE含金量不用多说&#xff0c;IA还是IP&#xff0c;你会纠结吗。 但面对这两个级别的认证&#xff0c;初学者或者“小白”们可能会感到困惑&#xff1a;两者…

【资源分享】EViews13-最好用的计算经济学工具

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

【论文复刻】堆叠柱状图+饼图

复刻了一下这篇论文里的fig2c&#xff1a;Impacts of COVID-19 and fiscal stimuli on global emissions and the Paris Agreement | Nature Climate Change 效果图&#xff1a; 主要步骤&#xff1a; 1. 数据准备&#xff1a;随机赋值 2. 图像绘制&#xff1a;绘制堆叠柱状…

邓闲小——生存、生活、生命|真北写作

人生有三个层次∶生存、生活、生命。 生存就是做必须做的事。生存的模式是邓&#xff0c;是交易&#xff0c;是买卖。别人需要的东西&#xff0c;你生产出来&#xff0c;卖给他。哪怕这个东西没啥用&#xff0c;也可以卖&#xff0c;情绪也可以卖。你需要的东西&#xff0c;你花…

e行64位V11.17.4 安卓全局虚拟定位APP

e行最新版11.17.4 支持全局虚拟位置 小米手机 百度地图 高德地图 实测成功 其他app自测 不一定支持所有app 下载&#xff1a;https://www.123pan.com/s/HAf9-tsyCh.html

人员密集场所电气火灾预警系统 对设备漏电、短路、发热进行监测预警

谢继东15821713522 安科瑞Acrelcloud-6000安全用电管理平台是针对我国当前电气火灾事故频发而创新的一套电气火灾预警和预防管理系统.系统通过物联网技术对电气引发火灾的主要因素&#xff08;导线温度、电流、电压和漏电流&#xff09;进行不间断的数据跟踪与统计分析&#xf…

【 第一性原理计算方法及应用】

第一性原理计算方法及应用述

河南地区评政工师 需要发网络文章和刊登论文要求是什么

河南省政工师评审文件是《河南省企业思想政治工作人员专业职务评定办法》豫企政职&#xff08;2010&#xff09;1号。该文件将河南省政工师职称划分为助理政工师、政工师、高级政工师、教授级高级政工师四类。其中&#xff0c;每一个级别的政工师都需要发表相关文件&#xff0c…

基于uniapp+vue3+ts小程序项目实战之项目初始化

&#x1f680; 作者 &#xff1a;“二当家-小D” &#x1f680; 博主简介&#xff1a;⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人&#xff0c;8年开发架构经验&#xff0c;精通java,擅长分布式高并发架构,自动化压力测试&#xff0c;微服务容器化k…

混淆矩阵实战

2.实战 1.加载数据 #加载数据 import pandas as pd import numpy as np data pd.read_csv(data_class_raw.csv) data.head()2.data.loc得到样本属性&#xff0c;并进行样本数据可视化 #可视化数据 %matplotlib inline from matplotlib import pyplot as plt#define X and y…

记一次ms17-010(永恒之蓝)漏洞复现

1.漏洞介绍: 永恒之蓝&#xff08;ms17-010&#xff09;爆发于2017年4月14日晚&#xff0c;是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限&#xff0c;以此来控制被入侵的计算机。甚至于2017年5月12日&#xff0c; 不法分子通过改造“永恒之蓝”制作了wannacry勒索病…

解锁!智能代码助手 Baidu Comate 硬核能力

近日&#xff0c;在全球软件开发大会上暨智能软件开发生态展上&#xff0c;来自 Baidu Comate 的资深研发工程师分享了精彩的专题演讲&#xff0c;小编整理了演讲精华&#xff0c;和大家一起玩转“大模型软件研发”。 今天带来——吴玮琦《智能代码助手 Baidu Comate 的核心能…

【MySQL数据库】初步认识数据库,实现基本操作

在信息爆炸的今天&#xff0c;数据无处不在&#xff0c;它们构成了互联网世界的基石。但数据本身若未经有效组织和管理&#xff0c;就如同散落在沙滩上的珍珠&#xff0c;难以发挥其真正的价值。这时&#xff0c;“数据库”这一概念便如同一根线&#xff0c;将这些珍珠串联起来…

黑马新出的SpringBoot3项目后端总结

基础篇-00_SpringBoot3_Vue3导学课程_哔哩哔哩_bilibili 这个是视频链接 这个新课程里面用了一些企业里会用的注解例如Validated这种&#xff0c;业务流程清晰明了简单上手&#xff0c;算是可以了解最基本的Springboot开发流程&#xff0c;方便上手和快速入门 主要是下面这几…

差异基因散点图绘制教程

差异基因散点图绘制教程 本期教程 小杜的生信笔记&#xff0c;自2021年11月开始做的知识分享&#xff0c;主要内容是R语言绘图教程、转录组上游分析、转录组下游分析等内容。凡事在社群同学&#xff0c;可免费获得自2021年11月份至今全部教程&#xff0c;教程配备事例数据和相…