2014-07-25 8 views
7

sto usando Node.js sulla porta 8082 e Apache sulla porta 80.casuali Bad Request 400 errori con Socket.io 1.0.6

tutto funziona bene per un po 'e poi il browser inizia a mostrare i messaggi di errore "400 Bad Request", errori CORS.

Il server sta impostando le intestazioni CORS. Come puoi vedere, sto usando anche l'adattatore Redis.

var io = require('socket.io').listen(8082); 
io.adapter(redis({ host: '127.0.0.1', port: 6379 })); 
io.set('origins', 'domain.com:*'); 

Non posso dire perché alcune volte funziona tutto bene, altre volte no. L'errore si verifica sempre quando Socket.io tenta di aggiornare da pool a websocket.

Quando uso il client da https://cdn.socket.io/socket.io-1.0.6.js ho ricevuto meno errori.

Quando utilizzo un riferimento locale per socket.io-1.0.6.js, gli errori si verificano con maggiore frequenza. Impossibile trovare un modello di errore.

Dopo gli errori, riavvio il server Node.js, provo alcune richieste, funziona per un po 'di volte, errori. Alcune volte funziona di nuovo senza riavviare il server.

Richiesta intestazioni campione campione

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding gzip, deflate 
Accept-Language pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3 
Cookie io=RjKzZ6Y1OTQeSEsPAAAL; SGM_DESENV=cb5ae798c2f6f5d3f38c6ed16a6e4696 
Host 200.238.251.79:8082 
Origin http://200.238.251.79 
Referer http://200.238.251.79/maximiliano/sgp/admin/custodiacompartilhada/add 
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0 

intestazioni di risposta

Access-Control-Allow-Credentials true 
Access-Control-Allow-Origin http://200.238.251.79 
Connection keep-alive 
Content-Length 101 
Content-Type application/octet-stream 
Date Fri, 25 Jul 2014 16:10:26 GMT 
Set-Cookie io=9OYcCmU24IyzrAS3AAAM 

I messaggi di errore

NetworkError: 400 Bad Request - http://200.238.251.79:8082/socket.io/?EIO=2&transport=polling&t=1406304539856-2&sid=RjKzZ6Y1OTQeSEsPAAAL 

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://200.238.251.79:8082/socket.io/?EIO=2&transport=polling&t=1406304539856-2&sid=RjKzZ6Y1OTQeSEsPAAAL This can be fixed by moving the resource to the same domain or enabling CORS. 
+0

Si sta utilizzando NewRelic? – Eddie

risposta

0

CORS non consente jolly nel nome di dominio.

O si deve consentire da ogni dominio:

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

o specificare la porta:

io.set('origins', 'http://200.238.251.79:8082'); 

(richiedendo su un'altra porta implica CORS)

+0

Questo potrebbe essere vero ma non lo è più. Vedi checkRequest https://github.com/socketio/socket.io/blob/master/lib/index.js Abilita i caratteri jolly per il nome host o la porta. – Eddie