Как отправить запрос с 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 шт):
Вам нужно ставить заголовок 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);