簡體   English   中英

Java服務器上具有Socket.IO的“訪問控制允許來源”

[英]'Access-Control-Allow-Origin' with Socket.IO on Java Server

我遇到以下問題:我正在使用socket.io(netty socket.io- https://github.com/mrniko/netty-socketio )運行JAVA服務器-我正在嘗試從通過javascript來訪問其他Web服務器。

為了進行測試,我正在嘗試運行演示聊天窗口( https://github.com/mrniko/netty-socketio-demo )。

現在的問題是,我不斷得到以下

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服務器? 我找到了一些解決方案,說要在其中添加“標頭”,但是我不知道該在哪里放置。 那會進入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

任何幫助是極大的贊賞 ! 謝謝

昨天我遇到了類似的問題,並且解決了大多數問題。 我想在這里分享我的解決方案。
首先,我們都知道這就是所謂的CORS標准(跨域資源共享),這意味着我們從網站A打開的一種資源從網站B請求另一種資源( 參考 )。 因此,在您的情況下,假定原始Web服務器(域AAA.com)和您的凈值服務器(域BBB.com),然后將此行附加到凈值服務器以獲取許可:

config.setOrigin("http://AAA.com");

請注意,您不能在netty-socketio中的通配符(*)中使用Access-Control-Allow-Origin ,因為它默認情況下將憑據(即Access-Control-Allow-Credentials )設置為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.javascript

script(type="text/javascript", src="https://cdn.socket.io/socket.io-1.3.5.js")    

使用netty-socketio 1.7.1或1.6.6版本。 此版本中添加了通過Configuration.origin參數設置自定義Access-Control-Allow-Origin的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM