开发者生态
morning
我通过将 GitHub Copilot 置于 MitM 代理后面学到了什么
摘要
Hello, Rafael here - every week I cover interesting challenges and developments that I’ve come across recently through the lens of an engineer building AI systems. Subscribe to get weekly issues 👇 The...
the
and
for
apps
Electron
that
features
would
desktop
they
2026-08-11
1 阅读
约6分钟阅读
j0selit0
字号:
你好,拉斐尔 - 每周我都会通过构建人工智能系统的工程师的视角来介绍我最近遇到的有趣的挑战和发展。订阅以获取每周期刊👇 在过去的几年里,出现了一系列由人工智能驱动的应用程序和人工智能功能。 Slack 等现有玩家已迅速将人工智能功能添加到其名单中。对于 Cursor、Notion、ChatGPT Desktop 和 Claude Desktop 等 AI 原生产品来说,AI 始终是其存在理由的一部分。这些应用程序发布的人工智能功能越多,我就越倾向于了解它们的内部运作方式。希望我能够揭示一些幕后运行的东西;至少,我会学习有关桌面应用程序开发的一两件事。巧合的是,我注意到我每个月越来越早地开始耗尽我的副驾驶积分。这最终促使我为我的实验选择一个主要候选者。我决定深入研究 VS Code 和 Copilot。上述所有应用程序的共同点是它们都是使用 Electron 构建的。 Electron 是一个 JavaScript 框架,可帮助开发人员构建和分发桌面应用程序。通俗地说,它的工作原理是将 Node.js 运行时与 HTML、CSS 和 JavaScript 工件捆绑在一起,然后通过 Chromium 进行渲染。使用 Electron 的应用程序列表。我知道,很多。源代码这消除了针对不同平台使用本机语言的多个代码库的需要(例如,用于 Windows 的 C# 和用于 macOS 的 Swift),使开发人员可以更轻松地从单个代码库构建跨多个平台运行的桌面应用程序。 (原生模块和某些打包步骤仍然经常需要针对每个平台进行处理,但大部分应用程序逻辑是共享的。)因为它们共享 Electron,所以它们共享一个粗略的架构,这意味着我在探索一个模块时学到的任何东西都应该转移到其他模块上。 Lighthouse Newsletter 是免费的 :) 通过与感兴趣的朋友同事分享来支持我的工作 👇 分享 我的第一反应是浏览 VS Code 源代码,看看它是否可以回答我的问题。问题是我还没有完整的问题集 - 在数百万行代码中寻找它们会花费我太多的时间或太多的令牌。源代码告诉您应用程序可以做什么;发现它在运行时实际做了什么更具挑战性。尤其是当您仍然不知道自己在寻找什么时。还有第二个问题。 VS Code 是我开始使用的应用程序中的一个例外:它的源代码(或至少大部分)是开放的。 Claude、ChatGPT、Codex、Notion 和 Slack 的情况并非如此。这开始推动我走向逆向工程路线:首先被动地观察流量,让请求和响应告诉我哪些问题值得提出,然后才去源头确认(或反驳)我所看到的内容。这意味着我要亲自接触 Electron 的架构和网络堆栈——事后掌握这些技能也没什么坏处。现在我们知道 Electron 应用程序随 Chromium 一起提供。浏览器为应用程序基于 Web 的 UI 提供渲染引擎,但它还提供渲染器进程可用于 HTTP 和 WebSocket 连接的网络堆栈。这是使应用程序能够与远程后端通信的常见(也是推荐)选项,但它并不是唯一的选项。应用程序还可以使用 Node 的 http/https/fetch 发出 HTTP 请求。当您尝试拦截请求时,请求采用的路径变得很重要。在某些情况下,例如 VS Code,应用程序将具有解耦架构,其中有一组单独的进程充当扩展主机。这有助于保持不同职责之间的清晰界限;就 VS Code 而言,UI、代码 IDE 功能和插件/扩展之间有清晰的界限。拦截应用程序网络流量的经典方法之一是建立代理服务器,并配置该应用程序以使用它。代理充当中间人 (MITM):它拦截来自客户端的 HTTP 请求,将其转发到服务器,并将服务器响应中继回客户端。有趣的事实:类似的方法在企业网络环境中用于流量检查的目的非常常见,尤其是在高度监管的行业中。恰当地,用于此目的的主要开源工具之一称为 mitmproxy ,我们将在接下来的步骤中使用它。一个重要的细节是,现在大多数网络流量都是通过安全 HTTP (HTTPS) 进行的。这意味着流量是使用 TLS 加密的。通过信任 mitmproxy 本地生成的证书颁发机构 (CA),客户端可以接受 mitmproxy 为每个目的地动态生成的证书。您将获得两个连接,而不是单个端到端加密连接:一个在应用程序和 mitmproxy 之间,另一个在 mitmproxy 和目标服务器之间。因此 mitmproxy 可以解密请求,insp
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