Pdf.js: رفض الحصول على العنوان غير الآمن "Accept-Ranges" باستخدام عناوين url الخاصة بأمازون

تم إنشاؤها على ٢٤ أبريل ٢٠١٣  ·  18تعليقات  ·  مصدر: mozilla/pdf.js

أحاول استخدام pdf.js مع طلبات النطاق (التحميل التدريجي لمستند pdf) ، ولكن عندما أحاول تحميل ملفات PDF من عناوين url الخاصة بـ amazon s3 ، يظهر هذا الخطأ في وحدة التحكم:
تم رفض الحصول على العنوان غير الآمن "Accept-Ranges"

ولا يتم تحميل ملف pdf عبر 206 محتوى جزئي (طلبات النطاق) ولكن يتم عرض 200 بعد اكتمال تنزيل ملف pdf في العارض.

هذا مثال على عنوان url بتنسيق pdf:
https://kotob.s3.amazonaws.com/book.pdf؟Signature=irgVfoAZuPPIp5kpCesni2MzpLo٪3D&Expires=1366576877&AWSAccessKeyId=AKIAILBHXSTPUIBTRMSA

أي مساعدة

1-other

التعليق الأكثر فائدة

تمكنت من إعادة حل المشكلة على خادم محلي. لقد جعلته يعمل من خلال جعل الخادم الذي يستضيف ملف PDF البعيد يعيد رؤوس HTTP التالية:

Access-Control-Allow-Headers: Range
Access-Control-Expose-Headers: Accept-Ranges, Content-Encoding, Content-Length, Content-Range

ال 18 كومينتر

هل ترى هذا مع viewer.html أو امتداد Firefox؟

مع viewer.html

أشعر أن هذا فاشل لأنك تقدم طلبًا متعدد المصادر.

إذا كان لديك Chrome ، فتحقق مما إذا كان هذا يعمل:

قم بتشغيل Chrome باستخدام --disable-web-security (http://stackoverflow.com/questions/3102819/chrome-disable-same-origin-policy). عند تحميل الملف ، قم أيضًا بإلحاق #disableWorker=true .

إغلاق. يرجى إعادة الفتح إذا كانت لا تزال تمثل مشكلة.

شكرا mduan لاستجابتك ،
لكن الخطأ نفسه لا يزال يظهر لي ، ولتوضيح ذلك بشكل أفضل ، وضعت العارض في صندوق الإسقاط وهذه هي الروابط العامة التي يمكنك تجربتها:
https://dl.dropboxusercontent.com/u/37262502/PDF.js_mduan/pdf.js/web/viewer.html
يعطي هذا العارض الخطأ:
error

ولكن عندما قمت بتغيير مسار pdf من
DEFAULT_URL = ' https://kotob.s3.amazonaws.com/neo.pdf '
ل :
DEFAULT_URL = 'neo.pdf'
بوضع الملف في دليل العارض نفسه ، فإنه يعمل بشكل جيد مع طلبات النطاق:

https://dl.dropboxusercontent.com/u/37262502/PDF.js_mduan/pdf.js/web/viewer2.html
ولاحظ أننا نجعل سياسة CORS متاحة من أي مصدر آخر للحصول على الطلبات.
آمل أن يساعد ذلك في شرح المشكلة.
وأنا آسف لتأخري في الرد ،

أي مساعدة ؟

تمكنت من إعادة حل المشكلة على خادم محلي. لقد جعلته يعمل من خلال جعل الخادم الذي يستضيف ملف PDF البعيد يعيد رؤوس HTTP التالية:

Access-Control-Allow-Headers: Range
Access-Control-Expose-Headers: Accept-Ranges, Content-Encoding, Content-Length, Content-Range

شكرًا mduan على مساعدتك ، إنها تعمل الآن.

mahmoudfelfel : هل يمكنك إغلاق هذه المشكلة إذا تم حل مشكلتك؟ شكرا لك! :)

