【问题标题】:Javascript fetch Cookie not set in Chrome and Firefox for iPhoneJavascript 获取 Cookie 未在 Chrome 和 Firefox for iPhone 中设置
【发布时间】:2019-03-28 15:47:30
【问题描述】:

我正在尝试了解大学项目的这种行为。

我有一个部署在谷歌云上的 react web 应用程序和一个也部署在谷歌云上的 Go 服务器。

Web 应用程序使用我的 Go 服务器提供的 API。

该应用在桌面环境和 Android 智能手机上使用 ChromeFirefox 浏览器似乎运行良好,但当我在 iOS 上使用相同的浏览器时(iPhone8 ) API 调用不包含我需要在 Go 服务器中验证用户身份的 cookie。 Safari 也很好用,所以我只在我的 iPhone 上的 Chrome 和 Firefox 上看到这种行为

这些是同一个 API 的两个调用的标头,第一个使用 Safari,第二个使用 Firefox:

Safari (iOS 12.0.1)

GET /example/users HTTP/1.1
Host: api-server.com
Connection: close
Accept-Language: en-gb
Cookie: default=MTU0MDM3MTA0... /*COOKIE IS SET HERE*/
Dnt: 1
Origin: https://example.com
Referer: https://example.com/
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_0_1 like Mac OS X) 
            AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 
            Mobile/15E148 Safari/604.1
X-Cloud-Trace-Context: 38640...

火狐 (v14.0)

GET /example/users HTTP/1.1
Host: api-server.com
Connection: close
Accept-Language: en-gb
Origin: https://example.com
Referer: https://example.com/
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_0_1 like Mac OS X) 
            AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/14.0b12646 
            Mobile/16A404 Safari/605.1.15
X-Cloud-Trace-Context: cb5ff...

当我使用 fetch 发送请求时,我设置了选项 credentials: 'include' 但如您所见,第二次调用没有设置我需要的 cookie...

我错过了什么?

感谢您的帮助

【问题讨论】:

    标签: javascript reactjs cookies fetch


    【解决方案1】:

    我想你可能遇到了this issue

    关键点是:

    Safari 附带了一个保守的 cookie 策略,该策略将 cookie 写入仅限于用户选择(“导航到”)的页面。这种默认的保守策略可能会混淆尝试写入 cookie 并失败的基于框架的网站。

    一个稍微复杂的解决方法是使用 iframe 加载设置 cookie 的页面,而不是使用 JavaScript。 Read more about it here.

    根据您要实现的目标,也许 cookie 并不是您首先需要的。例如,当我遇到同样的问题时,我最终改用Fingerprintjs2——但我只想要用于遥测的cookie;指纹识别绝对不适合 cookie 可以涵盖的所有用例。

    【讨论】:

    • 但是 Safari 确实有效,它设置了 cookie。 Firefox 和 Chrome 没有!
    • 您应该知道,为 iPhone 编写的第 3 方浏览器本质上使用 Safari Mobile 渲染引擎的“可嵌入”版本——也就是说,如果您在 iPhone 上启动 Chrome / Firefox / Edge,它们本质上仍然是Safari Mobile,只是具有不同的 UI,并且对系统的访问可能比 Safari Mobile(第一方应用程序)本身更受限制。因此,如果您只在 iPhone 上遇到问题(这是我从您的原始问题中了解到的),即使仅在 3rd 方浏览器中,那么我建议的链接可能仍然值得一试:)
    猜你喜欢
    • 2017-04-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2018-12-21
    • 2013-02-20
    • 2018-06-12
    • 2011-11-03
    相关资源
    最近更新 更多