Показать сообщение отдельно
  #35 (permalink)  
Старый 09.03.2021, 19:19
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от voraa
Я думаю не получится считать файл, если страница берется с локального компьютера используя XMLHttpRequest или fetch.
Это я опять жутко поторопился.
На самом деле МОЖНО!
Все дело в заголовках, которые посылает сервер
Вот такой простецкий сервер на nodejs

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.setHeader('Access-Control-Allow-Origin', '*');  // !important
  res.setHeader('Access-Control-Allow-Headers', 'origin, content-type, accept'); // !important
  res.end('Hello World with CORS!');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});


И вот такой html файл, расположенный локально
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" lang="ru">
  <meta name="viewport" content="width=device-width, initial-scale=1.0" >
  <title>TESTE</title>
</head>

<body id="body">
<button type='button' id='bsend'>Send</button>
<br>
<div id='answ'>
</div>
</div>
<script>
	document.getElementById('bsend').addEventListener('click',
	async () => {
		try {
			const resp = await fetch('http://127.0.0.1:3000', {mode:'cors'})
			let str = await resp.text();
			document.getElementById('answ').innerHTML = str
			console.log(str)
		}catch (err){
			document.getElementById('answ').innerHTML=`Error ${err.name} ${err.code} ${err.message}`;
		}
	}
	);
</script>
</body>
</html>


Совершенно спокойно взаимодействуют.
Ответить с цитированием