首页 > Java > java教程 > 为什么 Java 的 HttpURLConnection 默认不遵循 HTTP 到 HTTPS 重定向?

为什么 Java 的 HttpURLConnection 默认不遵循 HTTP 到 HTTPS 重定向?

Patricia Arquette
发布: 2024-12-01 13:05:11
原创
747 人浏览过

Why Doesn't Java's HttpURLConnection Follow HTTP to HTTPS Redirects by Default?

HTTPURLConnection 的安全重定向问题

在 Java 中,HttpURLConnection 在执行从 HTTP 转换为 HTTPS URL 的 HTTP 重定向时会遇到困难。在某些情况下观察到的这种行为使寻求理解根本原因的开发人员感到困惑。

为了说明该问题,请考虑以下代码片段:

import java.net.URL;
import java.net.HttpURLConnection;
import java.io.InputStream;

public class Tester {

    public static void main(String argv[]) throws Exception{
        InputStream is = null;

        try {
            String httpUrl = "http://httpstat.us/301";
            URL resourceUrl = new URL(httpUrl);
            HttpURLConnection conn = (HttpURLConnection)resourceUrl.openConnection();
            conn.setConnectTimeout(15000);
            conn.setReadTimeout(15000);
            conn.connect();
            is = conn.getInputStream();
            System.out.println("Original URL: "+httpUrl);
            System.out.println("Connected to: "+conn.getURL());
            System.out.println("HTTP response code received: "+conn.getResponseCode());
            System.out.println("HTTP response message received: "+conn.getResponseMessage());
       } finally {
            if (is != null) is.close();
        }
    }
}
登录后复制

当使用初始 URL 设置为“http://httpstat.us/301”,输出显示 Java 的 HttpURLConnection 不遵循重定向到“https://httpstat.us。”

理解行为

此行为的解释在于 Java 处理重定向的方式。默认情况下,仅当它们使用相同协议时才会遵循重定向。此限制是在 followRedirect() 方法中实现的。

需要注意的是,HTTPS 虽然模仿 HTTP,但从协议角度来看,被视为与 HTTP 不同的协议。因此,Java 需要用户批准才能遵循从 HTTP 到 HTTPS 的重定向。为了防止潜在的安全问题,此预防措施是必要的。

例如,如果客户端在使用 HTTP 进行匿名浏览时配置为自动客户端身份验证,则在未经用户明确同意的情况下执行 HTTPS 重定向将会泄露客户端的身份服务器。

以上是为什么 Java 的 HttpURLConnection 默认不遵循 HTTP 到 HTTPS 重定向?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板