Ошибка при запросе JS

Пытаюсь сделать сайт, который будет выводить информацию о пользователе через VK API, но при попытке запроса выдает ошибку: index.html:1 Access to XMLHttpRequest at 'https://api.vk.com/method/users.get?user_id=id1&v=5.130&access_token=f8f1cc75c0f63cef3542e41796e4c6d8707e63708c2ead8a3bf613f1a333bcb00f7f8d14cf9a2d8758c99' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Как ее исправить? Я понимаю, что там что-то блокирует запрос, но не понимаю, как убрать блокировку и разрешить запрос

    <!DOCTYPE html>
<html>
<head>
    <title>VK information</title>
    <link rel="stylesheet" href="main.css">
    <script>
        let headers = new Headers();
        var token = "f8f1cc75c0f63cef3542e41796e4c6d8707e63708c2ead8a3bf613f1a333bcb00f7f8d14cf9a2d8758c99"         
        var XHR = ("onload" in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest;
        var xhr = new XHR();
        function getInfo() {
            var text = document.getElementsByName("link")[0].value;         
            if (text.includes('vk.com/')){
                user_id = text.split('vk.com/')[1].split('/')[0]
            }
            else {
                alert('Нужно ввести ссылку на страничку VK.')
                return
            }
            url = "https://api.vk.com/method/users.get?user_id="+user_id+"&v=5.130&access_token="+token
            xhr.open('GET', url, true);
            xhr.onload = function() {
                handler( this.responseText );
            }
            xhr.onerror = function() {
                alert( 'Ошибка при получение информации: ' + this.status );
            }
            xhr.send();
        }
        function handler(text){
            alert(text)
        }
    </script>
</head>
<body>  
    <center>
        <div class="parent">
            <input type="text" name="link" placeholder="Введите ссылку VK...">                      
            <br></br>
            <button onclick="getInfo();">Узнать информацию.</button>
        </div>
    </center>
</body>
</html>

Ответы (1 шт):

Автор решения: fixer

В ответе на CORS-запрос отсутствует заголовок Access-Control-Allow-Origin, используемый для проверки, может ли ресурс быть доступен для контента на текущем домене.

Если у вас есть доступ к серверу, то добавьте домен запрашивающего сайта в список разрешённых доменов, добавив его в значение заголовка Access-Control-Allow-Origin.

Например, для предоставления сайту https://amazing.site доступа к ресурсам с использованием CORS, заголовок должен выглядеть так:

Access-Control-Allow-Origin: https://amazing.site

Также вы можете разрешить доступ любому сайту, используя подстановку *. Используйте этот способ только для публичных API. В закрытых API * не должна использоваться, вместо этого должен быть установлен определённый домен или домены. При этом подстановка работает только для запросов с атрибутом crossorigin со значением anonymous.

Access-Control-Allow-Origin: *

Внимание: Использование * для доступа к закрытым API — плохая идея по очевидным причинам.

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

Конкретная директива для установки заголовков зависит от вашего сервера. Так в Apache нужно добавить следующую строку в конфигурацию сервера (в соответствующих разделах < Directory >, < Location >, < Files > или < VirtualHost >). Конфигурация обычно находится в файле с расширением .conf (стандартные названия: httpd.conf, apache.conf), либо в файле .htaccess.

Header set Access-Control-Allow-Origin 'origin-list'

В Nginx для установки этого заголовка используется команда:

add_header 'Access-Control-Allow-Origin' 'origin-list'
→ Ссылка