ربط بروتوكول HTTP/HTTPS في أسباب IE الحصول على طلبات لتكون متسلسلة
-
24-09-2019 - |
سؤال
أنا أستخدم 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/HTTPS.