【问题标题】:Fetch is not sending secure cookie during cross domain POST requestFetch 在跨域 POST 请求期间未发送安全 cookie
【发布时间】:2019-02-02 13:25:10
【问题描述】:

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

我的瓶子服务器配置为处理 CORS 请求和 cookie,并返回以下标头:

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 请求未发送包含会话 ID 的必要标头。

【问题讨论】:

  • 您是否在控制台日志中看到任何 CORS 错误?网络选项卡中的所有内容看起来都不错,但您仍然可能会遇到错误。另外,Access-Control-Allow-Origin 标头是否应该是 https 而不是 http?
  • 控制台日志中没有 CORS 错误。标头应该是 http,因为我目前没有在前端应用程序上使用 SSL,只是 REST 接口。
  • cookie是属于http://localhost:3000还是https://#.#.#.#/
  • cookie 属于 https://#.#.#.#/ 它是从运行在该主机上的瓶服务器发送和生成的。
  • 刚刚尝试使用非“安全”会话。id 仍然不起作用。

标签: javascript reactjs cookies fetch bottle


【解决方案1】:

更新:

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

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    相关资源
    最近更新 更多