فهم خطای 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 بر اساس دامنه درخواستدهنده در صورتی که مجاز باشد.
}