Heim >Java >javaLernprogramm >Warum folgt Javas HttpURLConnection nicht standardmäßig HTTP-zu-HTTPS-Weiterleitungen?
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!