ホームページ >Java >&#&チュートリアル >Java の HttpURLConnection がデフォルトで HTTP から HTTPS へのリダイレクトに従わないのはなぜですか?
HTTPURLConnection の安全なリダイレクトの問題
Java では、HTTP から HTTPS URL に遷移する HTTP リダイレクトをたどるときに、HttpURLConnection で問題が発生します。特定のシナリオで観察されるこの動作は、根本的な原因を理解しようとしている開発者を困惑させています。
問題を説明するには、次のコード スニペットを考えてみましょう。
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 リダイレクトに従うと、クライアントの ID が明らかになります。サーバー。
以上がJava の HttpURLConnection がデフォルトで HTTP から HTTPS へのリダイレクトに従わないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。