Я пытаюсь сделать простой GET
запрос к XML
файлу, и я застрял на этой CORS
ошибке.
Я пробовал несколько решений, включая добавление заголовков вручную в мой файл server.js
и использование пакета cors
NPM. С обоими из них, если я попаду в конечную точку в Postman, я смогу увидеть заголовки, прикрепленные к запросу, а также ответ.
Однако в Google Chrome заголовки не прикрепляются к запросу. Вот код в моем index.html
файле:
<body>
<h1>test</h1>
<script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
<!-- <script src="./server.js"></script> -->
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', http://11.111.111.111/web/data/data.xml, true);
xhr.setRequestHeader('Access-Control-Allow-Origin', '*')
xhr.withCredentials = true;
xhr.send(null);
</script>
</body>
Обратите внимание, что я заменил URL-адрес страницы XML, с которой я пытаюсь получить информацию, заполнителем.
Вот код в моем server.js
файле:
var express = require("express");
var bodyParser = require("body-parser");
var path = require("path");
var cors = require('cors')
// Sets up the Express App
var app = express();
var PORT = 3000;
app.use(cors())
app.options('*', cors()) // include before other routes
// Sets up the Express app to handle data parsing
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
// Routes
app.get("/test", function(req, res) {
//res.set({
// 'Access-Control-Allow-Origin': ['*'],
// 'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE',
// 'Access-Control-Allow-Headers': 'Content-Type'
// });
res.sendFile(path.join(__dirname, "./index.html"));
console.log('hit me')
console.log(res);
});
app.get("/", function(req, res) {
res.send('Houston, we have a problem.')
});
// Starts the server to begin listening
app.listen(PORT, function() {
console.log("App listening on PORT " + PORT);
});
А вот скриншот с выхода почтальона
Я добавил xhr.setRequestHeader('Access-Control-Allow-Origin', '*')
в свой клиентский запрос xhr
и переключился на использование пакета cors
. Теперь я получаю эту ошибку:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Я добавил app.options('*', cors()) // include before other routes
, как объяснено в документации npm cors
, но я все еще получаю ту же ошибку. Однако заголовки прикрепляются к запросу в dev-tools. Я обновил код и снимки экрана в этом посте, чтобы отразить эти изменения.
скриншот с dev-tools: