تنفذ https://github.com/fruitcake/php-cors لـ Laravel
منذ Laravel 9.2، تم تضمين هذه البرامج الوسيطة في laravel/framework. يمكنك استخدام البرامج الوسيطة المتوفرة، والتي يجب أن تكون متوافقة مع البرامج الوسيطة والإعدادات المتوفرة في هذه الحزمة. راجع https://github.com/laravel/laravel/pull/5825/files للاطلاع على التغييرات.
خطوات الترقية:
قم بإزالة "fruitcake/laravel-cors"
من ملف Composer.json الخاص بك
استبدل FruitcakeCorsHandleCors::class,
بـ IlluminateHttpMiddlewareHandleCors::class,
في app/Http/Kernel.php
راجع https://github.com/fruitcake/php-cors
للاستخدام المتقدم. التكوين يبقى كما هو.
تسمح لك حزمة laravel-cors
بإرسال ترويسات Cross-Origin Resource Sharing مع تكوين برمجية Laravel الوسيطة.
إذا كنت ترغب في الحصول على نظرة عامة عامة على سير عمل CORS، فيمكنك تصفح هذه الصورة.
عند الترقية من إصدارات 0.x، هناك بعض التغييرات العاجلة:
يتم استخدام خاصية "المسارات" الجديدة لتمكين/تعطيل CORS على مسارات معينة. هذا فارغ افتراضيًا، لذا املأه بشكل صحيح!
لم تعد البرامج الوسيطة للمجموعة مدعومة، استخدم البرامج الوسيطة العالمية
لقد تغير اسم البائع (راجع التثبيت/الاستخدام)
لقد تغير الغلاف الموجود على الدعائم في cors.php
من CamelCase إلى Snake_case، لذلك إذا كان لديك ملف cors.php
بالفعل، فستحتاج إلى تحديث الدعائم الموجودة هناك لتتناسب مع الغلاف الجديد.
يتعامل مع طلبات خيارات CORS قبل الرحلة
يضيف رؤوس CORS إلى ردودك
مطابقة المسارات لإضافة CORS لطلبات معينة فقط
اطلب حزمة fruitcake/laravel-cors
في composer.json
الخاص بك وقم بتحديث تبعياتك:
يتطلب الملحن كعكة الفاكهة/لارافيل كور
إذا حدث تعارض، فقد يكون ذلك بسبب تثبيت إصدار أقدم من barryvdh/laravel-cors أو Fruitcake/laravel-cors. قم بإزالة الحزمة المتعارضة أولاً، ثم حاول التثبيت مرة أخرى:
يقوم الملحن بإزالة barryvdh/laravel-cors Fruitcake/laravel-cors يتطلب الملحن كعكة الفاكهة/لارافيل كور
للسماح بـ CORS لجميع مساراتك، أضف البرنامج الوسيط HandleCors
في أعلى خاصية $middleware
لفئة app/Http/Kernel.php
:
protected $middleware = [ FruitcakeCorsHandleCors::class,// ...];
الآن قم بتحديث التكوين لتحديد المسارات التي تريد تشغيل خدمة CORS عليها (انظر التكوين أدناه):
'المسارات' => ['api/*']،
تم تعيين الإعدادات الافتراضية في config/cors.php
. انشر التكوين لنسخ الملف إلى التكوين الخاص بك:
بائع PHP الحرفي: نشر --tag = "cors"
ملاحظة: عند استخدام رؤوس مخصصة، مثل
X-Auth-Token
أوX-Requested-With
، يجب عليك تعيين الرؤوسallowed_headers
لتضمين تلك الرؤوس. يمكنك أيضًا تعيينه على['*']
للسماح بجميع الرؤوس المخصصة.
ملاحظة: إذا كنت تقوم بإدراج الرؤوس بشكل صريح في القائمة البيضاء، فيجب عليك تضمين
Origin
وإلا فلن يتم التعرف على الطلبات على أنها CORS.
خيار | وصف | القيمة الافتراضية |
---|---|---|
مسارات | يمكنك تمكين CORS لمسار واحد أو مسارات متعددة، على سبيل المثال. ['api/*'] | [] |
allow_methods | يطابق طريقة الطلب. | ['*'] |
allow_origins | يطابق أصل الطلب. يمكن استخدام أحرف البدل، على سبيل المثال. *.mydomain.com أو mydomain.com:* | ['*'] |
allow_origins_patterns | يطابق أصل الطلب مع preg_match . | [] |
allow_headers | يضبط رأس استجابة Access-Control-Allow-Headers. | ['*'] |
مكشوف_رؤوس | يضبط رأس استجابة Access-Control-Expose-Headers. | [] |
max_age | يضبط رأس الاستجابة Access-Control-Max-Age. | 0 |
support_credentials | يضبط رأس Access-Control-Allow-Credentials. | false |
يمكن تعيين allowed_origins
allowed_headers
والطرق allowed_methods
على ['*']
لقبول أي قيمة.
ملاحظة: بالنسبة إلى
allowed_origins
يجب عليك تضمين المخطط عند عدم استخدام حرف البدل، على سبيل المثال.['http://example.com', 'https://example.com']
. يجب عليك أيضًا أن تأخذ في الاعتبار أن المخطط سيكون موجودًا عند استخدامallowed_origins_patterns
.
ملحوظة: حاول أن تكون محددًا قدر الإمكان. يمكنك البدء بالتطوير بقيود فضفاضة، لكن من الأفضل أن تكون صارمًا قدر الإمكان!
ملحوظة: بسبب تجاوز طريقة http في Laravel، فإن السماح لطرق POST سيمكن مستخدمي واجهة برمجة التطبيقات من تنفيذ طلبات PUT وDELETE أيضًا.
ملاحظة: في بعض الأحيان يكون من الضروري تحديد المنفذ (على سبيل المثال، عندما تقوم بترميز تطبيقك في بيئة محلية) . يمكنك تحديد المنفذ أو استخدام حرف بدل هنا أيضًا، على سبيل المثال.
localhost:3000
,localhost:*
أو حتى باستخدام FQDNapp.mydomain.com:8080
في Lumen، ما عليك سوى تسجيل ServiceProvider يدويًا في ملف bootstrap/app.php
:
$app->register(FruitcakeCorsCorsServiceProvider::class);
قم أيضًا بنسخ ملف التكوين cors.php إلى config/cors.php
ووضعه موضع التنفيذ:
$app->configure('cors');
للسماح لـ CORS بجميع مساراتك، قم بإضافة البرنامج الوسيط HandleCors
إلى البرنامج الوسيط العام وقم بتعيين خاصية paths
في ملف config.
$app->middleware([// ...FruitcakeCorsHandleCors::class, ]);
تأكد من أن خيار path
في التكوين صحيح ويطابق المسار الذي تستخدمه بالفعل. تذكر مسح ذاكرة التخزين المؤقت للتكوين أيضًا.
في بعض الأحيان يمكن للأخطاء/البرامج الوسيطة التي تُرجع استجابات خاصة أن تمنع تشغيل البرنامج الوسيط لـ CORS. حاول تغيير ترتيب البرامج الوسيطة وتأكد من أنها الإدخال الأول في البرامج الوسيطة العالمية، وليس مجموعة مسارات. تحقق أيضًا من سجلاتك بحثًا عن الأخطاء الفعلية، لأنه بدون CORS، سيتم ابتلاع الأخطاء بواسطة المتصفح، وسيظهر فقط أخطاء CORS. حاول أيضًا تشغيله بدون CORS للتأكد من أنه يعمل بالفعل.
إذا كان طلبك يتضمن رأس تفويض أو يستخدم وضع بيانات الاعتماد، فاضبط قيمة supports_credentials
في التكوين على true. سيؤدي هذا إلى تعيين رأس Access-Control-Allow-Credentials على true
.
إذا كنت تستخدم echo()
و dd()
و die()
و exit()
و dump()
وما إلى ذلك في التعليمات البرمجية الخاصة بك، فسوف تقوم بكسر تدفق البرامج الوسيطة. عندما يتم إرسال الإخراج قبل الرؤوس، لا يمكن إضافة CORS. عند خروج البرنامج النصي قبل انتهاء برنامج CORS الوسيط، لن تتم إضافة رؤوس CORS. قم دائمًا بإرجاع الاستجابة المناسبة أو طرح استثناء.
إذا أمكن، استخدم مجموعة توجيه مع تعطيل حماية CSRF. وإلا يمكنك تعطيل CSRF لطلبات معينة في AppHttpMiddlewareVerifyCsrfToken
:
محمي $except = ['api/*','sub.domain.zone' => [ 'prefix/*'], ];
يجب أن تكون البرامج الوسيطة لـ CORS هي المكان الوحيد الذي تضيف فيه هذه الرؤوس. إذا قمت أيضًا بإضافة رؤوس في ملف .htaccess أو nginx أو ملف Index.php، فستحصل على رؤوس مكررة ونتائج غير متوقعة.
إذا كنت لا تقوم بطلبات عبر المواقع، أي إذا كنت لا تطلب site-a.com/api من site-b.com، فلن يرسل متصفحك رأس طلب Origin: https://site-b.com
، سيتم "تعطيل" CORS لأن رأس Access-Control-Allow-Origin
سيكون مفقودًا أيضًا. يحدث هذا لأنه يتم إرسال الطلبات من نفسه ولا حاجة إلى الحماية في هذه الحالة.
تم إصداره بموجب ترخيص MIT، راجع الترخيص.