Как отправить запрос с js-сайта на VPS сервер под ubuntu?

Суть в том что 443 порт работает по дефолту. И я не могу создать createServer(...).listen(443) а затем запустить программу, так как этот порт или как там это называется уже работает по умолчанию... При создании кастомного порта например 5555. программа на сервере запускается и слушает. Из клиентской части я отправляю ajax запрос, но в консоле получаю следующую ошибку:

// ------------------------------- ERROR:

Доступ к XMLHttpRequest по адресу https://example.com:5555/nodejs/listenMQL.js из источника «https://example.com» был заблокирован политикой CORS: Ответ на запрос перед полетом не проходит проверку контроля доступа : На запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin».

=======================================================================

                   **Вопрос решен, следующим образом:**

// -------------------------- Клиентская часть:

$.ajax({
                type: "POST",
                url: "https://example.com:5555/nodejs/listenMQL.js",
                data: JSON.stringify(jsonObj),
                cache: false,
                success: function (data) {
                    // Сюда придет ответ от сервера...
}});

// -- Серверная часть(Экспресс я удалил, из за его непонятных методов по типу use и делал все на чистом js):

let fs = require("fs");
let https = require("https");

// Указываем пути до сертификатом на сервере. Не нужно ничего самому 
// создавать. Ищем их в своем выделеном пространстве на сервере !!!
let options = {
    key: fs.readFileSync("/var/www/httpd-cert/www-root/example.key"),
    cert: fs.readFileSync("/var/www/httpd-cert/www-root/example.crt")
};


https.createServer(options, (req, res)=>{
    req.on("data", data =>{
        // Обрабатываем событие прихода данных с сайта.
    });

    // ОТВЕЧАЕМ НА ПОЛУЧЕННЫЙ ЗАПРОС:
    // Устанавливаем в заголовке ответа следующую магическую строку, без 
    // которой ничего работать не будет:
    res.setHeader("Access-Control-Allow-Origin", "https://example.com");

    // Отсылаем данные обратно на сайт в ajax объект:
    res.end("Ok"); // Отправляем ответ обратно на сайт...
}).listen(5555); // Как ни хотелось бы но 443 порт, который и предназначен 
// для https запросов у меня так и не получилось задействовать. Вместо этого 
// я выбрал кастомный порт и возложил на него все то, что должен был делать 
// 443 порт. Но тем не менее цели я своей достиг. Спасибо за рекомендации...

Ответы (1 шт):

Автор решения: Stepan Kasyanenko

Вам нужно ставить заголовок Access-Control-Allow-Origin: * - на сервере, а не на клиенте!

Если сервер с использованием express.

let fs = require("fs");
let express = require("/root/node_modules/express/lib/express");
let app = express();
let https = require("https");

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "https://example.com"); 
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

https.createServer(options, (req, res)=>{
    req.on("data", data =>{...});
    res.end("Ok");
}).listen(5555);

Если сервер без фреймворков.

let fs = require("fs");
let https = require("https");

https.createServer(options, (req, res)=>{
    req.on("data", data =>{
        // Обрабатываем событие прихода данных с сайта.
    });

    res.setHeader("Access-Control-Allow-Origin", "https://example.com");
    res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

    // Отсылаем данные обратно на сайт в ajax объект:
    res.end("Ok"); // Отправляем ответ обратно на сайт...
}).listen(5555); 
→ Ссылка