golang中如何实现反向代理支持nginx渐进式下载?

问题描述

我有一个 golang 网络服务器,它从 Nginx 获取视频文件。 当我直接从 <video> html5 标签调用 Nginx 视频时,视频可以通过渐进式下载流畅播放。渐进式下载是指随机搜索无需任何特殊播放器逻辑即可工作。

但是当我通过 golang webserver 调用它时,golang webserver 又使用 golang NewSingleHostReverseProxy() 类调用 Nginx 链接,渐进式下载不起作用。

是否可以使用 golang 反向代理启用渐进式下载?

golang webserver 中的反向代理代码

url,_ := url.Parse("http://Nginx-server/")
proxy := httputil.NewSingleHostReverseProxy(url)
router.PathPrefix("/video").HandlerFunc(func(w http.ResponseWriter,r *http.Request) {
        proxy.ServeHTTP(w,r)
})

解决方法

我相信你只需要将 FlushInterval 设置为负数

FlushInterval 指定刷新间隔 在复制时刷新到客户端 响应体。 如果为零,则不进行定期冲洗。 负值意味着立即刷新 每次写入客户端后。 ReverseProxy 时忽略 FlushInterval 将响应识别为流式响应,或 如果它的 ContentLength 是 -1;对于这样的回应,写道 立即刷新到客户端。

proxy := httputil.NewSingleHostReverseProxy(url)
proxy.FlushInterval = -1