Maison >Java >javaDidacticiel >Pourquoi HttpURLConnection de Java ne suit-il pas les redirections HTTP vers HTTPS par défaut ?

Pourquoi HttpURLConnection de Java ne suit-il pas les redirections HTTP vers HTTPS par défaut ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-01 13:05:11749parcourir

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

Problèmes de redirection sécurisée avec HTTPURLConnection

En Java, HttpURLConnection rencontre des difficultés lors du suivi des redirections HTTP qui passent des URL HTTP aux URL HTTPS. Ce comportement, observé dans certains scénarios, a intrigué les développeurs cherchant à comprendre la cause sous-jacente.

Pour illustrer le problème, considérez l'extrait de code suivant :

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();
        }
    }
}

Lors de l'exécution de ce programme avec le URL initiale définie sur "http://httpstat.us/301", le résultat révèle que HttpURLConnection de Java ne suit pas la redirection vers "https://httpstat.us."

Comprendre le comportement

L'explication de ce comportement réside dans la façon dont Java gère les redirections. Par défaut, les redirections ne sont suivies que si elles utilisent le même protocole. Cette restriction est implémentée dans la méthode followRedirect().

Il est important de noter que HTTPS, bien qu'imitant HTTP, est considéré comme un protocole distinct de HTTP du point de vue du protocole. Par conséquent, Java nécessite l’approbation de l’utilisateur pour suivre une redirection de HTTP vers HTTPS. Cette précaution est nécessaire pour se protéger contre d'éventuels problèmes de sécurité.

Par exemple, si un client est configuré pour l'authentification automatique du client lors de l'utilisation de HTTP pour une navigation anonyme, suivre une redirection HTTPS sans le consentement explicite de l'utilisateur révélerait l'identité du client à le serveur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn