URL パーサーのガイド:リンクを分解して見る
リダイレクトの調査は、リンクを分解することから始まります。パラメータが付いていたか、二重にエンコードされていないか、フラグメントの値はサーバに届いていないのではないか。
リンクを分解すべきとき
キャンペーンのパラメータが合わない、コールバック URL に余分なスラッシュがある、共有リンクでパラメータが消えた、ユーザーがトップページに着いたと言う。どれも文字列全体を眺めるより、各要素を見るほうが早いです。
開発時にも使います。パラメータが二重エンコードされていないか、空白が %20 で届いたかプラスで届いたか、ハッシュ内のルートがサーバに届いているか。分解すれば問題はたいてい一目で分かります。
- キャンペーンパラメータの確認
- コールバック URL とリダイレクトの調査
- 二重エンコードの検出
- クエリとフラグメントの境界の確認
空白は %20、プラスも空白
URL で空白を表す標準は %20 です。クエリ文字列ではフォームの規則によりプラスも空白を意味するため、同じ値を2通りに書けます。本当のプラスは %2B と書かないと、空白として扱われます。
パラメータの値はデコードされますが、クエリ文字列の欄は元のエンコードのまま表示されます。前後を比較できるので便利です。同じキーが複数ある場合は行を分け、順序も保たれます。署名の確認では重要です。
- 空白の標準は %20、クエリではプラスも空白
- 本当のプラスは %2B
- 重複キーは統合せず、順序を保って表示
境界:解析するだけで、判断はしない
相対パスはプロトコルもホストもないため、標準 URL として解析できずエラーになります。先に完全な URL にしてください。フラグメントは1つの値として表示し、分割しません。ハッシュ以降はサーバに送られないからです。
ホスト名は正規化されます。小文字化、既定ポートの削除、国際化ドメインの punycode 変換です。表示が入力と違っても等価です。ツールはリンクにアクセスせず、短縮 URL とフィッシングの区別もできません。
- 相対パスは失敗する。プロトコルとホストを補う
- フラグメントは全体表示で、パラメータに分割しない
- ホストは正規化され、リンクにはアクセスしない
よくある質問
相対パスで失敗するのはなぜですか
標準 URL はプロトコルとホストがあって初めて各部分が決まるからです。完全な https のアドレスに補ってから解析してください。
プラスが空白になるのはなぜですか
クエリ文字列はフォームの規則で解析され、プラスは古くから空白を意味してきたからです。本当のプラスは %2B、空白は %20 でもプラスでも構いません。
フラグメント内のパラメータが分かれないのはなぜですか
ハッシュ以降はサーバに送られず、ブラウザだけが扱うからです。SPA がルートを置くことはありますが、それはフロント側の約束で URL のクエリではありません。
関連ツール:URLパーサー