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

NodeJS中使用graphql-ws实现GraphQL订阅时添加HTTP升级授权头

在graphql-ws客户端握手阶段添加Cookie授权头

要解决握手时HTTP升级请求的Cookie头添加问题,核心是在WebSocket连接初始化时直接配置HTTP请求头,graphql-ws允许通过自定义WebSocket实现来完成这个操作,具体步骤如下:

实现方案

  1. 如果你是Node环境,先确保安装了ws库(graphql-ws在Node端依赖它创建WebSocket连接):
npm install ws
  1. 创建客户端时,通过webSocketImpl选项自定义WebSocket实例,在构造时传入包含Cookie的headers配置:
import { createClient } from 'graphql-ws';
import WebSocket from 'ws';

// 替换成你的GraphQL订阅地址和实际授权Cookie
const SUBSCRIPTION_URL = 'ws://your-graphql-server/subscriptions';
const AUTH_COOKIE = 'auth-token=your-actual-token-value';

const client = createClient({
  url: SUBSCRIPTION_URL,
  webSocketImpl: (url, protocols) => {
    return new WebSocket(url, protocols, {
      headers: {
        Cookie: AUTH_COOKIE,
      },
    });
  },
});

关键说明

  • 不要混淆connectionParams和HTTP握手头:connectionParams是GraphQL WS协议的连接初始化参数,会在WebSocket建立后以消息形式发送,不会出现在HTTP升级请求头中,所以无法满足服务器对握手阶段Cookie的验证要求。
  • 如果你的授权令牌是动态获取的(比如从登录接口返回),只需将AUTH_COOKIE替换为动态生成的字符串即可,比如从缓存或变量中读取最新令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:42:39