解决request.getScheme()无法获取https
多多洛
网站最开始使用的是http,后来由于开发小程序需要支持https,于是申请了免费的https证书,然后在nginx做了http强制跳转到https,本来一切看起来很美好,浏览器也带了令人喜感的绿色锁图标。但是在使用过程中发现,又时候https无法访问,证书不被浏览器信任,有时候又是正常的,试了很多方法都没发解决,最后只能放弃,将强制跳转去掉,但是网站的静态文件都是使用的绝对路径,那么就要根据用户请求来获取完整的域名,然后通过
String scheme = request.getScheme();
String serverName = request.getServerName();
String basePath = scheme + "://" + serverName + "/";
这种方式获取绝对路径,但是如果是https请求获取到的还是http,在https请求的时候静态资源还是使用的http,这样就导致网站的样式都无法加载。最后找到的解决方案是在nginx上做下配置即可
在http请求和https的location中都分别加上header信息,直接写http或者https即可

location / { 
 proxy_set_header X-Forwarded-Scheme  http;
}  

location / { 
 proxy_set_header X-Forwarded-Scheme  https;
} 
然后在代码中这样获取
String scheme = request.getHeader("X-Forwarded-Scheme");
String serverName = request.getServerName();
String basePath = scheme + "://" + serverName + "/";
这样就可以获取到项目的完整的域名信息了。
然后在页面上直接使用域名的完整路径来请求资源了。
 
ps:之前我是直接在页面上固定写死,固定写的http://www.19shusheng.com/xxxx/资源文件
这样如果是https请求,静态资源文件都无法获取,所以这个域名通过用户请求来获取动态获取,就可以解决静态资源的问题。
 
喜欢 |