Ajax ПОЛУЧАЕТ запрос, заблокированный политикой CORS при доступе к файлам на localhost

#node.js #ajax #server #cors

#node.js #ajax #сервер #cors

Вопрос:

Я создаю веб-сайт, который принимает запрос с несколькими полями от пользователя и отправляет ajax-запрос на node.js сервер для возврата результатов поиска запроса. Сервер запущен на localhost. Но когда я отправляю запрос и получаю запрос через ajax, он блокируется политикой CORS. Я искал по этому поводу и узнал о серверах, блокирующих доступ других доменов к серверу, но если я получаю доступ к этим файлам с компьютера, на котором запущен сервер, это все еще считается разными доменами. Кроме того, я попытался установить заголовок запроса в коде сервера, используя следующий код, но он все еще не работает.

 http.createServer(function (request, response) {
const headers = {
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Methods': 'OPTIONS, POST, GET',
    'Access-Control-Max-Age': 2592000, 
};
});
  

Я не могу использовать express для проекта, поэтому я использую чистый node.js.

Вот мой запрос ajax.

 $.ajax({
    type: "GET",
    url: "localhost:8080",
    data: { action: 'search_tutors', homeTown: $('#homeTown').val() },
    cache: false,
    success: function (results) {
        showResults(results);
    },
    error: function (request, err) {

        alert(err);
        console.log(err);
    },
    done: function () {
        alert("Done");
        console.log("Done");
    }
});
  

Что я должен сделать, чтобы исправить это.

Ответ №1:

Попробуйте добавить 'Access-Control-Allow-Headers', '*' и 'Access-Control-Request-Method', '*' к заголовкам

 var server;
server = http.createServer(function(req,res){
    // Set CORS headers
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Request-Method', '*');
    res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, POST, GET');
    res.setHeader('Access-Control-Allow-Headers', '*');
    if ( req.method === 'OPTIONS' ) {
        res.writeHead(200);
        res.end();
        return;
    }

// other codes
});