Socket.io: CORS

Erstellt am 3. Feb. 2017  ·  11Kommentare  ·  Quelle: socketio/socket.io

hej,

Wie kann ich den Antwortheader Access-Control-Allow-Origin entfernen?
sieht so aus, als ob die Einstellungen {'origins' : 'asfdasd.com'} nicht funktionieren.

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

HTTP/1.1 400 Fehlerhafte Anfrage
Inhaltstyp: application/json
Zugangskontrolle-Zulassen-Anmeldeinformationen: true
Zugriffskontrolle-Zulassen-Herkunft: https://evilhost.net
Datum: Fr, 03.02.2017 12:27:42 GMT
Verbindung: Keep-Alive
Transfer-Encoding: chunked

Hilfreichster Kommentar

@thEpisode Mir ist klar, dass dies ein alter Thread ist, aber dieser letzte Link hat es für mich behoben! Die meisten Express-Tutorials haben app.listen(...) aber wenn Sie socket.io , müssen Sie sicher sein, dass Sie in Ihrem index.js http.listen(...) anrufen und NICHT zuhören das app Objekt, oder Sie erhalten dieses CORS-Problem. So ein kleines Ding!

Alle 11 Kommentare

Gleicher Fehler

@Kenzku @thEpisode Welche Version von socket.io verwendest du?

Es sollte in 2.x behoben werden (einschließlich https://github.com/socketio/engine.io/pull/452).

Hallo @darrachequesne danke für die Antwort. Ich bin der Ersteller der Crawler Site (https://www.crawlersite.com) und wir verwenden Socket.io, um Daten an unsere Server zu senden und unsere gesamte Infrastruktur ist auf Microsoft Azure, alle Test- und ersten Betatester verwenden Azure und wir haben keine Probleme, aber ein neuer Betatester nutzt einen anderen Cloud-Dienstleister und hat einen Fehler gemeldet. Das Problem ist CORS, wir haben alle Fragen bei Google gelesen!! und auf der Suche nach Lösungen stellen wir fest, dass Socket.io auf 2.0 aktualisiert wurde (genau 2.0.1 im Server), wir aktualisieren Client und Server, aber das Problem bleibt bestehen, wir verwenden Express, das auch Probleme mit CORS gemeldet hat, und wir haben es gelöst.

Wir sind sehr frustriert, weil nicht alle Lösungen auf Google das Problem gelöst haben. Entschuldigung, dass wir dies nicht auf GitHub-Problemen oder StackOverflow gepostet haben, aber wir möchten alle Details angeben, die möglich sind, um das Problem zu lösen. Einige URLs zum Testen:

Back-End-URI: http://crawlerbackend.azurewebsites.net
Testen von Express CORS: https://testcors.000webhostapp.com (dieses Hosting wird vom Tester verwendet)
Testen von Socket.io CORS: https://testcrawlersite.000webhostapp.com (siehe Konsole)
Unsere primäre Seite zum Testen: http://crawler-test.azurewebsites.net (mit neuen Modifikationen ist auch kaputt)
Socket.io-Datei: http://crawlerbackend.azurewebsites.net/socket.io.js

Teil unserer app.js:
`
var-Pfad = require('Pfad');
var bodyParser = require('body-parser');
var cors = require('cors');
var express = erfordern('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']
});

`

Problem gelöst!! @Kenzku Bitte https://github.com/socketio/socket.io/blob/master/docs/API.md#serveroriginsvalue und sehen Sie sich den Code an: https://github.com/socketio/socket.io /blob/master/lib/index.js#L67 und überprüfen Sie, ob Sie Express verwenden (dieses Beispiel ist sehr nützlich): https://github.com/socketio/socket.io#in -conjunction-with-express

Groß! Ich denke, wir können das Thema jetzt schließen.

@thEpisode Mir ist klar, dass dies ein alter Thread ist, aber dieser letzte Link hat es für mich behoben! Die meisten Express-Tutorials haben app.listen(...) aber wenn Sie socket.io , müssen Sie sicher sein, dass Sie in Ihrem index.js http.listen(...) anrufen und NICHT zuhören das app Objekt, oder Sie erhalten dieses CORS-Problem. So ein kleines Ding!

@frewinchristopher Ich

@gowthamyaal könntest du uns deinen Code zeigen?

Vielen Dank für Ihre Bedenken, aber das CORS-Problem wurde gelöst, da ich AWS verwendet habe, gibt es einen Konflikt mit der elastischen IP und der lokalen IP. Später hatte ich die Socket-Listening-IP als 0.0.0.0 geändert, dies löste mein Problem.

Angesichts des Race-Condition-Problems in Remote verwende ich webpack-dev-config. Ich hatte versucht, io connect zu verwenden und Code in derselben Datei auszugeben, endete jedoch mit einem undefinierten Fehler

webpack-dev-config

Client-Socket-Code
;)

die kommentierten Zeilen haben bei mir funktioniert....kann mir jemand dabei helfen....danke im Voraus

Ich habe alle Lösungen befolgt, die ich finden konnte, und habe immer noch keine funktionierende Antwort gesendet. Wenn jemand mal reinschauen könnte wäre ich sehr dankbar.

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

// Host-Port
konstanter Port = 3001

const app = express()
app.use(cors())
// Serverinstanz
const server = http.createServer(app)
// Socket mit der Serverinstanz erstellen
const io = socketIO (Server)

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

io.on('Verbindung', Steckdose => {
console.log("Benutzer verbunden")

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} ))`

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen