Heim >Java >javaLernprogramm >Warum folgt Javas HttpURLConnection nicht standardmäßig HTTP-zu-HTTPS-Weiterleitungen?

Warum folgt Javas HttpURLConnection nicht standardmäßig HTTP-zu-HTTPS-Weiterleitungen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-01 13:05:11744Durchsuche

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

Probleme bei der sicheren Umleitung mit HTTPURLConnection

In Java stößt HttpURLConnection auf Schwierigkeiten, wenn HTTP-Weiterleitungen verfolgt werden, die von HTTP- zu HTTPS-URLs wechseln. Dieses in bestimmten Szenarien beobachtete Verhalten hat Entwickler verwirrt, die die zugrunde liegende Ursache verstehen wollen.

Um das Problem zu veranschaulichen, betrachten Sie den folgenden Codeausschnitt:

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

Wenn Sie dieses Programm mit dem ausführen Wenn die ursprüngliche URL auf „http://httpsstat.us/301“ festgelegt ist, zeigt die Ausgabe, dass Javas HttpURLConnection der Umleitung zu nicht folgt „https://https://hipstat.us.“

Verstehen des Verhaltens

Die Erklärung für dieses Verhalten liegt in der Art und Weise, wie Java mit Weiterleitungen umgeht. Standardmäßig werden Weiterleitungen nur dann befolgt, wenn sie dasselbe Protokoll verwenden. Diese Einschränkung ist in der Methode followRedirect() implementiert.

Es ist wichtig zu beachten, dass HTTPS zwar HTTP nachahmt, aus Protokollperspektive jedoch als ein von HTTP verschiedenes Protokoll betrachtet wird. Daher erfordert Java die Zustimmung des Benutzers, um einer Umleitung von HTTP zu HTTPS zu folgen. Diese Vorsichtsmaßnahme ist zum Schutz vor potenziellen Sicherheitsbedenken erforderlich.

Wenn ein Client beispielsweise für die automatische Client-Authentifizierung konfiguriert ist, während HTTP für anonymes Surfen verwendet wird, würde das Befolgen einer HTTPS-Umleitung ohne ausdrückliche Zustimmung des Benutzers die Identität des Clients preisgeben der Server.

Das obige ist der detaillierte Inhalt vonWarum folgt Javas HttpURLConnection nicht standardmäßig HTTP-zu-HTTPS-Weiterleitungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn