مشكلة مع CORS وعميل Javascript؟ خطأ! لم يتم تعيين client_max_body_size بشكل صحيح عند محاولة التحميل عبر نقطة نهاية API مخصصة

أحاول رفع ملفات عبر نقطة نهاية مخصصة باستخدام واجهة برمجة تطبيقات مستخدم من موقعي الإلكتروني.

يمكنني تسجيل الدخول فقط باستخدام حساب مدير.
يمكنني القيام بأي شيء آخر تقريبًا، باستثناء رفع الملفات.

> [خطأ] الأصل https://my.domain غير مسموح به بواسطة Access-Control-Allow-Origin.
> [خطأ] لا يمكن لواجهة برمجة تطبيقات Fetch تحميل https://my.domain/m/upload.json بسبب فحوصات التحكم في الوصول.
> [خطأ] فشل في تحميل المورد: الأصل https://my.domain غير مسموح به بواسطة Access-Control-Allow-Origin. (upload.json، السطر 0)
> [سجل] API-CALL-ERROR – "/m/upload.json" – TypeError: الأصل https://my.domain غير مسموح به بواسطة Access-Control-Allow-Origin. (app.8eb0470a.chunk.js، السطر 1)
> TypeError: الأصل https://my.domain غير مسموح به بواسطة Access-Control-Allow-Origin.

لقد أضفت https://my.domain و http://localhost:19006 (لأغراض الاختبار) في إعدادات CORS، وأضفت DISCOURSE_ENABLE_CORS true إلى ملف app.yml.

كما جربت إضافة https://my.domain في DISCOURSE_CORS_ORIGIN داخل ملف app.yml، لكن ذلك لم ينجح أيضًا.

ما الذي أغفله؟

الشيء الوحيد الذي أراه في /shared/log/rails/production.log هو Screen Shot 2020-09-16 at 14.44.02

ملخص سريع
تحقق من جميع خوادم nginx أو الخوادم المعنية. في حالتي، هناك 3: الموقع الإلكتروني، حاوية discourse، وداخل حاوية discourse نفسها. يجب ضبط client_max_body_size على الحد الذي تريده عند الرفع.

اخترت client_max_body_size 999m فقط لأنني أردت تحديد الحد من إعدادات discourse فقط. يمكنك إضافة هذا السطر داخل وسوم http أو server داخل ملف nginx.conf. أنا أفضل إضافته في السطر الأخير، فقط لضمان السلامة :slight_smile:

النسخة الأطول:
بعد يوم كامل من البحث وتحميل متصفح فايرفوكس… أنصح به بشدة لتطوير الويب. اكتشفت أن سبب عدم قدرتي على الرفع كان بسبب الحد المحدد بواسطة nginx داخل حاوية discourse (قد يقول البعض نعم.. لكنه يُضبط ديناميكيًا عند إعادة بناء launcher… - لكنني أفضّل التأكد :slight_smile: ). ثم كان هناك حقيقة أن nginx الخاص بنا الذي يستضيف صورة الحاوية لم يكن لديه حد مُضبط، مما أدى إلى الافتراضي client_max_body_size 1MiB، وهو غير كافٍ :). بعد تغيير ذلك أيضًا، اضطررت للدخول إلى nginx الواجهة الأمامية وتغييره هناك أيضًا. 3 تغييرات، 6 ساعات من التلاعب بإدارة طلبات CORS المسببة في nginx مع القليل من التوتر، والآن يعمل كل شيء.

إعجابَين (2)