ربط بروتوكول HTTP/HTTPS في أسباب IE الحصول على طلبات لتكون متسلسلة

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

سؤال

أنا أستخدم passhruapp طريقة لربط طلبات HTTP/HTTPS التي قدمتها IE.

إنه يعمل بشكل جيد بالنسبة للجزء الأكبر ، لكنني لاحظت مشكلة. مؤشر ترابط تنزيل واحد فقط نشط في وقت واحد ، عادةً ما يستخدم IE موضوعين للتنزيل. أستطيع أن أرى كائنين iinternetprotocol يتم إنشاءهما ، لكن IE يستخدم واحد فقط في وقت واحد.

هذا يحدث مع IE7 ، لم أحاول مع الإصدارات الأخرى بعد.

يبدو أن المشكلة هي أن IE تعود إلى تنزيل العناصر واحدة في وقت واحد عندما IInternetSession::RegisterNameSpace يسمى أي من معالجاتها الافتراضية. الكود أدناه يسبب http التنزيلات لتكون متسلسلة على الرغم من أنني أسجل أ https معالج. التسجيل في "ملف: //" يسبب نفس المشكلة.

CComPtr<IInternetSession> spSession;
CoInternetGetSession(0, &spSession, 0);

MetaFactory::CreateInstance(CLSID_HttpSProtocol, &m_spCFHTTPS);
spSession->RegisterNameSpace(m_spCFHTTPS, CLSID_NULL, L"https", 0, 0, 0)

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

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

المحلول

من الممكن الالتفاف على هذه المشكلة عن طريق تصحيح com vtable InternetProtocolRootEx::StartEx() على بروتوكولات HTTP/HTTPS المسجلة. نظرًا لأن هذا لا يحل محل معالج البروتوكول مباشرةً ، فإن IE لن يتراجع إلى نموذج الخيط الواحد.

تم وصف هذه التقنية هنا:

http://web.archive.org/web/20130313164317/http://www.blackfishsoftware.com/blog/don/passthapp_bho_toolbar_intercepting_requests_responses

نصائح أخرى

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

هذا هو أحد الأسباب العديدة التي اقترحها أنك لا تحاول لف بروتوكولات HTTP/HTTPS.

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