رفع خطای Access-Control-Allow-Origin (CORS) در php
خطای Access-Control-Allow-Origin متوقف کنندهٔ امنیتی مرورگرها برای جلوگیری از دسترسی غیرمجاز وبسایتها به منابع یکدیگر است.
این خطا زمانی رخ میدهد که مرورگر شما بخواهد از یک دامنه، پروتکل یا پورت متفاوت به سروری دیگر درخواست (HTTP Request) ارسال کند.
در این حالت، مرورگر برای حفظ امنیت، ابتدا بررسی میکند که آیا آدرس مقصد اجازه دسترسی به این آدرس را صادر کرده است یا خیر.
اگر آدرس مقصد هدر Access-Control-Allow-Origin را در پاسخ خود نفرستاده باشد یا آدرس مبدا در آن تعریف نشده باشد، مرورگر جلوی دریافت اطلاعات را میگیرد و این خطا را نمایش میدهد.
برای مثال، اگر Frontend روی:
https://example.com
و API روی:
https://api.example.com
قرار داشته باشد، مرورگر بررسی میکند که آیا API اجازه دریافت درخواست از https://example.com را دارد یا خیر. در صورت عدم اجازه، خطایی مانند زیر نمایش داده میشود:
Access to fetch ... has been blocked by CORS policy
رفع خطا در PHP
برای رفع خطای CORS در آیتم های php میتوانید تنظیمات را از طریق فایل .htaccess انجام دهید.
فایل .htaccess را در مسیر اصلی پروژه ایجاد یا ویرایش کنید و تنظیمات زیر را به آن اضافه کنید:
<IfModule mod_headers.c>
Header always set Access-Control-Allow-Origin "https://example.com"
Header always set Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS"
Header always set Access-Control-Allow-Headers "Content-Type, Authorization"
</IfModule>
در این تنظیمات، مقدار https://example.com را با دامنه Frontend خود جایگزین کنید.
اگر میخواهید درخواستها از تمام دامنه ها مجاز باشند، میتوانید مقدار Access-Control-Allow-Origin را به شکل زیر تغییر دهید:
Header always set Access-Control-Allow-Origin "*"
نکته: استفاده از Access-Control-Allow-Origin “*” در محیط Production معمولاً توصیه نمیشود. بهتر است فقط دامنههای موردنیاز را مشخص کنید.