我们有一个 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/