在 gin 启用了压缩输出中间件时,"ctx.Stream" 不起作用,参见:
r := gin.New()
r.Use(brotli.Brotli(brotli.DefaultCompression))
在这种情况下,其实前端请求的时候,在 "Header" 中带上 "Content-Type: text/event-stream" 即可。
参见 "gin" 的 "gin_brotli.go" 中的方法:
func shouldCompress(req *http.Request, options *Options) bool {
if !strings.Contains(req.Header.Get("Accept-Encoding"), "br") ||
strings.Contains(req.Header.Get("Connection"), "Upgrade") ||
strings.Contains(req.Header.Get("Content-Type"), "text/event-stream") {
return false
}
extension := filepath.Ext(req.URL.Path)
if len(extension) < 4 { // fast path
return true
}
if skip := containsString(options.SkipExtensions, extension); skip {
return false
} else {
return true
}
}