11 浏览器、接口与契约调试
浏览器、接口与契约调试工具解决的是“问题发生时如何拿到可信证据”。页面白屏、接口 401、CORS 失败、Cookie 丢失、移动端兼容、HTTP 证书错误、gRPC metadata 缺失、GraphQL 查询不稳定、OpenAPI 文档和真实实现漂移,都不能靠截图和感觉来回扯。
从现象选择证据入口
| 现场问题 | 首个工具 | 必须留下的证据 | 最容易误判的地方 |
|---|---|---|---|
| 页面白屏、资源失败、Cookie 丢失 | Chrome DevTools 或 Edge DevTools | Console 错误、Network 请求链、响应头、调用栈和已脱敏 HAR | 截图只能证明现象,不能证明请求顺序和会话状态 |
| 接口偶发超时、401、证书或代理错误 | curl 与 HTTPie | 可重复命令、退出码、计时、响应头和 TLS 诊断 | 本机代理、CA 与 CI runner 不一致会制造假结论 |
| 团队需要复用请求、环境和断言 | Postman、Apifox 或 Insomnia 与 Bruno | 可审查的集合、示例环境、断言结果和运行报告 | 云同步或导出文件可能携带真实 token 与内部域名 |
| 接口文档与实现不一致 | OpenAPI、Swagger 与 Redoc | 作为主源的契约文件、校验错误和变更差异 | UI 能发出请求不代表契约、授权和网关配置一致 |
| gRPC 调用失败 | grpcurl 与 Evans | 服务描述、metadata、TLS 握手和最小请求 | 反射关闭时容易把服务端策略误判为网络故障 |
| GraphQL 查询不稳定 | GraphQL Client | query、variables、响应 errors、schema 与 header 清单 | introspection 可用不代表字段级授权正确 |
| 页面性能退化 | Lighthouse 与 Performance | 可复测环境、trace、指标分布和版本化报告 | 单次分数受设备、网络、缓存和扩展干扰,不能直接当 SLO |
开始排障前先准备可控的本地、开发或测试服务,以及专用测试账号、测试租户和测试域名。公司代理、VPN、DNS、根证书、网关白名单和 CORS 策略也要有明确基线。真实用户会话、生产 token 和未脱敏业务数据不应进入任何集合、HAR、trace、截图或运行报告。
一次可信的调试闭环
最小验收不是“工具能打开”。浏览器工具要能导出脱敏证据;CLI 要能返回可靠退出码;GUI 客户端要能切环境且不泄漏凭证;契约工具要能发现 schema 或请求漂移;团队模板要能让新人按同一套证据链复现。
证据链最容易失真的地方
- 共享集合泄漏:collection、environment、HAR、trace、运行报告和截图都可能携带 token、Cookie、个人邮箱和内部域名。
- 环境变量指向生产:GUI 客户端和 CLI 使用不同环境变量时,最容易把调试请求打到生产。
- 证书和代理不一致:浏览器、curl、HTTPie、Postman、Bruno、Insomnia、CI runner 使用不同 CA 和代理策略,会造成“我这里正常”的假象。
- 契约漂移:OpenAPI、collection、后端实现、网关配置和 Mock 示例如果没有主源,就会各自正确、整体错误。
- 远程调试端口暴露:DevTools protocol 端口可以控制浏览器,必须临时启用、受控访问、排障后关闭。
- Try it out 不是权限边界:Swagger UI、GraphiQL 或 API 客户端能否发请求,不等于服务端授权正确。
推荐项目目录
docs/api/openapi.yaml
docs/api/README.md
api-collections/postman/
api-collections/bruno/
api-collections/insomnia/
api-collections/environments/*.example.*
scripts/api-smoke/
scripts/devtools-har-sanitize.md团队模板是否值得长期保留,可以用六件事判断:新人能启用工具、能跑通最小复现、能切换受控环境、能识别失败证据、能清理本地凭证,并能把脱敏后的材料交给责任人复核。缺少任何一项,模板都会在下一次故障里重新退化成口头经验。
