当访问的的服务器不地址不在本地时,会触发Chrome的安全机制,即出现跨域问题(访问的域名需要和当前域名一致)。
通常的解决方案有两种:
1.前端通过代理解决
通过配置前端代理,使接口通过代理服务器转发从而避免触发安全机制。或者配置前端Nginx(该方案笔者未验证)。
2.后端通过特殊配置
后端通过给http协议头添加一些字段,这些字段表示允许跨域。来间接的解决问题。比如在node中express框架,提供了一个这样的中间件解决问题CORS。
最近重新运行项目时发现解决方案1失效(原因未知),找寻其他方案无果后决定修改Chrome安全策略,一劳永逸。
终极解决方案:修改安全策略
第一步:
任意地方创建名为MyChromeDevUserData
文件夹,用于保存数据。
第二步:
命令行输入open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir=XXX
其中XXX
是刚才的文件夹地址,把文件夹拖到命令行中就会自动显示地址。
注意,此时的命令是打开 临时 关闭了安全策略的Chrome应用,原来的Chrome不受影响,不使用了关闭这个Chrome即可,无需重新恢复安全策略。下次再想用重新按照命令启动即可。
第三步:
处理Cookie,如果项目中不使用Cookie则不需处理(浏览器会默认处理http在header
中添加的setCookie字段,并在发起请求时带上,常见的使用场景是验证码图片)。
地址栏输入chrome://flags/
打开设置,搜索SameSite
,
修改 SameSite by default cookies 为 disabled,
修改 Cookies without SameSite must be secure 为 disabled,
修改完成后右下角会弹出一个Relaunch按钮,点击即可。
注意,这个设置是全局配置的,也会在原来的Chrome上生效,所以使用完后需要修改为原来的值default
。