You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript带凭证向HPCC集群的Roxie查询发送JSON请求?

在HPCC集群中通过JavaScript带凭证请求获取Roxie查询响应

我在访问需要登录凭证的HPCC集群时,创建JSON请求获取Roxie查询响应会被重定向到登录页面。尝试了以下代码,但常规模式运行会出现跳转问题,关闭CORS模式则报登录失败错误。

document.getElementById('loginForm').addEventListener('submit', function(event) {
  event.preventDefault();

  var username = 'username';
  var password = 'password';

  login(username, password)
    .then(() => {
      document.getElementById('output').innerHTML = '<p>Login successful.</p>';
      window.location.href = 'http://cluster_abc:8002/esp/files/Login.html';
    })
    .catch(error => {
      console.error('Error:', error);
      document.getElementById('output').innerHTML = '<p>Login failed. Please try again.</p>';
    });
});

function login(username, password) {
  return new Promise((resolve, reject) => {
    var loginUrl = 'http://university-roxie.us-hpccsystems-dev.azure.lnrsg.io:8002/esp/login';
    var formData = new FormData();
    formData.append('username', username);
    formData.append('password', password);

    fetch(loginUrl, {
      method: 'POST',
      body: formData
    })
      .then(response => {
        if (!response.ok) {
          throw new Error('Login failed');
        }
        resolve();
      })
      .catch(error => {
        reject(error);
      });
  });
}

问题分析与解决办法

  • 凭证传递缺失:HPCC的ESP接口依赖会话Cookie维持登录状态,当前代码未配置credentials选项,导致登录后的Cookie无法被保存和后续请求复用。修改fetch请求,添加credentials: 'include'(跨域场景必须用该值,同域可用'same-origin'):

    fetch(loginUrl, {
      method: 'POST',
      body: formData,
      credentials: 'include' // 关键:携带并保存会话凭证
    })
    
  • 重定向处理优化:登录成功后无需跳转回登录页,应直接发起Roxie查询。同时,HPCC登录接口可能返回302重定向,可通过redirect: 'manual'手动处理响应,避免自动跳转干扰:

    fetch(loginUrl, {
      method: 'POST',
      body: formData,
      credentials: 'include',
      redirect: 'manual'
    })
    .then(response => {
      // 通过响应状态或Set-Cookie头判断登录是否成功
      if (response.status === 302 || response.headers.get('set-cookie')) {
        resolve();
      } else {
        throw new Error('Login failed');
      }
    })
    
  • 后续Roxie查询需携带凭证:登录成功后发起Roxie查询时,同样要配置credentials: 'include',确保会话有效:

    function getRoxieResponse(queryParams) {
      return fetch('http://university-roxie.us-hpccsystems-dev.azure.lnrsg.io:8002/roxie/your-query-endpoint', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(queryParams),
        credentials: 'include'
      })
      .then(res => res.json());
    }
    
  • 服务器端CORS配置:若跨域请求仍失败,需确认HPCC集群的ESP服务已配置正确的CORS头:

    • 允许前端域名:Access-Control-Allow-Origin: 你的前端域名
    • 允许携带凭证:Access-Control-Allow-Credentials: true
    • 允许必要的请求方法和请求头

内容的提问来源于stack exchange,提问作者decoded051

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 19:20:04