go - 是否可以将尾部 header 刷新到客户端?

标签 go http2

这导致从服务器发送 2 个数据帧:

func(w http.ResponseWriter, r *http.Request) {
    w.Write("foo")
    w.(http.Flusher).Flush()
    w.Write("bar")
    w.(http.Flusher).Flush()
}

这导致从服务器发送 1 个 HEADERS 帧:

func(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Trailer:X", "a")
    w.(http.Flusher).Flush()
    w.Header().Set("Trailer:Y", "b")
    w.(http.Flusher).Flush()
}

有没有办法在不使用 framer api 的情况下将尾部帧作为多个 HEADERS 帧发送?

最佳答案

如果您只需要确保尾部被刷新到底层套接字中:

使用ConnState钩子(Hook)发出有关拖车被写入连接的信号。 This是编写预告片并且连接将其状态更改为 StateIdle 的时间点。

如果您想确保预告片在单独的帧中发送:

Hijack TCP 连接,手动将终止 block 和尾部写入连接,刷新连接,关闭连接。这(显然)与 keepalive 不兼容。

关于go - 是否可以将尾部 header 刷新到客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48615218/

相关文章:

go - 连接在goroutine中关闭

java - 如何使用 Apache HttpClient-5 Beta 正确执行 Http2

azure - 使用 Azure Web 应用程序和 Web api 的 HTTP2 请求

http2 - OkHttp中如何实现接收服务器推送?

xml - 解析xml中的重复字段

json - 为什么 json.Encoder 多加一行?

java - 如何在 Java 11 http 客户端中保持连接

asp.net - Chrome ERR_HTTP2_PROTOCOL_ERROR + Firefox 安全连接失败

http - 获取正在发送的 HTTP 请求正文

sql - RDBMS 对 Golang 的影响