Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menghalang Pengekodan URL daripada Mengubah Slash Berkod Peratusan dalam Permintaan GET?

Bagaimanakah Saya Boleh Menghalang Pengekodan URL daripada Mengubah Slash Berkod Peratusan dalam Permintaan GET?

Linda Hamilton
Linda Hamiltonasal
2025-01-05 03:38:43645semak imbas

How Can I Prevent URL Encoding from Modifying a Percent-Encoded Slash in a GET Request?

Mengatasi Dilema Pengekodan URL Slash semasa Permintaan GET

Dalam percubaan untuk menghantar permintaan HTTP GET ke URL yang mengandungi peratusan yang dikodkan slash (/), seperti "http://example.com//," pendekatan biasa ialah menggunakan kelas WebClient sebagai berikut:

using (WebClient webClient = new WebClient())
{
  webClient.DownloadData("http://example.com/%2F");
}

Walau bagaimanapun, kaedah ini menghasilkan hasil yang tidak dijangka. Watak slash akan berubah menjadi slash tambahan semasa penghantaran, yang membawa kepada permintaan berikut dihantar:

GET // HTTP/1.1
Host: example.com
Connection: Keep-Alive

Isu ini timbul apabila menggunakan OCSP melalui HTTP/GET, yang memerlukan penghantaran / sebenar bukan '/ ' untuk memastikan pematuhan protokol.

Penyelesaian Berpotensi

Walaupun tidak ideal, coretan kod berikut membentangkan penyelesaian untuk isu ini:

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

Penyelesaian ini melibatkan pengubahsuaian bendera dalaman objek Uri untuk memaksa CanonicalPathAndQuery, memastikan bahawa aksara slash dikekalkan semasa penghantaran.

Penafian

Adalah penting untuk ambil perhatian bahawa pendekatan ini tidak dijamin serasi dengan versi rangka kerja akan datang. Sentiasa teruskan dengan berhati-hati apabila mengubah suai gelagat kelas dalaman.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghalang Pengekodan URL daripada Mengubah Slash Berkod Peratusan dalam Permintaan GET?. 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