为了账号安全,请及时绑定邮箱和手机立即绑定

更新:使用 js websockets 发送源头

更新:使用 js websockets 发送源头

Go
慕后森 2021-11-15 21:00:55
我一直在玩 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!"))

}


查看完整回答
反对 回复 2021-11-15
  • 1 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信