From 45262d8f88d5655be0803ac3c838f178d0b9533e Mon Sep 17 00:00:00 2001 From: black1552 Date: Fri, 6 Mar 2026 13:54:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(gateway):=20=E4=BF=AE=E5=A4=8D=E4=BB=A3?= =?UTF-8?q?=E7=90=86=E5=93=8D=E5=BA=94=E5=A4=B4=E4=BC=A0=E9=80=92=E5=92=8C?= =?UTF-8?q?JSON=E5=86=99=E5=85=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 ModifyResponse 函数以正确传递原始响应头 - 实现响应头从代理服务器到客户端的完整传递 - 修复 WebSocket 升级处理中的响应写入逻辑 - 确保 JSON 数据通过 RawWriter 正确写入响应 --- server/gateway.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/server/gateway.go b/server/gateway.go index 822b833..de71bea 100644 --- a/server/gateway.go +++ b/server/gateway.go @@ -59,8 +59,15 @@ func BuildRequest(r *ghttp.Request, host string) { w.WriteHeader(http.StatusBadGateway) w.Write([]byte("Bad Gateway")) } - + proxy.ModifyResponse = func(resp *http.Response) error { + // 获取原始响应的 Header + for k, v := range resp.Header { + r.Response.Header().Set(k, v[0]) + } + return nil + } // ServeHTTP 会自动处理 WebSocket 升级和所有 HTTP 方法 // 使用 RawWriter() 获取原始的 http.ResponseWriter,避免 gf 框架的封装影响 proxy.ServeHTTP(r.Response.RawWriter(), r.Request) + r.Response.WriteJson(r.Response.RawWriter()) }