文章

Gin 中间件执行顺序及一些误区

误区 1:c.Next() 后,修改 header 不生效

因为在 c.Next() 之前,已经把响应给到客户端了(c.Writer 已经 flush 了),因此再修改也没有用了。

在 controller 里面 c.Json() 之后,实际上响应已经 Render()c.Writer 了(注意此时 c.Writer 还没有 flush,要等到所有中间件执行完才会 flush。),所以再修改已经没有用了。

补充:在所有中间件和 contrller 执行完后,request 会交回给 server,在finishRequest() 的时候,才会真正Flush()

误区 2:c.Abort() 后,c.Next() 之后的逻辑还会执行

c.Abort() 只是不再往栈里放handlerFunc,已经放入栈中的会继续执行,逐个出栈。

Ref

Custom Middleware | Gin Web Framework

Gin 源码分析 - 中间件(2)- 源码分析 - 知乎

License:  CC BY 4.0