JavaScript - ERR_EMPTY_RESPONSE

问题描述 投票:0回答:1

我是编程新手。请帮我解决这个问题,我的工作已经停止了。我有一个 ClickHouse 数据库。我需要对其执行 GET 请求并获取表格数据。邮件已通过 Postman 成功完成。但当我尝试通过 Google Chrome 从 JavaScript 执行它时,我收到错误“ERR_EMPTY_RESPONSE”。我查看了很多网站,发现问题出在 CORS 上。所有服务器都位于公司工作网络上,如果我没记错的话,CORS 在这种情况下并不是特别重要。如何修复我的代码,以便避免 CORS 限制并继续我的工作。 ClickHouse 服务器上禁止使用 POST 方法。充其量,我根本不想用数据库来接触服务器本身。 如果有人遇到过这种情况,请帮忙!

async function getDataFromClickHouse ()
{

const _baseUrl = 'http://servername:8123/';
const _username = 'login';
const _password = 'password';
const _query = 'SELECT * FROM any_table';

const base64Credentials = btoa(`${_username}:${_password}`);
const url = `${_baseUrl}/?query=${encodeURIComponent(_query)}`;

try {
    const response = await fetch(url, {
        method: 'GET',
        headers: {
            'Content-Type' : 'application/json',
            'Authorization': `Basic ${base64Credentials}`,
            'Access-Control-Allow-Origins' : '*'
        }
    });
    if (response.ok) {
        return await response.json();
    } else {
        throw new Error(`Error executing ClickHouse query: ${response.statusText}`);
    }
}
catch (error) {
    console.error(error);
}
}

当我设置

mode : 'no-cors'
时,我从服务器收到 403 Forbidden(身份验证失败)。尽管我通过 Postman 仔细检查了授权数据

预先感谢您的任何建议和建议。这是我在这里的第一篇文章,不要因为问题的表述可能不正确而严厉评判

javascript http get clickhouse
1个回答
0
投票

如果您尝试直接从浏览器访问您的clickhouse-server(不推荐这种方式)

然后添加到

/etc/clickhouse-server/config.d/options_method.xml

<clickhouse>
    <http_options_response>
        <header>
            <name>Access-Control-Allow-Origin</name>
            <value>*</value>
        </header>
        <header>
            <name>Access-Control-Allow-Headers</name>
            <value>origin, x-requested-with, content-type, authorization, content-type, x-clickhouse-user, x-clickhouse-key</value>
        </header>
        <header>
            <name>Access-Control-Allow-Methods</name>
            <value>POST, GET, OPTIONS</value>
        </header>
        <header>
            <name>Access-Control-Allow-Credentials</name>
            <value>true</value>
        </header>
        <header>
            <name>Access-Control-Max-Age</name>
            <value>86400</value>
        </header>

    </http_options_response>
</clickhouse>
© www.soinside.com 2019 - 2024. All rights reserved.