Rumah >pembangunan bahagian belakang >C++ >Mengapa Tanda Slash Pengekodan URL dalam Permintaan HTTP GET Menghasilkan Slash Berganda, dan Bagaimanakah Ini Boleh Dibetulkan?
Menyingkap Misteri Garis Slash Berkod URL dalam HTTP GET
Dalam usaha untuk mendapatkan data melalui HTTP GET, pembangun sering menghadapi cabaran menghantar garis miring berkod URL (/). Walau bagaimanapun, salah tanggapan biasa timbul apabila cuba menghantar aksara khusus ini.
Seperti yang digambarkan dalam kod contoh, hanya memasukkan / dalam rentetan URL tidak mencukupi. Sebaliknya, garis miring yang dikodkan ditafsirkan secara salah sebagai dua garis miring, yang membawa kepada permintaan dihantar sebagai:
GET // HTTP/1.1 Host: example.com Connection: Keep-Alive
Tingkah laku ini melanggar protokol OCSP, yang mewajibkan penghantaran aksara / sebenar dan bukannya '/'.
Lencongan ke yang Tidak Lazim
Untuk menangani isu ini, penyelesaian telah muncul yang menggunakan pengubahsuaian langsung objek Uri. Dengan mengatasi bendera PathAndQuery secara paksa, kami menipu rangka kerja untuk mengenali pengekodan URL yang kami maksudkan.
Uri uri = new Uri("http://example.com/%2F"); ForceCanonicalPathAndQuery(uri); using (WebClient webClient = new WebClient()) { webClient.DownloadData(uri); } void ForceCanonicalPathAndQuery(Uri uri){ string paq = uri.PathAndQuery; // need to access PathAndQuery FieldInfo flagsFieldInfo = typeof(Uri).GetField("m_Flags", BindingFlags.Instance | BindingFlags.NonPublic); ulong flags = (ulong) flagsFieldInfo.GetValue(uri); flags &= ~((ulong) 0x30); // Flags.PathNotCanonical|Flags.QueryNotCanonical flagsFieldInfo.SetValue(uri, flags); }
Walaupun kaedah ini jauh dari ideal, kaedah ini membolehkan pembangun menghantar permintaan HTTP GET dengan garis miring berkod URL, memuaskan hati keperluan protokol tertentu seperti OCSP.
Atas ialah kandungan terperinci Mengapa Tanda Slash Pengekodan URL dalam Permintaan HTTP GET Menghasilkan Slash Berganda, dan Bagaimanakah Ini Boleh Dibetulkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!