我一直在玩 Go 中的 gorilla-websocket,当我实现基本的 echo 示例时,我在部署服务器后记录了一个错误,未找到来源 Websocket 版本 != 13我找到了一种绕过这个的方法,让检查原点的函数总是返回 truevar wsUpgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, CheckOrigin: func(r *http.Request) bool { return true },}但感觉不太对。因此,我正在寻找解决该问题的方法。更新:在再次查看问题后,我似乎实际上希望将原始标头添加到客户端实现,即 javascript websocket 实现@benjic 我通过一个 javascript html5 应用程序连接到 websocket,该应用程序不是托管在同一台服务器上,而是由我通过 chrome 在本地运行那我该怎么做。
1 回答
慕姐4208626
TA贡献1852条经验 获得超7个赞
通过阅读大猩猩的WebSocket文档表明,当被提供给一个零值CheckOrigin的的字段Upgrader类型使用安全默认。默认情况下,在允许请求之前,使用Host标头值检查传入请求的Origin字段以确认它们相等。该文档表明浏览器不强制执行跨源有效性,强制执行是服务器应用程序的责任。您可以在 Gorilla 库的源代码中确切地看到这是如何完成的。
文档和源代码表明包中的一个Upgrade函数websocket充当上述示例代码的工厂。工厂函数采用自定义缓冲区大小并覆盖 CheckOrigin 以始终返回 true。Upgrader您可以在 中使用此工厂函数HttpHandler来升级您的连接,而不是创建自定义。
func webSocketHandler(w http.ResponseWriter, r *http.Request) {
conn, err := websocket.Upgrade(w, r, nil, 1024, 1024)
defer conn.Close()
if err != nil {
http.Error(w, err, http.StatusInternalServerError)
return
}
conn.WriteMessage(websocket.TextMessage, []byte("Hello, world!"))
}
- 1 回答
- 0 关注
- 182 浏览
添加回答
举报
0/150
提交
取消