Я пытаюсь получить простые данные с другого хоста, используя запрос JQuery Ajax. Вот пример для воспроизведения:
Node.js express файл сервера server.js
:
var express = require('express');
var app = express();
var path = require('path');
// var cors = require('cors')
// app.use(cors());
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "")
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
})
app.get('/', function(req, res) {
console.log(res.getHeaders());
res.sendFile(path.join(__dirname + '/index.html'));
});
app.listen(3000, function name(params) {
console.log(`App listening on port 3000`);
});
Это файл html index.html
:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
console.log(`Request start`);
$.ajax({
type: "GET",
url: "https://csrhub.com/number/",
crossDomain: true,
success: function(data, status) {
console.log(data);
alert("Thanks!");
},
error: function(jqXhr, textStatus, errorMessage) {
console.log(textStatus);
console.log(errorMessage);
}
});
});
</script>
</head>
<body>
<p>This is a paragraph.</p>
</body>
</html>
И при загрузке файла в Chrome я получаю следующие ошибки:
Консоль: А вот заголовки из выборки ресурса:
Сообщение носит описательный характер, но действительно ли этот перекрестный исходный запрос настолько необычен? Я имею в виду, что веб-интерфейсу нужно разрешить запрашивать API, например. Могу ли я сделать эту работу без обходного пути chrome? Мне нужен этот функционал в производстве. Как сделать эту работу?
РЕДАКТИРОВАТЬ Ребята, вы читали ответ мой вопрос предлагается дублировать? Это не дубликат. Я владелец сервера. Я поставил необходимые заголовки. Я также установил https://www.npmjs.com/package/cors и попробовал еще раз. Такая же ситуация! Я прочитал оригинальный вопрос. Вопрос и контекст не совпадают. Это не дубликат. Почему это закрыто? Я применил необходимые заголовки, которые позволяют CORS. Это все еще не работает. Почему?
Изменен код в соответствии с предложениями @ Joodjindy
Вот еще один пример в реальном времени https://youtu.be/ROWfnwBtQYE