解决chrome升级后跨域跳转cookie无法携带问题

本文详细记录了作者在使用Chrome浏览器不同版本时遇到的跨域Cookie设置问题。问题源于Chrome78之后Cookie的SameSite属性默认值改变,导致iframe无法携带Cookie。解决方案是通过禁用特定Chrome flags或修改启动参数。文章解释了Cookie的SameSite属性的三种模式及其安全作用,并提供了问题的根本原因分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天加班被一个问题困住了好久

问题描述

与同事调cas登录,用的方式为使用iframe访问后台一个接口,为了让iframe自动跳转到cas最终带回cookie,这样后边的接口都可以带着cookie进行访问了。但问题是我机器一直在页面和cas登录页面来回跳,但我同事的机器没有问题。

问题定位

我的机器是chrome92,我同事的机器是chrome64,通过对比两个人的网络请求参数发现,我的iframe请求跳转到cas登录页面没有带着cookie信息,而我同事的带着cookie信息
请添加图片描述

问题解决

现在知道是什么原因导致的了,现在来处理一下。通过网络查询,chrome 78~91之间的版本可以通过将SameSite by default cookiesCookies without SameSite must be secure(chrome://flags/)这两项设置为disable来解决。恰巧我的版本是92,网有说可以通过在快捷方式上增加--disable-features=SameSiteByDefaultCookies参数来解决。亲试成功了!!!

原因

应用网友[https://juejin.cn/post/6844904088774115341]的描述:

Cookie 的SameSite属性用来限制第三方 Cookie,从而减少安全风险。它可以设置三个值:

Strict

Strict最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。
Set-Cookie: CookieName=CookieValue; SameSite=Strict;
复制代码这个规则过于严格,可能造成非常不好的用户体验。比如,当前网页有一个 GitHub 链接,用户点击跳转就不会带有 GitHub 的 Cookie,跳转过去总是未登陆状态。

Lax

Lax规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。
Set-Cookie: CookieName=CookieValue; SameSite=Lax;
复制代码设置了Strict或Lax以后,基本就杜绝了 CSRF 攻击。当然,前提是用户浏览器支持 SameSite 属性。

None

网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。
Set-Cookie: widget_session=abc123; SameSite=None; Secure

chrome升级到80版本之后(准确的说是78版本之后),cookie的SameSite属性默认值由None变为Lax,这个才是本次事件的根本原因。


参考资料:
Chrome浏览器版本升级带来的跨域访问问题
chrome浏览器92版本SameSite by default cookies被移除后的解决方案,Chrome中跨域请求无法携带Cookie的解决方案

<think>首先,用户的问题是:“请问ChromeHTTPS跳转到HTTP是否会强制携带http协议如何处理”。用户想了解Chrome浏览器在从HTTPS页面跳转到HTTP页面时的行为机制,以及如何处理强制携带HTTP的问题。从系统级指令中,我需要遵循规则:所有行内数学表达式用$...$,独立公式用$$...$$,确保LaTeX语法正确,使用中文回答,生成相关问题,并在回答中引用段落末尾添加引用标识。参考提供的引用:-引用[^1]:讨论了HSTS(HTTPStrictTransportSecurity),它强制浏览器使用HTTPS与站点通信。服务器通过响应头设置Strict-Transport-Security字段,浏览器会在期限内使用HTTPS发起请求。-引用[^2]:提到了HTTP/2和QUIC协议,但似乎不直接相关。-引用[^3]:解释了OPTIONS请求在POST请求中的作用,涉及CORS机制。-引用[^4]:用比喻解释了Session机制,但不太相关。用户的问题焦点是ChromeHTTPS跳转到HTTP的行为,以及如何处理强制携带HTTP的问题。核心是HSTS机制,因为它影响浏览器如何处理HTTP和HTTPS重定向。关键点:-在HSTS启用的情况下,浏览器会强制使用HTTPS,即使用户尝试访问HTTP版本。-引用[^1]中提到:HSTS强制客户端使用HTTPS与服务器创建连接。浏览器接收到Strict-Transport-Security响应头后,在一定期限内对该网站的任何请求都会以HTTPS发起(浏览器内部307跳转)。所以,对于用户的问题:-ChromeHTTPS跳转到HTTP:如果目标站点启用了HSTS,浏览器不会允许HTTP请求;它会强制使用HTTPS。-如何处理强制携带HTTP的问题:如果用户或开发者需要允许HTTP访问,他们可能需要禁用HSTS或配置服务器不发送HSTS头。但这不是推荐做法,因为HSTS是为了安全。现在,构建回答结构:1.**解释行为机制**:使用中文清晰描述Chrome在从HTTPS页面跳转到HTTP页面时的行为。2.**基于引用**:引用[^1]来支持解释,并在末尾添加引用标识。3.**提供解决方案**:如何处理问题,比如在开发或测试环境中。4.**生成相关问题**:在回答末尾添加相关问题。回答结构:-开头直接回答问题。-详细解释机制,包括HSTS的作用。-建议处理方法。-以相关问题结束。确保语言专业、友好。最终回答大纲:1.引言:简要回答Chrome的行为。2.详细机制:解释HSTS如何工作,引用[^1]。3.如何处理:提供实际步骤。4.相关问题:生成几个相关问题。</think>### Chrome浏览器从HTTPS跳转到HTTP的行为机制及处理方法 用户的问题涉及Chrome浏览器在从HTTPS页面跳转到HTTP页面时的行为机制,特别是是否会“强制携带HTTP协议”,以及如何处理相关问题。核心机制与HSTS(HTTP Strict Transport Security)安全策略相关,我将基于参考引用逐步解释。 #### 1. **ChromeHTTPS跳转到HTTP的行为机制** - **是否会强制携带HTTP协议?** 在大多数情况下,Chrome浏览器**不会允许从HTTPS页面直接跳转到HTTP页面**。这是因为HSTS机制会强制浏览器使用HTTPS进行所有通信。具体行为如下: - 如果目标网站启用了HSTS(通过服务器响应头设置`Strict-Transport-Security`),Chrome会在浏览器内部自动将HTTP请求重定向到HTTPS(使用307内部跳转),而不会直接发起HTTP请求[^1]。 - 例如,假设用户从`https://example.com`页面点击一个指向`http://target.com`的链接: - Chrome会检查`target.com`是否在HSTS预加载列表或已缓存HSTS策略中。 - 如果是,浏览器会直接发起HTTPS请求到`https://target.com`,跳过HTTP版本。 - 如果`target.com`未启用HSTS,Chrome可能允许跳转到HTTP,但这会暴露安全风险(如中间人攻击),因此浏览器通常会警告用户或阻止加载。 - 关键点:HSTS旨在防止“降级攻击”,即防止流量被劫持后以明文HTTP传输。引用[^1]中强调:“HSTS强制客户端使用HTTPS与服务器创建连接...浏览器接收到这样的信息之后,在一定期限内对该网站的任何请求都会以HTTPS发起(浏览器内部307跳转),而不会以HTTP发起再由服务器重定向到HTTPS”[^1]。 - **数学表达示例**: 在安全分析中,降级攻击的风险可以用概率模型描述。设$P_d$表示降级攻击成功的概率,当未启用HSTS时,$P_d$较高;启用HSTS后,$P_d \approx 0$,因为浏览器强制HTTPS。这基于以下不等式: $$ P_d = f(\text{HTTP使用频率}) \times \text{劫持风险} $$ 其中HSTS通过减少HTTP使用频率来降低$P_d$。 #### 2. **如何处理强制携带HTTP的问题** 如果您在开发、测试或特定场景中需要允许从HTTPS跳转到HTTP(例如,测试HTTP-only的旧系统),以下是可行的处理方法。但请注意,**强制使用HTTP不是推荐的安全实践**,因为这会增加数据泄露风险。优先考虑迁移到HTTPS。 - **方法1:禁用HSTS在浏览器端(临时测试)** - **步骤**: 1. 在Chrome地址栏输入`chrome://net-internals/#hsts`。 2. 在“Delete domain security policies”部分,输入目标名(如`example.com`),点击“Delete”移除HSTS缓存。 3. 重启Chrome后,尝试从HTTPS页面跳转到HTTP链接。 - **注意**:此方法仅适用于本地测试,且HSTS策略可能从服务器重新加载。不适用于生产环境。 - **方法2:配置服务器端HSTS策略** - 如果您控制目标服务器,可以调整或移除HSTS响应头: - 移除`Strict-Transport-Security`头:在服务器配置中(如Apache或Nginx),删除或注释掉相关设置。 - 或缩短HSTS有效期:例如,设置`max-age=0`,使策略立即失效。 - 示例Nginx配置: ```nginx # 移除HSTS头 # add_header Strict-Transport-Security "max-age=0;"; ``` - **注意**:这会使站点易受攻击,仅在开发环境中使用。 - **方法3:使用开发者工具或扩展程序** - 在Chrome开发者工具(F12打开)中: - 在“Network”标签,禁用“Disable cache”或模拟无HSTS环境。 - 或使用扩展如“HSTS Super Cookie Opt-out”来管理HSTS策略。 - 对于问题(如引用[^3]提到的OPTIONS请求),确保服务器响应包含`Access-Control-Allow-Origin: *`以允许混合协议请求。 - **最佳实践**: 始终优先使用HTTPS。如果必须处理HTTP,建议: - 在服务器端设置HTTP到HTTPS的301重定向,避免用户手动跳转。 - 监控浏览器控制台错误(如“Mixed Content”警告),并使用工具如Lighthouse进行安全审计。 #### 总结 ChromeHTTPS跳转到HTTP时,会因HSTS机制强制使用HTTPS,以防止安全漏洞。处理强制携带HTTP的问题需谨慎操作,仅在测试环境中实施。安全第一,推荐全面升级HTTPS[^1]。 如果您有更多具体场景(如特定网站或错误代码),我可以提供更针对性的建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值