URLパラメータ解析ツール
対応している入力形式
- URL: 完全なURL (例: https://example.com?id=123)
- Query String: クエリ文字列 (例: id=123&name=test)
よくある質問
基礎知識
URLクエリ文字列とは?
URLクエリ文字列は、URLの疑問符(?)以降の部分です。アンパサンド(&)で区切られたキーと値のペアを含み、Webサーバーにデータを渡すために使用されます。例えば、'https://example.com/search?q=hello&lang=ja'では、クエリ文字列は'q=hello&lang=ja'です。
URLの構成要素は?
URLは複数の部分で構成されています:プロトコル(https://)、ドメイン(example.com)、ポート(:8080)、パス(/page)、クエリ文字列(?key=value)、フラグメント(#section)。クエリ文字列はサーバーにパラメータを渡すために使用され、フラグメントはクライアント側のナビゲーションに使用されます。
GETとPOSTパラメータの違いは?
GETパラメータはURLクエリ文字列に表示され、ブックマーク可能で共有可能な非機密データリンクに適しています。POSTパラメータはリクエストボディで送信され、URLには表示されず、機密データや大きなペイロードに使用されます。GETにはURL長制限(約2048文字)がありますが、POSTには実質的な制限がありません。
セキュリティ
なぜURLパラメータをエンコードする必要があるのですか?
URLにはASCII文字のみ含めることができ、特定の文字(&、=、?、/など)は特別な意味を持つため、URLエンコードが必要です。スペース、日本語文字、特殊記号はパーセントエンコード(例:スペースは%20)してURLで安全に送信する必要があります。
URLパラメータのセキュリティ上の注意点は?
機密データ(パスワード、トークン)をURLパラメータに入れないでください。ブラウザ履歴、サーバーログ、Refererヘッダーに表示されるためです。インジェクション攻撃を防ぐため、サーバー側で常にパラメータを検証・サニタイズしてください。送信中にURL全体(パラメータを含む)を暗号化するためにHTTPSを使用してください。
高度なテクニック
JavaScriptでURLパラメータを解析する方法
JavaScriptでは、URLSearchParams APIを使用できます:
const url = new URL('https://example.com?name=John&age=30');
const params = url.searchParams;
console.log(params.get('name')); // 'John'
console.log(params.get('age')); // '30'
// Or get all parameters
for (const [key, value] of params) {
console.log(key, value);
}同じパラメータの複数の値を処理する方法
URLは同じパラメータに複数の値を持つことができます(例:?color=red&color=blue)。URLSearchParams.getAll('color')を使用して、すべての値を配列として取得できます。一部のサーバーでは、配列パラメータに?color[]=red&color[]=blueのようなブラケット表記を使用します。
ハッシュフラグメントパラメータとは?
ハッシュフラグメント(#以降)は、通常、クライアント側のナビゲーションやシングルページアプリケーションに使用されます。一部のフレームワークはハッシュでパラメータを渡します(例:#/page?id=123)。クエリ文字列とは異なり、ハッシュフラグメントはサーバーに送信されず、ブラウザで完全に処理されます。
クエリパラメータのデバッグチェックリスト
重複したキー
?tag=js&tag=vue のような重複キーを受け付ける API もあれば、カンマ区切りやブラケット記法を求める API もあります。サーバーが最初の値、最後の値、または全値のどれを読むか確認してください。
ハッシュ内だけのパラメータ
# 以降の値はサーバーに送信されません。OAuth リダイレクト、解析、SPA ルートの値がバックエンドで見つからない場合、query string ではなく fragment に入っていないか確認してください。
トラッキングパラメータのノイズ
UTM、fbclid、gclid などのトラッキングパラメータは本来の業務パラメータを見えにくくします。API の挙動を調べる前に削除または分類してください。
機密値
token、メールアドレス、非公開 ID を query string に入れると、ログ、ブラウザ履歴、Referer に漏れる可能性があります。可能なら header や request body に移してください。