Socket.io: SCRO

Créé le 3 févr. 2017  ·  11Commentaires  ·  Source: socketio/socket.io

hey,

comment puis-je supprimer l'en-tête de réponse Access-Control-Allow-Origin ?
semble que les paramètres {'origins' : 'asfdasd.com'} ne fonctionnent pas.

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

HTTP/1.1 400 Mauvaise demande
Type de contenu : application/json
Access-Control-Allow-Credentials : vrai
Access-Control-Allow-Origin : https://evilhost.net
Date : ven. 03 févr. 2017 12:27:42 GMT
Connexion: keep-alive
Encodage de transfert : en morceaux

Commentaire le plus utile

@thEpisode Je me rends compte qu'il s'agit d'un vieux fil, mais ce dernier lien a été ce qui l'a corrigé pour moi ! La plupart des didacticiels Express ont app.listen(...) mais dans le cas de l'utilisation de socket.io vous devez vous assurer que dans votre index.js vous appelez http.listen(...) et NE PAS écouter sur l'objet app , ou vous obtiendrez ce problème CORS. Une si petite chose !

Tous les 11 commentaires

Même erreur

@Kenzku @thEpisode Quelle version de socket.io utilisez-vous ?

Il devrait être corrigé dans 2.x (qui inclut https://github.com/socketio/engine.io/pull/452).

Salut @darrachequesne merci pour la réponse. Je suis le créateur du Crawler Site (https://www.crawlersite.com) et nous utilisons Socket.io pour envoyer des données à nos serveurs et toute notre infrastructure est sur Microsoft Azure, tous les testeurs et premiers bêta-testeurs utilisent Azure et nous avons Pas de problèmes, mais un nouveau bêta-testeur utilise un autre fournisseur de services cloud et il a signalé un bogue. Le problème c'est CORS, on lit toutes les questions sur Google !! et en recherchant des solutions, nous remarquons que Socket.io est mis à jour vers 2.0 (exactement 2.0.1 dans le serveur), nous mettons à jour le client et le serveur mais le problème persiste, nous utilisons Express qui a également signalé des problèmes avec CORS et nous les avons résolus.

Nous sommes très frustrés car toutes les solutions sur Google n'ont pas résolu le problème, désolé de ne pas avoir posté cela sur les problèmes GitHub ou StackOverflow mais nous voulons donner tous les détails possibles pour le résoudre. Quelques URL à tester :

URI du backend : http://crawlerbackend.azurewebsites.net
Test Express CORS : https://testcors.000webhostapp.com (cet hébergement est utilisé par le testeur)
Test de Socket.io CORS : https://testcrawlersite.000webhostapp.com (veuillez consulter la console)
Notre site principal à tester : http://crawler-test.azurewebsites.net (avec de nouvelles modifications est également cassé)
Fichier socket.io : http://crawlerbackend.azurewebsites.net/socket.io.js

Une partie de notre app.js :
`
var chemin = require('chemin');
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']
});

`

Problème résolu!! @Kenzku, veuillez consulter cette documentation : https://github.com/socketio/socket.io/blob/master/docs/API.md#serveroriginsvalue et voir le code : https://github.com/socketio/socket.io /blob/master/lib/index.js#L67 et vérifiez si vous utilisez Express (cet exemple est très utile) : https://github.com/socketio/socket.io#in -conjunction-with-express

Super! Je suppose que nous pouvons clore le sujet maintenant.

@thEpisode Je me rends compte qu'il s'agit d'un vieux fil, mais ce dernier lien a été ce qui l'a corrigé pour moi ! La plupart des didacticiels Express ont app.listen(...) mais dans le cas de l'utilisation de socket.io vous devez vous assurer que dans votre index.js vous appelez http.listen(...) et NE PAS écouter sur l'objet app , ou vous obtiendrez ce problème CORS. Une si petite chose !

@frewinchristopher je suis le même modèle que vous l'avez mentionné ci-dessus, localement cela fonctionne bien mais à distance, il lance (raison: la demande CORS n'a pas réussi). où je me trompe..?

@gowthamyaal peux -tu nous montrer ton code ?

Merci pour votre préoccupation, mais résolu le problème CORS, car j'utilisais AWS, il y a un conflit avec l'adresse IP élastique et l'adresse IP locale, plus tard j'avais changé l'adresse IP d'écoute de socket en 0.0.0.0, cela a résolu mon problème.

Maintenant confronté au problème de condition de course à distance, j'utilise webpack-dev-config, j'avais essayé d'utiliser io connect et d'émettre du code dans le même fichier mais je me suis retrouvé avec une erreur non définie

webpack-dev-config

code de socket client
;)

les lignes commentées ont fonctionné pour moi... quelqu'un pourrait-il m'aider avec ça... merci d'avance

J'ai suivi toutes les solutions que j'ai pu trouver et je n'ai toujours pas envoyé de réponse fonctionnelle. Si quelqu'un pouvait jeter un oeil, je serais très reconnaissant.

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

// Port hôte
port const = 3001

application const = express()
app.use(cors())
// Instance de serveur
serveur const = http.createServer(app)
// Création d'une socket à l'aide de l'instance du serveur
const io = socketIO(serveur)

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

io.on('connexion', socket => {
console.log("Utilisateur connecté")

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

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

})

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

Cette page vous a été utile?
0 / 5 - 0 notes