Socket.io-client: EXTRA HEADER مع Websocket فقط

تم إنشاؤها على ٢١ أبريل ٢٠٢٠  ·  7تعليقات  ·  مصدر: socketio/socket.io-client

الرأس الإضافي غير مدعوم حاليًا مع اتصال websocket فقط. قلت في الوثائق إن RFC 6455 لا "يحترمها".
إذا ألقيت نظرة على الصفحة 22/10
https://tools.ietf.org/html/rfc6455#page -22

  1. اختياريًا ، حقول الرأس الأخرى ، مثل تلك المستخدمة في الإرسال
    ملفات تعريف الارتباط أو طلب المصادقة على الخادم. رأس غير معروف
    يتم تجاهل الحقول حسب [RFC2616].

من الواضح أنه يدعمها ، وأنا شخصيًا أجدها مفيدة جدًا أيضًا. كما أنها ليست معقدة مع مكتبة ws التي يستخدمها engine.io.
أي دعم؟ شكرا

question

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

مرحبا شباب.
إنها لا تعمل.
لقد اختبرت ذلك للتو في اختبارات التكامل الخاصة بي ، ولم ينجح.

ال 7 كومينتر

https://github.com/socketio/engine.io-client/blob/27fa6949f38896e18a6ef426516359f8d54e7db6/lib/socket.js#L124

https://github.com/socketio/engine.io-client/blob/master/lib/transports/websocket.js#L63

من خلال قراءة شفرة المصدر المذكورة أعلاه ، يمكنك جعل هذا العمل عن طريق:

socketIO('https://example.org', {
  path: '/api/endpoint',
  transports: ['websocket'],
  transportOptions: {
    websocket: {
      extraHeaders: {
        Cookie: 'It works',
      },
    },
  },
});

وحتى هذا:

socketIO('https://example.org', {
  path: '/api/endpoint',
  transports: ['websocket'],
  extraHeaders: {
    Cookie: 'It works',
  },
});

استنادًا إلى مقتطفات التعليمات البرمجية المصدر ، يبدو بالفعل أنه لا يوجد قيود ، ولكن هل قمت باختباره؟ سأختبرها لاحقًا عندما يكون لدي وقت ، ولكن إذا نجحت ، فستحتاج الوثائق إلى التحديث ، حيث:

https://socket.io/docs/client-api/#With -extraHeaders:

مع رؤوس إضافية
يعمل هذا فقط إذا تم تمكين نقل الاستقصاء (وهو الإعداد الافتراضي). لن يتم إلحاق الرؤوس المخصصة عند استخدام مقبس الويب كوسيلة نقل. يحدث هذا لأن تأكيد الاتصال WebSocket لا يحترم الرؤوس المخصصة. (للحصول على الخلفية ، راجع بروتوكول WebSocket RFC)

const socket = io({ transportOptions: { polling: { extraHeaders: { 'x-clientid': 'abc' } } }});

ينص على خلاف ذلك ...

مرحبا شباب.
إنها لا تعمل.
لقد اختبرت ذلك للتو في اختبارات التكامل الخاصة بي ، ولم ينجح.

najibghadribehruzz وهو يعمل بالنسبة لي مع المثال أعلاه، وعدم وضع extreHeader تحت الاقتراع

إنه يعمل بالنسبة لي عند التشغيل في nodejs ، فهو لا يعمل عند التشغيل في الكروم. لا يمكن القيام بذلك لأنه غير مدعوم من قبل المتصفحات api https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
أحتاج إلى رأس موازن التحميل الخاص بي لتسليم الطلب بشكل صحيح إلى خادم المقبس ، لكنني أعتقد أننا سنحتاج إلى آلية مختلفة

يبدو أن شخصًا ما يعتقد أنه يجب أن يعمل ، لأنه وفقًا للوثائق أيضًا:

رؤوس إضافية | {} | الرؤوس التي سيتم تمريرها لكل طلب إلى الخادم (عبر الاستقصاء xhr وعبر websockets). يمكن بعد ذلك استخدام هذه القيم أثناء المصافحة أو للوكلاء الخاصين.

بالمناسبة ، إذا كنت لا تستطيع استخدام ملفات تعريف الارتباط ، فهل هذا يعني أنه يمكنك فقط استخدام عناوين IP للموازنة الثابتة؟

AvailCat يرجى ملاحظة أن الأمثلة التي قدمتها لن تعمل في المتصفح

rotvr إذا كنت تستخدم نقل WebSocket فقط ، فلن تحتاج إلى جلسة ثابتة ، نظرًا لأن اتصال WebSocket (واتصال TCP الأساسي) يظل مفتوحًا أثناء الجلسة بأكملها.

إذا كنت تستخدم نقل الاستقصاء ، فسيقوم طلب HTTP الأول بتعيين ملف تعريف ارتباط ( io ) ، والذي يمكن استخدامه للجلسة اللاصقة.

مزيد من المعلومات هنا: https://socket.io/docs/using-multiple-nodes/

انظر أيضا: https://github.com/socketio/engine.io-client/issues/635#issuecomment -638713082

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