在 cloudflare worker header.set('Set-Cookie' function) 的“Set-Cookie”标头中设置多个 cookie

Mic*_*ael 2 cookies http-headers cloudflare-workers

我正在尝试使用 cloudfare 工作人员在将响应发送到客户端之前将 2 个 cookie 键/值对添加到响应中。

不幸的是,cloudflare 工作人员的所有文档都说使用 response.headers.set('Set-Cookie',xxx) 函数来设置 cookie 值:

let response = await fetch(request);
response = new Response(response.body, response);

response.headers.set('Set-Cookie', "val1=x; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';");

return response;
Run Code Online (Sandbox Code Playgroud)

这仅允许您设置一个 cookie 标头,如果调用两次只会覆盖现有的标头。

我试过两次调用该函数,只有最后一个值进来:

response.headers.set('Set-Cookie', "val1=1; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';");
response.headers.set('Set-Cookie', "val2=2; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';");
Run Code Online (Sandbox Code Playgroud)

我尝试在一个标题中传递 2 个 cookie,用逗号分隔,但只有一个进来:

response.headers.set('Set-Cookie', "val1=1; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';, val2=2; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';");
Run Code Online (Sandbox Code Playgroud)

我尝试传递 2 个 cookie 键/值对,但第一个键值设置为“1, val2=2”:

response.headers.set('Set-Cookie', "val1=1, val2=2; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';");
Run Code Online (Sandbox Code Playgroud)

这些都不起作用。

我发现的唯一解决方法是将 vars 捆绑到一个变量中,然后在客户端使用 JS 解包并应用该变量:

response.headers.set('Set-Cookie', "jsVal={val1:1, val2:2}; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';");
Run Code Online (Sandbox Code Playgroud)

.. 然后在 js 文件中应用 2 个 cookie 值。显然这并不理想。

有没有人通过 cloudflare 工作人员在一个响应标头中应用 2 个单独的 cookie 有任何运气?谢谢。

小智 6

Headers.append()https : //developer.mozilla.org/en-US/docs/Web/API/Headers/append

set() 和 append() 的区别在于,如果指定的标头已经存在并且接受多个值,则 set() 将用新值覆盖现有值,而 append() 会将新值附加到值集。