تمكين التخزين المؤقت لقوات الدفاع الشعبي في IE
-
05-07-2019 - |
سؤال
في البداية، لم يعمل التخزين المؤقت في جميع المتصفحات.ثم جعلته يعمل في جميع المتصفحات باستثناء IE (IE8) عن طريق إضافة امتداد .pdf إلى عنوان url.توقف استدعاء Servlet بعد ذلك.
أعرض ملف pdf مضمنًا على صفحة الويب عبر علامة EMBED التي تقوم بتحميل عنوان URL التالي:
http://localhost:7001/app/viewFile.pdf
والتي يتم إنشاؤها بواسطة Java servlet بالرؤوس التالية:
response.addHeader("Content-Disposition", "inline;");
response.setHeader("Cache-control", "cache,max-age=600");
response.setContentType(mimeType);
response.setContentLength(contentLength);
لعرض ملفات pdf في جميع المتصفحات، أستخدم Adobe Reader 9.2.0.
كيفية جعله يعمل في IE أيضا؟لقد لاحظت أن IE يضيف "التحكم في ذاكرة التخزين المؤقت:رأس no-cache' إلى طلب, ، في حين أن Safari، على سبيل المثال، لا يفعل ذلك.
المحلول
وكما ذكرت من قبل، و cache-control
رأس قيمة cache
غير صالح. استخدام public
بدلا من ذلك.
وأما فيما يتعلق IE عدم الالتزام من جانب الخادم قواعد التحكم مخبأ في عناصر embed
وobject
، وهذا هو للأسف "سمة" من IE. أفضل ما يمكنك القيام به هو استبدال من قبل عنصر iframe
.
ورؤوس أخرى مثل expires
، last-modified
، etag
وهلم جرا لن يساعد.
نصائح أخرى
بعض الأفكار للنظر فيها:
لا أعتقد
cache
هو صالحCache-Control
التوجيه.حاول استخدام قيمة
public
بدلا من ذلك، أوprivate
إذا كان هذا أكثر ملاءمة للمحتوى الخاص بك.الدفع آر إف سي 2616 للمزيد من المعلومات.ربما كنت ترسل أكثر من واحد
Cache-Control
التوجيه؟استخدم أداة مثل فايربوغ أوLiveHTTPHeaders لإلقاء نظرة خاطفة على الرؤوس الفعلية التي تتلقاها متصفحاتك.تأكد من أنهم لا يحصلون على شيء لا تتوقعه.يبدو أنك قد تفعل ذلك بالفعل.تأكد أيضًا من أنك لا ترسل أيضًا
Pragma: no-cache
.حاول ضبط
Expires
رأس بالإضافة إلى استخدامCache-Control
.من الممكن أيضًا أن ترسل المتصفح المتضاربة
Cache-Control
/Pragma
الرؤوس ويختار IE أخذ ملفPragma
الرؤوس كأولوية أولى لأي سبب رجعي.تأكد من تكوين IE للسماح بالتخزين المؤقت!:)
Control Panel
>Internet Options
>Temporary Internet Files
>Settings
>Check for newer versions of stored pages
حاول إرسال ملف PDF كرد على أ
POST
الطلب (عبر نموذج الإرسال).يسمح IE بإجراء ذاكرة تخزين مؤقت بغض النظر عن الرؤوس الموجودة في الاستجابة بسبب هذا المطلب من آر إف سي 2616:"افتراضيًا، تكون الاستجابة قابلة للتخزين المؤقت إذا كانت متطلبات طريقة الطلب، وحقول رأس الطلب، و تشير حالة الاستجابة إلى أنها قابلة للتخزين المؤقت." الردود على
POST
الطلبات غير قابلة للتخزين المؤقت، لذلك لا ينبغي لـ IE تضمين هذا الرأس في طلبه.حاول إرسال
Content-MD5
وLast-Modified
رؤوس ذات قيم متسقة (إذا لم يتم إرسالها بالفعل).قد يساعد هذا في إقناع IE بأن محتوى ملف PDF لم يتغير.لا أعتقد أن هذا الحل سينجح، لأنه من الواضح أن IE عنيد، ولكن من الجدير بالذكر.
حسنا، طريقة واحدة واضحة حول المشكلة هو استخدام إعادة كتابة URL. إذا كان يعمل IE مع قوات الدفاع الشعبي في الإرشاد، واستخدام mod_rewrite و(أباتشي) أو أداة مماثلة لمن جانب الخادم إعادة توجيه إلى الصفحة اليمنى، في حين جعل العميل أعتقد أنه هو يطلب حقا ملف PDF.
وأيضا: مراجعة رؤوس HTTP أن العميل يتلقى باستخدام أداة مثل عازف الكمان.
وأيضا: استعراض هذه المسألة الأكبر سنا ( PHP: قوة ملف التحميل و IE، بعد مرة أخرى)، لقد كان لي مشاكل مماثلة مع تنزيلات IE عدم إجبار أيضا.