Dev Study
← 解説「URL の部品 — scheme / host / port / path / query を左から切る」に戻る

サンプルコードで身につける: URL の部品 — scheme / host / port / path / query を左から切る

解説で学んだ概念を、3つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1URL を 4 段階で切る

を左から右へ「://」「最初の / か ?」「:」「?」の順に切るだけで、 / / / / の 5 つの部品が取れることを見せます。実行すると host が localhost、port が 8000、path が /docs/index.html、query が Some("q=rust&page=2") と 1 行ずつ出ます。まだ失敗は考えていないので、「://」が無い入力を渡すと expect で止まります(失敗の扱いは次のレッスン)。

Rust

2Url 型と request_target / host_header

部品を Url 構造体に入れ、 で実際に使う 2 つの値を取り出すメソッドを付けます。 は path と ?query だけ(host は含めない)、host_header は既定ポート 80 のときだけ :port を省きます。実行すると 4 本の URL が表になり、「Example.COM:80/Path#section-2」が は example.com、request-target は /Path になって、(#以降)が消え、scheme と host が小文字に揃うのが確認できます。

Rust

3実務: プロキシのログをホスト別に数える

アクセスログに残る URL は、同じサーバーでも大文字・:80 の有無・#fragment の有無で表記がばらばらなので、parse して host_header をキーにすると表記の違いが 1 つにまとまります。実行すると api.example.com:8080 が 3 件、example.com が 3 件、localhost:3000 が 1 件と、ホストごとの件数とパスの一覧が出ます。ログの集計や接続先の棚卸しで同じ手を使います。

Rust

図やコードに出てくる用語(タップで説明)