يعد ملف الوكيل بلغة برمجة نصية (PHP أو RoR أو Python أو غيرها) حلاً سهلاً للغاية.

لقد عثرت على نفس الخطأ. وفي رأيي يمكن / يجب إصلاح هذا في pdf.js.

عند تحميل ملف pdf من مجال آخر ، فعندئذٍ مجالنا. طلبات الاختبار المبدئي إلزامية ، ليس فقط لـ AWS ولكن فيما يتعلق بمستندات Mozilla ، يوصى بها لكل طلب CORS.

ثم يمكنك تجنب مثيل وكيل إضافي أو ما شابه. كعمل سريع ، سأحاول إحضار طلب pdf (مع الاختبار المبدئي) الخاص بي ثم تمرير ByteArray إلى pdf.js.

عند تحميل ملف pdf من مجال آخر ، فعندئذٍ مجالنا. طلبات الاختبار المبدئي إلزامية ، ليس فقط لـ AWS ولكن فيما يتعلق بمستندات Mozilla ، يوصى بها لكل طلب CORS.

يتم إنشاء طلبات الاختبار المبدئي لـ CORS بواسطة XHR تلقائيًا دون تدخل المستخدمين من JS.

كعمل سريع ، سأحاول إحضار طلب pdf (مع الاختبار المبدئي) الخاص بي ثم تمرير ByteArray إلى pdf.js.

يبدو حلًا مثاليًا: يجب على المستخدم التعامل مع جميع وسائل الاتصال غير القياسية (باستثناء الحصول على HTTP / HTTPS بدون الحاجة إلى CORS). إذا كنت متأكدًا من أن XHR سيكون قادرًا على تكوين عنوان url الخاص بك (ملف ، blob ، مع CORS ، مع رأس المصادقة ، إلخ) بشكل صحيح.

الإغلاق كما لن يتم إصلاحه.

أنا عالق مع v0.8.180 وأنا أعلم أن هذه مشكلة قديمة ، على الرغم من أنها تساعد أي شخص آخر ، إلا أن تكوين CORS دلو S3 التالي قد أصلحه لي:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
        <ExposeHeader>Accept-Ranges</ExposeHeader>
        <ExposeHeader>Content-Range</ExposeHeader>
        <ExposeHeader>Content-Encoding</ExposeHeader>
        <ExposeHeader>Content-Length</ExposeHeader>
    </CORSRule>
</CORSConfiguration>

jpillora لقد جربت نفس التكوين في تكوين CORS الخاص بدلو S3. يعمل التطبيق في جميع المتصفحات ، ولا يحتوي FireFox على أخطاء. لا يزال Webkit (Chrome / Safari) يطرح Refused to get unsafe header "Accept-Ranges" .

لقد لاحظت أن Accept-Ranges: bytes موجود في طلب http لملف pdf ، لكنني لا أرى Content-Range أو Content-Encoding مستمرًا من التكوين إلى طلب http.

ربما يحتاج إلى كشف Range بالإضافة إلى Content-Range؟

لقد أعطيتها رصاصة دون حظ. قررت أن تراهن على هذه القضية.

يمكن العثور على تهيئة CORS عاملة هنا: https://github.com/mozilla/pdf.js/issues/4530#issuecomment -188059771

المفتاح للقيام بهذا العمل هو Access-Control-Allow-Headers "range".

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

simoncpu شكرا لك على النتائج الخاصة بك!
لدي مشكلة مشابهة جدًا ، لكن لمحتويات الصوت. في حالتي لن تعمل هذه الرؤوس بالمناسبة

{ 'Content-Length': 5751405,
  'Content-Type': 'audio/mpeg',
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
  'Access-Control-Allow-Headers': 'Range',
  Expires: 0,
  Pragma: 'no-cache',
  'Cache-Control': 'no-cache, no-store, must-revalidate',
  'Accept-Ranges': 'bytes',
  'Content-Range': 'bytes 120429-240237/5751405' }

طلب على SF كذلك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات