Я просто запускаю демонстрацию перекрестного происхождения CORS. Эта демонстрация выполняется с помощью node.js. Вот index.html:
<button>click to cross origin using CROS</button>
<p>hello world ?</p>
<script>
var btn = document.getElementsByTagName('button')[0];
var text = document.getElementsByTagName('p')[0];
btn.addEventListener('click', function () {
var xhr = new XMLHttpRequest();
var url = 'http://localhost:3001';
xhr.open('PUT',url,true);
xhr.send();
xhr.onreadystatechange = () => {
if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
text.innerHTML = xhr.response;
}
}
})
</script>
Вот serverRes.js:
var express = require('express');
var app = express();
var responsePort = 3001;
app.get('/', (req, res) => {
res.set('Access-Control-Allow-Origin', 'http://localhost:3000');
res.send("Hello world from CROS.?");
});
app.listen(responsePort, function () {
console.log('cros_responser is listening on port '+ responsePort);
});
Вы можете видеть, что я установил Access-Control-Allow-Origin
с помощью http://localhost:3000
, поэтомуответ на предварительно выданный запрос должен фактически пройти проверку контроля доступа, что означает, что запрос все равно будет успешным. Но когда я иду на порт 3000, я получаю:
![enter image description here](https://i.stack.imgur.com/ZS1QB.png)
Но почему? Почему после установки Access-Control-Allow-Origin на стороне сервера все еще возникает перекрестная ошибкаКроме того, я попытался написать:
app.all('/', function (req, res, next) {
res.header('Access-Control-Allow-Origin', 'http://localhost:3000');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.send("Hello world from CROS.?");
next(); // pass control to the next handler
});
в соответствии с Почему добавление заголовков CORS в маршрут OPTIONS не позволяет браузерам получать доступ к моему API? . Но ошибка все еще существует.