1 回答
TA贡献1982条经验 获得超2个赞
正如 的Hijacker
文档所说
劫持让呼叫者接管连接。在调用 Hijack 之后,HTTP 服务器库将不会对连接执行任何其他操作。
管理和关闭连接成为呼叫者的责任。
返回的 net.Conn 可能已经设置了读取或写入的最后期限,具体取决于服务器的配置。调用者有责任根据需要设置或清除这些截止日期。
返回的 bufio.Reader 可能包含来自客户端的未处理的缓冲数据。
调用 Hijack 后,不得使用原始 Request.Body。原始 Request 的 Context 保持有效并且不会被取消,直到 Request 的 ServeHTTP 方法返回。
您需要写信给c
而不是buf
. 并且您需要编写响应状态和Content-Length
标题。
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")
})
- 1 回答
- 0 关注
- 174 浏览
添加回答
举报