问题描述
我正在尝试在一些网站上设置从http到https的重定向。
我在Java中以编程方式进行此操作,因为我在同一个servlet容器/ Web应用程序中运行着许多网站,并且只有其中一部分连接到cloudflare,因此只有其中一些可以使用https。
编码似乎很简单:
String requestURLLower = req.getRequestURL().toString().toLowerCase();
if ( isCloudflareSite && requestURLLower.startsWith("http:")) {
StringBuilder requestURL = new StringBuilder(requestURLLower);
System.out.println("Got requrl lower " + requestURLLower + " scheme " +
req.getScheme() + " is secure " + req.isSecure());
String queryString = req.getQueryString();
if (queryString != null) {
requestURL.append('?').append(queryString);
}
String link = Strings.replace(requestURL.toString(), "http:", "https:");
System.out.println("RURLLOWEr redirecting to " + link + " from " +
requestURL);
res.setStatus(301);
res.setHeader( "Location", link);
return;
}
当我运行此代码时,浏览器重定向次数过多,并显示错误消息。
我在浏览器中输入的初始URL是https本身:https:
在我的浏览器中输入确切的网址后,程序的输出是:
Got requrl lower http://www.xxx.com.au/xxx scheme http is secure false
RURLLOWEr redirecting to https://www.xxx.com.au/xxx?page=hello from
http://www.xxx.com.au/xxx?page=hello
从一页加载开始,此输出重复了大约20次。
我是否在这里确实缺少一些明显的东西,还是Java没有检测到协议?
我唯一能想到的是,它与Cloudflare提供的https有关。
1楼
Cloudflare提供的SSL在用户和Cloudflare之间。 Cloudflare(使用“灵活的” https设置)实际上使用http连接到服务器。