HTTP から HTTPS への HTTP リダイレクトにより接続エラーが発生する
Java の HttpURLConnection を使用して HTTP から HTTPS へのリダイレクトをたどろうとすると、予期せず失敗する可能性があります失敗。この問題は、HttpURLConnection の followRedirect() メソッドが同じプロトコル内のリダイレクトのみに従うために発生します。
提供されたコードでは、「http://httpstat.us/301」に対してリクエストが行われ、301 Moved が返されます。 URL の HTTPS バージョンへのリダイレクトを示す永続的な応答。ただし、HttpURLConnection はこのリダイレクトに従いません。
これはなぜ発生しますか? HTTP プロトコル仕様では、HTTP と HTTPS は別個のプロトコルとみなされます。 HTTPS は HTTP を厳密に反映していますが、HTTP フレームワーク内では公式に認識されていません。したがって、HttpURLConnection は、追加の構成を行わなくても、セキュリティ上の理由から HTTPS を別個のプロトコルとして扱うように設計されています。
ユーザーの同意なしに HTTP と HTTPS の間でリダイレクトを行うと、セキュリティ リスクが生じる可能性があります。たとえば、HTTP 接続に対してクライアント認証が自動的に有効になる可能性がありますが、ユーザーは匿名で閲覧することを意図している可能性があります。接続が HTTPS リダイレクトに自動的に従う場合、ユーザーの ID が誤ってサーバーに公開される可能性があります。
そのため、セキュリティを維持するために、HttpURLConnection はデフォルトで HTTP から HTTPS へのリダイレクトに従いません。この動作は無効にできません。Java プログラムで HTTP リダイレクトを使用する場合は、この制限に注意することが重要です。
以上がJava の HttpURLConnection が HTTP から HTTPS へのリダイレクトに従わないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。