راهکاری برای خطای CORS: CORSMultipleAllowOriginNotAllowed

fix cors multiple allow origin not allowed http error guide
20 آبان 1403

فهم خطای CORS

آیا تا به حال با خطای CORS روبرو شده‌اید؟ این خطا می‌تواند در هنگام ارسال درخواست‌های HTTP از یک دامنه به دامنه دیگر رخ دهد. به طور خاص، خطای CORSMultipleAllowOriginNotAllowed زمانی اتفاق می‌افتد که سرورتان چندین مقدار را در هدر Access-Control-Allow-Origin بازگشت دهد، در حالی که این هدر باید تنها یک مقدار (یا *) داشته باشد. این وضعیت می‌تواند باعث سردرگرمی توسعه‌دهندگان وب شود، اما با کمی زمان و دقت می‌توان آن را برطرف کرد.

خطای CORSMultipleAllowOriginNotAllowed

در برخی از موارد، ممکن است به دلیل اصلاح نادرست یا پیکربندی‌های ناصحیح در سرور خود، یک مقدار چندگانه برای Access-Control-Allow-Origin ارسال کنید. سرور HTTP باید بررسی کند که آیا دامنه درخواست‌دهنده در لیست دامنه‌های مجاز است یا خیر و در صورت مثبت بودن، باید تنها یک مقدار مجاز را در هدر Access-Control-Allow-Origin برگرداند، نه بیشتر.

راه حل برای خطا

برای حل این مشکل، ابتدا باید مطمئن شوید که کنترل دسترسی صحیح و مناسب برای دامنه‌های مورد نظر پیکربندی شده است. این شامل محدود کردن دامنه‌ها، علاوه بر رفع پیکربندی‌های اشتباه در فایل‌های سرور، می‌شود. معمولاً در سرورهایی مانند Apache یا Nginx می‌توانید این پیکربندی‌ها را مشخص کنید. به عنوان مثال، در Nginx می‌توانید از دایرکتیو add_header استفاده کنید.

مثال کد

server {
listen 80;
server_name example.com;

location / {
if ($http_origin ~* "(http://example1.com|http://example2.com)") {
add_header 'Access-Control-Allow-Origin' "$http_origin" always;
}
}
}

توضیح کد

server {
تعریف یک بلاک برای پیکربندی یک سرور Nginx.
listen 80;
گوش دادن به پورت ۸۰ برای درخواست‌های HTTP.
server_name example.com;
نام دامنه ای که برای این سرور پیکربندی شده است.
location / {
تعریف یک بلاک برای درخواست‌های مسیر ریشه.
if ($http_origin ~* "(http://example1.com|http://example2.com)") {
بررسی تطابق دامنه درخواست دهنده با لیست دامنه‌های مجاز.
add_header 'Access-Control-Allow-Origin' "$http_origin" always;
اضافه کردن هدر CORS بر اساس دامنه درخواست‌دهنده در صورتی که مجاز باشد.
}

سوالات متداول

؟

چرا هدر Access-Control-Allow-Origin باید تنها یک مقدار داشته باشد؟

؟

چگونه می‌توانم دامنه‌های مجاز را در Nginx تعیین کنم؟

؟

آیا می‌توانم تمام درخواست‌ها را مجاز کنم؟