我已经设置了 REST API 网关非代理集成
当我响应 200OK 时,我有这个 NodeJS lambda 代码
return {
statusCode: 200,
headers: {"Content-type": "application/json", "set-cookie": "please-work"},
body: JSON.stringify(response)
};
REST API 网关 - 方法响应:
这里我定义了
set-cookie
标题
REST API 网关 - 集成响应: 我有这样的设置:
问题:
您可以看到我确实将
set-cookie
标头映射到响应 set-cookie
标头。
但是我仍然没有看到这个标头返回给客户端 - 为什么?我如何将
set-cookie
标头或任何其他标头传递给客户端?
Lambda 和 Cookie 相关标头
考虑带有这些标头的 HTTP 响应。请注意,set-cookie 可以出现多次:
set-cookie: access-token=aDeSh7bC0qsTb...; Path=/; HttpOnly; Secure; SameSite=Strict
set-cookie: refresh-token=W16w1dU4N7pZM...; Path=/refresh; HttpOnly; Secure; SameSite=Strict
x-csrf: abc123
您可以用这样的代码来表示,其中 lambda 对象模型支持单值标头和多值标头:
const handler = async (event: APIGatewayProxyEvent) : Promise<APIGatewayProxyResult> => {
return {
statusCode: 200,
headers: {
"x-csrf": "abc123"
},
multiValueHeaders: {
"set-cookie": [
cookieSerializer.getAccessTokenCookie(),
cookieSerializer.getRefreshTokenCookie(),
]
}
body: JSON.stringify({})
};
}
对象模型
如果您查看 TypeScript 类型定义,您会看到 lambda 响应的结构:
export interface APIGatewayProxyResult {
statusCode: number;
headers?:
| {
[header: string]: boolean | number | string;
}
| undefined;
multiValueHeaders?:
| {
[header: string]: Array<boolean | number | string>;
}
| undefined;
body: string;
isBase64Encoded?: boolean | undefined;
}
网关响应
我非常确定您不需要在 AWS API 网关中执行任何操作即可接收响应。通常,您仅在需要自定义错误响应时才这样做。