go - 什么时候在 golang 中使用劫持?

标签 go go-http

我不明白我们为什么要使用劫持,因为我可以直接在响应正文中写一些东西,有人可以解释一下吗?

func writeSome(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "write some thing")
}

同理:

func hijack(w http.ResponseWriter, r *http.Request) {
    hj, _ := w.(http.Hijacker)
    _, buf, _ := hj.Hijack()
    buf.WriteString("write some thing")
    buf.Flush()
}

我很困惑

最佳答案

当您不想使用内置服务器的 HTTP 协议(protocol)实现时,请使用 Hijack。这可能是因为您想切换协议(protocol)(例如切换到 WebSocket)或内置服务器妨碍了您。

上面的两个代码片段不会在网络上创建相同的输出。第一个片段的输出将包含一个响应 header :

HTTP/1.1 200 OK
Date: Wed, 26 Nov 2014 03:37:57 GMT
Content-Length: 16
Content-Type: text/plain; charset=utf-8

write some thing

第二个片段绕过内置的服务器代码并写入

write some thing

直接输出。

关于go - 什么时候在 golang 中使用劫持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27075478/

相关文章:

go - 在 golang 中将数据渲染到模板中

parsing - 如何将具有可变结构的消息扁平化为 protobuf?

go - HandleFunc中的http主机和端口信息

go - 阻止来自 gorilla/mux 的打开 URL 重定向

go - 如果条件为假,如何停止 golang 中的 cron 作业?

go - 像 Django 一样在文件更改时重新启动 Go 的 net/http 服务器

arrays - 追加到结构内的结构数组

go - 如何将主页和静态文件设置在同一路径

go - 从 golang 代码将文件发送到 Google Drive API 会产生错误 : Unsupported content with type: image/jpeg

go - goroutine语句执行和函数执行的不同行为