2014-06-05 266 views
15

我正在使用node和socket.io來編寫聊天應用程序。它在Chrome上正常工作,但Mozilla發出錯誤以啓用跨源請求。Socket.io + Node.js跨域請求被阻止

跨源請求被阻止:同源策略不允許讀取遠程資源http://waleedahmad.kd.io:3000/socket.io/?EIO=2&transport=polling&t=1401964309289-2&sid=1OyDavRDf4WErI-VAAAI。這可以通過將資源移動到相同的域或啓用CORS來解決。

這是我的代碼來啓動節點服務器。

var express = require('express'), 
    app = express(), 
    server = require('http').createServer(app), 
    io = require('socket.io').listen(server), 
    path = require('path'); 
server.listen(3000); 

app.get('/', function(req, res) { 
    res.sendfile(__dirname + '/public/index.html'); 
}); 

在客戶端。

var socket = io.connect('//waleedahmad.kd.io:3000/'); 

HTML頁面上的腳本標記。

<script type="text/javascript" src="//waleedahmad.kd.io:3000/socket.io/socket.io.js"></script> 

我也在應用程序根目錄中使用.htaccess文件。 (waleedahmad.kd.io/node)。

Header add Access-Control-Allow-Origin "*" 
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 
+0

你有沒有得到這個工作?如果是這樣,你的解決方案是什麼? – denaje

回答

20

您可以嘗試在服務器端設置origins選項,允許跨域請求:

io.set('origins', 'http://yourdomain.com:80'); 

這裏http://yourdomain.com:80是要允許請求的來源。

你可以閱讀更多關於origins格式here

+0

這對我工作感謝 – Prozi

1

這可能是一個問題的認證與Firefox,不一定什麼不對您的CORS。 Firefox CORS request giving 'Cross-Origin Request Blocked' despite headers

我遇到了與Socketio和Nodejs在Firefox中引發CORS錯誤相同的問題。我有Certs for * .myNodeSite.com,但是我引用了Nodejs的局域網IP地址192.168.1.10。 (WAN IP地址也可能引發相同的錯誤。)由於Cert與IP地址引用不匹配,Firefox會拋出該錯誤。

20

簡單的服務器端修復

var io = require('socket.io')(server, { origins: '*:*'}); 

io.set('origins', '*:*'); 

io.origins('*:*') // for latest version 

*不能單獨工作歷時我下來的兔子洞。

+0

我使用的是最新版本,它不是,它給我連接拒絕錯誤 – gamer

+0

@gamer也許通過所有的第一原則然後上升,例如,我的防火牆阻止端口?我可以ping我的服務器等等 –