在一个端口上使用 CORS 和 Socket.io HTTP + WSS?

全新的 Go .. 显然仍在学习语法和基础知识.. 但我确实有一个特定的目标..


我试图在 :8080 上建立一个简单的服务器,它可以响应 HTTP 和 socket.io(通过/socket.io/url),特别是 CORS。


我的代码:


package main


import (

     "log"         

     "net/http"

     "github.com/rs/cors"

     "github.com/googollee/go-socket.io"

 )


 func SayHelloWorld(w http.ResponseWriter, r *http.Request) {

     w.Write([]byte("Hello, World!"))

 }


 func main() {


   c := cors.New(cors.Options{

         AllowedOrigins: []string{"*"},

         AllowCredentials: true,

   })


   server, err := socketio.NewServer(nil)

     if err != nil {

         log.Fatal(err)

     }



   server.On("connection", func(so socketio.Socket) {

      log.Println("on connection")

      so.Join("chat")

      so.On("chat message", func(msg string) {

          log.Println("emit:", so.Emit("chat message", msg))

          so.BroadcastTo("chat", "chat message", msg)

      })

      so.On("disconnection", func() {

          log.Println("on disconnect")

      })

   })


   server.On("error", func(so socketio.Socket, err error) {

      log.Println("error:", err)

   })    



   http.Handle("/socket.io/", c.Handler(server))

   http.HandleFunc("/", SayHelloWorld)

   log.Println("Serving at localhost:8080...")

   log.Fatal(http.ListenAndServe(":8080", nil))

}

在客户端,我仍然看到:


与“wss://api.domain.com/socket.io/?EIO=3&transport=websocket&sid=xNWd9aZvwDnZOrXkOBaC”的 WebSocket 连接失败:在建立连接之前 WebSocket 已关闭。


(index):1 XMLHttpRequest 无法加载https://api.domain.com/socket.io/?EIO=3&transport=polling&t=1420662449235-3932&sid=xNWd9aZvwDnZOrXkOBaC。请求的资源上不存在“Access-Control-Allow-Origin”标头。Origin ' http://fiddle.jshell.net ' 因此不允许访问。


编辑#1:


所以我一直在努力理解为什么我无法连接.. 遇到了一个更令人困惑的难题?


https://gist.github.com/acoyfellow/167b055da85248c94fc4


上面的gist是我的golang服务器的代码+用于连接的浏览器代码..这段代码每秒会向后端发送30个HTTP GET请求,没有连接、升级或给出任何错误(客户端或服务器端)。它本质上是我自己的 DDOS 后端?


有人,请有人告诉我我在做一些愚蠢的事情..这真是泡菜:P



慕容森
浏览 208回答 3
3回答

阿晨1998

你不是说http+ws还是https+wss。如果您从 wss 中删除 as,您应该能够连接。如果你想要网络套接字的 tls (wss),那么你需要 http.ListenAndServeTLS。

收到一只叮咚

CORS 似乎不适用于 WebSockets。根据这个相关问题“使用 WebSocket,有一个“原点”标头,浏览器必须填充包含打开 WS 连接的 JS 的 HTML 的原点。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go