![](/img/trans.png)
[英]Java - Access-Control-Allow-Origin Multiple Origin Domains?
[英]'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.