2012-09-26 19 views
2

我使用: 「socket.io」:「〜0.9.10」Socket.IO問題與非法來源?

我遇到了這個問題,當我去託管在端口80我的Apache網絡服務器託管client.html頁:

XMLHttpRequest cannot load http://localhost:5000/socket.io/1/?t=1348624895534. Origin http://localhost is not allowed by Access-Control-Allow-Origin. 

我對我的服務器端運行SocketIO是在端口5000,如下圖所示:

io = io.listen(5000); 
io.set("origins","*"); 

然而,每次我打開我的Apache client.html網頁,我看到我的SocketIO服務器控制檯:

warn: illegal origin: http://localhost 

我該如何擺脫這個問題?

回答

1

你正在做CORS

你得到的錯誤來自於Socket.IO似乎使用XHR而不是Websockets。這是socket.IO在websocket不可用時所做的事情,它使用另一種協議,FlashSockets,XHR-polling等。

您需要在您的apache服務器上設置一個標頭以允許查詢另一個網站,這裏是你的Socket.io服務器。

這是how to

如果你只使用一臺服務器,對你來說會更簡單。 您可以使用Express來傳遞靜態HTML文件。 Here是一個演示/教程應用程序,使用Socket.IO + Express輕鬆入門。

這個演示是推動dotCloud的boiler plate,所以如果你想無痛部署,請按照這些說明。

+0

不完全清楚...我正在運行Windows a2enmod是一個未知的命令。 「Header set Access-Control-Allow-Origin *」是否放在httpd.conf的特定區域中?如果是這樣,具體在哪裏?似乎並不明顯。到目前爲止,我所做的是取消註釋httpd.conf中的「LoadModule headers_module modules/mod_headers.so」這一行,但不知道該從哪裏下載。 – Rolando

+0

a2enmod是一個啓用apache 2模塊的工具。你有沒有理由使用Apache + Node,而不是僅使用Express和Socket.IO的Node(它們可以很好地協作)。因爲如果沒有,它會讓你的生活變得更容易。 – 3on

+0

否則,要在Windows上激活Apache模塊,只需從Apache安裝文件夾中打開'conf/httpd.conf',並將'#LoadModule headers_module modules/mod_headers.so'行註釋到'LoadModule headers_module modules/mod_headers.so' – 3on

0

嘗試設置'Access-Control-Allow-Origin''*'

response.writeHead(200, { 
    'Access-Control-Allow-Origin': '*' 
}); 
+0

如何以及在哪裏做到這一點?我的印象是io.set(「起源」,「*」);會照顧它的。目前沒有任何關於如何設置的文檔。我使用Express 3.x. – Rolando

+0

在http response ...檢查我更新的答案 – vinayr

+0

我不確定「響應」變量來自哪裏,因爲目前我有幾乎相同的代碼,如下所示:http://socket.io/。您是否暗示我應該將express io.sockets.io內容粘貼到「路由」中,以便我可以訪問響應變量? – Rolando