背景
PR #11 已经合并,完成了 upstream proxy 配置能力的主体落地,并修复了此前 review 中的几个关键问题,包括:
- 拆分全局 proxy 模式与 provider override 模式语义
- 将 proxy apply / normalize / validate 逻辑收敛到 config 层
- 按 effective proxy policy 复用
http.Client
- 规范化 host / scheme 大小写与默认端口,避免 policy key 因 URL 文本差异而分裂
不过,当前 runtime identity 仍然基于 CanonicalProxyURL 的结果,而该 canonicalization 目前仍保留了 path / query / fragment。
问题
当前像下面这些写法:
http://proxy.example
http://proxy.example/
http://proxy.example?x=1
对“首跳代理是谁”这个运行时语义来说是等价的,但仍会生成不同的 identity/policy key。结果是:
- 连接池复用仍可能被无害文本改动打断
- reload 时 runtime state 继承仍可能丢失
CanonicalProxyURL 同时承担“展示/存储规范化”和“运行时身份归一化”两种职责,边界不清晰
建议方向
建议把“配置文本 canonicalization”和“runtime proxy identity”明确拆开:
- 保留当前
CanonicalProxyURL 的保守行为,用于配置展示 / 存储
- 新增一个专门给 policy key / reload identity 使用的
EffectiveProxyIdentity(或类似命名)
- 明确定义 runtime identity 为
scheme + authority (+userinfo)
- 对
path / query / fragment 二选一:
- 校验阶段直接禁止
- 或 identity 计算阶段统一忽略
验收标准
补齐至少以下等价性测试:
http://proxy.example vs http://proxy.example/
http://proxy.example vs http://proxy.example?x=1
http://proxy.example:80 vs http://proxy.example
http://USER:PASS@PROXY.EXAMPLE:80 vs http://USER:PASS@proxy.example
并确认上述等价写法不会再导致:
effectiveProviderProxyPolicy 分裂
- reload 时 provider runtime identity 变化
- 本可复用的
http.Client / connection pool 被重建
背景
PR #11 已经合并,完成了 upstream proxy 配置能力的主体落地,并修复了此前 review 中的几个关键问题,包括:
http.Client不过,当前 runtime identity 仍然基于
CanonicalProxyURL的结果,而该 canonicalization 目前仍保留了path / query / fragment。问题
当前像下面这些写法:
http://proxy.examplehttp://proxy.example/http://proxy.example?x=1对“首跳代理是谁”这个运行时语义来说是等价的,但仍会生成不同的 identity/policy key。结果是:
CanonicalProxyURL同时承担“展示/存储规范化”和“运行时身份归一化”两种职责,边界不清晰建议方向
建议把“配置文本 canonicalization”和“runtime proxy identity”明确拆开:
CanonicalProxyURL的保守行为,用于配置展示 / 存储EffectiveProxyIdentity(或类似命名)scheme + authority (+userinfo)path / query / fragment二选一:验收标准
补齐至少以下等价性测试:
http://proxy.examplevshttp://proxy.example/http://proxy.examplevshttp://proxy.example?x=1http://proxy.example:80vshttp://proxy.examplehttp://USER:PASS@PROXY.EXAMPLE:80vshttp://USER:PASS@proxy.example并确认上述等价写法不会再导致:
effectiveProviderProxyPolicy分裂http.Client/ connection pool 被重建