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?
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!