request.getScheme()返回http而不是在java中返回https

function demo(request,response){ request.getScheme() is returning http instead of returning https. System.out.println(""+request.getScheme()); } 

输出:HTTP

– 从main方法调用上面的函数演示,但它打印http而不是它应该在互联网服务器上打印https。

请参阅答案https://stackoverflow.com/a/19599143/1524502 ,并注意有关作为反向代理或负载均衡器的问题。 最有可能的是,这是你的问题。

该问题的回答者建议使用

 request.getHeader("x-forwarded-proto") 

相反,尽管这取决于您的负载均衡器正确设置标头。

如果您的服务器在代理服务器后面运行,请确保设置了代理标头:

 proxy_set_header X-Forwarded-Proto $scheme; 

然后,为了获得正确的scheme您可以使用springframework的类:

 HttpRequest httpRequest = new ServletServerHttpRequest(request); //request is HttpServletRequest UriComponents uriComponents = UriComponentsBuilder.fromHttpRequest(httpRequest).build(); String scheme = uriComponents.getScheme(); // http/https