【问题标题】:Is it posssible to flush trailer header to the client?是否可以将拖车标头刷新到客户端?
【发布时间】:2018-07-14 21:00:20
【问题描述】:

这会导致从服务器发送 2 个 DATA 帧:

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 帧发送?

【问题讨论】:

    标签: go http2


    【解决方案1】:

    如果您只需要确保将预告片刷新到底层套接字中:

    使用ConnState 钩子发出关于正在写入连接的预告片的信号。 This 是写入预告片并且连接将其状态更改为 StateIdle 的点。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-22
      • 2019-10-02
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 2016-04-14
      相关资源
      最近更新 更多