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

相關問題