Heim > Backend-Entwicklung > C++ > Wie kann ich verhindern, dass die URL-Kodierung einen prozentual kodierten Schrägstrich in einer GET-Anfrage ändert?

Wie kann ich verhindern, dass die URL-Kodierung einen prozentual kodierten Schrägstrich in einer GET-Anfrage ändert?

Linda Hamilton
Freigeben: 2025-01-05 03:38:43
Original
638 Leute haben es durchsucht

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

Überwindung des Slash-URL-Kodierungsdilemmas bei GET-Anfragen

Beim Versuch, eine HTTP-GET-Anfrage an eine URL zu senden, die eine prozentkodierte URL enthält Schrägstrich (/), wie zum Beispiel „http://example.com//“, ein gängiger Ansatz ist die Verwendung der WebClient-Klasse als folgt:

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

Diese Methode führt jedoch zu einem unerwarteten Ergebnis. Der Schrägstrich wird während der Übertragung in einen zusätzlichen Schrägstrich umgewandelt, was dazu führt, dass die folgende Anfrage gesendet wird:

GET // HTTP/1.1
Host: example.com
Connection: Keep-Alive
Nach dem Login kopieren

Dieses Problem tritt auf, wenn OCSP über HTTP/GET verwendet wird, was die Übertragung eines tatsächlichen / anstelle von „/“ erfordert. ', um die Einhaltung des Protokolls sicherzustellen.

Eine mögliche Lösung

Obwohl nicht ideal, der folgende Codeausschnitt stellt eine Problemumgehung für das Problem dar:

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);
}
Nach dem Login kopieren

Diese Problemumgehung beinhaltet die Änderung der internen Flags des Uri-Objekts, um CanonicalPathAndQuery zu erzwingen und sicherzustellen, dass der Schrägstrich während der Übertragung erhalten bleibt.

Haftungsausschluss

Es ist wichtig zu beachten, dass die Kompatibilität dieses Ansatzes mit zukünftigen Versionen des Frameworks nicht gewährleistet ist. Gehen Sie beim Ändern des internen Klassenverhaltens immer mit Vorsicht vor.

Das obige ist der detaillierte Inhalt vonWie kann ich verhindern, dass die URL-Kodierung einen prozentual kodierten Schrägstrich in einer GET-Anfrage ändert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage