3

我正在使用API​​网关的代理集成来调用Lambda。输出格式规范此后续JSON格式:如何使用代理Lambda从API网关发送多个Set-Cookie标头

{ 
    "statusCode": httpStatusCode, 
    "headers": { "headerName": "headerValue", ... }, 
    "body": "..." 
} 

在一个响应我希望设置两个cookie(两个不同的AUTH的Cookie)但JSON不允许在headers对象具有两个相同的键(OK,在技术上规范但大多数图书馆没有)。

RFC 7230请注意,应该专门处理Set-Cookie,但我看不到我可以通过API网关发送多个Set-Cookie值。

有谁知道这是否可能?

回答

4

对此进行了实验后,我得出结论,目前尚不可能(如果我从AWS支持中听到回复,则会更新)。

我尝试发送以下人工监管的JSON作为响应:

< Content-Type: text/plain 
< Content-Length: 35 
< Connection: keep-alive 
< Date: Thu, 29 Sep 2016 11:22:09 GMT 
< Set-Cookie: cookie2=oatmeal 
< X-Test-Header: baking experiment 
< X-Cache: Miss from cloudfront 

正如你可以看到:

{ 
    "statusCode": 200, 
    "body": "testing multiple set-cookie headers", 
    "headers": { 
    "X-Test-Header": "baking experiment", 
    "Set-Cookie": "cookie1=chocolate-chip", 
    "Set-Cookie": "cookie2=oatmeal", 
    "Content-Type": "text/plain" 
    } 
} 

,在响应卷曲请求API网关回报的饼干第一个Set-Cookie被扔在地板上。

理想在JSON格式输出接头连接器的JSON格式应该是这样的:

{ 
    "statusCode": httpStatusCode, 
    "headers": [ 
    { "headerName": "headerValue" }, 
    ... 
    ], 
    "body": "..." 
} 
+0

@MarkB不正确,[见rfc6265](https://tools.ietf.org/html/rfc6265#page-7)。您需要能够使用多个'Set-Cookie'标题进行响应,因为每个Cookie都可能具有不同级别的Cookie安全性,过期等。 – idbehold

+0

我认为理想情况下,AWS会改为使用[提取API的Headers'接口] (https://developer.mozilla.org/en-US/docs/Web/API/Headers)。 'Headers'实例允许你使用'headers.append(key,value)',这意味着你可以多次设置'Set-Cookie'头文件。然后,您可以使用'headers'属性调用Lambda回调,该属性等于普通对象*或* Headers实例。 – idbehold

2

作为标记B所指出的,你可以/应通过设置在多个cookie名称/值对实现这一目标单个Set-Cookie头。浏览器应该正确解释这一点。

Cookie: a=1; b=2 

编辑:正如OP所指出的那样,有些用例需要头的多个实例。我们在收到的请求中添加了我们的积压并支持多个头名称。

+1

[见rfc6265](https://tools.ietf.org/html/rfc6265#page-7)。您需要能够使用多个“Set-Cookie”标题进行响应,因为每个Cookie可能具有不同级别的Cookie安全性,到期时间等。 – idbehold

+0

我明白了,好点。我将不得不将这添加到我们的积压工作中;如果我们必须更改从Lambda返回的形状并接受这两种格式,可能需要一段时间。 –

+0

建议的'Set-Cookie'不是标题的有效用法。您只能为每个标头设置一个cookie(与浏览器发送的“Cookie”不同,它的工作原理与上面所述完全相同)。第一个';'之后的所有内容都被解释为诸如expiry,max-age等选项。请参见[RFC](https://tools.ietf.org/html/rfc6265#section-4.1.1)中的语法。 – sihil

相关问题