';访问控制允许原点';在Java服务器上使用Socket.IO

';访问控制允许原点';在Java服务器上使用Socket.IO,java,javascript,sockets,socket.io,Java,Javascript,Sockets,Socket.io,我遇到了以下问题:我正在运行一个带有socket.io(netty socket.io-)的JAVA服务器——我试图通过javascript从不同的web服务器访问此服务器 为了进行测试,我正在尝试运行演示聊天() 现在的问题是,我不断得到以下信息 XMLHttpRequest cannot load http://myserver/socket.io/1/?t=1400445162388. No 'Access-Control-Allow-Origin' header is present o

我遇到了以下问题:我正在运行一个带有socket.io(netty socket.io-)的JAVA服务器——我试图通过javascript从不同的web服务器访问此服务器

为了进行测试,我正在尝试运行演示聊天()

现在的问题是,我不断得到以下信息

XMLHttpRequest cannot load http://myserver/socket.io/1/?t=1400445162388. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'myclient.com' is therefore not allowed access. 
所以最大的问题是:如何允许访问我的java服务器?我找到了一些解决方案,可以在其中添加“header”,但我不知道该放在哪里。这会进入socket.io服务器代码吗

我想我需要这样的东西,放在JAVA服务器的某个地方:

response.setHeader("Access-Control-Allow-Origin", "*");
这是启动服务器的代码:

Configuration config = new Configuration();
    config.setHostname("localhost");
    config.setPort(80);
    final SocketIOServer server = new SocketIOServer(config);
    //ChatObject wurde extra implementiert, ggf. loeschen
    server.addJsonObjectListener(ChatObject.class, new DataListener<ChatObject>() {
        @Override
        public void onData(SocketIOClient client, ChatObject data, AckRequest ackRequest) throws Exception {
            // broadcast messages to all clients
            server.getBroadcastOperations().sendJsonObject(data);
        }
    });
    server.start();
error: The specified resource was not found: /static/flashsocket/WebSocketMain.swf
error: The specified resource was not found: /static/flashsocket/WebSocketMainInsecure.swf
info: Session store / pubsub factory used: {}MemoryStoreFactory (local session store only)
info: SocketIO server started at port: {}80

非常感谢您的帮助!谢谢您使用1.7.1或1.6.6版本。通过配置设置自定义访问控制允许原点的功能。此版本中添加了原点参数。

我昨天遇到了类似的问题,并基本解决了它。我想在这里分享我的解决方案。
首先,我们都知道这是所谓的CORS标准(跨源资源共享),这意味着我们从网站A打开的一个资源请求从网站B()打开另一个资源。因此,在您的情况下,假设原始web服务器(具有域AAA.com)和您的netty服务器(域BBB.com),然后将此行附加到您的netty服务器以获得权限:

config.setOrigin("http://AAA.com");
请注意,您不能在netty socketio中使用通配符(*)作为访问控制允许来源,因为它在默认情况下将凭据(即访问控制允许凭据)设置为TRUE()。请记住,浏览器还将拒绝任何没有Access Control Allow Credentials:true标题的响应,并且不会使调用web内容的响应可用。希望这些帮助

以下是我的库版本:
netty socketio版本

<dependency>
    <groupId>com.corundumstudio.socketio</groupId>
    <artifactId>netty-socketio</artifactId>
    <version>1.7.6</version>
</dependency>

不你需要配置Socket.io来允许你的origin.Thank@SLaks你能告诉我怎么做以及在哪里做吗?谢谢,我已经找到了那个页面。如果我没弄错的话,它会说默认设置了原点“*”,允许从任何地方访问,对吗?另外,这是一个java服务器,所以我不能使用java脚本代码,对吗?或者我必须在客户端java上添加这个吗?我指的是客户端java脚本
script(type="text/javascript", src="https://cdn.socket.io/socket.io-1.3.5.js")