ホームページ > バックエンド開発 > C++ > URL エンコーディングによって GET リクエスト内のパーセントエンコードされたスラッシュが変更されるのを防ぐにはどうすればよいですか?

URL エンコーディングによって GET リクエスト内のパーセントエンコードされたスラッシュが変更されるのを防ぐにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-05 03:38:43
オリジナル
635 人が閲覧しました

How Can I Prevent URL Encoding from Modifying a Percent-Encoded Slash in a GET Request?

GET リクエスト中のスラッシュ URL エンコーディングのジレンマを克服する

パーセントエンコードされた URL を含む URL に HTTP GET リクエストを送信しようとしました。 「http://example.com//」などのスラッシュ (/) を使用する場合の一般的なアプローチは、WebClient クラスを次のように利用することです。

using (WebClient webClient = new WebClient())
{
  webClient.DownloadData("http://example.com/%2F");
}
ログイン後にコピー

ただし、この方法では予期しない結果が生じます。スラッシュ文字は送信中に余分なスラッシュに変換され、次のリクエストが送信されます:

GET // HTTP/1.1
Host: example.com
Connection: Keep-Alive
ログイン後にコピー

この問題は、HTTP/GET 経由で OCSP を使用するときに発生し、'/ ではなく実際の / を送信する必要があります。 ' プロトコルへの準拠を保証します。

潜在的な解決策

理想的ではありませんが、以下はコード スニペットは、この問題の回避策を示しています。

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);
}
ログイン後にコピー

この回避策には、Uri オブジェクトの内部フラグを変更して CanonicalPathAndQuery を強制し、送信中にスラッシュ文字が保持されるようにすることが含まれます。

免責事項

このアプローチは将来のバージョンとの互換性が保証されていないことに注意することが重要です。フレームワークのバージョン。内部クラスの動作を変更する場合は、常に注意して作業を行ってください。

以上がURL エンコーディングによって GET リクエスト内のパーセントエンコードされたスラッシュが変更されるのを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート