Socket.io: CORS

Dibuat pada 3 Feb 2017  ·  11Komentar  ·  Sumber: socketio/socket.io

hej,

bagaimana saya bisa menghapus tajuk respons Access-Control-Allow-Origin ?
sepertinya pengaturan {'origins' : 'asfdasd.com'} tidak berfungsi.

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

HTTP/1.1 400 Permintaan Buruk
Tipe-Konten: aplikasi/json
Akses-Kontrol-Izinkan-Kredensial: benar
Access-Control-Allow-Origin: https://evilhost.net
Tanggal: Jum, 03 Feb 2017 12:27:42 GMT
Koneksi: tetap hidup
Transfer-Encoding: chunked

Komentar yang paling membantu

@thEpisode Saya menyadari ini adalah utas lama, tetapi tautan terakhir itulah yang memperbaikinya untuk saya! Sebagian besar tutorial Express memiliki app.listen(...) tetapi dalam kasus menggunakan socket.io Anda harus yakin bahwa di index.js Anda menelepon http.listen(...) dan TIDAK mendengarkan objek app , atau Anda akan mendapatkan masalah CORS ini. Hal kecil seperti itu!

Semua 11 komentar

Kesalahan yang sama

@Kenzku @thEpisode Versi socket.io mana yang Anda gunakan?

Itu harus diperbaiki di 2.x (yang mencakup https://github.com/socketio/engine.io/pull/452).

Hai @darrachequesne terima kasih atas balasannya. Saya pencipta Situs Crawler (https://www.crawlersite.com) dan kami menggunakan Socket.io untuk mengirim data ke server kami dan semua infrastruktur kami ada di Microsoft Azure, semua pengujian dan penguji beta pertama menggunakan Azure dan kami memiliki 't masalah, tetapi betatester baru menggunakan penyedia layanan cloud lain dan dia melaporkan bug. Masalahnya adalah CORS, kami membaca semua pertanyaan di Google!! dan mencari solusi kami melihat bahwa Socket.io diperbarui ke 2.0 (tepatnya 2.0.1 di server), kami memperbarui klien dan server tetapi masalah tetap ada, kami menggunakan Express yang juga melaporkan masalah dengan CORS dan kami menyelesaikannya.

Kami sangat frustrasi karena semua solusi di Google tidak menyelesaikan masalah, maaf karena tidak memposting ini di masalah GitHub atau StackOverflow, tetapi kami ingin memberikan semua detail yang mungkin untuk menyelesaikannya. Beberapa URL untuk diuji:

URI Backend: http://crawlerbackend.azurewebsites.net
Menguji CORS Ekspres: https://testcors.000webhostapp.com (hosting ini digunakan oleh penguji)
Pengujian Socket.io CORS: https://testcrawlersite.000webhostapp.com (silakan lihat konsol)
Situs utama kami untuk menguji: http://crawler-test.azurewebsites.net (dengan modifikasi baru juga rusak)
File Socket.io: http://crawlerbackend.azurewebsites.net/socket.io.js

Bagian dari app.js kami:
`
var jalur = membutuhkan('jalur');
var bodyParser = membutuhkan('body-parser');
var cors = membutuhkan('cors');
var ekspres = membutuhkan('ekspres');
var aplikasi = ekspres();

// 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']
});

`

Masalah terpecahkan!! @Kenzku harap tinjau dokumentasi ini: https://github.com/socketio/socket.io/blob/master/docs/API.md#serveroriginsvalue dan lihat kode: https://github.com/socketio/socket.io /blob/master/lib/index.js#L67 dan periksa apakah Anda menggunakan Express (contoh ini sangat berguna): https://github.com/socketio/socket.io#in -conjunction-with-express

Besar! Saya kira kita bisa menutup masalah sekarang.

@thEpisode Saya menyadari ini adalah utas lama, tetapi tautan terakhir itulah yang memperbaikinya untuk saya! Sebagian besar tutorial Express memiliki app.listen(...) tetapi dalam kasus menggunakan socket.io Anda harus yakin bahwa di index.js Anda menelepon http.listen(...) dan TIDAK mendengarkan objek app , atau Anda akan mendapatkan masalah CORS ini. Hal kecil seperti itu!

@frewinchristopher saya mengikuti pola yang sama seperti yang Anda sebutkan di atas, secara lokal berfungsi dengan baik tetapi di jarak jauh ia melempar (Alasan: permintaan CORS tidak berhasil). dimana saya salah..?

@gowthamyaal bisakah Anda menunjukkan kepada kami kode Anda?

Terima kasih atas perhatian Anda, tetapi Memecahkan masalah CORS, karena saya menggunakan AWS ada konflik dengan ip elastis dan ip lokal, kemudian saya telah mengubah soket mendengarkan ip sebagai 0.0.0.0, ini menyelesaikan masalah saya.

Sekarang menghadapi masalah kondisi balapan di jarak jauh, saya menggunakan webpack-dev-config, saya telah mencoba menggunakan io connect dan memancarkan kode dalam file yang sama tetapi berakhir dengan kesalahan yang tidak ditentukan

webpack-dev-config

kode soket klien
;)

baris yang dikomentari berhasil untuk saya .... adakah yang bisa membantu saya dengan ini .... terima kasih sebelumnya

Saya telah mengikuti semua solusi yang dapat saya temukan dan masih belum mengirim tanggapan yang berfungsi. Jika seseorang bisa melihat saya akan sangat menghargai.

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

// Port tuan rumah
port konstan = 3001

aplikasi const = ekspres()
app.use(cors())
// Server contoh
const server = http.createServer(aplikasi)
// Buat soket menggunakan instance server
const io = socketIO(server)

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

io.on('koneksi', socket => {
console.log("Pengguna Terhubung")

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat