Как исправить ошибку CORS при ajax запросе на js?

вопрос от Салават 31.01.2023 17:01

Идея в чем. Мне с помощью ajax на javascript нужно сделать запрос к удаленному серверу. Это могут быть разные сайты. Затем нужно получить заголовки ответа. Таким образом я хочу проверить, работает удаленный сайт или нет.

Вот пример моего кода:
let req = new XMLHttpRequest();
req.open('GET', 'https://ya.ru', true);
req.send(null);
let headers = req.getAllResponseHeaders().toLowerCase();
alert(headers);

В итоге я получаю пустой alert, а в консоли вижу сообщение:
"Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на https://ya.ru/. (Причина: отсутствует заголовок CORS «Access-Control-Allow-Origin»). Код состояния: 302.

Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на https://ya.ru/. (Причина: не удалось выполнить запрос CORS). Код состояния: (null)."

Если почитать подробнее, то как я понял, удаленный сервер должен мне вернуть в заголовке специальный текст, а т.к. я его не получаю, то возвращается ошибка.

Получается, что на javascript нет возможности делать запросы к удаленным серверам? Как-то это обходится?

1 ответ

Правила ответов

Ваш ник: Аноним (вход на сайт)

Ваш email (не отобразится на сайте)

Оборачивайте код в тег [code][/code]
ответ от Аноним 31.01.2023 18:42

Как вы правильно написали, удаленный сервер должен разрешить у себя подключения для вашего домена или вообще для любых доменов. То есть в ответ на ваш запрос, удаленный сайт должен вернуть в заголовке что-то вроде Access-Control-Allow-Origin: * (или ваш домен)

Скорее всего эта идея с js у вас в итоге не будет корректно работать, т.к. вам нужны данные разных сайтов. Нет никакой гарантии, что другие сайты будут отдавать вам контент.

Как вариант используйте js для запроса на внутренний скрипт, на вашем сервере, который и будет получать заголовки и отдавать ответ. Например, заголовки можно получать на php с помощью функции get_headers()