2014-06-05 2 views
15

채팅 응용 프로그램을 작성하기 위해 node와 socket.io를 사용하고 있습니다. Chrome에서 제대로 작동하지만 mozilla는 Cross-Origin Requests를 사용하도록 오류를 발생시킵니다.Socket.io + Node.js Cross-Origin Request Blocked

크로스 원본 요청이 차단됨 : 동일한 원본 정책이 원격 리소스를 읽는 것을 허용하지 않습니다 (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는 요청을 허용 할 근원이다.

당신이이 인증 파이어 폭스 문제가 아니라 반드시 CORS 뭐 잘못 될 수보다 약 origins 형식 here

+0

고마워요. – Prozi

1

를 읽을 수 있습니다. Firefox CORS request giving 'Cross-Origin Request Blocked' despite headers

Firefox에서 CORS 오류가 발생하는 Socketio 및 Nodejs에서 똑같은 문제가 발생했습니다. * .myNodeSite.com에 대한 Certs가 있었지만 Nodejs에 LAN 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) 할 수 있습니까? –