هج
كيف يمكنني إزالة رأس الاستجابة 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 بتوقيت جرينتش
الاتصال: البقاء على قيد الحياة
ترميز النقل: مقسم
نفس الخطأ
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 ، وقد أدى ذلك إلى حل مشكلتي.
لقد اتبعت جميع الحلول التي يمكن أن أجدها ولا يزال يتعين علي إرسال رد عملي. إذا تمكن شخص ما من إلقاء نظرة ، فسأكون ممتنًا للغاية.
"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}
)) `
التعليق الأكثر فائدة
thEpisode أدرك أن هذا خيط قديم ، لكن هذا الرابط الأخير هو ما
app.listen(...)
ولكن في حالة استخدامsocket.io
يجب أن تتأكد من أنك فيindex.js
تتصل بـhttp.listen(...)
ولا تستمع إليها الكائنapp
، أو ستواجه مشكلة CORS هذه. هذا شيء صغير!