77
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【35歳未経験でも理解できた】URLとHTTP

77
Posted at

〜URLとHTTPを「宅配便」に例えたら全部つながった〜

こんにちは!
35歳、未経験からWebエンジニアを目指して日々奮闘中の者です。

Webの勉強を始めると、必ず目にする「URL」と「HTTP」。

毎日使っているはずなのに、
「これってどういう仕組み?」と聞かれると少し困るあれです。

分かっているようで、うまく言葉にできないやつです。(僕はなりました)

この記事では、そんなモヤモヤを宅配便に例えて、分かりやすく解説します!

この記事はこんな人におすすめ

  • プログラミング学習を始めたばかりで、基礎をちゃんと押さえたい方
  • URLやHTTPを「なんとなく分かる」で止めている方
  • 「それってどういう仕組み?」と聞かれると少し困る方

参考書籍:小森裕介『プロになるためのWeb技術入門』


結論から言うと、ズバリこれです!

URL = 「インターネット上の住所」

HTTP = 「配達のルール」

ブラウザ(ChromeやSafari)という「配達員」に、「この住所(URL)にルール(HTTP)通りに行って、荷物(Webページ)を取ってきて!」とお願いしているだけなんです。

これを念頭に置いて、詳しく見ていきましょう!

1. URLの基本構造(住所の書き方)

URLは単なるファイルだけでなく、画像や動画など様々なものを示すため、業界ではこれらをカッコよく「リソース(資源)」と呼びます。
URLは「情報の位置を統一的な形式で示すもの」です。

URLは大きく「スキームホストパス」の3つに分かれています。

【URLの基本構造】
 https://example.com/books/index.html
 |____|  |_________| |______________|
 スキーム    ホスト          パス

🚚 スキーム(配送方法)

「どうやってアクセスするか」という配送方法の指定です。

Webでは主に http:https: が使われます。

http:普通の宅急便(中身が透けて見える段ボール)

https:厳重なセキュリティ便(通信が暗号化されている)

現在では「可能な限りhttps:を使うこと」が推奨されています。

🏢 ホスト(マンション名・番地)

「接続先のコンピューター」を表します。example.com のようなドメイン名ですね。
ただ、コンピューターは「example.com」と言われても場所が分かりません。
ここで「DNS」という仕組み(インターネットのタウンページ)を使って、「IPアドレス」(コンピューターの住所を特定するための番号)に変換して相手を探します。

だから、ホスト部分に直接 192.168.1.2 のようなIPアドレスを書いても届きます。

📦 パス(部屋番号と荷物)

「相手のコンピューター内のどこに情報があるか」を表します。
/books/index.html なら、「booksっていう部屋(ディレクトリ)の中にある、index.htmlっていう荷物(ファイル)」という意味です。

2. URLの詳細構造(マニアックな宛先指定)

Web開発をしていると、URLをもっと細かく指定する場面が出てきます(RFC3986というルールに基づいています)。全部盛りするとこんな感じです。

【URLの全部盛り(詳細構造)】
 https://user:pass@example.com:8080/books/index.html?sort=new#chapter1
 |____| |________| |_________| |__| |______________||_______||_______|
 スキーム ユーザー/パス  ホスト     ポート      パス         クエリ  フラグメント

🔑 ユーザーとパスワード(危険なラベル)

認証が必要なサーバーに行く時の情報です。
宛名ラベルに「暗証番号は1234です」と書いて荷物を送るようなものなので、セキュリティ上めちゃくちゃ危険です。
現在http: https:ではほぼ非推奨。他の特殊な通信でたまに使われます。

🚪 ポート(搬入口)

ホストにくっつけて、通信の出入り口を指定します。
「マンションに着いたら、正面玄関じゃなくて裏の8080番の搬入口に来てね」という指示です。

📝 クエリ(配達時のオプション要望)

サーバーに渡すパラメータ(条件)です。パスの後に ? を付けて 名前=値 で書きます。
例:「プレゼント用の包装にして!」= ?gift=yes
検索エンジンで「猫」と検索したときのURLをよく見ると、?q=猫 のようなクエリパラメーターがいっぱいくっついていますよ!

🔖 フラグメント(しおり)

サーバーに送る情報ではなく、ブラウザ(手元)で解釈する情報です。
HTML内の特定の位置(アンカー)を表します。
「荷物を開けたら、まず第1章(#chapter1)を読んでね!」という付箋のような役割です。

3. HTTPの基本(配達のやり取り)

住所(URL)の書き方が分かったら、次は配達のやり取り(HTTP)です。
私たちが「リクエスト(要求)」を出し、サーバーが「レスポンス(返答)」をくれます。

🙋‍♂️ HTTPリクエスト(「これちょうだい!」のお願い)

リクエストは、【リクエストライン】【リクエストヘッダフィールド】【メッセージボディ】の3部構成です。
※ちなみに、ヘッダとボディの間には「ここから下は中身だよ!」と分かるように必ず空行を1行挟むという絶対ルールがあります。

【HTTPリクエスト】

[1. リクエストライン](注文の概要:何をどうするか)
GET /books/index.html HTTP/1.1
→ 「このファイルをください!」

[2. ヘッダフィールド](伝票の備考欄)
User-Agent: Chrome
Accept-Language: ja
→ 「Chromeから来てます」「日本語でお願いします」

----------------------------------------
(※ルール:ここに必ず空行が入る)
----------------------------------------

[3. メッセージボディ](荷物の中身)
(POSTのときだけ入る)
→ 「送るデータ(例:フォームの入力内容)」

📦 HTTPレスポンス(「はい、どうぞ!」の返事)

レスポンスの構造もリクエストとほぼ同じ3部構成です!

【HTTPレスポンス】

[1. ステータスライン](配達結果の報告:どうなったか)
HTTP/1.1 200 OK (💡ステータスコード)
→ 「お届け完了しました!」

[2. レスポンスヘッダフィールド](納品書の詳細)
Content-Type: text/html
Content-Length: 1234
→ 「中身はHTMLです」「サイズはこれくらいです」

----------------------------------------
(※ルール:ここに必ず空行が入る)
----------------------------------------

[3. メッセージボディ](届いた荷物の中身)
<html>...</html>
→ 「実際のWebページの中身(HTML・画像など)」

💡 ステータスコードって何?

ステータスラインにある「200 OK」などの数字は、リクエストの結果を表しています。
特に最初の1桁を見るだけで大体の意味が分かります。

1xx:案内中(ちょっと待ってね〜)
2xx:成功!(無事お届けしました)
3xx:転送(新しい住所はこちらです)
4xx:クライアントエラー(宛先間違ってません?)
5xx:サーバーエラー(ごめん今無理!)

まとめ

長くなりましたが、大事なことは

URLは「住所」、HTTPは「配達ルール」のようなイメージです。

URLは「スキーム・ホスト・パス」で構成されていて、
「?」の後にはオプション(クエリ)が付くことがあります。

HTTPはリクエスト(要求)とレスポンス(返答)のやり取りで、
結果はステータスコード(3桁の数字)で分かるようになっています。

これで、「インターネットの魔法」は卒業です。

URLがどこを指していて、HTTPでどうやってやり取りしているのか。
その流れがイメージできていれば、Webの仕組みがぐっと分かりやすくなってきます。

これをきっかけに、Webの理解が少しでも深まれば嬉しいです。

77
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
77
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?