Skip to content

fix: 修复 v1.19.21 中 gRPC 自定义 UserAgent 不生效的问题#2620

Merged
wwqgtxx merged 1 commit into
MetaCubeX:Alphafrom
DanAlex121:Alpha
Mar 13, 2026
Merged

fix: 修复 v1.19.21 中 gRPC 自定义 UserAgent 不生效的问题#2620
wwqgtxx merged 1 commit into
MetaCubeX:Alphafrom
DanAlex121:Alpha

Conversation

@DanAlex121

@DanAlex121 DanAlex121 commented Mar 13, 2026

Copy link
Copy Markdown

mihomo 的配置文件 config.yaml 中 设置了 gRPC 自定义 UserAgent
grpc-opts.grpc-user-agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"

在使用 mihomo v1.19.20时,自定义UA生效,在Cloudflare Security后台能看到请求的UA为自定义UA;但是升级到 v1.19.21后,在配置不变的情况下,Cloudflare后台显示UA变回了默认UAgrpc-go/1.36.0,被Cloudflare视为HTTP DDoS攻击拦截。

对比 v1.19.20 和 v1,19,21 代码发现:

  • 默认UA的代码为
var defaultHeader = http.Header{
	"content-type": []string{"application/grpc"},
	"user-agent":   []string{"grpc-go/1.36.0"},
}
  • 在 v1.19.20 中,判断并修改UA的代码为
	if cfg.UserAgent != "" {
		header["user-agent"] = []string{cfg.UserAgent}
	}

能正常替换user-agent的值

  • 而在 v1.19.21 中,判断并修改UA的代码为
	if cfg.UserAgent != "" {
		header.Set("User-Agent", cfg.UserAgent)
	}

此时会新建一个名为User-Agent的自定义UA键值,而并不会替换原有的默认UAuser-agent,所以导致自定义UA失效,修改defaultHeader中的user-agentUser-Agent后才能替换默认UA为自定义UA

我已经在我自己的repo中编译测试过了,通过Cloudflare后台日志确定这个pr能修复gRPC自定义UA不生效的问题

@wwqgtxx wwqgtxx merged commit 0a05ef8 into MetaCubeX:Alpha Mar 13, 2026
@hululu1068

Copy link
Copy Markdown

顺手把gRPCmultiMode也给修了吧...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants