هل يمكن اكتشاف جافا سكريبت جانبي العميل عند مغلق الخادم اتصال HTTP أثناء عمل العميل؟

StackOverflow https://stackoverflow.com/questions/737878

  •  09-09-2019
  •  | 
  •  

سؤال

في طلبي، العميل عبارة عن مجموعة من الوظائف JavaScript في المتصفح، ويقوم ببعض العمل - على سبيل المثال، تشغيل مقطع. يستخدم XMLHTPRECEEST للتحدث إلى الخادم. ومع ذلك، يسمح للخادم بإغلاق الاتصال فجأة نظرا لعدم وجود طريقة أخرى، لمقاطعة العميل. هل يمكن للعميل اكتشاف العميل، في حين أن تشغيل المقطع، أن الاتصال مغلق، وكذلك طباعة رسالة ومحو الصفحة؟ أي مساعدة موضع تقدير. شكرا، أنيل

هل كانت مفيدة؟

المحلول 3

يبدو أن الخادم لا تستطيع إخطار العميل بأن الاتصال مغلق؛ ومع ذلك، فإن طريقة الاقتراع المقترحة ليست فعالة كإشعار كان.

لقد حلها عن طريق تحديد ذلك في طلب الحصول على طلب، وسيقيل للعميل أن دورتها غير صالحة.

تم تنفيذ ذلك بواسطة إعادة كتابة عنوان URL - إلحاق "jsessessyID = [ID] في كل طلب أرسلته وظائف JavaScript. يخزن Serverlet معرف الجلسة الحالية.

نصائح أخرى

إذا تم بث المقاييس إلى العميل، فيمكنك التوقف عن تقديمه.

ومع ذلك، يبدو أنه يتم تنزيل المقطع ثم لعبه من خلال المتصفح. في هذه الحالة، من الأفضل استخدام نهج Watchdog كما هو موضح بواسطة CookieFFortune: استطلاع الخادم بانتظام (مرة واحدة ثانية أو نحو ذلك) واحصل عليه للاستجابة رسالة تأكيد صغيرة. عند إغلاق الاتصال، احصل على الخادم للرد برصد سالب.

لسوء الحظ، دون استخدام نظام تشبه المذنب، من الصعب للغاية الحصول على الخادم "إرسال" رسالة تشير إلى إغلاق الجلسة.

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

ربما يمكنك استطلاع كائن XMLHTPREQUEEST، لذلك حاول فقط إرسال نبضات نبضات واحدة مرة واحدة في حين لمعرفة ما إذا كان الاتصال مغلقا. خلاف ذلك، سيتعين على الخادم إرسال بعض الإشارة لإخبار العميل الذي سيقوم بإغلاق الاتصال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top