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

尝试连接AWS AppSync Websocket时遇HttpNotFoundException错误求助

问题排查与解决方法

错误原因分析

你遇到的HttpNotFoundException(400错误)主要由以下两个原因导致:

  1. Base64编码不符合URL安全要求:原生btoa生成的标准Base64包含+、/、=这些特殊字符,直接作为URL参数会被服务器解析错误,导致无法匹配正确的端点。
  2. 初始连接Payload格式不正确:AppSync的WebSocket连接要求初始Payload必须指定协议版本,空对象不符合协议规范。

解决步骤

1. 替换为URL安全的Base64编码

将标准Base64转换为URL安全格式,替换特殊字符并去除填充:

function urlSafeBase64(str) {
  return btoa(str)
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=+$/, '');
}

2. 修正初始Payload结构

AppSync要求初始Payload必须包含version字段,值为"1.1":

const payload = {
  version: "1.1"
};

3. 完整修正后的代码

let ws = undefined;

const url = 'wss://XXXX.appsync-realtime-api.YYYY.amazonaws.com/graphql';
const apikey = 'ZZZZ';

// 转换为URL安全的Base64编码
function urlSafeBase64(str) {
  return btoa(str)
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=+$/, '');
}

const api_header = {
  host: 'XXXX.appsync-realtime-api.YYYY.amazonaws.com',
  'x-api-key': apikey,
};

// 修正Payload,添加协议版本
const payload = {
  version: "1.1"
};

const base64_api_header = urlSafeBase64(JSON.stringify(api_header));
const base64_payload = urlSafeBase64(JSON.stringify(payload));

const appsync_url = url + '?header=' + base64_api_header + '&payload=' + base64_payload;

ws = new WebSocket(appsync_url, ['graphql-ws']);

额外检查项

  • 确认URL中的XXXX(API ID)和YYYY(AWS区域)完全正确,与AppSync控制台显示的一致。
  • 确保API KeyZZZZ有效且未过期,并且该Key对应的权限允许建立WebSocket连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:05:24