## What — リンクの実体は「URL を1本埋め込んだ部品」 リンク(HTML の `<a href="URL">`)の実体は、飛び先の **URL を1本埋め込んだだけの部品**。クリックとは「この URL に `GET` リクエストを送れ」という指示で、ブラウザは返ってきた HTML で画面を描き直す。ページ遷移の正体はこの往復の繰り返し。 curl で API を叩くのと仕組みは同じで、違うのは返ってくる中身だけ。 - API を叩く → **JSON**(プログラムが読む用)が返る - リンクを踏む → **HTML**(人間が読む用)が返る Web が「ページからページへ辿れる」のは、文書同士が URL で指し合っているから。リンクはその接続点で、ブラウザは「GET 専用の、結果を綺麗に描くクライアント」でしかない。 ## How — URL はエンドポイントと同じ構造 リンクに埋め込まれた `https://api.github.com/repos/owner/repo/issues?state=open#top` を分解すると、API のエンドポイントと同じ構造になっている。 | 部分 | 名前 | 役割 | | --- | --- | --- | | `https` | スキーム | どの言葉で話すか(http / https) | | `api.github.com` | ホスト | どの機械(サーバー)へ届けるか | | `/repos/owner/repo/issues` | パス | どの資源か | | `?state=open` | クエリ | どう見せてほしいか(絞り込み) | | `#top` | フラグメント | ページ内のどこへジャンプするか(ブラウザ内だけで使い、サーバーには送られない) | リンクが持っているのはこの文字列だけ。だから **GET のエンドポイントは、アドレス欄に URL を貼るだけで叩ける**。JSON が生のまま表示され、動作確認の最短手段になる。 ## 落とし穴 **① リンクからは GET しか送れない。** POST や DELETE を送るにはフォームか JavaScript が要る。これは制限ではなく安全装置で、「リンクを踏んだだけでデータが消える」ことを防いでいる。逆に言えば、削除処理を GET で作ると、その安全装置を自分で壊すことになる(クローラや先読みに踏まれて消える)。 **② クエリに秘密を載せない。** `?` 以降は URL の一部なので、ブラウザ履歴・アクセスログ・リンク元情報(Referer)に平文で残る。パスワードやトークンはヘッダかボディで送る。 ## 関連 - [[API]] — API まわりの地図。窓口という考え方もここに - [[HTTPリクエストの流れ]] — GET を送った後、裏で走る DNS → TCP → TLS → HTTP - [[エンドポイント]] — `?` より前(メソッド+パス)の読み方