记一次系统集成问题定位

     最近与其他系统集成过程中,遇到一个奇怪问题。问题如下:

     集成的系统通过NGINX请求代理转发被集成的系统请求,保证请求同源。其配置如下:
  

location /abc {
    proxy_pass  http://www.abc.com/abc/
}

     然后展示页面通过iframe集成被集成系统的URL,如https://www.bing.com/abc。

     在测试过程中发现被集成系统在IFrame显示一片空白,页面展示不正常,但是将被集成系统URL(https://www.bing.com/abc)放入到地址栏,页面展示正常。。。而且测试过程中发现IE正常加载,但是Chrome展示不出来。。。

    对于IE正常,Chrome显示不出来,第一反应就是肯定是触发了Chrome的安全机制,导致页面没有正常加载,果然发现Chrome地址栏右上角有个告警提醒,不安全的脚步执行提示,点击加载不安全的脚步,页面就正常了。。。怎么正常的系统请求就被警告不安全了呢?总不能让用户每次手工处理这种阻止吧???如果真敢这么做,系统也到了寿终正寝了。

    通过F12调试模式下,发现console下面出现红色的错误提示,如下:

Mixed Content: The page at  https://www.bing.com/abc was loaded over HTTPS,but requested an insecure resource 'http://www.bing.com/abc/home/#/home'. This request has been blocked; the content must be served over HTTPS.

    通过Google搜索,混合内容安全策略,详细介绍可以看https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content?hl=zh-cn

     介绍中说 混合内容在以下情况下出现:初始HTML内容通过安全的HTTPS连接加载,但其他资源(例如,图像、视频、样式表、脚步)则通过不安全的HTTP连接加载。之所以称为混合内容,是因为同时加载了HTTP和HTTPS内容以显示同一个页面,且通过HTTPS加载的初始请求是安全的。现代浏览器会针对此类型的内容显示警告,以像用户表明此页面包含不安全的资源。

     根据介绍发现错误提示中,初始化内容加载为https://www.bing.com/abc,但是存在请求http://www.bing.com/abc/home/#/home,使用了http,导致这个请求被阻止,页面加载不出来。为什么会突然由HTTPS转成HTTP呢?

    根据请求集成方式,集成系统使用的就是HTTPS呀,应该不会转成HTTP来发送请求,难道集成系统配置错了么???根据沟通发现,所有被集成的系统配置都是这么配置,而且的确NGINX配置没有发现什么问题,就简单的请求转发。怎么突然就转成HTTP了呢???

    再看看被阻止的请求http://www.bing.com/abc/home/#/home,这个是被集成系统产生的地址,通过审视被集成系统NGINX配置,发现如下配置:  

rewrite ^/abc/$ /abc/home/#/home redirect;

     原来被集成系统,将/abc/的请求重定向了,重定向到/abc/home/#/home路径,使其加载指定的页面。被集成系统使用的是HTTP请求,故在重定向的时候,iframe页面就变成了HTTP请求http://www.bing.com/abc/home/#/home,请求被阻止了。而在浏览器地址栏直接输入的时候,之所以正常展示,应该是Chrome自动将HTTP请求转换成了HTTPS了。

     原因找到了,我们就修复这个问题吧,既然NGINX配置使用相对路径导致协议变换,那我们就使用绝对路径吧,如下:

rewrite ^/abc/$ https://www.bing.com/abc/home/#/home redirect;

    这时再测试,系统OK。

    上述只是针对遇到的混合内容请求被阻止的情况的解决,不是绝对的解决方式,还是得具体问题具体分析了。不过针对这种情况,F12能够看到被阻止的内容,然后再根据具体内容具体分析吧。。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值