Heim >Backend-Entwicklung >C++ >Warum führen URL-Codierungs-Schrägstriche in HTTP-GET-Anfragen zu doppelten Schrägstrichen und wie kann dies behoben werden?

Warum führen URL-Codierungs-Schrägstriche in HTTP-GET-Anfragen zu doppelten Schrägstrichen und wie kann dies behoben werden?

DDD
DDDOriginal
2024-12-31 15:51:09599Durchsuche

Why Does URL-Encoding Slashes in HTTP GET Requests Result in Double Slashes, and How Can This Be Fixed?

Enthüllung des Geheimnisses URL-codierter Schrägstriche in HTTP GET

Bei der Suche nach Daten über HTTP GET stehen Entwickler häufig vor der Herausforderung des Versendens von URL-codierten Schrägstrichen (/). Beim Versuch, dieses bestimmte Zeichen zu übertragen, kommt es jedoch häufig zu einem Missverständnis.

Wie im Beispielcode dargestellt, reicht es nicht aus, einfach das / in die URL-Zeichenfolge einzufügen. Stattdessen wird der codierte Schrägstrich fälschlicherweise als zwei Schrägstriche interpretiert, was dazu führt, dass die Anfrage wie folgt gesendet wird:

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

Dieses Verhalten verstößt gegen das OCSP-Protokoll, das die Übertragung tatsächlicher /-Zeichen anstelle von „/“ vorschreibt.

Ein Abstecher ins Unkonventionelle

Um dieses Problem zu beheben, gibt es einen Workaround ist aufgetaucht, das eine direkte Modifikation des Uri-Objekts nutzt. Indem wir die PathAndQuery-Flags gewaltsam überschreiben, bringen wir das Framework dazu, unsere beabsichtigte URL-Codierung zu erkennen.

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

Obwohl diese Methode alles andere als ideal ist, ermöglicht sie Entwicklern, HTTP-GET-Anfragen mit URL-codierten Schrägstrichen zu senden, was zufriedenstellend ist die Anforderungen spezifischer Protokolle wie OCSP.

Das obige ist der detaillierte Inhalt vonWarum führen URL-Codierungs-Schrägstriche in HTTP-GET-Anfragen zu doppelten Schrägstrichen und wie kann dies behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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