Rumah >Java >javaTutorial >Mengapa HttpURLConnection Java Tidak Mengikuti HTTP ke HTTPS Redirects secara Lalai?

Mengapa HttpURLConnection Java Tidak Mengikuti HTTP ke HTTPS Redirects secara Lalai?

Patricia Arquette
Patricia Arquetteasal
2024-12-01 13:05:11744semak imbas

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

Isu Pengalihan Selamat dengan HTTPURLConnection

Di Java, HttpURLConnection menghadapi kesukaran apabila mengikuti ubah hala HTTP yang beralih daripada HTTP ke URL HTTPS. Tingkah laku ini, yang diperhatikan dalam senario tertentu, telah mengelirukan pembangun yang ingin memahami punca asas.

Untuk menggambarkan masalah, pertimbangkan coretan kod berikut:

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

Apabila menjalankan program ini dengan URL awal ditetapkan kepada "http://httpstat.us/301," output mendedahkan bahawa HttpURLConnection Java tidak mengikuti ubah hala ke "https://httpstat.us."

Memahami Tingkah Laku

Penjelasan untuk tingkah laku ini terletak pada cara Java mengendalikan ubah hala. Secara lalai, ubah hala diikuti hanya jika mereka menggunakan protokol yang sama. Sekatan ini dilaksanakan dalam kaedah followRedirect().

Adalah penting untuk ambil perhatian bahawa HTTPS, sambil meniru HTTP, dianggap sebagai protokol yang berbeza daripada HTTP dari perspektif protokol. Akibatnya, Java memerlukan kelulusan pengguna untuk mengikuti ubah hala dari HTTP ke HTTPS. Langkah berjaga-jaga ini perlu untuk melindungi daripada kemungkinan kebimbangan keselamatan.

Sebagai contoh, jika pelanggan dikonfigurasikan untuk pengesahan pelanggan automatik semasa menggunakan HTTP untuk penyemakan imbas tanpa nama, berikutan ubah hala HTTPS tanpa persetujuan pengguna yang jelas akan mendedahkan identiti pelanggan kepada pelayan.

Atas ialah kandungan terperinci Mengapa HttpURLConnection Java Tidak Mengikuti HTTP ke HTTPS Redirects secara Lalai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn