Socket.io: كورس

تم إنشاؤها على ٣ فبراير ٢٠١٧  ·  11تعليقات  ·  مصدر: socketio/socket.io

هج

كيف يمكنني إزالة رأس الاستجابة Access-Control-Allow-Origin ؟
يبدو أن الإعدادات {'origins' : 'asfdasd.com'} لا تعمل.

نشر /ocket.io/؟EIO=3&transport=polling&t=1481690658797-5&sid=Dp18NNt_bWPkB4rGAAAP HTTP / 1.1
الأصل: https://evilhost.net

HTTP / 1.1 400 طلب غير صالح
نوع المحتوى: application / json
الوصول والتحكم والسماح الاعتماد: صحيح
Access-Control-Allow-Origin: https://evilhost.net
التاريخ: الجمعة ، 03 فبراير 2017 12:27:42 بتوقيت جرينتش
الاتصال: البقاء على قيد الحياة
ترميز النقل: مقسم

التعليق الأكثر فائدة

thEpisode أدرك أن هذا خيط قديم ، لكن هذا الرابط الأخير هو ما app.listen(...) ولكن في حالة استخدام socket.io يجب أن تتأكد من أنك في index.js تتصل بـ http.listen(...) ولا تستمع إليها الكائن app ، أو ستواجه مشكلة CORS هذه. هذا شيء صغير!

ال 11 كومينتر

نفس الخطأ

KenzkuthEpisode أي إصدار من socket.io الذي تستخدمه؟

يجب أن يتم إصلاحه في 2.x (والذي يتضمن https://github.com/socketio/engine.io/pull/452).

مرحبا @ darrachequesne شكرا على الرد. أنا منشئ موقع Crawler Site (https://www.crawlersite.com) ونستخدم Socket.io لإرسال البيانات إلى خوادمنا وجميع البنية التحتية الخاصة بنا موجودة على Microsoft Azure ، وكل اختبار واختبار بيتا الأول يستخدم Azure ونحن لدينا لا توجد مشاكل ، ولكن يستخدم المخترع الجديد مزود خدمة سحابية آخر وأبلغ عن خطأ. المشكلة هي CORS ، فنحن نقرأ جميع الأسئلة على Google !! وحلول البحث ، نلاحظ أن Socket.io تم تحديثه إلى 2.0 (بالضبط 2.0.1 في الخادم) ، ونقوم بتحديث العميل والخادم ولكن المشكلة لا تزال قائمة ، ونستخدم Express الذي أبلغ أيضًا عن مشاكل مع CORS وقمنا بحلها.

نحن محبطون للغاية لأن جميع الحلول على Google لم تحل المشكلة ، نأسف لعدم نشر هذا على مشكلات GitHub أو StackOverflow ولكننا نريد تقديم جميع التفاصيل الممكنة لحلها. بعض عناوين URL المراد اختبارها:

عنوان URI للخلفية: http://crawlerbackend.azurewebsites.net
اختبار Express CORS: https://testcors.000webhostapp.com (يتم استخدام هذه الاستضافة من قبل المختبرين)
اختبار Socket.io CORS: https://testcrawlersite.000webhostapp.com (يرجى مراجعة وحدة التحكم)
موقعنا الأساسي المراد اختباره: http://crawler-test.azurewebsites.net (مع التعديلات الجديدة أيضًا معطّل)
ملف Socket.io: http://crawlerbackend.azurewebsites.net/socket.io.js

جزء من app.js لدينا:
"
var path = يتطلب ('path') ؛
var bodyParser = يتطلب ('body-parser') ؛
var cors = يتطلب ('cors') ؛
var express = يتطلب ('express') ؛
تطبيق var = 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']
});

"

المشكله حلت!! Kenzku يرجى مراجعة هذه الوثائق: https://github.com/socketio/socket.io/blob/master/docs/API.md#serveroriginsvalue وانظر الكود: https://github.com/socketio/socket.io /blob/master/lib/index.js#L67 وتحقق مما إذا كنت تستخدم Express (هذا المثال مفيد جدًا): https://github.com/socketio/socket.io#in -conjunction-with-express

رائعة! أعتقد أنه يمكننا إغلاق القضية الآن.

thEpisode أدرك أن هذا خيط قديم ، لكن هذا الرابط الأخير هو ما app.listen(...) ولكن في حالة استخدام socket.io يجب أن تتأكد من أنك في index.js تتصل بـ http.listen(...) ولا تستمع إليها الكائن app ، أو ستواجه مشكلة CORS هذه. هذا شيء صغير!

frewinchristopher أنا

gowthamyaal هل يمكنك أن تبين لنا الكود الخاص بك؟

شكرًا لاهتمامك ، ولكن تم حل مشكلة CORS ، نظرًا لأنني كنت أستخدم AWS ، فهناك تعارض مع IP المرن والملكية الفكرية المحلية ، وبعد ذلك قمت بتغيير IP الخاص بالاستماع إلى المقبس باعتباره 0.0.0.0 ، وقد أدى ذلك إلى حل مشكلتي.

أواجه الآن مشكلة حالة السباق في جهاز التحكم عن بُعد ، فأنا أستخدم webpack-dev-config ، وقد حاولت استخدام io connect وإصدار الكود في نفس الملف ولكن انتهى بي الأمر بخطأ غير محدد

webpack-dev-config

رمز مقبس العميل
؛)

لقد عملت السطور المعلقة من أجلي .... هل يمكن لأي شخص مساعدتي في هذا .... شكرًا مقدمًا

لقد اتبعت جميع الحلول التي يمكن أن أجدها ولا يزال يتعين علي إرسال رد عملي. إذا تمكن شخص ما من إلقاء نظرة ، فسأكون ممتنًا للغاية.

"const express = تتطلب ('express')
const http = تتطلب ('http')
const socketIO = تتطلب ('socket.io')
cors const = تتطلب ('cors')

// استضافة الميناء
منفذ const = 3001

تطبيق const = express ()
app.use (cors ())
// مثيل الخادم
خادم const = http.createServer (التطبيق)
// إنشاء مقبس باستخدام مثيل الخادم
const io = socketIO (الخادم)

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

io.on ("اتصال" ، مقبس => {
console.log ("متصل بالمستخدم")

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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات