猿问

更新:使用 js websockets 发送源头

我一直在玩 Go 中的 gorilla-websocket,当我实现基本的 echo 示例时,我在部署服务器后记录了一个错误,


未找到来源 Websocket 版本 != 13


我找到了一种绕过这个的方法,让检查原点的函数总是返回 true


var wsUpgrader = websocket.Upgrader{

    ReadBufferSize:  1024,

    WriteBufferSize: 1024,

    CheckOrigin: func(r *http.Request) bool {

        return true

    },

}

但感觉不太对。因此,我正在寻找解决该问题的方法。


更新:在再次查看问题后,我似乎实际上希望将原始标头添加到客户端实现,即 javascript websocket 实现


@benjic 我通过一个 javascript html5 应用程序连接到 websocket,该应用程序不是托管在同一台服务器上,而是由我通过 chrome 在本地运行


那我该怎么做。


慕后森
浏览 183回答 1
1回答

慕姐4208626

通过阅读大猩猩的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!"))}
随时随地看视频慕课网APP

相关分类

Go
我要回答