chrome升级83版后https登陆报错问题
问题原因:
chrome升级83版后,网站登录出现了问题,具体表现为,index.js中使用了jquery.form.js的ajaxform的表单提交插件,在https 环境下ajax请求https的接口进行登录,结果显示请求失败,查看接口状态为canceled,请求在请求过程中被终止,但是后台接口已经执行了。
版本:83.0.4103.61
排查问题:
1. 复现问题,发现只有最新的83版chrome会有这个问题
2. https请求https出现问题,http请求https没有问题,http请求http没有问题
3. 查看请求代码,排查后发现代码中,https环境下,调用ajaxform方法时,使用了iframe:true的属性
4. 查看插件源码,发现如下逻辑
这段逻辑是,如果iframe参数为true,会在页面中插入一个iframe,并将iframe的src设置为javascript:false;,反观如果是http请求的话 src设置为about:blank.
5. 手动将iframe的src改为about:blank,请求成功。总结是谷歌这次的更新对iframe的src值为javascript:false;的支持不友好了
6. 查看jquery.form.js的github 仓库,发现凡是使用了这个插件的都在83版chrome中出现了问题。对此开发者做了修正,只需下载最新版本插件即可。经过测试,发现使用旧的代码逻辑 使用新的插件,请求https可以正常访问接口了
7. 另外,谷歌最近又更新了一个小版本(83.0.4103.97),在此版本中,貌似修复了以上的问题,使用旧版插件及逻辑也可以正常请求。
总结:
谷歌此次小的版本升级修复了这个问题,恢复以前的逻辑后,用户在最新版本谷歌浏览器不会出现问题,另外更新了插件,用户如果不升级浏览器,也不会出现以上的问题了。
参考资料:
《html标准》
《jquery.form.jscan仓库议题》
https://github.com/jquery-form/form/issues/571
https://github.com/jquery-form/form/pull/572