java是否在url中检测到错误的协议?

问题描述 投票:0回答:1

我正在尝试在我的一些网站上设置从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://www.xxx.com.au/xxx?page=hello

在我的浏览器中输入精确网址后,程序输出如下:

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有关。

java cloudflare
1个回答
0
投票

Cloudflare提供的SSL位于用户和Cloudflare之间。 Cloudflare(使用“灵活的”https设置)实际上使用http连接到服务器。

© www.soinside.com 2019 - 2024. All rights reserved.