【生产问题】前端接口请求报blocked:mixed-content
事故现象
客户端反馈系统无法使用。打开页面很多内容无法显示。
f12 显示很多请求都失败了。
定位问题
客户咨询
客户反馈昨天 在nginx 上面配置了https证书。导致了http 请求无法访问。 客户已经在nginx上面配置了https。即 网页端的请求会重定向到https请求上面。那为啥还有 http请求呢?
代码查看
通过查看代码,目前这个系统是tomcat部署的,采用jsp 作为视图显示。
浏览器发送的请求,一般是请求jsp。 这个请求被nginx 重定向变为 https 是没有问题的。
但是 jsp 会发送 js css 等静态文件的请求以及 ajax 请求,这些请求 都是 http请求。目前出现的问题就是这些请求。
jsp 里面有封装请求的代码,如截图:
真正问题
如上面截图所示,真正问题原因是 因为 jsp里面的 request.getScheme() 获取到的是 http而不是https。
解决问题
方法一:
最开始我的想法是 在 request.getScheme() 后面加个s 。 即 request.getScheme()+“s”。这样粗暴的加个s。使 http 强行变成 https。但是这样的Jsp有很多,不方便维护。
方法二:
改tomcat 的配置。
如果使tomcat 6或以下:
配置Tomcat server.xml 的 Engine 模块下配置一个 Valve:
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
protocolHeader="X-Forwarded-Proto"
protocolHeaderHttpsValue="https"/>

如果使tomcat7 或以上
修改tomcat配置文件server.xml,增加 scheme=“https” secure=“true” 属性即可。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
scheme="https" secure="true"/>

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)