vue项目嵌入iframe后访问后端报错

项目场景:

最近的项目中,开发的项目中需要使用到另外的一个即时通讯im项目,当时使用ifram标签进行嵌入,跳转失败


问题描述:

在使用ifram进行嵌入后,刷新页面,ifram的地址会直接覆盖掉父类地址进行网页跳转


原因分析:


在嵌入的src地址为访问后端的jsp地址,jsp首行会判断windows是否为父类窗口,并进行窗口跳转,需要了解如下知识:
在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口。


解决方案:

将判断窗口的代码去掉即可在vue项目进行登陆显示

问题描述:

在完成上述的问题后,点击进行登陆跳转,显示500报错信息,因为访问的地址是外网正在使用项目的地址,是正常使用的。
直接浏览器地址访问链接是成功的,后来换firefox浏览器原页面也是没问题的,这才发现问题所在


原因分析:


百度后发现:
谷歌在80版本后重新恢复SameSite cookie策略吗,意味着,80版本后的谷歌浏览器会出现以上的问题

Chrome 80于今年2月份上线,谷歌就开始滚动推出SameSite更新,
通过cookies的发送机制进行了一系列新的调整更好的维护用户隐私和
安全。
谷歌这样做的目的不再默认用户携带cookie访问第三方网站。

关于samesite属性

SameSite 属性可以让 Cookie 在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)。 SameSite 可以有下面三种值:

Strict(严格的):仅允许一方请求携带 Cookie,即浏览器将只发送相同站点请求的 Cookie,即当前网页 URL 与请求目标 URL 完全一致。
Lax(松懈的):允许部分第三方请求携带 Cookie。不支持iframe
none:任何时候都允许发送cookie

梳理:

访问后端的地址后,因为iframe的地址和父级的地址不同源,后端返回给前端的cookie中没有设置samesite信息,导致前端使用cookie再次向后端发送请求时被谷歌浏览器拦截。


解决方案:

1,下载旧版本的谷歌浏览器或使用其他浏览器(不推荐)
2.设置谷歌浏览器,使其不拦截ifram标签的cookie(不推荐)
3.开发后端设定 Set-Cookie 为 SameSite=None; Secure(且可能要求必须为https方式)。
4.利用nginx进行同域代理

response.setHeader("Set-Cookie", "HttpOnly;Secure;SameSite=None");

使用https传输cookie。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值