【生产问题】前端接口请求报blocked:mixed-content

事故现象

客户端反馈系统无法使用。打开页面很多内容无法显示。
f12 显示很多请求都失败了。
【生产问题】前端接口请求报blocked:mixed-content_第1张图片

定位问题

客户咨询

客户反馈昨天 在nginx 上面配置了https证书。导致了http 请求无法访问。 客户已经在nginx上面配置了https。即 网页端的请求会重定向到https请求上面。那为啥还有 http请求呢?

代码查看

通过查看代码,目前这个系统是tomcat部署的,采用jsp 作为视图显示。
浏览器发送的请求,一般是请求jsp。 这个请求被nginx 重定向变为 https 是没有问题的。
但是 jsp 会发送 js css 等静态文件的请求以及 ajax 请求,这些请求 都是 http请求。目前出现的问题就是这些请求。
jsp 里面有封装请求的代码,如截图:
【生产问题】前端接口请求报blocked:mixed-content_第2张图片

真正问题

如上面截图所示,真正问题原因是 因为 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"/>  

【生产问题】前端接口请求报blocked:mixed-content_第3张图片

如果使tomcat7 或以上

修改tomcat配置文件server.xml,增加 scheme=“https” secure=“true” 属性即可。

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" 
    scheme="https" secure="true"/>

【生产问题】前端接口请求报blocked:mixed-content_第4张图片

你可能感兴趣的:(java基础,nginx栏目,tomcat,java)