Golang Go语言中 gin 自定义 middleware HandlerFunc 增加 header 丢失

请大佬看下

目前的逻辑是:自定义的 middleware,处理后设置 headerc.Request.Header.Set("x-pack", i.Pack)。
当 x-pack 数据比较小的时候,后面的逻辑 c.GetHeader 可以收到;
当数据比较大的时候,后面的逻辑中获取到的 x-pack 是空。

Golang Go语言中 gin 自定义 middleware HandlerFunc 增加 header 丢失
4 回复

Apache - 8K
Nginx - 4K-8K
IIS - 8K-16K
Tomcat - 8K – 48K
Node (<13) - 8K; (>13) - 16K

更多关于Golang Go语言中 gin 自定义 middleware HandlerFunc 增加 header 丢失的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


上下文传递建议用 context
r = r.WithContext(context.WithValue(r.Context(), “x-pack”,i.Pack))

我是这样操作的 ginCtx.Request.Header.Set(“app_id”, “appId”)

在 Go 语言的 Gin 框架中,如果你遇到自定义 middleware 中增加的 header 在后续处理中丢失的问题,这通常是由于 header 写入时机不正确或响应已经开始发送导致的。以下是一些可能的解决方法和检查点:

  1. 确保在 c.Next() 后设置 Header: Gin 的 middleware 工作机制是先执行当前 middleware 的逻辑,然后调用 c.Next() 进入下一个 middleware 或最终的 handler。如果在 c.Next() 之前设置 header,可能在响应已经开始发送时被覆盖或忽略。确保在 c.Next() 后设置 header。

  2. 检查是否有响应写入: 如果在 middleware 或 handler 中有 c.Writer.WriteHeader(statusCode) 或直接写入响应体(如 c.String(), c.JSON() 等),这可能会导致后续的 header 设置无效。确保在设置 header 后再进行这些操作,或者只在响应还未开始时设置 header。

  3. 使用 c.Writer.Header().Set("Key", "Value"): 正确的方式是通过 c.Writer.Header().Set 方法来设置 header,而不是直接操作 http.ResponseWriter 的其他方法,以保持与 Gin 框架的一致性。

  4. 调试和日志: 在 middleware 中添加日志输出,可以帮助你理解 header 的设置顺序和响应的发送时机,从而更容易定位问题。

通过以上步骤,你应该能够解决 Gin 中自定义 middleware 设置 header 丢失的问题。如果问题依旧存在,可能需要更详细地检查中间件和 handler 的实现逻辑。

回到顶部