Socket.io: CORAZONES

Creado en 3 feb. 2017  ·  11Comentarios  ·  Fuente: socketio/socket.io

hej,

¿Cómo puedo eliminar el encabezado de respuesta Access-Control-Allow-Origin ?
parece que la configuración {'origins' : 'asfdasd.com'} no funciona.

POST /socket.io/?EIO=3&transport=polling&t=1481690658797-5&sid=Dp18NNt_bWPkB4rGAAAP HTTP / 1.1
Origen: https://evilhost.net

HTTP / 1.1 400 Solicitud incorrecta
Tipo de contenido: aplicación / json
Access-Control-Allow-Credentials: verdadero
Acceso-Control-Permitir-Origen: https://evilhost.net
Fecha: viernes 03 de febrero de 2017 12:27:42 GMT
Conexión: mantener vivo
Codificación de transferencia: fragmentado

Comentario más útil

@thEpisode Me doy cuenta de que este es un hilo antiguo, ¡pero ese enlace final fue lo que lo arregló para mí! La mayoría de los tutoriales Express tienen app.listen(...) pero en el caso de usar socket.io , debe asegurarse de que en su index.js llame a http.listen(...) y NO escuche en el objeto app , o obtendrá este problema CORS. ¡Qué cosa tan pequeña!

Todos 11 comentarios

Mismo error

@Kenzku @thEpisode ¿Qué versión de socket.io estás usando?

Debe arreglarse en 2.x (que incluye https://github.com/socketio/engine.io/pull/452).

Hola @darrachequesne gracias por responder. Soy creador de Crawler Site (https://www.crawlersite.com) y usamos Socket.io para enviar datos a nuestros servidores y toda nuestra infraestructura está en Microsoft Azure, todas las pruebas y los primeros probadores beta usan Azure y no tenemos No hay problemas, pero un nuevo betatester usó otro proveedor de servicios en la nube y reportó un error. El problema es CORS, leemos todas las preguntas en Google !! y buscando soluciones notamos que Socket.io está actualizado a 2.0 (exactamente 2.0.1 en servidor), actualizamos cliente y servidor pero el problema persiste, usamos Express que también reportó problemas con CORS y lo resolvimos.

Estamos muy frustrados porque todas las soluciones en Google no resolvieron el problema, lo siento por no publicar esto en problemas de GitHub o StackOverflow, pero queremos brindar todos los detalles posibles para resolverlo. Algunas URL para probar:

URI de backend: http://crawlerbackend.azurewebsites.net
Probando Express CORS: https://testcors.000webhostapp.com (este alojamiento es utilizado por el tester)
Prueba de Socket.io CORS: https://testcrawlersite.000webhostapp.com (consulte la consola)
Nuestro sitio principal para probar: http://crawler-test.azurewebsites.net (con nuevas modificaciones también está roto)
Archivo Socket.io: http://crawlerbackend.azurewebsites.net/socket.io.js

Parte de nuestro app.js:
'
var ruta = require ('ruta');
var bodyParser = require ('body-parser');
var cors = require ('cors');
var express = require ('express');
var app = express ();

// use body parser so we can get info from POST and/or URL parameters
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
app.use(bodyParser.json()); // support json encoded bodies
app.use(cors({ origin: '*' }));
// Settings for CORS
app.use(function (req, res, next) {

    // Website you wish to allow to connect
    res.header('Access-Control-Allow-Origin', '*');

    // Request methods you wish to allow
    res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

    // Request headers you wish to allow
    res.header('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

    // Set to true if you need the website to include cookies in the requests sent
    // to the API (e.g. in case you use sessions)
    res.setHeader('Access-Control-Allow-Credentials', false);

    // Pass to next layer of middleware
    next();
});

var server = app.listen(cross.NormalizePort(process.env.PORT || 3500));
var io = require('socket.io').listen(server, {
    log: false,
    agent: false,
    origins: '*:*',
    transports: ['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling', 'polling']
});

'

¡¡Problema resuelto!! @Kenzku revise esta documentación: https://github.com/socketio/socket.io/blob/master/docs/API.md#serveroriginsvalue y vea el código: https://github.com/socketio/socket.io /blob/master/lib/index.js#L67 y verifique si usa Express (este ejemplo es muy útil): https://github.com/socketio/socket.io#in -conjunction-with-express

¡Excelente! Supongo que podemos cerrar el tema ahora.

@thEpisode Me doy cuenta de que este es un hilo antiguo, ¡pero ese enlace final fue lo que lo arregló para mí! La mayoría de los tutoriales Express tienen app.listen(...) pero en el caso de usar socket.io , debe asegurarse de que en su index.js llame a http.listen(...) y NO escuche en el objeto app , o obtendrá este problema CORS. ¡Qué cosa tan pequeña!

@frewinchristopher estoy siguiendo el mismo patrón que mencionaste anteriormente, localmente funciona bien pero en el control remoto arroja (Razón: la solicitud CORS no tuvo éxito). donde me equivoco ..?

@gowthamyaal, ¿ podrías mostrarnos tu código?

Gracias por su preocupación, pero resolvió el problema de CORS, ya que estaba usando AWS hay un conflicto con la ip elástica y la ip local, luego cambié la ip de escucha del socket a 0.0.0.0, esto resolvió mi problema.

Ahora frente al problema de la condición de carrera en remoto, estoy usando webpack-dev-config, intenté usar io connect y emitir código en el mismo archivo pero terminé con un error indefinido

webpack-dev-config

código de socket del cliente
;)

las líneas comentadas funcionaron para mí ... ¿alguien podría ayudarme con esto ... gracias de antemano

He seguido todas las soluciones que pude encontrar y todavía tengo que enviar una respuesta funcional. Si alguien pudiera echar un vistazo, estaría muy agradecido.

`const express = require ('express')
const http = require ('http')
const socketIO = require ('socket.io')
const cors = require ('cors')

// Puerto host
puerto constante = 3001

aplicación constante = express ()
app.use (cors ())
// Instancia del servidor
servidor constante = http.createServer (aplicación)
// Crear socket usando la instancia del servidor
const io = socketIO (servidor)

io.origins ("http: // localhost: 3000")

io.on ('conexión', socket => {
console.log ("Usuario conectado")

socket.on('disconnect', () => {
    console.log("User Disconnected")
})

socket.on('send message', (message) => {
    io.sockets.emit('send message', message)
})

})

server.listen (puerto, () => console.log ( Listening on port ${port} )) `

¿Fue útil esta página
0 / 5 - 0 calificaciones