Maison >développement back-end >C++ >Pourquoi les barres obliques de codage d'URL dans les requêtes HTTP GET entraînent-elles des doubles barres obliques et comment cela peut-il être corrigé ?
Dévoilement du mystère des barres obliques codées en URL dans HTTP GET
Dans la quête de récupération de données via HTTP GET, les développeurs sont souvent confrontés au défi d'envoyer des barres obliques codées en URL (/). Cependant, une idée fausse courante surgit lorsque l'on tente de transmettre ce caractère spécifique.
Comme illustré dans l'exemple de code, il ne suffit pas d'inclure simplement le / dans la chaîne de l'URL. Au lieu de cela, la barre oblique codée est interprétée à tort comme deux barres obliques, ce qui entraîne l'envoi de la requête comme :
GET // HTTP/1.1 Host: example.com Connection: Keep-Alive
Ce comportement viole le protocole OCSP, qui exige la transmission de caractères / réels au lieu de « / ».
Un détour par le non conventionnel
Pour répondre à cette problématique, un Une solution de contournement a émergé qui utilise une modification directe de l'objet Uri. En remplaçant de force les indicateurs PathAndQuery, nous trompons le framework pour qu'il reconnaisse le codage d'URL prévu.
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); }
Bien que cette méthode soit loin d'être idéale, elle permet aux développeurs d'envoyer des requêtes HTTP GET avec des barres obliques codées en URL, ce qui satisfait les exigences de protocoles spécifiques comme OCSP.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!