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

Apollo Server Lambda返回400 Invalid cookie value 客户端请求失败但Studio正常

解决方案

原因定位

该报错的核心原因是服务端的Cookie解析中间件检测到请求携带的Cookie中存在不符合RFC规范的未编码特殊字符,Apollo Studio请求正常是因为它的请求上下文不会携带你本地站点(http://localhost:8080)下存储的非规范Cookie(比如请求头里的g_state={"i_l":0},包含未编码的大括号、双引号),而本地客户端发起请求时会自动携带所有同域Cookie,触发了校验失败。

具体修复方案

  • 方案1:禁用服务端Cookie解析的严格模式
    在Apollo Server Lambda的express中间件配置中,自定义Cookie解析逻辑,关闭严格校验即可:
    import cookieParser from 'cookie-parser';
    
    return apolloServer.createHandler({
      expressGetMiddlewareOptions: {
        cors: {
          origin: ['http://localhost:8080', 'https://studio.apollographql.com'],
          credentials: true,
        },
        // 自定义中间件替换默认的cookie parser
        app: (app) => {
          app.use(cookieParser(/* 如有签名密钥可填在此处 */, {
            // 关闭严格模式,允许非规范字符的Cookie
            strict: false
          }));
        }
      }
    })(event, context, callback)
    
  • 方案2:修正非规范Cookie的存储逻辑
    排查本地站点中设置g_state这类Cookie的逻辑,存储前对值进行encodeURIComponent编码,读取时做decodeURIComponent解码,确保所有Cookie的值都符合RFC 6265的字符规范。
  • 方案3:本地开发环境调整Cookie配置(可选)
    本地开发时请求走的是HTTP协议,secure: true的Cookie仅在HTTPS协议下生效,可根据环境动态调整Cookie配置避免后续其他Cookie相关问题:
    const isProd = process.env.NODE_ENV === 'production';
    setCookies.push({
      name: "cookieName",
      value: "cookieContent",
      options: {
        httpOnly: true,
        maxAge: 3600,
        path: "/",
        sameSite: isProd ? 'none' : 'lax',
        secure: isProd
      }
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:02