نیما - ش
4 سال پیش توسط نیما - ش مطرح شد
3 پاسخ

خطای has been blocked by CORS policy در ویو جی اس

دوستان سلام،
من در ویو جی اس برای ارسال اطلاعات به سرور از پلاگین Vue Resource استفاده میکنیم ، اما متاسفانه خطای زیر نمایش داده میشه , برای حل این مشکل حتی از اکستنشن های کروم برای Allow CORS استفاده کردم ، اما متاسفانه کار نمیکند ، از دوستان کسی اطلاعی داره چطور میشه این مشکل رو حلش کرد

Access to XMLHttpRequest at 'https://....' from origin ' ...' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.


ثبت پرسش جدید
وحید
تخصص : Fullstack
@forughi.vahid 4 سال پیش مطرح شد
1

@nimageneral
این خطا زمانی به وجود میاد که آدرس دامنه که کاربر توی url بروزر نوشته با آدرس دامنه سروری که دارید بهش درخواست میدید یکی نباشه ، این مشکل رو هم میشه سمت کلاینت حل کرد که منطقی نیست ، چون اینجوری باید هر کسی که میخواد از سایت شما استفاده کنه بره اون اکستنشن رو نصب کنه ، هم میشه سمت سرور حلش کرد،
برای اینکه سمت سرور حلش کنید باید هدر هایی رو به ریسپانس هاتون اضافه کنید،
. یک راه اینه که هدر هارد به فایل .htaccess اضافه کنید

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

علامت * یعنی از هر دامینی بشه درخواست فرستاد ، میتونید به جاش دامین خاصی رو وارد کنید .
. راه دوم اینه که یه میدلور بنویسید و توی هر راوتی که خواستید ازش استفاده کنید، یه میدلور درست کنید و کد زیر رو توی تابع handler قرار بدید

$headers = [
        'Access-Control-Allow-Origin' =>' *',
        'Access-Control-Allow-Methods'=>' POST, GET, OPTIONS, PUT, DELETE',
        'Access-Control-Allow-Headers'=>' Content-Type, Accept, Authorization, X-Requested-With, Cache-Control'
    ];
    if($request->getMethod() == "OPTIONS") {
        return \Response::make('OK', 200, $headers);
    }
    $response = $next($request);
    foreach ($headers as $key => $value) {
        $response->header($key, $value);
    }
    return $response;

و در آخر به هر راوتی خواستید اضافش کنید ، یا اگر میخواید به کل راوت ها اضتفه بشه میتونید توی فایل kernel.php توی لیست $middleware قرارش بدید.
. راه سوم اینه که از پکیج laravel-cors استفاده کنید ، سرچ کنید توی گیت هاب موجوده ، این پکیج هم کار خاصی نمیکنه ، همون میدلور رو برای شما آماده نوشته ، و یسری کانفیگ ها هم در اختیارتون قرار میده

. یک روش دیگه هم هست ، اگر دامین فرانت و سرورتون یکیه و فقط توی www یا https و غیره اختلاف داره شما میتونید توی رندر ویو اول آدرس دامینی که طرف توی url وارد کرده رو بگیرید و از اون به بعد اون آدرس دامین رو اول تمام api هایی که لود میکنید قرار بدید و به اون دامنه درخواست بفرستید.


نیما - ش
تخصص : برنامه نویس وب
@nimageneral 4 سال پیش مطرح شد
0

ممنونم وحید جان،
لطف کردید ، دقیقا مشکل از دامین بود که متاسفانه یکی نبود و به اشتباه بجای https من hhtps وارد کرده بودم.
سپاسگزارم
@forughi.vahid


Masoud1370
تخصص : وردپرس
@khorramshahr1370 2 سال پیش مطرح شد
0

سلام
اگه ما افزونه وردپرسی با ویو نوشتیم که قراره دست کاربرای زیادی برسه، چطور این مشکل CROS رو حل کنیم؟


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام