[zeromicro/go-zero]可以使用w.(http.Flusher).Flush(),响应头可以被重置

2023-12-22 799 views
7

图像 晕,只要使用了w.(http.Flusher).Flush(),响应头就会被重置 图像

请求大佬们解决

回答

8

看来timeoutWriter应该使用原始http标头的副本,我将测试它。

0

w.(http.Flusher).Flush() 导致底层 http.ResponseWriter 调用 #Write(...),后者调用

隐式 WriteHeader(...)。正如 http.ResponseWriter 的文档所说,更改标头映射后

对 WriteHeader(或 Write)的调用无效。深入研究 TimeoutHandler 的实现,当收到完成信号时,它会将 timeoutWriter 的标头复制到底层 http.ResponseWriter 的标头中,此时会进行 Flush 调用,因此复制无效。Solotion 是在调用 timeoutWriter 的 #WriteHeader(...) 方法时复制标头,这使底层 http.ResponseWriter 的标头保持同步。@kevwan @tqqya

2

我也遇到了同样的问题,请问应该如何解决呢?