我想在golang中使用hijack,但在客户端上获得无效响应

我想在golang中使用hijack,但在客户端上获得无效响应,go,Go,我想在golang中使用hijack,同时在客户端上收到无效响应 func劫持(w http.ResponseWriter,r*http.Request){ fmt.Println(“开始”) hj,ok:=w.(http.jacker) fmt.Println(正常) c、 buf,err:=hj.jackit() 如果错误!=零{ 恐慌(错误) } n、 err:=buf.Write([]字节(“hello”)) 如果错误!=零{ 恐慌(错误) } fmt.Println(“n==”,n)

我想在golang中使用hijack,同时在客户端上收到无效响应

func劫持(w http.ResponseWriter,r*http.Request){
fmt.Println(“开始”)
hj,ok:=w.(http.jacker)
fmt.Println(正常)
c、 buf,err:=hj.jackit()
如果错误!=零{
恐慌(错误)
}
n、 err:=buf.Write([]字节(“hello”))
如果错误!=零{
恐慌(错误)
}
fmt.Println(“n==”,n)
err=buf.Flush()
如果错误!=零{
恐慌(错误)
}
fmt.Println(“结束”)
}
在服务器上打印以下内容:

start

true

n ==  5

end
但我在客户机上发现了以下错误

localhost发送了无效响应。错误\u无效\u HTTP\u响应


正如劫持者的文件所说

劫持允许调用方接管连接。过了一会儿 调用劫持HTTP服务器库将不起作用 连接还有什么问题吗。
管理和关闭已成为呼叫方的责任 连接。
返回的net.Conn可能已经设置了读取或写入截止日期, 取决于服务器的配置。它是 来电者设定或清除这些截止日期的责任 根据需要。
返回的bufio.Reader可能包含来自的未处理缓冲数据 客户。
呼叫劫持后,不得使用原始请求。正文。这个 原始请求的上下文保持有效,直到 请求的ServeHTTP方法返回

您需要写入
c
,而不是
buf
。您还需要编写响应状态和
内容长度
标题

http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
    fmt.Println("start")

    writer.Header().Add("Content-Length", "5")
    writer.WriteHeader(200)
    hj, ok := writer.(http.Hijacker)

    fmt.Println(ok)

    c, _, err := hj.Hijack()
    if err != nil {
        panic(err)
    }
    n, err := c.Write([]byte("hello"))
    if err != nil {
        panic(err)
    }

    fmt.Println("n == ",n)

    err = c.Close()
    if err != nil {
        panic(err)
    }

    fmt.Println("end")
})