如何在Go服务器中设置HTTP预告片?

如何在Go服务器中设置HTTP预告片?,第1张

如何在Go服务器中设置HTTP预告片

使用bytes.Buffer,然后将其包装为散列,例如:

type HashedBuffer struct {    h hash.Hash    b bytes.Buffer}func NewHashedBuffer(h hash.Hash) *HashedBuffer {    return &HashedBuffer{h: h}}func (h *HashedBuffer) Write(p []byte) (n int, err error) {    n, err = h.b.Write(p)    h.h.Write(p)    return}func (h *HashedBuffer) Output(w http.ResponseWriter) {    w.Header().Set("ETag", hex.EnpreToString(h.h.Sum(nil)))    h.b.WriteTo(w)}//handlerfunc Handler(w http.ResponseWriter, r *http.Request) {    hb := NewHashedBuffer(sha256.New())    hb.Write([]byte("stuff"))    hb.Output(w)}

截至目前,您无法设置预告片标头,这是一个未解决的问题。

有一种解决方法,劫持连接(来自上述问题):

// TODO: There's no way yet for the server to set trailers// without hijacking, so do that for now, just to test the client.// Later, in Go 1.4, it should be be implicit that any mutations// to w.Header() after the initial write are the trailers to be// sent, if and only if they were previously declared with// w.Header().Set("Trailer", ..keys..)w.(Flusher).Flush()conn, buf, _ := w.(Hijacker).Hijack()t := Header{}t.Set("Server-Trailer-A", "valuea")t.Set("Server-Trailer-C", "valuec") // skipping Bbuf.WriteString("0rn") // eoft.Write(buf)buf.WriteString("rn") // end of trailersbuf.Flush()conn.Close()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4983166.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存