2021-11-09 16:00:20
Chrome中跨域请求无法携带Cookie的解决方案
在Chrome浏览器中,由于安全策略的升级,跨域请求在默认情况下可能无法携带Cookie。这尤其在使用iframe跨系统展示页面时表现得尤为明显,如单点登录(SSO)场景中经常遇到此类问题。以下是根据不同Chrome版本提供的解决方案:
1. 低于91版本的Chrome浏览器对于低于91版本的Chrome浏览器,可以通过修改浏览器内部设置来解决跨域请求无法携带Cookie的问题:
步骤:
在Chrome浏览器中输入地址栏chrome://flags/#same-site-by-default-cookies。
将SameSite by default cookies设置为Disabled。
重启浏览器后运行项目。
说明:该设置默认情况下会将未指定SameSite属性的请求看做SameSite=Lax来处理,禁用后,跨域请求将能够携带Cookie。
从91版本开始,Chrome移除了上述设置选项,因此需要采用其他方法:
Windows系统:
找到Chrome快捷方式的属性。
在目标字段后添加--disable-features=SameSiteByDefaultCookies。
点击确定,关闭所有Chrome窗口(包括Chrome浏览器进程)后重启浏览器。
注意:该方法可能会对开发调试造成不便,如JS中的debugger无法被正确定位。
Mac系统:
关闭所有浏览器窗口并完全退出浏览器。
打开终端,输入以下命令之一(根据使用的浏览器选择):
对于Chrome浏览器:open -a "Google Chrome" --args --disable-features=SameSiteByDefaultCookies
对于Chromium版Edge浏览器:open -a "Microsoft Edge" --args --disable-features=SameSiteByDefaultCookies
如果命令执行后问题依旧,尝试重启浏览器后再次执行命令。
图片示例:

从94版本开始,通过命令行禁用SameSite默认值的方式将被移除,因此上述方案将不再适用。此时,可以考虑以下替代方案:
使用代理工具:通过nginx等代理工具或软件,将跨域请求转为非跨域请求。这种方法需要配置代理服务器,并修改前端请求的URL,使其指向代理服务器而非直接跨域访问。
修改后端设置:如果可能,修改后端服务器的设置,允许跨域请求携带Cookie。这通常涉及设置CORS(跨源资源共享)策略,并明确指定哪些源可以访问Cookie。
使用其他浏览器:作为临时解决方案,可以考虑使用其他浏览器(如360浏览器等),这些浏览器可能未实施与Chrome相同的严格安全策略。
Chrome浏览器的安全策略升级对跨域请求携带Cookie造成了影响,但根据不同的浏览器版本,可以采取不同的解决方案来应对。对于开发者而言,了解并适应这些变化是确保应用正常运行的关键。同时,也建议持续关注Chrome浏览器的更新动态,以便及时调整应对策略。