[{"data":1,"prerenderedAt":101},["ShallowReactive",2],{"case-https-origin-cert-mismatch-zh":3,"blog-list-zh":13},{"slug":4,"title":5,"summary":6,"date":7,"featured":8,"seoDescription":9,"series":10,"seriesOrder":11,"html":12},"https-origin-cert-mismatch","源站证书与域名不匹配？DevPeek 为什么仍能正常抓包","DevPeek 检测到源站证书与 Host 不匹配时，不会静默忽略，也不会直接中断调试；网站和 HTTPS 明文仍可查看，同时会在请求详情中标记证书异常。","2026-09-14",false,"遇到 ERR_TLS_CERT_ALTNAME_INVALID 时，DevPeek 为什么仍能打开网站并查看 HTTPS 明文？本文说明源站证书、Host 与 SAN 的关系，以及 DevPeek 如何继续解密并明确报告证书风险。","api-debug-new-tricks",4,"\u003Cp>开着 SSL 代理访问一个网站，页面可以正常打开，请求头、请求体和响应内容也都能看到。\u003C/p>\n\u003Cp>但 DevPeek 在请求列表中标记了这条请求，请求详情顶部还显示：\u003C/p>\n\u003Cblockquote>\n\u003Cp>源站证书与主机名不符\u003C/p>\n\u003C/blockquote>\n\u003Cp>点开源站证书后，可能会发现当前访问的是：\u003C/p>\n\u003Cpre>\u003Ccode class=\"language-text\">admin.shop-example.com\n\u003C/code>\u003C/pre>\n\u003Cp>证书的 SAN（Subject Alternative Name）却只有：\u003C/p>\n\u003Cpre>\u003Ccode class=\"language-text\">*.cdn-host.cn\ncdn-host.cn\n\u003C/code>\u003C/pre>\n\u003Cp>这不是误报，也不代表 DevPeek CA 没有安装好。真正的问题是：\u003Cstrong>源站返回的证书无法证明它就是当前访问的域名。\u003C/strong>\u003C/p>\n\u003Cp>DevPeek 的选择不是静默忽略，也不是阻止你继续查看，而是：\u003C/p>\n\u003Col>\n\u003Cli>继续完成到源站的 TLS 连接；\u003C/li>\n\u003Cli>保留 HTTPS 解密和抓包能力；\u003C/li>\n\u003Cli>检查并记录源站证书异常；\u003C/li>\n\u003Cli>在请求列表和详情中明确提示风险；\u003C/li>\n\u003Cli>允许查看当时保存的源站证书。\u003C/li>\n\u003C/ol>\n\u003Cp>因为在调试场景里，证书问题本身也是需要观察和排查的信息。\u003C/p>\n\u003Ch2>先看懂 \u003Ccode>ERR_TLS_CERT_ALTNAME_INVALID\u003C/code>\u003C/h2>\n\u003Cp>一张 HTTPS 证书会在 SAN 中列出它可以代表哪些域名。\u003C/p>\n\u003Cp>例如：\u003C/p>\n\u003Cpre>\u003Ccode class=\"language-text\">访问 Host：admin.shop-example.com\n证书 SAN：*.cdn-host.cn, cdn-host.cn\n\u003C/code>\u003C/pre>\n\u003Cp>\u003Ccode>admin.shop-example.com\u003C/code> 不在证书允许的域名范围内，因此标准的 TLS 主机名校验会得到：\u003C/p>\n\u003Cpre>\u003Ccode class=\"language-text\">ERR_TLS_CERT_ALTNAME_INVALID\n\u003C/code>\u003C/pre>\n\u003Cp>它表达的不是“证书文件损坏”，而是：\u003C/p>\n\u003Cblockquote>\n\u003Cp>我连接的是 A，但对方拿出了一张只属于 B 的证书，所以我无法确认对方身份。\u003C/p>\n\u003C/blockquote>\n\u003Cp>这类问题常见于：\u003C/p>\n\u003Cul>\n\u003Cli>CDN 或 WAF 绑定了错误证书\u003C/li>\n\u003Cli>反向代理的 SNI 配置不正确\u003C/li>\n\u003Cli>DNS 指向了错误的服务\u003C/li>\n\u003Cli>测试环境复用了其它环境的证书\u003C/li>\n\u003Cli>Map Route 或内部网络把请求导向了另一台服务器\u003C/li>\n\u003Cli>源站直接使用了不覆盖当前域名的证书\u003C/li>\n\u003C/ul>\n\u003Cp>如果 Host 末尾带有一个点，例如 \u003Ccode>admin.shop-example.com.\u003C/code>，也值得一并检查。它是合法的 FQDN 写法，但少数代理、网关或 CDN 对这种形式处理不一致。\u003C/p>\n\u003Ch2>这和 DevPeek CA 不受信任不是一回事\u003C/h2>\n\u003Cp>SSL 代理会建立两段 TLS：\u003C/p>\n\u003Cpre>\u003Ccode class=\"language-text\">浏览器 / App\n      │\n      │ TLS：DevPeek 动态证书\n      ▼\n   DevPeek\n      │\n      │ TLS：源站证书\n      ▼\n     源站\n\u003C/code>\u003C/pre>\n\u003Cp>第一段是客户端到 DevPeek。客户端需要信任 DevPeek CA，才能接受 DevPeek 动态签发的调试证书。\u003C/p>\n\u003Cp>第二段是 DevPeek 到源站。这里看到的是源站真实返回的证书，也是本文讨论的问题所在。\u003C/p>\n\u003Cp>如果第一段不受信任，浏览器通常会提示：\u003C/p>\n\u003Cpre>\u003Ccode class=\"language-text\">NET::ERR_CERT_AUTHORITY_INVALID\n\u003C/code>\u003C/pre>\n\u003Cp>如果第二段的证书与访问 Host 不匹配，DevPeek 会标记：\u003C/p>\n\u003Cpre>\u003Ccode class=\"language-text\">源站证书与主机名不符\n\u003C/code>\u003C/pre>\n\u003Cp>所以，看到源站证书不匹配时，反复重装 DevPeek CA 通常没有意义。两者处在不同的 TLS 连接上。\u003C/p>\n\u003Cp>如果你还没有成功抓到第一个 HTTPS 请求，可以先看\u003Ca href=\"/docs/quick-start/\">快速上手\u003C/a>和\u003Ca href=\"/docs/proxy-ssl/\">代理与 SSL 证书\u003C/a>。\u003C/p>\n\u003Ch2>为什么 DevPeek 没有直接中断请求？\u003C/h2>\n\u003Cp>浏览器、Node.js 或普通 HTTP 客户端在严格验证模式下，通常会把证书校验失败当成硬错误，并终止 TLS 连接。\u003C/p>\n\u003Cp>这对日常上网是合理的默认行为，因为客户端无法确认连接的是否是真实服务。\u003C/p>\n\u003Cp>但抓包工具面对的是调试场景。如果 DevPeek 也在发现异常后立即中断，会同时失去：\u003C/p>\n\u003Cul>\n\u003Cli>页面或接口的实际响应\u003C/li>\n\u003Cli>请求与响应明文\u003C/li>\n\u003Cli>源站返回的证书\u003C/li>\n\u003Cli>CDN、SNI、DNS 和转发结果\u003C/li>\n\u003Cli>定位测试环境证书配置问题所需的上下文\u003C/li>\n\u003C/ul>\n\u003Cp>因此 DevPeek 不把源站证书校验失败作为硬阻断，而是在完成连接后继续检查证书，并把异常与请求记录关联起来。\u003C/p>\n\u003Cp>更准确地说，这不是“不校验证书”，而是：\u003C/p>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>执行检查，但不让检查失败直接打断调试；同时把风险明确暴露给开发者。\u003C/strong>\u003C/p>\n\u003C/blockquote>\n\u003Cp>网站能打开，只能说明 TLS 连接和 HTTP 请求仍然完成了，并不代表源站证书是正确的。\u003C/p>\n\u003Ch2>在请求详情里能看到什么？\u003C/h2>\n\u003Cp>当 DevPeek 检测到源站证书异常时，请求详情顶部会显示对应提示，例如：\u003C/p>\n\u003Cul>\n\u003Cli>源站证书与主机名不符\u003C/li>\n\u003Cli>源站证书已过期\u003C/li>\n\u003Cli>源站证书不受信任\u003C/li>\n\u003Cli>源站证书校验未通过\u003C/li>\n\u003C/ul>\n\u003Cp>点击 \u003Cstrong>查看源站证书\u003C/strong>，可以继续检查：\u003C/p>\n\u003Cul>\n\u003Cli>Subject\u003C/li>\n\u003Cli>Issuer\u003C/li>\n\u003Cli>SAN\u003C/li>\n\u003Cli>有效期\u003C/li>\n\u003Cli>序列号\u003C/li>\n\u003Cli>SHA-1 / SHA-256 指纹\u003C/li>\n\u003Cli>PEM 原文\u003C/li>\n\u003C/ul>\n\u003Cp>排查域名不匹配时，优先对照请求 Host 与 SAN。\u003C/p>\n\u003Cp>例如请求 Host 是：\u003C/p>\n\u003Cpre>\u003Ccode class=\"language-text\">api.test.example.com\n\u003C/code>\u003C/pre>\n\u003Cp>SAN 只有：\u003C/p>\n\u003Cpre>\u003Ccode class=\"language-text\">*.example.com\n\u003C/code>\u003C/pre>\n\u003Cp>它们同样不匹配。通配符 \u003Ccode>*.example.com\u003C/code> 只覆盖一层子域，例如 \u003Ccode>api.example.com\u003C/code>，不能覆盖 \u003Ccode>api.test.example.com\u003C/code>。\u003C/p>\n\u003Cp>抓包列表中的证书标记可以帮助你先定位异常请求，再进入\u003Ca href=\"/docs/capture/\">请求详情\u003C/a>查看具体证书。\u003C/p>\n\u003Ch2>证书告警该怎么处理？\u003C/h2>\n\u003Cp>证书异常是否需要修复，取决于你正在调试什么。\u003C/p>\n\u003Ch3>场景一：测试环境证书配错了\u003C/h3>\n\u003Cp>DevPeek 可以让联调继续进行，但证书告警仍然说明配置存在问题。\u003C/p>\n\u003Cp>建议检查：\u003C/p>\n\u003Cul>\n\u003Cli>DNS 是否指向预期地址\u003C/li>\n\u003Cli>CDN / WAF 是否绑定了正确证书\u003C/li>\n\u003Cli>SNI 是否传递正确\u003C/li>\n\u003Cli>证书 SAN 是否覆盖当前域名\u003C/li>\n\u003Cli>反向代理是否返回了默认站点证书\u003C/li>\n\u003Cli>Map Route 是否把请求转到了另一套环境\u003C/li>\n\u003C/ul>\n\u003Cp>DevPeek 的“继续查看”是为了保留调试现场，不是替源站证明安全。\u003C/p>\n\u003Ch3>场景二：你正在排查证书或网关问题\u003C/h3>\n\u003Cp>这正是保留请求和证书信息的价值。\u003C/p>\n\u003Cp>可以同时对照：\u003C/p>\n\u003Cul>\n\u003Cli>请求里的 Host\u003C/li>\n\u003Cli>实际连接的远端地址\u003C/li>\n\u003Cli>源站证书 Subject 与 SAN\u003C/li>\n\u003Cli>证书颁发者和有效期\u003C/li>\n\u003Cli>转发规则是否生效\u003C/li>\n\u003Cli>同一域名在不同网络下返回的证书是否一致\u003C/li>\n\u003C/ul>\n\u003Cp>证书错误不再只是一个让请求消失的报错，而是完整调试链路的一部分。\u003C/p>\n\u003Ch3>场景三：这是生产环境或敏感数据\u003C/h3>\n\u003Cp>此时不要把“页面能打开”理解成“可以放心使用”。\u003C/p>\n\u003Cp>证书校验异常意味着 DevPeek 无法确认真实对端身份。它可能只是测试环境配置错误，也可能是 DNS、代理链或网络中的异常节点。\u003C/p>\n\u003Cp>在原因确认前，应避免提交密码、Token、支付信息等敏感数据。\u003C/p>\n\u003Ch2>这时需要加入「跳过 SSL 代理」吗？\u003C/h2>\n\u003Cp>源站证书与域名不匹配时，\u003Cstrong>不需要为了让网站继续打开而自动加入排除名单\u003C/strong>。DevPeek 会保留明文并显示告警，方便继续排查。\u003C/p>\n\u003Cp>如果改成 CONNECT 隧道，证书验证会重新交给浏览器或 App。源站证书确实不匹配时，严格校验的客户端很可能会自行阻止访问。\u003C/p>\n\u003Cp>Exclude 更适合这些情况：\u003C/p>\n\u003Col>\n\u003Cli>开启 HTTPS 解密后请求失败，改走隧道才恢复；\u003C/li>\n\u003Cli>客户端使用证书固定，无法接受调试证书；\u003C/li>\n\u003Cli>某些流量不需要查看明文；\u003C/li>\n\u003Cli>希望让客户端直接执行端到端证书验证。\u003C/li>\n\u003C/ol>\n\u003Cp>这种“解密后打不开”的情况，详见：\u003Ca href=\"/blog/https-ssl-skip-decrypt/\">开了 SSL 抓包，有些网站反而打不开？把域名加进「跳过 SSL 代理」\u003C/a>。\u003C/p>\n\u003Ch2>不要把 TLS 与应用层加密混在一起\u003C/h2>\n\u003Cp>HTTPS 已经成功解密后，JSON 里仍可能是：\u003C/p>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;data&quot;: &quot;7a3f...&quot;\n}\n\u003C/code>\u003C/pre>\n\u003Cp>这不是证书或 SSL 代理问题，而是业务在 HTTPS 之上又做了一层 AES、RSA、Base64 或自定义编码。\u003C/p>\n\u003Cp>这类内容可以继续使用\u003Ca href=\"/docs/param-transform/\">参数转换\u003C/a>处理。TLS 解决传输层加密，参数转换处理应用层数据，两者不是同一层问题。\u003C/p>\n\u003Ch2>最终可以记住这三点\u003C/h2>\n\u003Cp>第一，源站证书与 Host 不匹配，说明 DevPeek 无法确认对端身份，告警本身是真实有效的。\u003C/p>\n\u003Cp>第二，DevPeek 不会静默吞掉这个问题，也不会默认中断调试；网站和 HTTPS 明文仍可查看，请求详情会保留证书异常。\u003C/p>\n\u003Cp>第三，Exclude 是控制哪些域名不解密的工具，不是遇到证书错误后的必选修复。真正需要解决的，仍然是源站证书、DNS、SNI、CDN 或转发配置。\u003C/p>\n\u003Ch2>下一篇\u003C/h2>\n\u003Cp>这是「接口调试新姿势」系列当前最后一篇。你可以继续查看\u003Ca href=\"/blog/\">博客列表\u003C/a>，或回到\u003Ca href=\"/docs/capture/\">抓包界面与请求详情\u003C/a>了解请求分析功能。\u003C/p>\n\u003Chr>\n\u003Cp>如果你正在排查测试环境证书、CDN 或 SNI 问题，可以\u003Ca href=\"/\">下载 DevPeek\u003C/a>保留完整请求与源站证书现场；遇到特殊案例，也欢迎到 \u003Ca href=\"https://github.com/GYPengDev/devpeek/discussions\">GitHub Discussions\u003C/a> 交流。\u003C/p>\n\u003Ch2>相关文档\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"/docs/proxy-ssl/\">代理与 SSL 证书\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"/docs/capture/\">抓包界面与请求详情\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"/docs/faq/\">常见问题\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"/docs/quick-start/\">快速上手\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"/docs/map-route/\">转发规则\u003C/a>\u003C/li>\n\u003C/ul>\n\u003Ch2>系列文章\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"/blog/api-param-encryption-debug/\">H5 接口参数加密？DevPeek 一键解密调试\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"/blog/mock-map-route-split-api/\">API 已迁新服务，前端还没发版？用「转发规则」联调\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"/blog/https-ssl-skip-decrypt/\">开了 SSL 抓包，有些网站反而打不开？把域名加进「跳过 SSL 代理」\u003C/a>\u003C/li>\n\u003C/ul>\n",{"items":14},[15,22,28,29,36,42,48,55,62,68,74,82,88,95],{"slug":16,"title":17,"summary":18,"date":7,"featured":8,"seoDescription":19,"series":20,"seriesOrder":21},"dev-build-log-android-apk","测试机借来借去，我们不想再改系统代理","测试机在团队里转一次，Wi-Fi 代理就要跟着改一次。普通 App 写不了系统代理，于是我们做了 Android 配套 App，用 VpnService 把「换 IP、换端口」收成扫码切换。","DevPeek 开发实录：为什么做 Android 配套 App。测试机在团队里流转时不再反复修改 Wi-Fi 代理，而是通过 VpnService 扫码切换当前抓包电脑。","dev-build-log",5,{"slug":23,"title":24,"summary":25,"date":7,"featured":8,"seoDescription":26,"series":20,"seriesOrder":27},"dev-build-log-android-file-transfer-assistant","测试机连上以后，我们又做了个文件互传助手","团队测试机通常没有聊天软件，也不会登录个人账号，传一个 URL、截图或安装包都很麻烦。Android 配套 App 做完后，我们顺手在已有配对链路旁加了一条局域网互传通道。","DevPeek 开发实录：团队测试机没有聊天软件时，如何通过 Android 配套 App 的独立 WebSocket 与 HTTP 局域网通道，在手机和电脑之间互传文字、图片、视频和文件。",6,{"slug":4,"title":5,"summary":6,"date":7,"featured":8,"seoDescription":9,"series":10,"seriesOrder":11},{"slug":30,"title":31,"summary":32,"date":33,"featured":8,"seoDescription":34,"series":10,"seriesOrder":35},"https-ssl-skip-decrypt","开了 SSL 抓包，有些网站反而打不开？把域名加进「跳过 SSL 代理」","系统代理和证书都已配置好，但个别网站或 App 一做 HTTPS 解密就无法访问。把对应 Host 加入「跳过 SSL 代理」，只让这部分流量走 CONNECT 隧道，不必关闭全部 HTTPS 抓包。","2026-09-01","DevPeek 开启 SSL 代理后个别网站或 App 无法访问？如果关闭解密或改走 CONNECT 隧道后恢复，可用 Include / Exclude 只跳过不兼容的 Host，保留其它 HTTPS 明文抓包。",3,{"slug":37,"title":38,"summary":39,"date":40,"featured":8,"seoDescription":41,"series":20,"seriesOrder":11},"dev-build-log-silent-auto-update","换掉 Electron 后，自动更新也得重做","DevPeek 换成 Tauri 后，更新的不只是一个窗口，而是 Launcher、Core 和 Shell 三个进程。我们把检查和下载挪到后台，等安装包准备好后，再由托盘完成最后一次重启。","2026-08-28","DevPeek 开发实录：桌面端从 Electron 换到 Tauri 后，如何为 Launcher、Core 和 Shell 重做自动更新，并避免更新过程影响系统代理。",{"slug":43,"title":44,"summary":45,"date":46,"featured":8,"seoDescription":47,"series":20,"seriesOrder":35},"dev-build-log-ws-mock-dsl","为什么我们重新设计了 WebSocket Mock DSL，而不是用 YAML、JSON 或 JS","轻量 WebSocket Mock 不该比 HTTP Mock 更重。YAML、JSON、JS 都能做，但写「连上、登录、心跳」太啰嗦。我们自研短 DSL，就是让轻量 Mock 更轻。","2026-08-13","DevPeek 开发实录：为什么 WebSocket Mock 自研 Flow DSL。现成 YAML、JSON、JS 能做重活；轻量顺序剧本用更短的文本来写。",{"slug":49,"title":50,"summary":51,"date":52,"featured":8,"seoDescription":53,"series":20,"seriesOrder":54},"dev-build-log-electron-to-tauri","DevPeek 架构改造：抛弃 Electron，拥抱 Tauri","联调工具不该为「开一个窗口」再拖一整套 Chromium。我们把业务收到 Core，桌面壳换成 Tauri，安装更轻、后台更省，关窗后托盘里也能随时唤回来。","2026-08-08","DevPeek 开发实录：桌面壳从 Electron 迁到 Tauri，业务留在 Core，壳只负责窗口与系统能力，体积与资源占用更友好。",2,{"slug":56,"title":57,"summary":58,"date":59,"featured":8,"seoDescription":60,"series":20,"seriesOrder":61},"dev-build-log-sqljs-to-better-sqlite3","抓包历史为什么从 sql.js 迁到原生 SQLite","早期 DevPeek 用纯 JavaScript 版 SQLite 存抓包记录，联调一忙就占内存、列表发紧。我们换成系统级原生 SQLite 后，代理可以连续挂一整天，内存也稳。","2026-08-05","DevPeek 开发实录：抓包历史存储从 sql.js 换成原生 SQLite，解决长时间联调内存上涨、列表卡顿，让代理可以挂一整天。",1,{"slug":63,"title":64,"summary":65,"date":66,"featured":8,"seoDescription":67,"series":10,"seriesOrder":54},"mock-map-route-split-api","API 已迁新服务，前端还没发版？用「转发规则」联调","服务拆分后，前端仍请求旧 API，订单接口却已经迁到新服务。使用 DevPeek「转发规则」无需修改前端代码，即可把指定接口转发到新域名；若新服务未完成，还可以用 Mock 先跑通页面。","2026-07-26","微服务联调与 API 域名迁移：用 DevPeek「转发规则」做 API 转发，不改前端即可把旧域名请求指到新服务；服务迁移未完成时可用 Mock 先验页面。附接口联调 Demo。",{"slug":69,"title":70,"summary":71,"date":72,"featured":8,"seoDescription":73,"series":10,"seriesOrder":61},"api-param-encryption-debug","H5 接口参数加密？DevPeek 一键解密调试","联调时接口参数 AES 加密看不到明文？用 DevPeek 参数转换功能，填好密钥和 IV 就能自动解密，还能改参重放。","2026-07-18","用 DevPeek 参数转换功能解密 AES-GCM 加密的 H5 API 请求，支持双向转换、明文编辑、调试重放。",{"slug":75,"title":76,"summary":77,"date":78,"featured":79,"seoDescription":80,"series":81,"seriesOrder":54},"h5-debug-console-mock","H5 调试实战（二）：Android WebView 白屏排查，从 Console 远程定位到 Mock 验证","活动 H5 在部分 Android 设备中点击按钮后白屏，请求全部 200 却没有页面反馈。通过 DevPeek Console 获取线上 WebView 运行日志，远程 eval 确认 polyfill 覆盖问题，再使用 Mock 验证异常状态下的降级页面。","2026-07-13",true,"H5 调试实战第二篇：排查 Android WebView 白屏问题。通过 Console 远程调试定位 JavaScript polyfill 兼容问题，并结合 Mock 验证接口异常场景下的页面降级逻辑。","h5-debug",{"slug":83,"title":84,"summary":85,"date":86,"featured":79,"seoDescription":87,"series":81,"seriesOrder":61},"wechat-h5-storage-debug","H5 调试实战（一）：微信 H5 localStorage 调试，在电脑上修改真机缓存","微信 H5 换测试号后头像仍显示旧用户，抓包确认接口正常，却定位到 localStorage 遗留旧数据。本文记录一次真实联调过程，以及如何在电脑上查看、修改微信 WebView 的 localStorage、sessionStorage 和 IndexedDB。","2026-07-11","微信 H5 调试实战：通过真实案例定位 localStorage、sessionStorage、IndexedDB 导致的数据缓存问题，对比 vConsole、Remote Debug 等方案，介绍真机 WebView 调试思路。",{"slug":89,"title":90,"summary":91,"date":92,"featured":79,"seoDescription":93,"series":94,"seriesOrder":54},"why-we-built-devpeek-h5-debug","我们为什么做 DevPeek（二）：App 里那页 H5，在电脑上也能对着查","登录接口用参数转换啃下来了，活动页 H5 却在 App WebView 里才崩。真机 remote debug 折腾一圈，DOM 和抓包还是两拨窗口——于是把镜像和自研调试面板收进 DevPeek。","2026-07-10","DevPeek 起源系列第二篇：App 内嵌 H5 只在真机出问题、remote debug 与抓包割裂的联调痛点，以及调试 Tab 如何把页面镜像到电脑并用自研面板查 DOM、Console 与 Network。","origin",{"slug":96,"title":97,"summary":98,"date":99,"featured":79,"seoDescription":100,"series":94,"seriesOrder":61},"why-we-built-devpeek","我们为什么做 DevPeek（一）：HTTPS 解密了，Body 还是天书","版本日前那晚，TLS 早就解开了，改请求里一个字段却还要翻脚本加解密。于是萌生做一个把业务加解密收进代理的工具——DevPeek 从这儿开始。","2026-07-09","DevPeek 起源系列第一篇：联调时请求体加解密的手工折腾，以及为什么先做一款把业务加解密收进代理的工具。",1789537095161]