Skip to content

代理探测默认 gstatic 目标会误判可用代理,且 EOF 错误文案容易误导 #4

@songsongQAQ

Description

@songsongQAQ

问题描述

当前代理探测默认目标是 https://www.gstatic.com/generate_204。我遇到一种情况:代理本身是可用的,但因为无法访问 gstatic/google,被后台探测判定为失败,前端显示为“代理握手被关闭(鉴权或协议不匹配)”,这个文案会让人误以为是用户名密码或 scheme 配错了。

复现环境

  • 项目:gpt2api
  • 部署方式:Docker Compose
  • 相关默认配置:
    • proxy.probe_target_url = https://www.gstatic.com/generate_204
    • proxy.probe_timeout_sec = 10
  • 代码位置:
    • internal/settings/model.go
    • internal/proxy/prober.go

复现步骤

  1. 在后台新增一个 HTTP 代理(用户名/密码已脱敏)
  2. 手动点击“探测”
  3. 页面提示:探测失败:代理握手被关闭(鉴权或协议不匹配)

实际验证

同一条代理通过外部请求测试时:

  • http://httpbin.org/ip -> 200
  • https://api.ipify.org?format=json -> 200
  • https://www.gstatic.com/generate_204 -> 连接被远端关闭 / EOF
  • https://www.google.com/generate_204 -> 同样 EOF

也就是说:

  • 代理鉴权本身大概率是成功的
  • 代理对部分普通 HTTP/HTTPS 站点可用
  • 只是对默认探测目标 gstatic/google 不通,结果被判成了“代理握手失败”

相关代码行为

当前默认探测目标:

{Key: ProxyProbeTargetURL, Type: "url", Category: "gateway", Default: "https://www.gstatic.com/generate_204", Label: "代理探测目标 URL", Desc: "返回 2xx/3xx 视为成功,留空使用默认"}

当前 EOF 映射文案:

case strings.Contains(low, "unexpected eof"),
    low == "eof",
    strings.HasSuffix(low, ": eof"):
    return "代理握手被关闭(鉴权或协议不匹配)"

期望行为

希望至少有下面两点改进中的一个:

  1. 优化默认探测目标

    • 默认不要使用 gstatic/google 这类在部分代理上容易被限制的站点
    • 或者文档里明确提醒:默认探针只代表“能否访问该目标”,不代表代理整体不可用
  2. 优化错误提示

    • 对 EOF / RemoteDisconnected 一类错误,文案不要直接指向“鉴权或协议不匹配”
    • 可以改成更中性的提示,例如:
      • 代理连接被对端关闭(可能是目标站限制 / 代理线路问题 / 鉴权问题)
      • 或者把原始错误附带出来,方便排障

建议

我个人更倾向于:

  • 保留 proxy.probe_target_url 可配置
  • 但把默认值换成一个更通用、对代理更友好的轻量地址
  • 同时把 EOF 的错误文案改得更中性一些

这样能减少“代理其实可用,但被默认探针误判”的情况。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions