سؤال

في البداية، لم يعمل التخزين المؤقت في جميع المتصفحات.ثم جعلته يعمل في جميع المتصفحات باستثناء 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 وهلم جرا لن يساعد.

نصائح أخرى

بعض الأفكار للنظر فيها:

  1. لا أعتقد cache هو صالح Cache-Control التوجيه.

    حاول استخدام قيمة public بدلا من ذلك، أو private إذا كان هذا أكثر ملاءمة للمحتوى الخاص بك.الدفع آر إف سي 2616 للمزيد من المعلومات.

  2. ربما كنت ترسل أكثر من واحدCache-Control التوجيه؟

    استخدم أداة مثل فايربوغ أوLiveHTTPHeaders لإلقاء نظرة خاطفة على الرؤوس الفعلية التي تتلقاها متصفحاتك.تأكد من أنهم لا يحصلون على شيء لا تتوقعه.يبدو أنك قد تفعل ذلك بالفعل.تأكد أيضًا من أنك لا ترسل أيضًا Pragma: no-cache.

  3. حاول ضبطExpires رأس بالإضافة إلى استخدامCache-Control.

    من الممكن أيضًا أن ترسل المتصفح المتضاربة Cache-Control/Pragmaالرؤوس ويختار IE أخذ ملفPragma الرؤوس كأولوية أولى لأي سبب رجعي.

  4. تأكد من تكوين IE للسماح بالتخزين المؤقت!:)

    Control Panel > Internet Options > Temporary Internet Files > Settings > Check for newer versions of stored pages

  5. حاول إرسال ملف PDF كرد على أ POST الطلب (عبر نموذج الإرسال).

    يسمح IE بإجراء ذاكرة تخزين مؤقت بغض النظر عن الرؤوس الموجودة في الاستجابة بسبب هذا المطلب من آر إف سي 2616:"افتراضيًا، تكون الاستجابة قابلة للتخزين المؤقت إذا كانت متطلبات طريقة الطلب، وحقول رأس الطلب، و تشير حالة الاستجابة إلى أنها قابلة للتخزين المؤقت." الردود على POST الطلبات غير قابلة للتخزين المؤقت، لذلك لا ينبغي لـ IE تضمين هذا الرأس في طلبه.

  6. حاول إرسال Content-MD5 و Last-Modified رؤوس ذات قيم متسقة (إذا لم يتم إرسالها بالفعل).

    قد يساعد هذا في إقناع IE بأن محتوى ملف PDF لم يتغير.لا أعتقد أن هذا الحل سينجح، لأنه من الواضح أن IE عنيد، ولكن من الجدير بالذكر.

حسنا، طريقة واحدة واضحة حول المشكلة هو استخدام إعادة كتابة URL. إذا كان يعمل IE مع قوات الدفاع الشعبي في الإرشاد، واستخدام mod_rewrite و(أباتشي) أو أداة مماثلة لمن جانب الخادم إعادة توجيه إلى الصفحة اليمنى، في حين جعل العميل أعتقد أنه هو يطلب حقا ملف PDF.

وأيضا: مراجعة رؤوس HTTP أن العميل يتلقى باستخدام أداة مثل عازف الكمان.

وأيضا: استعراض هذه المسألة الأكبر سنا ( PHP: قوة ملف التحميل و IE، بعد مرة أخرى)، لقد كان لي مشاكل مماثلة مع تنزيلات IE عدم إجبار أيضا.

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