HTTP GET における URL エンコードされたスラッシュの謎を明らかにする
HTTP GET 経由でデータを取得する探求において、開発者はしばしば課題に遭遇します。 URL エンコードされたスラッシュ (/) の送信。ただし、この特定の文字を送信しようとすると、よくある誤解が生じます。
コード例に示されているように、URL 文字列に / を含めるだけでは不十分です。代わりに、エンコードされたスラッシュが 2 つのスラッシュとして誤って解釈され、リクエストが次のように送信されます。
GET // HTTP/1.1 Host: example.com Connection: Keep-Alive
この動作は、「/」の代わりに実際の / 文字の送信を義務付ける OCSP プロトコルに違反します。
型破りな回り道
これに対処するにはこの問題については、Uri オブジェクトを直接変更するという回避策が登場しました。 PathAndQuery フラグを強制的にオーバーライドすることで、フレームワークを騙して意図した URL エンコーディングを認識させます。
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); }
この方法は理想とは程遠いですが、開発者は URL エンコードされたスラッシュを使用して HTTP GET リクエストを送信できます。 OCSP などの特定のプロトコルの要件。
以上がHTTP GET リクエストで URL エンコーディングのスラッシュが二重スラッシュになるのはなぜですか? これを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。