Fetch 在跨域 POST 请求期间未发送安全 cookie

Fetch is not sending secure cookie during cross domain POST request

我无法获得此获取请求以正确发送 cookie(session 已成功存储在 cookie 内的 Chrome 浏览器应用程序选项卡中的 ID)。 cookie 是一个 python 瓶子创建的,beaker.session.id cookie 标记为安全。

我将我的 Bottle 服务器配置为处理 CORS 请求和 cookie,并返回以下 headers:

Access-Control-Allow-Credentials →true
Access-Control-Allow-Headers →Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token, Authorization
Access-Control-Allow-Methods →PUT, GET, POST, DELETE, OPTIONS
Access-Control-Allow-Origin →http://localhost:3000

我的javascript代码是:

 fetch("https://#.#.#.#/session-status", 
    {
        credentials: "include",
        method: "post",
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            "id": id
        }),
    }).then(res => {
        return res.json()

是什么导致了这个问题?预检 OPTIONS 请求成功并返回 200 OK,但 POST 请求未发送必要的 headers,其中包括 session id。

更新:

原来问题出在 SameSite:cookie 的“Lax”部分。 Bottle 默认启用 SameSite: 'Lax",但您需要手动将其设置为 None 以不发送该属性。SameSite: "Lax" 不允许您发送不安全的请求(示例:POST) 根据第 4.3 节中的 RFC 来自另一个域。