放那记录一次坑爹的经历。在开发的过程中,项目应用了wujie微前端,于是出现了以下的问题:
我在访问基座资源页面的时候,一切正常,当我切到子应用路由的时候,页面一直加载。控制台报错:
ixed Content: The page at 'https://yourdomin/xxx/#/llm/experience' was loaded over HTTPS, but requested an insecure frame 'http://yourdomin/xxx#/'. This request has been blocked; the content must be served over HTTPS.
发现是在基座访问时,路由有一层重定向,把原本属于https的资源转成了http,然而内部的子应用又是https的,所以出现了访问不一致的情况。
解决办法:
方案一(nginx):
在基座的,nginx 里header中加入 Upgrade-Insecure-Requests,会告诉浏览器可以把所属本站的所有 http 连接升级为 https 连接,外站请求保持默认
add_header Content-Security-Policy “upgrade-insecure-requests”;
方案二(index.html):
在基座的index.html入口文件添加以下头
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
方案一、二弊端,对于私有化部署场景支持的不好,私有化部署场景大多是http开头的,不会升级成https。所以经实际验证,部署时如果发现有问题,可以将这行配置删掉即可解决问题
方案三(运维层面解决路由被重定向的问题):
因为目前/会被默认重定向,这个过程中https被转为了http,而子应用并未被转发,子应用https,主应用变成了http,导致了问题出现