در پایان این راهنما، CORS را روی یک قانون مسیر فعال میکنیم تا مرورگر بتواند از یک مبدا دیگر به این مسیر درخواست ارسال کند و در صورت مجاز بودن، پاسخ را دریافت کند.
برای آشنایی با قانون یکسانی مبدا و Preflight، CORS چیست؟ را مطالعه میکنیم. معنی گزینههای CORS نیز در مرجع تنظیمات CORS آمده است.
پیشنیازها
- یک دامنه یا زیردامنه پشت CDN ستون — آموزشها
- دستکم یک قانون مسیر برای منبع بینمبدا — هدایت درخواستها به آپاستریم با قوانین مسیر
- مبدا دقیق صفحهای که درخواست را ارسال میکند، شامل پروتکل؛ برای مثال
https://app.example.com
مراحل
-
در پنل، از سرویس توزیع محتوا وارد وبسایتها میشویم و وبسایت موردنظر را انتخاب میکنیم.
-
بخش قوانین مسیر (لوکیشن) را باز میکنیم و قانون مسیر منبع را ویرایش میکنیم؛ برای مثال
/api/*. -
در چه تنظیماتی بر روی مسیر بالا انجام شود؟، گزینه تنظیمات CORS را انتخاب میکنیم.

-
تنظیمات CORS را روشن میکنیم.
-
در Originهای مجاز، مبدا صفحهای را که قرار است به API درخواست بزند، همراه با پروتکل وارد میکنیم و هر Origin را در یک خط قرار میدهیم.
برای مثال، اگر برنامه ما روی
https://app.example.comقرار دارد، این مقدار را وارد میکنیم:
https://app.example.comاگر چند برنامه باید به API دسترسی داشته باشند، Origin هرکدام را در یک خط اضافه میکنیم.
اگر API عمومی است و میخواهیم از هر Origin مجاز باشد، میتوانیم از * استفاده کنیم. برای درخواستهای دارای Credential، باید Origin مشخصی را وارد کنیم.
-
متدهای مجاز را مطابق API انتخاب میکنیم.
برای مثال، اگر API از
GET،POST،PUTوDELETEاستفاده میکند، همین متدها را انتخاب میکنیم. متدOPTIONSرا انتخاب نمیکنیم؛ Preflight توسط Edge پاسخ داده میشود. -
اگر برنامه برای API هدرهای سفارشی ارسال میکند، نام آنها را در هدرهای مجاز و هر هدر را در یک خط وارد میکنیم.
برای مثال، اگر درخواستها شامل
AuthorizationوContent-Typeباشند:Authorization Content-Type -
اگر پاسخ API هدر سفارشی دارد که JavaScript باید آن را بخواند، نام آن را در هدرهای Exposed وارد میکنیم.
برای مثال، اگر API هدر
X-Request-Idرا در پاسخ ارسال میکند و برنامه باید مقدار آن را بخواند،X-Request-Idرا در این بخش وارد میکنیم. -
اگر درخواست باید با Credential مانند Cookie ارسال شود، Allow Credential را روشن میکنیم.
برای مثال، اگر
https://app.example.comاز Cookie برای احراز هویت API استفاده میکند، این گزینه را فعال میکنیم و در Originهای مجاز همان Origin مشخص را قرار میدهیم. در این حالت نمیتوانیم از*استفاده کنیم. -
در صورت نیاز، Max age را برحسب ثانیه وارد میکنیم.
برای مثال، با وارد کردن
86400، مرورگر میتواند نتیجه Preflight را تا یک روز نگه دارد.مقدار
0باعث میشود هدرAccess-Control-Max-Ageارسال نشود. -
روی ویرایش قانون مسیر کلیک میکنیم.
بررسی صحت
در دستورات زیر، api.example.com و https://app.example.com را با Hostname و Origin موردنظر خود جایگزین میکنیم.
-
یک درخواست Preflight با
OPTIONSارسال میکنیم:curl -i -X OPTIONS "https://api.example.com/api/items" \ -H "Origin: https://app.example.com" \ -H "Access-Control-Request-Method: POST" \ -H "Access-Control-Request-Headers: Authorization,Content-Type"در پاسخ بررسی میکنیم که:
-
کد وضعیت، مطابق تنظیمات سرویس، پاسخ موفق Preflight باشد.
-
Access-Control-Allow-Originبا Origin مجاز مطابقت داشته باشد. -
Access-Control-Allow-MethodsشاملPOSTباشد. -
Access-Control-Allow-HeadersشاملAuthorizationوContent-Typeباشد. -
اگر Allow Credential فعال است، هدر زیر وجود داشته باشد:
Access-Control-Allow-Credentials: true
-
-
یک درخواست اصلی با همان Origin ارسال میکنیم:
curl -i "https://api.example.com/api/items" \ -H "Origin: https://app.example.com"در پاسخ، وجود
Access-Control-Allow-Originبا مقدار Origin مجاز را بررسی میکنیم.توجه داشته باشیم که
curlمحدودیتهای امنیتی مرورگر را اعمال نمیکند؛ بنابراین این تست فقط هدرها و پاسخ HTTP را بررسی میکند. برای بررسی رفتار واقعی CORS، درخواست را از صفحهای در همان Origin موردنظر نیز ارسال میکنیم. -
یک درخواست با Origin خارج از فهرست مجاز ارسال میکنیم:
curl -i "https://api.example.com/api/items" \ -H "Origin: https://evil.example"در پاسخ نباید
Access-Control-Allow-Originبرای این Origin وجود داشته باشد. -
در مشاهده لحظهای لاگ درخواستها، مسیر درخواست را بررسی میکنیم تا اطمینان حاصل کنیم درخواست با قانون مسیر موردنظر مطابقت داشته است.
درخواست Preflight با
OPTIONSدر صورت فعال بودن CORS در Edge پاسخ داده میشود و به آپاستریم ارسال نمیشود.
اگر مرورگر همچنان خطای CORS نمایش میدهد، Origin را دقیقا با مقدار واردشده در تنظیمات مقایسه میکنیم. برای مثال، https://example.com و https://www.example.com دو Origin متفاوت هستند.
اگر Allow Credential فعال است، اطمینان حاصل میکنیم بهجای *، Origin دقیق در Originهای مجاز وارد شده است.
