سوال
من سعی می کنم با اتصال به RESTful API داخلی فلاسک، مجوز را با استفاده از جاوا اسکریپت انجام دهم . با این حال، وقتی درخواست می کنم، با خطای زیر مواجه می شوم:
XMLHttpRequest cannot load http://myApiUrl/login.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'null' is therefore not allowed access
من می دانم که API یا منبع راه دور باید سر صفحه را تنظیم کند، اما چرا وقتی درخواست را از طریق برنامه افزودنی Chrome Postman انجام دادم، کار کرد؟
این هم کد درخواست:
ajax({
type: 'POST',
dataType: 'text',
url: api,
username: 'user',
password: 'pass',
crossDomain: true,
xhrFields: {
withCredentials: true,
},
})
.done(function (data) {
console.log('done');
})
.fail(function (xhr, textStatus, errorThrown) {
alert(xhr.responseText);
alert(textStatus);
});
پاسخ
اگر من درست متوجه شدم، شما یک XMLHttpRequest را به دامنه ای متفاوت از صفحه خود انجام می دهید. بنابراین مرورگر آن را مسدود می کند زیرا معمولاً به دلایل امنیتی به درخواستی در همان مبدا اجازه می دهد. هنگامی که می خواهید یک درخواست متقابل دامنه انجام دهید، باید کاری متفاوت انجام دهید.
هنگامی که از Postman استفاده می کنید، توسط این خط مشی محدود نمی شوند. به نقل از Cross-Origin XMLHttpRequest:
صفحات وب معمولی می توانند از شی XMLHttpRequest برای ارسال و دریافت داده از سرور های راه دور استفاده کنند، اما آن ها توسط همان خط مشی مبدا محدود شده اند. برنامه های افزودنی چندان محدود نیستند. یک برنامه افزودنی می تواند با سرور های راه دور خارج از مبدأ خود صحبت کند، تا زمانی که ابتدا مجوز های متقاطع را درخواست کند.
برای یادگیری جاوا اسکریپت می توانید از مسیر کارآموزی فرانت اند استفاده کنید.
پاسخها