Codierung von URLs: Beibehaltung des wörtlichen Schrägstrichs in HTTP-GETs
Bei HTTP-GET-Anfragen ist die URL-Codierung entscheidend für die Übertragung von Sonderzeichen nicht Teil des Standardzeichensatzes. Wenn ein URL-Pfad jedoch einen Schrägstrich (/) enthält, übersetzen bestimmte GET-Implementierungen ihn automatisch in die Syntax mit doppeltem Schrägstrich (//). Dies kann bei der Übertragung von URL-codierten Schrägstrichen problematisch sein, da diese für die Einhaltung von Protokollen wie OCSP über HTTP/GET unerlässlich sind.
Der folgende Codeausschnitt veranschaulicht das Problem:
using (WebClient webClient = new WebClient()) { webClient.DownloadData("http://example.com/%2F"); }
Die eigentliche an den Server gesendete Anfrage lautet jedoch:
GET // HTTP/1.1 Host: example.com Connection: Keep-Alive
Um den wörtlichen Schrägstrich in HTTP-GETs beizubehalten, ist eine Gewohnheit erforderlich Lösung ist erforderlich. Hier ist ein Codeausschnitt, der das Uri-Objekt ändert, um den Pfad und die Abfrage beizubehalten:
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); }
Durch die Änderung des Uri-Objekts wird der Pfad gezwungen, in seinem ursprünglichen Zustand zu bleiben, wodurch sichergestellt wird, dass der wörtliche Schrägstrich erhalten bleibt die GET-Anfrage. Diese Lösung ermöglicht die konforme Implementierung von Protokollen, die URL-codierte Schrägstriche erfordern.
Das obige ist der detaillierte Inhalt vonWie kann ich wörtliche Schrägstriche in URL-codierten HTTP-GET-Anfragen beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!