javascript - 如何设置 socket.io 来源以限制连接到一个 url

标签 javascript node.js socket.io

我们有一个 html 网站和一个为该网站提供服务的 node.js 服务器。 网站和服务器使用 socke.io 交换数据。 我们在文档中发现了这一点:

原点默认为 *:* 允许连接到 Socket.IO 服务器的源。

我们的 html.site 位于 http://questionexample.com/page1 上。 只有这个网站可以连接到我们的服务器。(但每个人都可以连接到那个网站。) 我们如何设置原点?

最佳答案

如果你深入研究 Socket.io 源代码,你会发现这样几行:

var origin = request.headers.origin || request.headers.referer
  , origins = this.get('origins');

...

var parts = url.parse(origin);
parts.port = parts.port || 80;
var ok =
  ~origins.indexOf(parts.hostname + ':' + parts.port) ||
  ~origins.indexOf(parts.hostname + ':*') ||
  ~origins.indexOf('*:' + parts.port);

如您所见,Socket.io 获取来自客户端的源(或引用者),检索域名和端口, 并与您指定的 origins 选项进行比较。

所以有效的 origins 值是(* 表示“任何”):

  • testsite.com:80
  • http://testsite.com:80
  • http://*:8080
  • *:8080
  • testsite.com:* http://someotherdomain.com:8080 (以空格分隔的多个来源)
  • testsite.com:*/somepath (socket.io 将忽略/somepath)
  • *:*

而且这些都是无效的(因为没有端口号):

  • testsite.com
  • http://testsite.com
  • http://testsite.com/somepath

另请注意,如果您将 sub.testsite.com 指定为 origins 值,则 testsite.com 将是 valid 来源。

关于javascript - 如何设置 socket.io 来源以限制连接到一个 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15771805/

相关文章:

node.js - Disconnect 事件在 2 分钟后被触发

javascript - Socket.IO 客户端 .js 文件位于何处?

javascript - Firestore - 如何在我的状态下添加文档 ID 及其数据?

javascript - 当我点击按钮时,隐藏的内容没有显示,这是为什么?

javascript - 我可以使用 jwcrypto 来验证 Google 生成的 OAuth2 id_token 吗?

javascript - 使用 $.get 调用文件时 socket.io 事件不起作用

laravel - 使用socket.io和Laravel Echo时如何保护私有(private) channel ?

javascript - 不可读错误 : Failed to allocate videosource

Javascript 游戏循环

javascript - 如何改进我的 MongoDB 结构?